diff --git a/mih_ui/lib/mih_package_components/Example/package_tools/package_tool_one.dart b/mih_ui/lib/mih_package_components/Example/package_tools/package_tool_one.dart index 67404fcf..47364ef8 100644 --- a/mih_ui/lib/mih_package_components/Example/package_tools/package_tool_one.dart +++ b/mih_ui/lib/mih_package_components/Example/package_tools/package_tool_one.dart @@ -774,6 +774,7 @@ class _PackageToolOneState extends State { MihCircleAvatar( imageFile: imagePreview, width: 50, + expandable: true, editable: false, fileNameController: _fileNameController, userSelectedfile: file, diff --git a/mih_ui/lib/mih_package_components/mih_business_profile_preview.dart b/mih_ui/lib/mih_package_components/mih_business_profile_preview.dart index 81cdcf6b..0380688e 100644 --- a/mih_ui/lib/mih_package_components/mih_business_profile_preview.dart +++ b/mih_ui/lib/mih_package_components/mih_business_profile_preview.dart @@ -68,6 +68,7 @@ class _MihBusinessProfilePreviewState extends State { : MihCircleAvatar( imageFile: widget.imageFile, width: profilePictureWidth, + expandable: false, editable: false, fileNameController: TextEditingController(), userSelectedfile: null, diff --git a/mih_ui/lib/mih_package_components/mih_circle_avatar.dart b/mih_ui/lib/mih_package_components/mih_circle_avatar.dart index c44c72a3..f9369d30 100644 --- a/mih_ui/lib/mih_package_components/mih_circle_avatar.dart +++ b/mih_ui/lib/mih_package_components/mih_circle_avatar.dart @@ -2,13 +2,17 @@ import 'dart:io'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:ken_logger/ken_logger.dart'; import 'package:mzansi_innovation_hub/main.dart'; import 'package:mzansi_innovation_hub/mih_package_components/mih_icons.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; +import 'package:mzansi_innovation_hub/mih_package_components/mih_package_window.dart'; class MihCircleAvatar extends StatefulWidget { final ImageProvider? imageFile; final double width; + final bool expandable; final bool editable; final TextEditingController? fileNameController; final onChange; @@ -19,6 +23,7 @@ class MihCircleAvatar extends StatefulWidget { super.key, required this.imageFile, required this.width, + required this.expandable, required this.editable, required this.fileNameController, required this.userSelectedfile, @@ -35,23 +40,30 @@ class _MihCircleAvatarState extends State { late ImageProvider? imagePreview; ImageProvider? getAvatar() { - // Color dark = const Color(0XFF3A4454); if (widget.imageFile == null) { return null; - // if (widget.backgroundColor == dark) { - // print("here in light icon"); - // return const AssetImage( - // 'lib/mih_package_components/assets/images/i-dont-know-light.png'); - // } else { - // print("here in dark icon"); - // return const AssetImage( - // 'lib/mih_package_components/assets/images/i-dont-know-dark.png'); - // } } else { return widget.imageFile; } } + void expandAvatar() { + showDialog( + context: context, + builder: (context) { + return MihPackageWindow( + fullscreen: false, + windowTitle: "", + onWindowTapClose: () { + context.pop(); + }, + windowBody: InteractiveViewer( + child: Image(image: imagePreview!), + ), + ); + }); + } + @override void initState() { super.initState(); @@ -62,111 +74,121 @@ class _MihCircleAvatarState extends State { @override Widget build(BuildContext context) { - return Container( - // color: Colors.white, - alignment: Alignment.center, - width: widget.width, - height: widget.width, - child: Stack( + return GestureDetector( + onTap: widget.expandable + ? () { + KenLogger.success("Avatar tapped"); + expandAvatar(); + } + : null, + child: Container( alignment: Alignment.center, - children: [ - Visibility( - visible: imagePreview != null, - child: Positioned( - right: widget.width * 0.03, - child: CircleAvatar( - radius: widget.width / 2.2, - backgroundColor: widget.backgroundColor, - backgroundImage: imagePreview, + width: widget.width, + height: widget.width, + child: Stack( + alignment: Alignment.center, + children: [ + Visibility( + visible: imagePreview != null, + child: Positioned( + right: widget.width * 0.03, + child: CircleAvatar( + radius: widget.width / 2.2, + backgroundColor: widget.backgroundColor, + backgroundImage: imagePreview, + ), ), ), - ), - Visibility( - visible: imagePreview != null, - child: Icon( - size: widget.width, - MihIcons.mihRing, - color: widget.frameColor, + Visibility( + visible: imagePreview != null, + child: Icon( + size: widget.width, + MihIcons.mihRing, + color: widget.frameColor, + ), ), - ), - Visibility( - visible: imagePreview == null, - child: Icon( - MihIcons.iDontKnow, - size: widget.width, - color: widget.frameColor, + Visibility( + visible: imagePreview == null, + child: Icon( + MihIcons.iDontKnow, + size: widget.width, + color: widget.frameColor, + ), ), - ), - Visibility( - visible: widget.editable, - child: Positioned( - bottom: 0, - right: 0, - child: IconButton.filled( - style: ButtonStyle( - backgroundColor: WidgetStateProperty.all( - MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), + Visibility( + visible: widget.editable, + child: Positioned( + bottom: 0, + right: 0, + child: IconButton.filled( + style: ButtonStyle( + backgroundColor: WidgetStateProperty.all( + MihColors.getGreenColor( + MzansiInnovationHub.of(context)!.theme.mode == + "Dark"), + ), ), - ), - onPressed: () async { - try { - FilePickerResult? result = - await FilePicker.platform.pickFiles( - type: FileType.image, - ); - // print("Here 1"); - if (MzansiInnovationHub.of(context)!.theme.getPlatform() == - "Web") { - // print("Here 2"); - if (result == null) return; - // print("Here 3"); - PlatformFile? selectedFile = result.files.first; - setState(() { - // print("Here 4"); - widget.onChange(selectedFile); - // print("Here 5"); - imagePreview = MemoryImage(selectedFile.bytes!); - }); - - setState(() { - widget.fileNameController!.text = selectedFile.name; - }); - } else { - if (result != null) { - 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, - ); + onPressed: () async { + try { + FilePickerResult? result = + await FilePicker.platform.pickFiles( + type: FileType.image, + ); + // print("Here 1"); + if (MzansiInnovationHub.of(context)! + .theme + .getPlatform() == + "Web") { + // print("Here 2"); + if (result == null) return; + // print("Here 3"); + PlatformFile? selectedFile = result.files.first; setState(() { - widget.onChange(androidFile); - imagePreview = FileImage(file); + // print("Here 4"); + widget.onChange(selectedFile); + // print("Here 5"); + imagePreview = MemoryImage(selectedFile.bytes!); }); setState(() { - widget.fileNameController!.text = - file.path.split('/').last; + widget.fileNameController!.text = selectedFile.name; }); } else { - print("here in else"); - // User canceled the picker + if (result != null) { + 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, + ); + setState(() { + widget.onChange(androidFile); + imagePreview = FileImage(file); + }); + + setState(() { + widget.fileNameController!.text = + file.path.split('/').last; + }); + } else { + print("here in else"); + // User canceled the picker + } } + } catch (e) { + print("Here Error: $e"); } - } catch (e) { - print("Here Error: $e"); - } - }, - icon: Icon( - Icons.camera_alt, + }, + icon: Icon( + Icons.camera_alt, + ), ), ), ), - ), - ], + ], + ), ), ); } diff --git a/mih_ui/lib/mih_package_components/mih_personal_profile_preview.dart b/mih_ui/lib/mih_package_components/mih_personal_profile_preview.dart index 1b562f81..daf313af 100644 --- a/mih_ui/lib/mih_package_components/mih_personal_profile_preview.dart +++ b/mih_ui/lib/mih_package_components/mih_personal_profile_preview.dart @@ -49,6 +49,7 @@ class _MihPersonalProfilePreviewState extends State { : MihCircleAvatar( imageFile: widget.imageFile, width: profilePictureWidth, + expandable: false, editable: false, fileNameController: TextEditingController(), userSelectedfile: null, diff --git a/mih_ui/lib/mih_packages/mih_home/components/mih_app_drawer.dart b/mih_ui/lib/mih_packages/mih_home/components/mih_app_drawer.dart index 45a0e89f..71ec53f7 100644 --- a/mih_ui/lib/mih_packages/mih_home/components/mih_app_drawer.dart +++ b/mih_ui/lib/mih_packages/mih_home/components/mih_app_drawer.dart @@ -78,6 +78,7 @@ class _MIHAppDrawerState extends State { ? mzansiProfileProvider.userProfilePicture : mzansiProfileProvider.businessProfilePicture, width: 60, + expandable: false, editable: false, fileNameController: proPicController, onChange: (_) {}, diff --git a/mih_ui/lib/mih_packages/mih_home/mih_home.dart b/mih_ui/lib/mih_packages/mih_home/mih_home.dart index f3f49482..aaa59ed2 100644 --- a/mih_ui/lib/mih_packages/mih_home/mih_home.dart +++ b/mih_ui/lib/mih_packages/mih_home/mih_home.dart @@ -353,6 +353,7 @@ class _MihHomeState extends State { key: Key(imageKey), imageFile: currentImage, width: 50, + expandable: false, editable: false, fileNameController: null, userSelectedfile: null, diff --git a/mih_ui/lib/mih_packages/mine_sweeper/builders/build_minesweeper_leaderboard_list.dart b/mih_ui/lib/mih_packages/mine_sweeper/builders/build_minesweeper_leaderboard_list.dart index 7f870c46..2b9ed288 100644 --- a/mih_ui/lib/mih_packages/mine_sweeper/builders/build_minesweeper_leaderboard_list.dart +++ b/mih_ui/lib/mih_packages/mine_sweeper/builders/build_minesweeper_leaderboard_list.dart @@ -104,6 +104,7 @@ class _BuildMinesweeperLeaderboardListState key: UniqueKey(), imageFile: imageFile, width: 80, + expandable: true, editable: false, fileNameController: null, userSelectedfile: null, diff --git a/mih_ui/lib/mih_packages/mine_sweeper/components/leaderboard_user_ranking.dart b/mih_ui/lib/mih_packages/mine_sweeper/components/leaderboard_user_ranking.dart index 4bd48355..338189b7 100644 --- a/mih_ui/lib/mih_packages/mine_sweeper/components/leaderboard_user_ranking.dart +++ b/mih_ui/lib/mih_packages/mine_sweeper/components/leaderboard_user_ranking.dart @@ -50,6 +50,7 @@ class LeaderboardUserRanking extends StatelessWidget { .toString()), // Use ValueKey for stable identity imageFile: asyncSnapshot.data, width: 60, + expandable: true, editable: false, fileNameController: null, userSelectedfile: null, diff --git a/mih_ui/lib/mih_packages/mine_sweeper/package_tools/my_score_board.dart b/mih_ui/lib/mih_packages/mine_sweeper/package_tools/my_score_board.dart index 31e18824..25433358 100644 --- a/mih_ui/lib/mih_packages/mine_sweeper/package_tools/my_score_board.dart +++ b/mih_ui/lib/mih_packages/mine_sweeper/package_tools/my_score_board.dart @@ -87,6 +87,7 @@ class _MihMineSweeperLeaderBoardState extends State { child: MihCircleAvatar( imageFile: profileProvider.userProfilePicture, width: 150, + expandable: true, editable: false, fileNameController: null, userSelectedfile: null, diff --git a/mih_ui/lib/mih_packages/mzansi_profile/business_profile/components/mih_update_business_details_window.dart b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/components/mih_update_business_details_window.dart index 553c31d3..80f294ec 100644 --- a/mih_ui/lib/mih_packages/mzansi_profile/business_profile/components/mih_update_business_details_window.dart +++ b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/components/mih_update_business_details_window.dart @@ -271,6 +271,7 @@ class _MihUpdateBusinessDetailsWindowState : mzansiProfileProvider .businessProfilePicture, width: 150, + expandable: false, editable: true, fileNameController: fileNameController, userSelectedfile: newSelectedLogoPic, diff --git a/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details.dart b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details.dart index 8ac92d58..9b5df943 100644 --- a/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details.dart +++ b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details.dart @@ -77,6 +77,7 @@ class _MihBusinessDetailsState extends State { imageFile: mzansiProfileProvider.businessProfilePicture, width: 150, + expandable: true, editable: false, fileNameController: fileNameController, userSelectedfile: newSelectedLogoPic, diff --git a/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details_set_up.dart b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details_set_up.dart index e7d976e7..9564774e 100644 --- a/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details_set_up.dart +++ b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details_set_up.dart @@ -330,6 +330,7 @@ class _MihBusinessDetailsSetUpState extends State { ? MemoryImage(newSelectedLogoPic!.bytes!) : mzansiProfileProvider.businessProfilePicture, width: 150, + expandable: false, editable: true, fileNameController: logoFileNameController, userSelectedfile: newSelectedLogoPic, diff --git a/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details_view.dart b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details_view.dart index bf03da5d..5663c9d7 100644 --- a/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details_view.dart +++ b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_details_view.dart @@ -77,6 +77,7 @@ class _MihBusinessDetailsViewState extends State { imageFile: CachedNetworkImageProvider( asyncSnapshot.requireData), width: profilePictureWidth, + expandable: true, editable: false, fileNameController: TextEditingController(), userSelectedfile: file, diff --git a/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_qr_code.dart b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_qr_code.dart index d628d3de..4d6fd736 100644 --- a/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_qr_code.dart +++ b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_qr_code.dart @@ -211,6 +211,7 @@ class _MihBusinessQrCodeState extends State { imageFile: CachedNetworkImageProvider( asyncSnapshot.requireData), width: profilePictureWidth, + expandable: true, editable: false, fileNameController: TextEditingController(), userSelectedfile: file, diff --git a/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_my_business_user.dart b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_my_business_user.dart index 3de6a8b9..db4e2235 100644 --- a/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_my_business_user.dart +++ b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_my_business_user.dart @@ -189,6 +189,7 @@ class _MihMyBusinessUserState extends State { MihCircleAvatar( imageFile: mzansiProfileProvider.userProfilePicture, width: 150, + expandable: true, editable: false, fileNameController: fileNameController, userSelectedfile: userPicFile, diff --git a/mih_ui/lib/mih_packages/mzansi_profile/personal_profile/components/mih_edit_personal_profile_window.dart b/mih_ui/lib/mih_packages/mzansi_profile/personal_profile/components/mih_edit_personal_profile_window.dart index 7680088c..5fb60204 100644 --- a/mih_ui/lib/mih_packages/mzansi_profile/personal_profile/components/mih_edit_personal_profile_window.dart +++ b/mih_ui/lib/mih_packages/mzansi_profile/personal_profile/components/mih_edit_personal_profile_window.dart @@ -343,6 +343,7 @@ class _MihEditPersonalProfileWindowState ? MemoryImage(newSelectedProPic!.bytes!) : mzansiProfileProvider.userProfilePicture, width: 150, + expandable: false, editable: true, fileNameController: proPicController, userSelectedfile: newSelectedProPic, diff --git a/mih_ui/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile.dart b/mih_ui/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile.dart index c579c106..622a3adc 100644 --- a/mih_ui/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile.dart +++ b/mih_ui/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile.dart @@ -160,6 +160,7 @@ class _MihPersonalProfileState extends State { MihCircleAvatar( imageFile: mzansiProfileProvider.userProfilePicture, width: 150, + expandable: true, editable: false, fileNameController: proPicController, userSelectedfile: newSelectedProPic, diff --git a/mih_ui/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile_view.dart b/mih_ui/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile_view.dart index 212df873..1b39d6fa 100644 --- a/mih_ui/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile_view.dart +++ b/mih_ui/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_profile_view.dart @@ -74,6 +74,7 @@ class _MihPersonalProfileViewState extends State { imageFile: CachedNetworkImageProvider( asyncSnapshot.requireData), width: profilePictureWidth, + expandable: true, editable: false, fileNameController: TextEditingController(), userSelectedfile: file, diff --git a/mih_ui/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_info.dart b/mih_ui/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_info.dart index 283b2ac6..01a80abd 100644 --- a/mih_ui/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_info.dart +++ b/mih_ui/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_info.dart @@ -314,6 +314,7 @@ class _PatientInfoState extends State { imageFile: patientManagerProvider.selectedPatientProfilePicture, width: 160, + expandable: true, editable: false, fileNameController: null, userSelectedfile: null,