浏览代码

search with folder filtering (untested ish)

juan 1 月之前
父节点
当前提交
5cc6b7eecb
共有 1 个文件被更改,包括 61 次插入19 次删除
  1. 61 19
      lib/home_page.dart

+ 61 - 19
lib/home_page.dart

@@ -17,6 +17,7 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
   ApiService apiService = ApiService();
   bool _isSidebarOpen = true;
   bool querySearches = false;
+  String? _selectedOption = "INBOX";
 
   List<String> _tabs = ['Emails'];
   Map<String, Widget> _tabWidgets = {};
@@ -32,17 +33,61 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
   }
 
   // Add a new tab based on the search
-  void _performSearch(String query) {
+  void _performSearch(String query, String? list) {
     setState(() {
       if (!_tabs.contains(query)) {
         _tabs.add(query);
         _tabWidgets[query] = _buildSearchResultsWidget(
-            query); // Store a different widget for this tab
+            query, list); // Store a different widget for this tab
         _tabController = TabController(length: _tabs.length, vsync: this);
       }
     });
   }
 
+  void _showOptionsSearchDialog () async {
+    List<String> folders = await apiService.fetchFolders();
+
+    if (mounted) {
+    showDialog(
+      context: context,
+      builder: (BuildContext context) {
+        return AlertDialog(
+          title: Text('Choose an Option'),
+          content: Column(
+            mainAxisSize: MainAxisSize.min,
+            children: folders.map((option) {
+              return ListTile(
+                title: Text(option),
+                leading: Radio<String>(
+                  value: option,
+                  groupValue: _selectedOption, // Bind with _selectedOption
+                  onChanged: (String? value) {
+                    setState(() {
+                      _selectedOption = value;
+                    });
+                    Navigator.of(context).pop(); // Close the dialog on selection
+                  },
+                ),
+              );
+            }).toList(),
+          ),
+          actions: <Widget>[
+            ElevatedButton(
+              child: Text('Submit'),
+              onPressed: () {
+                Navigator.of(context).pop(); // Close the dialog
+                ScaffoldMessenger.of(context).showSnackBar(SnackBar(
+                  content: Text('You selected: $_selectedOption'),
+                ));
+              },
+            ),
+          ],
+        );
+      },
+    );}
+  }
+  
+
   // Remove a tab
   void _removeTab(int index) {
     if (_tabs[index] != 'Emails') {
@@ -57,23 +102,9 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
   }
 
   // Build a custom widget for each search query
-  Widget _buildSearchResultsWidget(String query) {
-    // Future<List<SerializableMessage>> result = apiService.sonicSearch("INBOX", 10, 0, query);
-    // return Center(
-    //   child: Column(
-    //     mainAxisAlignment: MainAxisAlignment.center,
-    //     children: [
-    //       // Text("Results for: $query", style: TextStyle(fontSize: 24)),
-    //       // // You can add a list or any custom widget here
-    //       // Text("Here you can display search results or other content."),
-    //       // Text(result[0].messages.toString()),
-    //       Text(query),
-    //       Text(result[0].name),
-    //     ],
-    //   ),
-    // );
+  Widget _buildSearchResultsWidget(String query, String? list) {
     return FutureBuilder<List<SerializableMessage>>(
-      future: apiService.sonicSearch("INBOX", 50, 0, query),
+      future: apiService.sonicSearch(list ?? "INBOX", 50, 0, query),
       builder: (BuildContext context,
           AsyncSnapshot<List<SerializableMessage>> snapshot) {
         if (snapshot.connectionState == ConnectionState.waiting) {
@@ -234,7 +265,7 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
                               ),
                               onSubmitted: (value) {
                                 if (value.isNotEmpty) {
-                                  _performSearch(value);
+                                  _performSearch(value, _selectedOption);
                                 }
                                 //this is the input box i mentioned
                                 // if (value == '') {
@@ -252,6 +283,17 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
                               },
                             ),
                           ),
+                          SizedBox(
+                            width: 16,
+                          ),
+                          Container(
+                            width: 80,
+                            height: 40,
+                            child: ElevatedButton(
+                              onPressed: _showOptionsSearchDialog,
+                              child: Icon(Icons.manage_search),
+                            ),
+                          )
                         ],
                       ),
                     ),