From 9210990b7b086dc15031ea37410fdf54d4b3b9ec Mon Sep 17 00:00:00 2001 From: juan Date: Wed, 23 Oct 2024 01:56:58 -0400 Subject: [PATCH] added tabs for navigating between the current folder, and wtv search the user does (needs to implement yet api, along with dynamicism) --- lib/api_service.dart | 19 ++++++- lib/home_page.dart | 125 +++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 139 insertions(+), 5 deletions(-) diff --git a/lib/api_service.dart b/lib/api_service.dart index 08a4475..b95f1c5 100644 --- a/lib/api_service.dart +++ b/lib/api_service.dart @@ -67,6 +67,24 @@ class ApiService { } } + Future> 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 matches = List.from(json.decode(response.body)); + print(matches); + return matches; + } + } catch (e) { + print(e); + } + return []; + } + Future fetchEmailContent(List IDs) async { String content = r""" """; @@ -128,7 +146,6 @@ class ApiService { } } - Future deleteFolder(String folderName) async { var url = Uri.http('127.0.0.1:3001', 'delete_folder'); diff --git a/lib/home_page.dart b/lib/home_page.dart index 63b9de8..c849d87 100644 --- a/lib/home_page.dart +++ b/lib/home_page.dart @@ -9,16 +9,43 @@ class HomeScreen extends StatefulWidget { _HomeScreenState createState() => _HomeScreenState(); } -class _HomeScreenState extends State { +class _HomeScreenState extends State with TickerProviderStateMixin{ final GlobalKey _scaffoldKey = GlobalKey(); final GlobalKey _emailPageKey = GlobalKey(); ApiService apiService = ApiService(); bool _isSidebarOpen = true; + bool querySearches = false; + + List _tabs = ['INBOX', 'Search']; + TabController? _tabController; @override void 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 Widget build(BuildContext context) { @@ -30,6 +57,31 @@ class _HomeScreenState extends State { _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( children: [ Row( @@ -97,6 +149,25 @@ class _HomeScreenState extends State { border: OutlineInputBorder(), prefixIcon: Icon(Icons.search), ), + onSubmitted: (value) { + if (value.isNotEmpty) { + _performSearch(value); + } + //this is the input box i mentioned + // if (value == '') { + // setState(() { + // querySearches = false; + // }); + // } + // Future> results = apiService + // .sonicSearch('INBOX', 20, 0, value); + // // print(value); + // print(results); + // setState(() { + // querySearches = true; + // }); + + }, ), ), ], @@ -113,6 +184,31 @@ class _HomeScreenState extends State { ], ), ), + 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( // alignment: Alignment.topLeft, padding: EdgeInsets.all(8.0), @@ -134,12 +230,33 @@ class _HomeScreenState extends State { }, child: Icon(Icons.navigate_next), ), + ], ), ), 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 { ), ); } - +} // void _showPopupMenu(BuildContext context, Offset position) async { // final RenderBox overlay = // Overlay.of(context).context.findRenderObject() as RenderBox;