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..