import 'dart:convert'; import 'dart:io'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; import 'package:mohem_flutter_app/classes/colors.dart'; import 'package:mohem_flutter_app/extensions/string_extensions.dart'; import 'package:mohem_flutter_app/widgets/bottom_sheet.dart'; import 'package:mohem_flutter_app/widgets/bottom_sheets/attachment_options.dart'; class ImageOptions { static void showImageOptionsNew(BuildContext context, bool showFilesOption, Function(String, File) image) { showMyBottomSheet( context, callBackFunc: () {}, child: AttachmentOptions( showFilesOption: showFilesOption, onCameraTap: () async { if (Platform.isAndroid) { cameraImageAndroid(image); } else { File _image = File((await ImagePicker.platform.pickImage(source: ImageSource.camera, imageQuality: 10))?.path ?? ""); String fileName = _image.path; var bytes = File(fileName).readAsBytesSync(); String base64Encode = base64.encode(bytes); if (base64Encode != null) { image(base64Encode, _image); } } }, onGalleryTap: () async { if (Platform.isAndroid) { galleryImageAndroid(image); } else { File _image = File((await ImagePicker.platform.pickImage(source: ImageSource.gallery, imageQuality: 10))?.path ?? ""); String fileName = _image.path; var bytes = File(fileName).readAsBytesSync(); String base64Encode = base64.encode(bytes); if (base64Encode != null) { image(base64Encode, _image); } } }, onFilesTap: () async { FilePickerResult? result = await FilePicker.platform.pickFiles( type: FileType.custom, allowedExtensions: ['jpg', 'jpeg ', 'pdf', 'txt', 'docx', 'doc', 'pptx', 'xlsx', 'png', 'rar', 'zip',], ); List files = result!.paths.map((path) => File(path!)).toList(); image(result.files.first.path.toString(), files.first); }, ), ); } static void showImageOptions(BuildContext context, Function(String, File) image) { showModalBottomSheet( backgroundColor: Colors.transparent, context: context, builder: (BuildContext bc) { return _BottomSheet( children: [ _BottomSheetItem( title: "Select File Source", onTap: () {}, icon: Icons.file_present, color: MyColors.black, ), _BottomSheetItem( title: "Gallery", icon: Icons.image, onTap: () async { if (Platform.isAndroid) { galleryImageAndroid(image); } else { File _image = File((await ImagePicker.platform.pickImage(source: ImageSource.gallery, imageQuality: 10))?.path ?? ""); String fileName = _image.path; var bytes = File(fileName).readAsBytesSync(); String base64Encode = base64.encode(bytes); if (base64Encode != null) { image(base64Encode, _image); } } }, ), _BottomSheetItem( title: "Camera", icon: Icons.camera_alt, onTap: () async { if (Platform.isAndroid) { cameraImageAndroid(image); } else { File _image = File((await ImagePicker.platform.pickImage(source: ImageSource.camera, imageQuality: 10))?.path ?? ""); String fileName = _image.path; var bytes = File(fileName).readAsBytesSync(); String base64Encode = base64.encode(bytes); if (base64Encode != null) { image(base64Encode, _image); } } }, ), _BottomSheetItem( title: "Cancel", onTap: () {}, icon: Icons.cancel, color: MyColors.redColor, ) ], ); }); } } void galleryImageAndroid(Function(String, File) image) async { File _image = File((await ImagePicker.platform.pickImage(source: ImageSource.gallery, imageQuality: 10))?.path ?? ""); String fileName = _image.path; var bytes = File(fileName).readAsBytesSync(); String base64Encode = base64.encode(bytes); if (base64Encode != null) { image(base64Encode, _image); } } void cameraImageAndroid(Function(String, File) image) async { File _image = File((await ImagePicker.platform.pickImage(source: ImageSource.camera, imageQuality: 10))?.path ?? ""); String fileName = _image.path; var bytes = File(fileName).readAsBytesSync(); String base64Encode = base64.encode(bytes); if (base64Encode != null) { image(base64Encode, _image); } } class _BottomSheet extends StatelessWidget { final List children; const _BottomSheet({Key? key, required this.children}) : super(key: key); @override Widget build(BuildContext context) { return Container( padding: const EdgeInsets.symmetric(vertical: 12.0), decoration: BoxDecoration(color: Theme.of(context).backgroundColor, borderRadius: const BorderRadius.only(topLeft: Radius.circular(16.0), topRight: Radius.circular(16.0))), child: SafeArea( top: false, child: Column( mainAxisSize: MainAxisSize.min, children: [ Container( decoration: BoxDecoration(color: Theme.of(context).dividerColor, borderRadius: BorderRadius.circular(3.0)), width: 40.0, height: 6.0, ), ...children ], ), ), ); } } class _BottomSheetItem extends StatelessWidget { final Function onTap; final IconData icon; final String title; final Color color; _BottomSheetItem({Key? key, required this.onTap, required this.title, required this.icon, this.color = MyColors.gradiantStartColor}) : super(key: key); @override Widget build(BuildContext context) { return InkWell( onTap: () { if (onTap != null) { Navigator.pop(context); onTap(); } }, child: Padding( padding: const EdgeInsets.symmetric(horizontal: 18.0, vertical: 18.0), child: Row( children: [ if (icon != null) Icon( icon, color: color, size: 18.0, ), if (icon != null) const SizedBox(width: 24.0), title.toText17(), ], ), ), ); } }