Capture and Select Images in Flutter Using image_picker
with GetX Controller Binding
The image_picker
package is a great solution for allowing users to capture photos or choose images from their gallery in a Flutter app. In this guide, we’ll use image_picker
in combination with GetX for state management to create an organized and responsive application.
Prerequisites
- Flutter SDK: Ensure Flutter is installed.
- GetX Package: Install
get
for state management. - image_picker: Add the package to your
pubspec.yaml
file.
dependencies:
flutter:
sdk: flutter
get: ^4.6.5
image_picker: ^0.8.7+3
Run flutter pub get
to install the packages.
Step 1: Setting up the Controller
We’ll create an ImagePickerController
to handle picking images from the camera or gallery.
image_picker_controller.dart
import 'package:get/get.dart';
import 'package:image_picker/image_picker.dart';
import 'dart:io';
class ImagePickerController extends GetxController {
final ImagePicker _picker = ImagePicker();
var selectedImage = Rx(null);
Future pickImageFromGallery() async {
final pickedFile = await _picker.pickImage(source: ImageSource.gallery);
if (pickedFile != null) {
selectedImage.value = File(pickedFile.path);
}
}
Future pickImageFromCamera() async {
final pickedFile = await _picker.pickImage(source: ImageSource.camera);
if (pickedFile != null) {
selectedImage.value = File(pickedFile.path);
}
}
void clearImage() {
selectedImage.value = null;
}
}
In this controller:
- pickImageFromGallery: Picks an image from the gallery.
- pickImageFromCamera: Captures an image using the camera.
- clearImage: Resets the selected image.
Step 2: Setting up the View
The view will contain buttons to open the gallery or camera and display the selected image.
image_picker_view.dart
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'image_picker_controller.dart';
class ImagePickerView extends GetView {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Image Picker Example'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Obx(() {
return controller.selectedImage.value == null
? const Text("No image selected")
: Image.file(controller.selectedImage.value!);
}),
const SizedBox(height: 20),
ElevatedButton(
onPressed: () {
controller.pickImageFromGallery();
},
child: const Text("Pick Image from Gallery"),
),
const SizedBox(height: 10),
ElevatedButton(
onPressed: () {
controller.pickImageFromCamera();
},
child: const Text("Take Photo with Camera"),
),
const SizedBox(height: 20),
ElevatedButton(
onPressed: () {
controller.clearImage();
},
child: const Text("Clear Image"),
),
],
),
),
);
}
}
In this view:
- Obx Widget: Displays the image if it’s selected; otherwise, shows a default message.
- Buttons: Allow users to pick an image from the gallery, take a photo, or clear the selected image.
Step 3: Setting up the Binding
To inject ImagePickerController
into the view, we’ll create a binding.
image_picker_binding.dart
import 'package:get/get.dart';
import 'image_picker_controller.dart';
class ImagePickerBinding extends Bindings {
@override
void dependencies() {
Get.lazyPut(() => ImagePickerController());
}
}
The binding ensures that ImagePickerController
is initialized only when needed, optimizing resource usage.
Step 4: Running the App
Finally, update main.dart
to configure the binding and routing.
main.dart
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'image_picker_view.dart';
import 'image_picker_binding.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return GetMaterialApp(
initialRoute: '/',
getPages: [
GetPage(
name: '/',
page: () => ImagePickerView(),
binding: ImagePickerBinding(),
),
],
title: 'Image Picker Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
);
}
}
Wrapping Up
In this tutorial, we covered:
- Using the
image_picker
package to select images from the gallery or camera. - GetX for state management with controller binding.
- A complete MVC structure, making your Flutter app well-organized and efficient.
Now, you have a fully functioning image picker feature in your Flutter app using image_picker
and GetX
for clean and maintainable code.
0 Comments
Please Do Not Comments Any Span Or Span link..