import 'dart:typed_data'; import 'package:flutter/material.dart'; import 'package:flutter_image_picker/src/services/image_picker_service.dart'; import 'package:image_picker/image_picker.dart'; class ImagePickerUI { final ImagePickerService _imagePickerService = ImagePickerService(); Future pickImageDialog( BuildContext context, String title, double titleTextSize, double iconSize, double iconTextSize, double spaceBetweenIcons, String makePhotoText, IconData makePhotoIcon, String selectImageText, IconData selectImageIcon, String closeButtonText) async { return await showModalBottomSheet( context: context, builder: (BuildContext context) { return Wrap( children: [ ListTile( title: Text( title, style: TextStyle( fontSize: titleTextSize, ), ), ), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ generateColumn(context, selectImageIcon, iconSize, iconTextSize, ImageSource.gallery, selectImageText), SizedBox( width: spaceBetweenIcons, ), generateColumn(context, makePhotoIcon, iconSize, iconTextSize, ImageSource.camera, makePhotoText), ], ), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ SizedBox( width: 300, height: 40, child: ElevatedButton( onPressed: () => Navigator.of(context).pop(), child: Text(closeButtonText)), ) ], ), const SizedBox( height: 60, ), ], ); }, ); } Column generateColumn(BuildContext context, IconData icon, double iconSize, double iconTextSize, ImageSource imageSource, String bottomText) { return Column( mainAxisSize: MainAxisSize.min, children: [ IconButton( icon: Icon(icon), iconSize: iconSize, onPressed: () => _imagePickerService.pickImage(imageSource, context), ), Text( bottomText, style: TextStyle(fontSize: iconTextSize), ), const SizedBox( height: 20, ), ], ); } }