import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; class FilePicker extends StatelessWidget { FilePicker({ Key? key, this.cameraHandle, this.galleryHandleSingle, this.galleryHandleMultiple, this.fileHandle, }) : super(key: key); final Function(XFile image)? cameraHandle; final Function(XFile image)? galleryHandleSingle; final Function(List images)? galleryHandleMultiple; // TODO: Implement. Perhaps after first release? final Function()? fileHandle; final ImagePicker _picker = ImagePicker(); @override Widget build(BuildContext context) { return Padding( padding: const EdgeInsets.only(top: 10, bottom: 10, left: 5, right: 5), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ _filePickerSelection( hasHandle: cameraHandle != null, icon: Icons.camera_alt, onTap: () async { final XFile? image = await _picker.pickImage(source: ImageSource.camera); if (image == null) { return; } cameraHandle!(image); }, context: context, ), _filePickerSelection( hasHandle: galleryHandleSingle != null, icon: Icons.image, onTap: () async { final XFile? image = await _picker.pickImage(source: ImageSource.gallery); if (image == null) { return; } galleryHandleSingle!(image); }, context: context, ), _filePickerSelection( hasHandle: galleryHandleMultiple != null, icon: Icons.image, onTap: () async { final List? images = await _picker.pickMultiImage(); if (images == null) { return; } galleryHandleMultiple!(images); }, context: context, ), _filePickerSelection( hasHandle: fileHandle != null, icon: Icons.file_present_sharp, onTap: () { }, context: context, ), ], ) ); } Widget _filePickerSelection({ required bool hasHandle, required IconData icon, required Function() onTap, required BuildContext context }) { if (!hasHandle) { return const SizedBox.shrink(); } return Padding( padding: const EdgeInsets.only(left: 5, right: 5), child: GestureDetector( onTap: onTap, child: Container( height: 75, width: 75, decoration: BoxDecoration( color: Theme.of(context).primaryColor, borderRadius: BorderRadius.circular(25), ), child: Icon( icon, size: 40, color: Colors.white, ), ), ), ); } }