From 0e1e9a3cedc8b07b4743f6b7c4a8666055a19680 Mon Sep 17 00:00:00 2001 From: juan Date: Thu, 21 Aug 2025 13:49:23 -0400 Subject: [PATCH] onPressed for the move file when selected its checkbox --- lib/home_page.dart | 162 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 160 insertions(+), 2 deletions(-) diff --git a/lib/home_page.dart b/lib/home_page.dart index f4e67f7..5be194e 100644 --- a/lib/home_page.dart +++ b/lib/home_page.dart @@ -1,4 +1,5 @@ import 'package:crab_ui/sonicEmailView.dart'; +import 'package:pointer_interceptor/pointer_interceptor.dart'; import 'folder_drawer.dart'; import 'structs.dart'; @@ -35,6 +36,7 @@ class _HomeScreenState extends State with TickerProviderStateMixin { List _tabs = ['Emails']; Map _tabWidgets = {}; TabController? _tabController; + OverlayEntry? _overlayEntry; @override void initState() { @@ -415,7 +417,163 @@ class _HomeScreenState extends State with TickerProviderStateMixin { icon: Icon( Icons.mark_email_read_outlined)), IconButton( - onPressed: null, + onPressed: () { + final overlay = Overlay.of(context); + String? + selectedFolder; // Variable to store the selected folder + + _overlayEntry = OverlayEntry( + builder: (context) => Stack( + children: [ + // Dimmed background + Container( + color: Colors.black54, + width: + MediaQuery.of(context) + .size + .width, + height: + MediaQuery.of(context) + .size + .height, + ), + // Focused content window + PointerInterceptor( + child: Center( + child: Material( + elevation: 8, + borderRadius: + BorderRadius + .circular(12), + child: ConstrainedBox( + constraints: + const BoxConstraints( + maxWidth: 400, + maxHeight: 500, + ), + child: Column( + mainAxisSize: + MainAxisSize + .min, + children: [ + Text( + 'Move email from folder ${ApiService.currFolder} to:', + style: TextStyle( + fontSize: + 16), + ), + Divider( + height: 1), + Expanded( + child: FutureBuilder< + List< + String>>( + future: ApiService() + .fetchFolders(), + builder: (context, + snapshot) { + if (snapshot + .connectionState == + ConnectionState + .waiting) { + return const Center( + child: + CircularProgressIndicator()); + } else if (snapshot + .hasError) { + return Center( + child: + Text('Error: ${snapshot.error}')); + } else if (snapshot + .hasData) { + return StatefulBuilder( + builder: + (context, + setState) { + return ListView( + shrinkWrap: + true, + children: + snapshot.data!.map((folder) { + return RadioListTile( + title: Text(folder), + value: folder, + groupValue: selectedFolder, + onChanged: (String? value) { + setState(() { + selectedFolder = value; // Update the selected folder + }); + }, + ); + }).toList(), + ); + }, + ); + } else { + return const Center( + child: + Text('No folders found.')); + } + }, + ), + ), + Divider( + height: 1), + Row( + mainAxisAlignment: + MainAxisAlignment + .spaceEvenly, + children: [ + ElevatedButton( + onPressed: + () { + // Handle Accept button + if (selectedFolder != + null) { + print( + "Selected folder: $selectedFolder"); + // Store the selected folder or perform any action + // ApiService.currFolder = selectedFolder!; + _emailPageKey.currentState! //the one selected + .moveSelectedOfFolder(selectedFolder!); + _overlayEntry + ?.remove(); + } else { + print( + "No folder selected"); + } + }, + child: Text( + 'Accept'), + ), + ElevatedButton( + onPressed: + () { + // Handle Cancel button + _overlayEntry + ?.remove(); + }, + child: Text( + 'Cancel'), + ), + ], + ), + ], + ), + ), + ), + ), + ), + ], + ), + ); + + if (_overlayEntry != null) { + overlay.insert(_overlayEntry!); + } + // _emailPageKey.currentState! //the one selected + // .moveSelectedOfFolder(); + }, icon: Icon( Icons.drive_file_move_outlined)), ], @@ -441,7 +599,7 @@ class _HomeScreenState extends State with TickerProviderStateMixin { .selectAllEmails(true); _emailPageKey.currentState! .markSelectedAsRead(true); - _emailPageKey.currentState! + _emailPageKey.currentState! .selectAllEmails(false); }, ),