import 'dart:io'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; import '../../main.dart'; // ignore: must_be_immutable class MIHProfilePicture extends StatefulWidget { final ImageProvider? profilePictureFile; final TextEditingController proPicController; PlatformFile? proPic; final double width; final double radius; final bool drawerMode; final bool editable; final Color frameColor; final onChange; MIHProfilePicture({ super.key, required this.profilePictureFile, required this.proPicController, required this.proPic, required this.width, required this.radius, required this.drawerMode, required this.editable, required this.onChange, required this.frameColor, }); @override State createState() => _MIHProfilePictureState(); } class _MIHProfilePictureState extends State { late ImageProvider? propicPreview; Widget displayEditableProPic() { if (widget.profilePictureFile != null) { return Stack( alignment: Alignment.center, fit: StackFit.loose, children: [ CircleAvatar( backgroundColor: MzanziInnovationHub.of(context)!.theme.primaryColor(), backgroundImage: propicPreview, //'https://media.licdn.com/dms/image/D4D03AQGd1-QhjtWWpA/profile-displayphoto-shrink_400_400/0/1671698053061?e=2147483647&v=beta&t=a3dJI5yxs5-KeXjj10LcNCFuC9IOfa8nNn3k_Qyr0CA'), radius: widget.radius, ), SizedBox( width: widget.width, child: FittedBox( fit: BoxFit.fill, child: Icon( MihIcons.mihCircleFrame, color: widget.frameColor, ), ), ), Visibility( visible: widget.editable, child: Positioned( bottom: 0, right: 0, child: IconButton.filled( onPressed: () async { try { // print( // "Platform: ${MzanziInnovationHub.of(context)!.theme.getPlatform()}"); FilePickerResult? result = await FilePicker.platform.pickFiles( type: FileType.image, ); if (MzanziInnovationHub.of(context)!.theme.getPlatform() == "Web") { if (result == null) return; final selectedFile = result.files.first; setState(() { widget.onChange(selectedFile); widget.proPic = selectedFile; //print("MIH Profile Picture: ${widget.proPic}"); propicPreview = MemoryImage(widget.proPic!.bytes!); }); setState(() { widget.proPicController.text = selectedFile.name; }); } else { // print( // "================\nHere for Android & IOS\n========================"); if (result != null) { // print("here 1"); File file = File(result.files.single.path!); PlatformFile? androidFile = PlatformFile( path: file.path, name: file.path.split('/').last, size: file.lengthSync(), bytes: await file.readAsBytes(), // Read file bytes //extension: fileExtension, ); // print("here 2"); setState(() { // print("here 3"); widget.onChange(androidFile); // print("here 4"); widget.proPic = androidFile; // print("here 5"); //print("MIH Profile Picture: ${widget.proPic}"); //print("bytes: ${widget.proPic!.bytes!}"); propicPreview = FileImage(file); }); setState(() { widget.proPicController.text = widget.proPic!.name; }); } else { print("here in else"); // User canceled the picker } } } catch (e) { print("Error: $e"); } }, icon: const Icon(Icons.edit), ), ), ), ], ); } else { return SizedBox( width: widget.width, child: Icon( MihIcons.mihCircleFrame, color: MzanziInnovationHub.of(context)!.theme.secondaryColor(), ), ); } } @override void initState() { setState(() { propicPreview = widget.profilePictureFile; }); super.initState(); } @override Widget build(BuildContext context) { return displayEditableProPic(); } }