A Flutter plugin for iOS and Android for picking images from the image library, and taking new pictures with the camera.
Installation
First, add image_picker as a dependency in your pubspec.yaml file.
iOS
Add the following keys to your Info.plist file, located in <project root>/ios/Runner/Info.plist:
NSPhotoLibraryUsageDescription– describe why your app needs permission for the photo library. This is called Privacy – Photo Library Usage Description in the visual editor.NSCameraUsageDescription– describe why your app needs access to the camera. This is called Privacy – Camera Usage Description in the visual editor.NSMicrophoneUsageDescription– describe why your app needs access to the microphone, if you intend to record videos. This is called Privacy – Microphone Usage Description in the visual editor.
Android
No configuration required – the plugin should work out of the box.
Example
import 'package:image_picker/image_picker.dart';
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
File _image;
Future getImage() async {
var image = await ImagePicker.pickImage(source: ImageSource.camera);
setState(() {
_image = image;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Image Picker Example'),
),
body: Center(
child: _image == null
? Text('No image selected.')
: Image.file(_image),
),
floatingActionButton: FloatingActionButton(
onPressed: getImage,
tooltip: 'Pick Image',
child: Icon(Icons.add_a_photo),
),
);
}
}
Handling MainActivity destruction on Android
Android system — although very rarely — sometimes kills the MainActivity after the image_picker finishes. When this happens, we lost the data selected from the image_picker. You can use retrieveLostData to retrieve the lost data in this situation. For example:
Future<void> retrieveLostData() async {
final LostDataResponse response =
await ImagePicker.retrieveLostData();
if (response == null) {
return;
}
if (response.file != null) {
setState(() {
if (response.type == RetrieveType.video) {
_handleVideo(response.file);
} else {
_handleImage(response.file);
}
});
} else {
_handleError(response.exception);
}
}
There’s no way to detect when this happens, so calling this method at the right place is essential. We recommend to wire this into some kind of start-up check. Please refer to the example app to see how we used it.
Download Image Picker plugin for Flutter Source on GitHub
https://github.com/flutter/plugins/tree/master/packages/image_picker
Provides the list of the opensource Flutter apps collection with GitHub repository.

