added tabs for navigating between the current folder, and wtv search the user does (needs to implement yet api, along with dynamicism)
This commit is contained in:
		
							parent
							
								
									9b0b72003a
								
							
						
					
					
						commit
						9210990b7b
					
				
					 2 changed files with 139 additions and 5 deletions
				
			
		| 
						 | 
					@ -67,6 +67,24 @@ class ApiService {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Future<List<String>> sonicSearch(
 | 
				
			||||||
 | 
					      String list, int limit, int offset, String query) async {
 | 
				
			||||||
 | 
					    try {
 | 
				
			||||||
 | 
					      var url = Uri.http('127.0.0.1:3001', 'search',
 | 
				
			||||||
 | 
					          {'list': list, 'limit': limit.toString(), 'offset': offset.toString(), 'query': query});
 | 
				
			||||||
 | 
					      var response = await http.get(url);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if (response.statusCode == 200) {
 | 
				
			||||||
 | 
					        List<String> matches = List<String>.from(json.decode(response.body));
 | 
				
			||||||
 | 
					        print(matches);
 | 
				
			||||||
 | 
					        return matches;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    } catch (e) {
 | 
				
			||||||
 | 
					      print(e);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return [];
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Future<String> fetchEmailContent(List<String> IDs) async {
 | 
					  Future<String> fetchEmailContent(List<String> IDs) async {
 | 
				
			||||||
    String content = r"""
 | 
					    String content = r"""
 | 
				
			||||||
    """;
 | 
					    """;
 | 
				
			||||||
| 
						 | 
					@ -128,7 +146,6 @@ class ApiService {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
  Future<void> deleteFolder(String folderName) async {
 | 
					  Future<void> deleteFolder(String folderName) async {
 | 
				
			||||||
    var url = Uri.http('127.0.0.1:3001', 'delete_folder');
 | 
					    var url = Uri.http('127.0.0.1:3001', 'delete_folder');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -9,16 +9,43 @@ class HomeScreen extends StatefulWidget {
 | 
				
			||||||
  _HomeScreenState createState() => _HomeScreenState();
 | 
					  _HomeScreenState createState() => _HomeScreenState();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class _HomeScreenState extends State<HomeScreen> {
 | 
					class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin{
 | 
				
			||||||
  final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
 | 
					  final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
 | 
				
			||||||
  final GlobalKey<EmailPageState> _emailPageKey = GlobalKey<EmailPageState>();
 | 
					  final GlobalKey<EmailPageState> _emailPageKey = GlobalKey<EmailPageState>();
 | 
				
			||||||
  ApiService apiService = ApiService();
 | 
					  ApiService apiService = ApiService();
 | 
				
			||||||
  bool _isSidebarOpen = true;
 | 
					  bool _isSidebarOpen = true;
 | 
				
			||||||
 | 
					  bool querySearches = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  List<String> _tabs = ['INBOX', 'Search'];
 | 
				
			||||||
 | 
					  TabController? _tabController;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @override
 | 
					  @override
 | 
				
			||||||
  void initState() {
 | 
					  void initState() {
 | 
				
			||||||
    super.initState();
 | 
					    super.initState();
 | 
				
			||||||
 | 
					    _tabController = TabController(length: _tabs.length, vsync: this);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					   // Add a new tab based on the search
 | 
				
			||||||
 | 
					  void _performSearch(String query) {
 | 
				
			||||||
 | 
					    setState(() {
 | 
				
			||||||
 | 
					      _tabs.add(query);
 | 
				
			||||||
 | 
					      _tabController = TabController(length: _tabs.length, vsync: this);
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Remove a tab
 | 
				
			||||||
 | 
					  void _removeTab(int index) {
 | 
				
			||||||
 | 
					    setState(() {
 | 
				
			||||||
 | 
					      _tabs.removeAt(index);
 | 
				
			||||||
 | 
					      _tabController = TabController(length: _tabs.length, vsync: this);
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  void dispose() {
 | 
				
			||||||
 | 
					    _tabController?.dispose();
 | 
				
			||||||
 | 
					    super.dispose();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @override
 | 
					  @override
 | 
				
			||||||
  Widget build(BuildContext context) {
 | 
					  Widget build(BuildContext context) {
 | 
				
			||||||
| 
						 | 
					@ -30,6 +57,31 @@ class _HomeScreenState extends State<HomeScreen> {
 | 
				
			||||||
          _emailPageKey.currentState?.updateSelectedFolder(folder);
 | 
					          _emailPageKey.currentState?.updateSelectedFolder(folder);
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
      ),
 | 
					      ),
 | 
				
			||||||
 | 
					      // appBar: AppBar(
 | 
				
			||||||
 | 
					      //   title: Text('Search with Tabs'),
 | 
				
			||||||
 | 
					      //   bottom: _tabs.isNotEmpty
 | 
				
			||||||
 | 
					      //       ? TabBar(
 | 
				
			||||||
 | 
					      //           controller: _tabController,
 | 
				
			||||||
 | 
					      //           isScrollable: true,
 | 
				
			||||||
 | 
					      //           tabs: _tabs
 | 
				
			||||||
 | 
					      //               .asMap()
 | 
				
			||||||
 | 
					      //               .entries
 | 
				
			||||||
 | 
					      //               .map((entry) => Tab(
 | 
				
			||||||
 | 
					      //                     child: Row(
 | 
				
			||||||
 | 
					      //                       children: [
 | 
				
			||||||
 | 
					      //                         Text(entry.value),
 | 
				
			||||||
 | 
					      //                         SizedBox(width: 8),
 | 
				
			||||||
 | 
					      //                         GestureDetector(
 | 
				
			||||||
 | 
					      //                           onTap: () => _removeTab(entry.key),
 | 
				
			||||||
 | 
					      //                           child: Icon(Icons.close, size: 16),
 | 
				
			||||||
 | 
					      //                         ),
 | 
				
			||||||
 | 
					      //                       ],
 | 
				
			||||||
 | 
					      //                     ),
 | 
				
			||||||
 | 
					      //                   ))
 | 
				
			||||||
 | 
					      //               .toList(),
 | 
				
			||||||
 | 
					      //         )
 | 
				
			||||||
 | 
					      //       : null,
 | 
				
			||||||
 | 
					      // ),
 | 
				
			||||||
      body: Stack(
 | 
					      body: Stack(
 | 
				
			||||||
        children: [
 | 
					        children: [
 | 
				
			||||||
          Row(
 | 
					          Row(
 | 
				
			||||||
| 
						 | 
					@ -97,6 +149,25 @@ class _HomeScreenState extends State<HomeScreen> {
 | 
				
			||||||
                                border: OutlineInputBorder(),
 | 
					                                border: OutlineInputBorder(),
 | 
				
			||||||
                                prefixIcon: Icon(Icons.search),
 | 
					                                prefixIcon: Icon(Icons.search),
 | 
				
			||||||
                              ),
 | 
					                              ),
 | 
				
			||||||
 | 
					                              onSubmitted: (value) {
 | 
				
			||||||
 | 
					                                if (value.isNotEmpty) {
 | 
				
			||||||
 | 
					                                  _performSearch(value);
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                                //this is the input box i mentioned
 | 
				
			||||||
 | 
					                                // if (value == '') {
 | 
				
			||||||
 | 
					                                //   setState(() {
 | 
				
			||||||
 | 
					                                //     querySearches = false;
 | 
				
			||||||
 | 
					                                //   });
 | 
				
			||||||
 | 
					                                // }
 | 
				
			||||||
 | 
					                                // Future<List<String>> results = apiService
 | 
				
			||||||
 | 
					                                //     .sonicSearch('INBOX', 20, 0, value);
 | 
				
			||||||
 | 
					                                // // print(value);
 | 
				
			||||||
 | 
					                                // print(results);
 | 
				
			||||||
 | 
					                                // setState(() {
 | 
				
			||||||
 | 
					                                //   querySearches = true;
 | 
				
			||||||
 | 
					                                // });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                              },
 | 
				
			||||||
                            ),
 | 
					                            ),
 | 
				
			||||||
                          ),
 | 
					                          ),
 | 
				
			||||||
                        ],
 | 
					                        ],
 | 
				
			||||||
| 
						 | 
					@ -113,6 +184,31 @@ class _HomeScreenState extends State<HomeScreen> {
 | 
				
			||||||
                        ],
 | 
					                        ],
 | 
				
			||||||
                      ),
 | 
					                      ),
 | 
				
			||||||
                    ),
 | 
					                    ),
 | 
				
			||||||
 | 
					                    Container(
 | 
				
			||||||
 | 
					                      color: Color.fromARGB(255, 131, 110, 143),
 | 
				
			||||||
 | 
					                      child: TabBar(
 | 
				
			||||||
 | 
					                        controller: _tabController,
 | 
				
			||||||
 | 
					                        isScrollable: true,
 | 
				
			||||||
 | 
					                        tabs: _tabs
 | 
				
			||||||
 | 
					                            .asMap()
 | 
				
			||||||
 | 
					                            .entries
 | 
				
			||||||
 | 
					                            .map((entry) => Tab(
 | 
				
			||||||
 | 
					                                  child: Row(
 | 
				
			||||||
 | 
					                                    children: [
 | 
				
			||||||
 | 
					                                      Text(entry.value),
 | 
				
			||||||
 | 
					                                      if (entry.value != 'INBOX')
 | 
				
			||||||
 | 
					                                        GestureDetector(
 | 
				
			||||||
 | 
					                                          onTap: () => _removeTab(entry.key),
 | 
				
			||||||
 | 
					                                          child: Icon(Icons.close, size: 16),
 | 
				
			||||||
 | 
					                                        ),
 | 
				
			||||||
 | 
					                                    ],
 | 
				
			||||||
 | 
					                                  ),
 | 
				
			||||||
 | 
					                                ))
 | 
				
			||||||
 | 
					                            .toList(),
 | 
				
			||||||
 | 
					                        labelColor: Colors.white,
 | 
				
			||||||
 | 
					                        indicatorColor: Colors.white,
 | 
				
			||||||
 | 
					                      ),
 | 
				
			||||||
 | 
					                    ),
 | 
				
			||||||
                    Container(
 | 
					                    Container(
 | 
				
			||||||
                      // alignment: Alignment.topLeft,
 | 
					                      // alignment: Alignment.topLeft,
 | 
				
			||||||
                      padding: EdgeInsets.all(8.0),
 | 
					                      padding: EdgeInsets.all(8.0),
 | 
				
			||||||
| 
						 | 
					@ -134,12 +230,33 @@ class _HomeScreenState extends State<HomeScreen> {
 | 
				
			||||||
                            },
 | 
					                            },
 | 
				
			||||||
                            child: Icon(Icons.navigate_next),
 | 
					                            child: Icon(Icons.navigate_next),
 | 
				
			||||||
                          ),
 | 
					                          ),
 | 
				
			||||||
 | 
					                          
 | 
				
			||||||
                        ],
 | 
					                        ],
 | 
				
			||||||
                      ),
 | 
					                      ),
 | 
				
			||||||
                    ),
 | 
					                    ),
 | 
				
			||||||
                    Expanded(
 | 
					                    Expanded(
 | 
				
			||||||
                      child: EmailPage(key: _emailPageKey),
 | 
					                      child: TabBarView(
 | 
				
			||||||
                    )
 | 
					                        controller: _tabController,
 | 
				
			||||||
 | 
					                        children: _tabs.map((tab) {
 | 
				
			||||||
 | 
					                          return Center(child: EmailPage(key: _emailPageKey,));
 | 
				
			||||||
 | 
					                        }).toList(),
 | 
				
			||||||
 | 
					                      ),
 | 
				
			||||||
 | 
					                    ),
 | 
				
			||||||
 | 
					                    
 | 
				
			||||||
 | 
					                    // if (_tabs.isEmpty)
 | 
				
			||||||
 | 
					                    //   Expanded(
 | 
				
			||||||
 | 
					                    //     child: EmailPage(key: _emailPageKey),
 | 
				
			||||||
 | 
					                    //   ),
 | 
				
			||||||
 | 
					                    // if (_tabs.isNotEmpty)
 | 
				
			||||||
 | 
					                    //   Expanded(
 | 
				
			||||||
 | 
					                    //     // child: Text('supposed to be mails'),
 | 
				
			||||||
 | 
					                    //     child: TabBarView(
 | 
				
			||||||
 | 
					                    //       controller: _tabController,
 | 
				
			||||||
 | 
					                    //       children: _tabs
 | 
				
			||||||
 | 
					                    //           .map((tab) => Center(child: Text('Results for $tab')))
 | 
				
			||||||
 | 
					                    //           .toList(),
 | 
				
			||||||
 | 
					                    //     ),
 | 
				
			||||||
 | 
					                    //   ),
 | 
				
			||||||
                  ],
 | 
					                  ],
 | 
				
			||||||
                ),
 | 
					                ),
 | 
				
			||||||
              ),
 | 
					              ),
 | 
				
			||||||
| 
						 | 
					@ -162,7 +279,7 @@ class _HomeScreenState extends State<HomeScreen> {
 | 
				
			||||||
      ),
 | 
					      ),
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
//   void _showPopupMenu(BuildContext context, Offset position) async {
 | 
					//   void _showPopupMenu(BuildContext context, Offset position) async {
 | 
				
			||||||
//     final RenderBox overlay =
 | 
					//     final RenderBox overlay =
 | 
				
			||||||
//         Overlay.of(context).context.findRenderObject() as RenderBox;
 | 
					//         Overlay.of(context).context.findRenderObject() as RenderBox;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue