We can add images from the gallery using the image_picker package in Flutter. For this, you'll need to use your real device.
Steps to Implement Gallery and Camera Access
Step 1: Create a new flutter application
Create a new Flutter application using the command Prompt. To create a new app, write the below command and run it.
flutter create app_nameTo know more about it refer this article: Creating a Simple Application in Flutter
Step 2: Adding the Dependency
To add the dependency to the pubspec.yaml file, add image_picker as a dependency in the dependencies part of the pubspec.yaml file, as shown below:
dependencies:
flutter:
sdk: flutter
image_picker: ^1.1.2
Now run the below command in the terminal.
flutter pub getStep 3: Importing the Dependency
Use the below line of code in the main.dart file, to import the image_picker dependency:
import 'package:image_picker/image_picker.dart';Step 4: Completing the Final Application Code
- Create a button
To show the type of picker ( gallery or camera).
ElevatedButton(
style: ElevatedButton.styleFrom(
backgroundColor: Colors.green,
foregroundColor: Colors.white
),
child: const Text('Select Image from Gallery and Camera'),
onPressed: () {
_showPicker(context: context);
},
),
- Show picker
Show both picker options like gallery and camera, and call getImage() respective to the type of picker mentioned below.
- gallery : getImage(ImageSource.gallery)
- camera : getImage(ImageSource.camera)
void _showPicker({
required BuildContext context,
}) {
showModalBottomSheet(
context: context,
builder: (BuildContext context) {
return SafeArea(
child: Wrap(
children: <Widget>[
ListTile(
leading: const Icon(Icons.photo_library),
title: const Text('Photo Library'),
onTap: () {
getImage(ImageSource.gallery);
Navigator.of(context).pop();
},
),
ListTile(
leading: const Icon(Icons.photo_camera),
title: const Text('Camera'),
onTap: () {
getImage(ImageSource.camera);
Navigator.of(context).pop();
},
),
],
),
);
},
);
}
Complete Source code
main.dart:
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData(primaryColor: Colors.green),
home: const GalleryAccess(),
debugShowCheckedModeBanner: false,
);
}
}
class GalleryAccess extends StatefulWidget {
const GalleryAccess({super.key});
@override
State<GalleryAccess> createState() => _GalleryAccessState();
}
class _GalleryAccessState extends State<GalleryAccess> {
File? galleryFile;
final picker = ImagePicker();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Gallery Access and Camera'),
backgroundColor: Colors.green,
foregroundColor: Colors.white,
actions: const [
Text(
"GFG",
textScaleFactor: 3,
style: TextStyle(color: Colors.white),
),
],
),
body: Builder(
builder: (BuildContext context) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
style: ElevatedButton.styleFrom(
backgroundColor: Colors.green,
foregroundColor: Colors.white),
child: const Text('Select Image from Gallery and Camera'),
onPressed: () {
_showPicker(context: context);
},
),
const SizedBox(
height: 20,
),
SizedBox(
height: 200.0,
width: 300.0,
child: galleryFile == null
? const Center(child: Text('Sorry nothing selected!!'))
: Center(child: Image.file(galleryFile!)),
),
],
),
);
},
),
);
}
void _showPicker({
required BuildContext context,
}) {
showModalBottomSheet(
context: context,
builder: (BuildContext context) {
return SafeArea(
child: Wrap(
children: <Widget>[
ListTile(
leading: const Icon(Icons.photo_library),
title: const Text('Photo Library'),
onTap: () {
getImage(ImageSource.gallery);
Navigator.of(context).pop();
},
),
ListTile(
leading: const Icon(Icons.photo_camera),
title: const Text('Camera'),
onTap: () {
getImage(ImageSource.camera);
Navigator.of(context).pop();
},
),
],
),
);
},
);
}
Future getImage(
ImageSource img,
) async {
// pick image from gallary
final pickedFile = await picker.pickImage(source: img);
// store it in a valid variable
XFile? xfilePick = pickedFile;
setState(
() {
if (xfilePick != null) {
// store that in global variable galleryFile in the form of File
galleryFile = File(pickedFile!.path);
} else {
ScaffoldMessenger.of(context).showSnackBar(// is this context <<<
const SnackBar(content: Text('Nothing is selected')));
}
},
);
}
}
Output:
When no image is selected, the following will result:

When the button is pressed, it will ask for select type of picker whether it is gallery or camera on your device ,as shown below:

When the permission is given to access photos, and any image is selected from the gallery, it will be displayed on the screen as shown below:
