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'; final ImagePicker picker = ImagePicker(); 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: 20))?.path ?? ""); // XFile? media = await picker.pickMedia(); 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 picker.pickMedia())?.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 picker.pickMedia())?.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 picker.pickMedia())?.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(), ], ), ), ); } }