folders actions #5
					 2 changed files with 600 additions and 576 deletions
				
			
		
							
								
								
									
										282
									
								
								lib/email.dart
									
										
									
									
									
								
							
							
						
						
									
										282
									
								
								lib/email.dart
									
										
									
									
									
								
							| 
						 | 
					@ -1,136 +1,146 @@
 | 
				
			||||||
import 'package:flutter/material.dart';
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
import 'api_service.dart';
 | 
					import 'package:flutter/widgets.dart';
 | 
				
			||||||
import 'structs.dart';
 | 
					import 'api_service.dart';
 | 
				
			||||||
 | 
					import 'structs.dart';
 | 
				
			||||||
class EmailListScreen extends StatelessWidget {
 | 
					
 | 
				
			||||||
  final List<GetThreadResponse> emails;
 | 
					class EmailListScreen extends StatelessWidget {
 | 
				
			||||||
  final Future<String> Function(List<String>, String) getEmailContent;
 | 
					  final List<GetThreadResponse> emails;
 | 
				
			||||||
  final String folder;
 | 
					  final Future<String> Function(List<String>, String) getEmailContent;
 | 
				
			||||||
 | 
					  final String folder;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  EmailListScreen({required this.emails, required this.getEmailContent, required this.folder});
 | 
					  EmailListScreen(
 | 
				
			||||||
//fix the email list
 | 
					      {required this.emails,
 | 
				
			||||||
  @override
 | 
					      required this.getEmailContent,
 | 
				
			||||||
  Widget build(BuildContext context) {
 | 
					      required this.folder});
 | 
				
			||||||
    return Scaffold(
 | 
					//fix the email list
 | 
				
			||||||
      body: ListView.separated(
 | 
					  @override
 | 
				
			||||||
        itemCount: emails.length,
 | 
					  Widget build(BuildContext context) {
 | 
				
			||||||
        itemBuilder: (context, index) {
 | 
					    return Scaffold(
 | 
				
			||||||
          final email = emails[index];
 | 
					      body: ListView.separated(
 | 
				
			||||||
          return ListTile(
 | 
					        itemCount: emails.length,
 | 
				
			||||||
            title: Text(email.from_name,
 | 
					        itemBuilder: (context, index) {
 | 
				
			||||||
                style: TextStyle(fontWeight: FontWeight.bold)),
 | 
					          final email = emails[index];
 | 
				
			||||||
            subtitle: Column(
 | 
					          return ListTile(
 | 
				
			||||||
              crossAxisAlignment: CrossAxisAlignment.start,
 | 
					            title: Text(email.from_name,
 | 
				
			||||||
              children: [Text(email.subject)],
 | 
					                style: TextStyle(fontWeight: FontWeight.bold)),
 | 
				
			||||||
            ),
 | 
					            subtitle: Column(
 | 
				
			||||||
            trailing: Text(email.date.toString()),
 | 
					              crossAxisAlignment: CrossAxisAlignment.start,
 | 
				
			||||||
            onTap: () async {
 | 
					              children: [Text(email.subject)],
 | 
				
			||||||
              String emailContent = await getEmailContent(email.messages, folder);
 | 
					            ),
 | 
				
			||||||
              Navigator.push(
 | 
					            trailing: Text(email.date.toString()),
 | 
				
			||||||
                context,
 | 
					            onTap: () async {
 | 
				
			||||||
                MaterialPageRoute(
 | 
					              String emailContent =
 | 
				
			||||||
                  builder: (context) => EmailView(
 | 
					                  await getEmailContent(email.messages, folder);
 | 
				
			||||||
                    emailContent: emailContent,
 | 
					              Navigator.push(
 | 
				
			||||||
                    from: email.from_address,
 | 
					                context,
 | 
				
			||||||
                    name: email.from_name,
 | 
					                MaterialPageRoute(
 | 
				
			||||||
                    to: email.to.toString(),
 | 
					                  builder: (context) => EmailView(
 | 
				
			||||||
                    subject: email.subject,
 | 
					                    emailContent: emailContent,
 | 
				
			||||||
                    date: email.date.toString(),
 | 
					                    from: email.from_address,
 | 
				
			||||||
                    id: email.id.toString(),
 | 
					                    name: email.from_name,
 | 
				
			||||||
                  ),
 | 
					                    to: email.to.toString(),
 | 
				
			||||||
                ),
 | 
					                    subject: email.subject,
 | 
				
			||||||
              );
 | 
					                    date: email.date.toString(),
 | 
				
			||||||
            },
 | 
					                    id: email.id.toString(),
 | 
				
			||||||
          );
 | 
					                  ),
 | 
				
			||||||
        },
 | 
					                ),
 | 
				
			||||||
        separatorBuilder: (context, index) => Divider(),
 | 
					              );
 | 
				
			||||||
      ),
 | 
					            },
 | 
				
			||||||
    );
 | 
					          );
 | 
				
			||||||
  }
 | 
					        },
 | 
				
			||||||
}
 | 
					        separatorBuilder: (context, index) => Divider(),
 | 
				
			||||||
 | 
					      ),
 | 
				
			||||||
// ignore: must_be_immutable
 | 
					    );
 | 
				
			||||||
class EmailPage extends StatefulWidget {
 | 
					  }
 | 
				
			||||||
  EmailPage({Key? key}) : super(key: key);
 | 
					}
 | 
				
			||||||
  String selectedFolder = "INBOX"; //starter
 | 
					
 | 
				
			||||||
  int offset = 0;
 | 
					// ignore: must_be_immutable
 | 
				
			||||||
  int page = 1;
 | 
					class EmailPage extends StatefulWidget {
 | 
				
			||||||
 | 
					  EmailPage({Key? key}) : super(key: key);
 | 
				
			||||||
  @override
 | 
					  String selectedFolder = "INBOX"; //starter
 | 
				
			||||||
  EmailPageState createState() => EmailPageState();
 | 
					  int offset = 0;
 | 
				
			||||||
}
 | 
					  int page = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class EmailPageState extends State<EmailPage> {
 | 
					  @override
 | 
				
			||||||
  final ApiService apiService = ApiService();
 | 
					  EmailPageState createState() => EmailPageState();
 | 
				
			||||||
  List<GetThreadResponse> emails = [];
 | 
					}
 | 
				
			||||||
  int page = 1;
 | 
					
 | 
				
			||||||
  bool isBackDisabled = false;
 | 
					class EmailPageState extends State<EmailPage> {
 | 
				
			||||||
 | 
					  final ApiService apiService = ApiService();
 | 
				
			||||||
  @override
 | 
					  List<GetThreadResponse> emails = [];
 | 
				
			||||||
  void initState() {
 | 
					  ValueNotifier<int> currentPageNotifier = ValueNotifier<int>(1);
 | 
				
			||||||
    super.initState();
 | 
					  int page = 1;
 | 
				
			||||||
    widget.page = page;
 | 
					  bool isBackDisabled = false;
 | 
				
			||||||
    isBackDisabled = true;
 | 
					
 | 
				
			||||||
  }
 | 
					  @override
 | 
				
			||||||
 | 
					  void initState() {
 | 
				
			||||||
  void updateSelectedFolder(String folder) {
 | 
					    super.initState();
 | 
				
			||||||
    setState(() {
 | 
					    widget.page = page;
 | 
				
			||||||
      widget.selectedFolder = folder;
 | 
					    isBackDisabled = true;
 | 
				
			||||||
    });
 | 
					  }
 | 
				
			||||||
    print(folder);
 | 
					
 | 
				
			||||||
    _fetchEmails();
 | 
					  String getPage() => widget.page.toString();
 | 
				
			||||||
  }
 | 
					  bool get backDisabled => isBackDisabled;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  String getPage() {
 | 
					  void updateSelectedFolder(String folder) {
 | 
				
			||||||
    return widget.page.toString();
 | 
					    setState(() {
 | 
				
			||||||
  }
 | 
					      widget.selectedFolder = folder;
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
  void updatePagenation(String option) {
 | 
					    print(folder);
 | 
				
			||||||
    if (option == "next") {
 | 
					    _fetchEmails();
 | 
				
			||||||
      setState(() {
 | 
					  }
 | 
				
			||||||
        widget.offset += 50;
 | 
					
 | 
				
			||||||
        widget.page += 1;
 | 
					  // String getPage() =>  widget.page.toString();
 | 
				
			||||||
        isBackDisabled = false;
 | 
					  
 | 
				
			||||||
      });
 | 
					
 | 
				
			||||||
    } else if (option == "back") {
 | 
					  void updatePagenation(String option) {
 | 
				
			||||||
      setState(() {
 | 
					    if (option == "next") {
 | 
				
			||||||
        widget.offset -= 50;
 | 
					      setState(() {
 | 
				
			||||||
        widget.page -= 1;
 | 
					        widget.offset += 50;
 | 
				
			||||||
        if (widget.page == 1) {
 | 
					        widget.page += 1;
 | 
				
			||||||
          isBackDisabled = true;
 | 
					        currentPageNotifier.value = widget.page;
 | 
				
			||||||
          print("back dis");
 | 
					        isBackDisabled = false;
 | 
				
			||||||
        }
 | 
					      });
 | 
				
			||||||
      });
 | 
					    } else if (option == "back") {
 | 
				
			||||||
    }
 | 
					      setState(() {
 | 
				
			||||||
    // print(currentPage);
 | 
					        widget.offset -= 50;
 | 
				
			||||||
    _fetchEmails();
 | 
					        widget.page -= 1;
 | 
				
			||||||
  }
 | 
					        currentPageNotifier.value = widget.page;
 | 
				
			||||||
 | 
					        if (widget.page == 1) {
 | 
				
			||||||
  void _fetchEmails() async {
 | 
					          isBackDisabled = true;
 | 
				
			||||||
    // print(selectedFolder)
 | 
					          print("back dis");
 | 
				
			||||||
    try {
 | 
					        }
 | 
				
			||||||
      List<GetThreadResponse> fetchedEmails = await apiService
 | 
					      });
 | 
				
			||||||
          .fetchEmailsFromFolder(widget.selectedFolder, widget.offset);
 | 
					    }
 | 
				
			||||||
      if (!mounted) return;
 | 
					    // print(currentPage);
 | 
				
			||||||
 | 
					    print(widget.page);
 | 
				
			||||||
      setState(() {
 | 
					    _fetchEmails();
 | 
				
			||||||
        emails = fetchedEmails; // Update the list of emails
 | 
					  }
 | 
				
			||||||
      });
 | 
					
 | 
				
			||||||
    } catch (e) {
 | 
					  void _fetchEmails() async {
 | 
				
			||||||
      print('Error fetching emails: $e');
 | 
					    // print(selectedFolder)
 | 
				
			||||||
    }
 | 
					    try {
 | 
				
			||||||
  }
 | 
					      List<GetThreadResponse> fetchedEmails = await apiService
 | 
				
			||||||
 | 
					          .fetchEmailsFromFolder(widget.selectedFolder, widget.offset);
 | 
				
			||||||
  @override
 | 
					      if (!mounted) return;
 | 
				
			||||||
  Widget build(BuildContext context) {
 | 
					
 | 
				
			||||||
    _fetchEmails();
 | 
					      setState(() {
 | 
				
			||||||
    return Scaffold(
 | 
					        emails = fetchedEmails; // Update the list of emails
 | 
				
			||||||
      body: EmailListScreen(
 | 
					      });
 | 
				
			||||||
        emails: emails,
 | 
					    } catch (e) {
 | 
				
			||||||
        getEmailContent: apiService.fetchEmailContent,
 | 
					      print('Error fetching emails: $e');
 | 
				
			||||||
        folder: widget.selectedFolder,//try to grab from it directly
 | 
					    }
 | 
				
			||||||
      ),
 | 
					  }
 | 
				
			||||||
    );
 | 
					
 | 
				
			||||||
  }
 | 
					  @override
 | 
				
			||||||
}
 | 
					  Widget build(BuildContext context) {
 | 
				
			||||||
 | 
					    _fetchEmails();
 | 
				
			||||||
 | 
					    return Scaffold(
 | 
				
			||||||
 | 
					      body: EmailListScreen(
 | 
				
			||||||
 | 
					        emails: emails,
 | 
				
			||||||
 | 
					        getEmailContent: apiService.fetchEmailContent,
 | 
				
			||||||
 | 
					        folder: widget.selectedFolder, //try to grab from it directly
 | 
				
			||||||
 | 
					      ),
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,440 +1,454 @@
 | 
				
			||||||
import 'folder_drawer.dart';
 | 
					import 'folder_drawer.dart';
 | 
				
			||||||
import 'structs.dart';
 | 
					import 'structs.dart';
 | 
				
			||||||
import 'package:flutter/widgets.dart';
 | 
					import 'package:flutter/widgets.dart';
 | 
				
			||||||
import 'api_service.dart';
 | 
					import 'api_service.dart';
 | 
				
			||||||
import 'package:flutter/material.dart';
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
import 'email.dart';
 | 
					import 'email.dart';
 | 
				
			||||||
// import 'package:shared_preferences/shared_preferences.dart';
 | 
					// import 'package:shared_preferences/shared_preferences.dart';
 | 
				
			||||||
// import 'serialize.dart';
 | 
					// import 'serialize.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class HomeScreen extends StatefulWidget {
 | 
					class HomeScreen extends StatefulWidget {
 | 
				
			||||||
  @override
 | 
					  @override
 | 
				
			||||||
  _HomeScreenState createState() => _HomeScreenState();
 | 
					  _HomeScreenState createState() => _HomeScreenState();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
 | 
					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;
 | 
					  bool querySearches = false;
 | 
				
			||||||
  String? _selectedOption = "INBOX";
 | 
					  String? _selectedOption = "INBOX";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  List<String> _tabs = ['Emails'];
 | 
					  List<String> _tabs = ['Emails'];
 | 
				
			||||||
  Map<String, Widget> _tabWidgets = {};
 | 
					  Map<String, Widget> _tabWidgets = {};
 | 
				
			||||||
  TabController? _tabController;
 | 
					  TabController? _tabController;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @override
 | 
					  @override
 | 
				
			||||||
  void initState() {
 | 
					  void initState() {
 | 
				
			||||||
    super.initState();
 | 
					    super.initState();
 | 
				
			||||||
    _tabController = TabController(length: _tabs.length, vsync: this);
 | 
					    _tabController = TabController(length: _tabs.length, vsync: this);
 | 
				
			||||||
    _tabWidgets['Emails'] = EmailPage(
 | 
					    _tabWidgets['Emails'] = EmailPage(
 | 
				
			||||||
      key: _emailPageKey,
 | 
					      key: _emailPageKey,
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Add a new tab based on the search
 | 
					  // Add a new tab based on the search
 | 
				
			||||||
  void _performSearch(String query, String? list) {
 | 
					  void _performSearch(String query, String? list) {
 | 
				
			||||||
    setState(() {
 | 
					    setState(() {
 | 
				
			||||||
      if (!_tabs.contains(query)) {
 | 
					      if (!_tabs.contains(query)) {
 | 
				
			||||||
        _tabs.add(query);
 | 
					        _tabs.add(query);
 | 
				
			||||||
        _tabWidgets[query] = _buildSearchResultsWidget(
 | 
					        _tabWidgets[query] = _buildSearchResultsWidget(
 | 
				
			||||||
            query, list); // Store a different widget for this tab
 | 
					            query, list); // Store a different widget for this tab
 | 
				
			||||||
        _tabController = TabController(length: _tabs.length, vsync: this);
 | 
					        _tabController = TabController(length: _tabs.length, vsync: this);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void _showOptionsSearchDialog () async {
 | 
					  void _showOptionsSearchDialog () async {
 | 
				
			||||||
    List<String> folders = await apiService.fetchFolders();
 | 
					    List<String> folders = await apiService.fetchFolders();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (mounted) {
 | 
					    if (mounted) {
 | 
				
			||||||
    showDialog(
 | 
					    showDialog(
 | 
				
			||||||
      context: context,
 | 
					      context: context,
 | 
				
			||||||
      builder: (BuildContext context) {
 | 
					      builder: (BuildContext context) {
 | 
				
			||||||
        return AlertDialog(
 | 
					        return AlertDialog(
 | 
				
			||||||
          title: Text('Choose an Option'),
 | 
					          title: Text('Choose an Option'),
 | 
				
			||||||
          content: Column(
 | 
					          content: Column(
 | 
				
			||||||
            mainAxisSize: MainAxisSize.min,
 | 
					            mainAxisSize: MainAxisSize.min,
 | 
				
			||||||
            children: folders.map((option) {
 | 
					            children: folders.map((option) {
 | 
				
			||||||
              return ListTile(
 | 
					              return ListTile(
 | 
				
			||||||
                title: Text(option),
 | 
					                title: Text(option),
 | 
				
			||||||
                leading: Radio<String>(
 | 
					                leading: Radio<String>(
 | 
				
			||||||
                  value: option,
 | 
					                  value: option,
 | 
				
			||||||
                  groupValue: _selectedOption, // Bind with _selectedOption
 | 
					                  groupValue: _selectedOption, // Bind with _selectedOption
 | 
				
			||||||
                  onChanged: (String? value) {
 | 
					                  onChanged: (String? value) {
 | 
				
			||||||
                    setState(() {
 | 
					                    setState(() {
 | 
				
			||||||
                      _selectedOption = value;
 | 
					                      _selectedOption = value;
 | 
				
			||||||
                    });
 | 
					                    });
 | 
				
			||||||
                    Navigator.of(context).pop(); // Close the dialog on selection
 | 
					                    Navigator.of(context).pop(); // Close the dialog on selection
 | 
				
			||||||
                  },
 | 
					                  },
 | 
				
			||||||
                ),
 | 
					                ),
 | 
				
			||||||
              );
 | 
					              );
 | 
				
			||||||
            }).toList(),
 | 
					            }).toList(),
 | 
				
			||||||
          ),
 | 
					          ),
 | 
				
			||||||
          actions: <Widget>[
 | 
					          actions: <Widget>[
 | 
				
			||||||
            ElevatedButton(
 | 
					            ElevatedButton(
 | 
				
			||||||
              child: Text('Submit'),
 | 
					              child: Text('Submit'),
 | 
				
			||||||
              onPressed: () {
 | 
					              onPressed: () {
 | 
				
			||||||
                Navigator.of(context).pop(); // Close the dialog
 | 
					                Navigator.of(context).pop(); // Close the dialog
 | 
				
			||||||
                ScaffoldMessenger.of(context).showSnackBar(SnackBar(
 | 
					                ScaffoldMessenger.of(context).showSnackBar(SnackBar(
 | 
				
			||||||
                  content: Text('You selected: $_selectedOption'),
 | 
					                  content: Text('You selected: $_selectedOption'),
 | 
				
			||||||
                ));
 | 
					                ));
 | 
				
			||||||
              },
 | 
					              },
 | 
				
			||||||
            ),
 | 
					            ),
 | 
				
			||||||
          ],
 | 
					          ],
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
    );}
 | 
					    );}
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Remove a tab
 | 
					  // Remove a tab
 | 
				
			||||||
  void _removeTab(int index) {
 | 
					  void _removeTab(int index) {
 | 
				
			||||||
    if (_tabs[index] != 'Emails') {
 | 
					    if (_tabs[index] != 'Emails') {
 | 
				
			||||||
      setState(() {
 | 
					      setState(() {
 | 
				
			||||||
        String tabToRemove = _tabs[index];
 | 
					        String tabToRemove = _tabs[index];
 | 
				
			||||||
        _tabs.removeAt(index);
 | 
					        _tabs.removeAt(index);
 | 
				
			||||||
        _tabWidgets
 | 
					        _tabWidgets
 | 
				
			||||||
            .remove(tabToRemove); // Remove widget associated with the tab
 | 
					            .remove(tabToRemove); // Remove widget associated with the tab
 | 
				
			||||||
        _tabController = TabController(length: _tabs.length, vsync: this);
 | 
					        _tabController = TabController(length: _tabs.length, vsync: this);
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Build a custom widget for each search query
 | 
					  // Build a custom widget for each search query
 | 
				
			||||||
  Widget _buildSearchResultsWidget(String query, String? list) {
 | 
					  Widget _buildSearchResultsWidget(String query, String? list) {
 | 
				
			||||||
    return FutureBuilder<List<SerializableMessage>>(
 | 
					    return FutureBuilder<List<SerializableMessage>>(
 | 
				
			||||||
      future: apiService.sonicSearch(list ?? "INBOX", 50, 0, query),
 | 
					      future: apiService.sonicSearch(list ?? "INBOX", 50, 0, query),
 | 
				
			||||||
      builder: (BuildContext context,
 | 
					      builder: (BuildContext context,
 | 
				
			||||||
          AsyncSnapshot<List<SerializableMessage>> snapshot) {
 | 
					          AsyncSnapshot<List<SerializableMessage>> snapshot) {
 | 
				
			||||||
        if (snapshot.connectionState == ConnectionState.waiting) {
 | 
					        if (snapshot.connectionState == ConnectionState.waiting) {
 | 
				
			||||||
          return Center(child: CircularProgressIndicator());
 | 
					          return Center(child: CircularProgressIndicator());
 | 
				
			||||||
        } else if (snapshot.hasError) {
 | 
					        } else if (snapshot.hasError) {
 | 
				
			||||||
          return Center(child: Text('Error: ${snapshot.error}'));
 | 
					          return Center(child: Text('Error: ${snapshot.error}'));
 | 
				
			||||||
        } else if (!snapshot.hasData || snapshot.data!.isEmpty) {
 | 
					        } else if (!snapshot.hasData || snapshot.data!.isEmpty) {
 | 
				
			||||||
          return Center(child: Text('No results found for: $query'));
 | 
					          return Center(child: Text('No results found for: $query'));
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
          List<SerializableMessage> result = snapshot.data!;
 | 
					          List<SerializableMessage> result = snapshot.data!;
 | 
				
			||||||
          return Scaffold(
 | 
					          return Scaffold(
 | 
				
			||||||
            body: ListView.separated(
 | 
					            body: ListView.separated(
 | 
				
			||||||
              itemCount: result.length,
 | 
					              itemCount: result.length,
 | 
				
			||||||
              itemBuilder: (context, index) {
 | 
					              itemBuilder: (context, index) {
 | 
				
			||||||
                final SerializableMessage email  = result[index];
 | 
					                final SerializableMessage email  = result[index];
 | 
				
			||||||
                return ListTile(
 | 
					                return ListTile(
 | 
				
			||||||
                  title: Text(email.from,
 | 
					                  title: Text(email.from,
 | 
				
			||||||
                      style: TextStyle(fontWeight: FontWeight.bold)),
 | 
					                      style: TextStyle(fontWeight: FontWeight.bold)),
 | 
				
			||||||
                  subtitle: Column(
 | 
					                  subtitle: Column(
 | 
				
			||||||
                    crossAxisAlignment: CrossAxisAlignment.start,
 | 
					                    crossAxisAlignment: CrossAxisAlignment.start,
 | 
				
			||||||
                    children: [Text(email.subject)],
 | 
					                    children: [Text(email.subject)],
 | 
				
			||||||
                  ),
 | 
					                  ),
 | 
				
			||||||
                  trailing: Text(email.date.toString()),
 | 
					                  trailing: Text(email.date.toString()),
 | 
				
			||||||
                  onTap: () async {
 | 
					                  onTap: () async {
 | 
				
			||||||
                    // print('tapped');
 | 
					                    // print('tapped');
 | 
				
			||||||
                    String emailContent =
 | 
					                    String emailContent =
 | 
				
			||||||
                        await apiService.fetchEmailContent([email.id], email.list);
 | 
					                        await apiService.fetchEmailContent([email.id], email.list);
 | 
				
			||||||
                    // print('content below');
 | 
					                    // print('content below');
 | 
				
			||||||
                    // print(emailContent);
 | 
					                    // print(emailContent);
 | 
				
			||||||
                    Navigator.push(
 | 
					                    Navigator.push(
 | 
				
			||||||
                      context,
 | 
					                      context,
 | 
				
			||||||
                      MaterialPageRoute(
 | 
					                      MaterialPageRoute(
 | 
				
			||||||
                        builder: (context) => EmailView(
 | 
					                        builder: (context) => EmailView(
 | 
				
			||||||
                          emailContent: emailContent,
 | 
					                          emailContent: emailContent,
 | 
				
			||||||
                          from: email.from,
 | 
					                          from: email.from,
 | 
				
			||||||
                          name: email.name,
 | 
					                          name: email.name,
 | 
				
			||||||
                          to: email.to.toString(),
 | 
					                          to: email.to.toString(),
 | 
				
			||||||
                          subject: email.subject,
 | 
					                          subject: email.subject,
 | 
				
			||||||
                          date: email.date.toString(),
 | 
					                          date: email.date.toString(),
 | 
				
			||||||
                          id: email.id.toString(),
 | 
					                          id: email.id.toString(),
 | 
				
			||||||
                        ),
 | 
					                        ),
 | 
				
			||||||
                      ),
 | 
					                      ),
 | 
				
			||||||
                    );
 | 
					                    );
 | 
				
			||||||
                  },
 | 
					                  },
 | 
				
			||||||
                );
 | 
					                );
 | 
				
			||||||
              },
 | 
					              },
 | 
				
			||||||
              separatorBuilder: (context, index) => Divider(),
 | 
					              separatorBuilder: (context, index) => Divider(),
 | 
				
			||||||
            ),
 | 
					            ),
 | 
				
			||||||
            // child: Column(
 | 
					            // child: Column(
 | 
				
			||||||
            //   mainAxisAlignment: MainAxisAlignment.center,
 | 
					            //   mainAxisAlignment: MainAxisAlignment.center,
 | 
				
			||||||
            //   children: [
 | 
					            //   children: [
 | 
				
			||||||
            //     Text("Results for: $query", style: TextStyle(fontSize: 24)),
 | 
					            //     Text("Results for: $query", style: TextStyle(fontSize: 24)),
 | 
				
			||||||
            //     // Display the actual data
 | 
					            //     // Display the actual data
 | 
				
			||||||
            //     Text(result[0].name), // Accessing the first result safely
 | 
					            //     Text(result[0].name), // Accessing the first result safely
 | 
				
			||||||
            //     Text(result[0].from), // Displaying the 'from' field as an example
 | 
					            //     Text(result[0].from), // Displaying the 'from' field as an example
 | 
				
			||||||
            //     Text(result[0].hash),
 | 
					            //     Text(result[0].hash),
 | 
				
			||||||
            //     Text(result[0].subject),
 | 
					            //     Text(result[0].subject),
 | 
				
			||||||
            //     Text(result[0].uid.toString()),
 | 
					            //     Text(result[0].uid.toString()),
 | 
				
			||||||
            //     Text(result[0].list),
 | 
					            //     Text(result[0].list),
 | 
				
			||||||
            //     Text(result[0].id),
 | 
					            //     Text(result[0].id),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            //     // Add more fields or customize the display
 | 
					            //     // Add more fields or customize the display
 | 
				
			||||||
            //     // SerializableEmailListScreen(emails: result, getEmailContent: getEmailContent)
 | 
					            //     // SerializableEmailListScreen(emails: result, getEmailContent: getEmailContent)
 | 
				
			||||||
            //     // Expanded(
 | 
					            //     // Expanded(
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            //     //   child:
 | 
					            //     //   child:
 | 
				
			||||||
            //     // ),
 | 
					            //     // ),
 | 
				
			||||||
            // ],
 | 
					            // ],
 | 
				
			||||||
          );
 | 
					          );
 | 
				
			||||||
          // );
 | 
					          // );
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @override
 | 
					  @override
 | 
				
			||||||
  void dispose() {
 | 
					  void dispose() {
 | 
				
			||||||
    _tabController?.dispose();
 | 
					    _tabController?.dispose();
 | 
				
			||||||
    super.dispose();
 | 
					    super.dispose();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @override
 | 
					  @override
 | 
				
			||||||
  Widget build(BuildContext context) {
 | 
					  Widget build(BuildContext context) {
 | 
				
			||||||
    return Scaffold(
 | 
					    return Scaffold(
 | 
				
			||||||
      key: _scaffoldKey,
 | 
					      key: _scaffoldKey,
 | 
				
			||||||
      drawer: FolderDrawer(
 | 
					      drawer: FolderDrawer(
 | 
				
			||||||
        apiService: apiService,
 | 
					        apiService: apiService,
 | 
				
			||||||
        onFolderTap: (folder) {
 | 
					        onFolderTap: (folder) {
 | 
				
			||||||
          _emailPageKey.currentState?.updateSelectedFolder(folder);
 | 
					          _emailPageKey.currentState?.updateSelectedFolder(folder);
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
      ),
 | 
					      ),
 | 
				
			||||||
      body: Stack(
 | 
					      body: Stack(
 | 
				
			||||||
        children: [
 | 
					        children: [
 | 
				
			||||||
          Row(
 | 
					          Row(
 | 
				
			||||||
            children: [
 | 
					            children: [
 | 
				
			||||||
              // Sidebar
 | 
					              // Sidebar
 | 
				
			||||||
              if (_isSidebarOpen)
 | 
					              if (_isSidebarOpen)
 | 
				
			||||||
                Container(
 | 
					                Container(
 | 
				
			||||||
                  width: 70,
 | 
					                  width: 70,
 | 
				
			||||||
                  color: Color.fromARGB(17, 96, 122, 135),
 | 
					                  color: Color.fromARGB(17, 96, 122, 135),
 | 
				
			||||||
                  child: Column(
 | 
					                  child: Column(
 | 
				
			||||||
                    crossAxisAlignment: CrossAxisAlignment.start,
 | 
					                    crossAxisAlignment: CrossAxisAlignment.start,
 | 
				
			||||||
                    children: [
 | 
					                    children: [
 | 
				
			||||||
                      ListTile(
 | 
					                      ListTile(
 | 
				
			||||||
                        leading: Icon(Icons.home),
 | 
					                        leading: Icon(Icons.home),
 | 
				
			||||||
                        onTap: () {
 | 
					                        onTap: () {
 | 
				
			||||||
                          // Navigate to Home
 | 
					                          // Navigate to Home
 | 
				
			||||||
                        },
 | 
					                        },
 | 
				
			||||||
                      ),
 | 
					                      ),
 | 
				
			||||||
                      ListTile(
 | 
					                      ListTile(
 | 
				
			||||||
                        leading: Icon(Icons.settings),
 | 
					                        leading: Icon(Icons.settings),
 | 
				
			||||||
                        onTap: () {
 | 
					                        onTap: () {
 | 
				
			||||||
                          // Navigate to Settings
 | 
					                          // Navigate to Settings
 | 
				
			||||||
                        },
 | 
					                        },
 | 
				
			||||||
                      ),
 | 
					                      ),
 | 
				
			||||||
                      ListTile(
 | 
					                      ListTile(
 | 
				
			||||||
                        leading: Icon(Icons.email),
 | 
					                        leading: Icon(Icons.email),
 | 
				
			||||||
                        onTap: () {
 | 
					                        onTap: () {
 | 
				
			||||||
                          _scaffoldKey.currentState?.openDrawer();
 | 
					                          _scaffoldKey.currentState?.openDrawer();
 | 
				
			||||||
                        },
 | 
					                        },
 | 
				
			||||||
                      ),
 | 
					                      ),
 | 
				
			||||||
                      Spacer(),
 | 
					                      Spacer(),
 | 
				
			||||||
                      Padding(
 | 
					                      Padding(
 | 
				
			||||||
                        padding: const EdgeInsets.all(8.0),
 | 
					                        padding: const EdgeInsets.all(8.0),
 | 
				
			||||||
                        child: Align(
 | 
					                        child: Align(
 | 
				
			||||||
                          alignment: Alignment.bottomLeft,
 | 
					                          alignment: Alignment.bottomLeft,
 | 
				
			||||||
                          child: IconButton(
 | 
					                          child: IconButton(
 | 
				
			||||||
                            icon: Icon(Icons.close, color: Colors.white),
 | 
					                            icon: Icon(Icons.close, color: Colors.white),
 | 
				
			||||||
                            onPressed: () {
 | 
					                            onPressed: () {
 | 
				
			||||||
                              setState(() {
 | 
					                              setState(() {
 | 
				
			||||||
                                _isSidebarOpen = false;
 | 
					                                _isSidebarOpen = false;
 | 
				
			||||||
                              });
 | 
					                              });
 | 
				
			||||||
                            },
 | 
					                            },
 | 
				
			||||||
                          ),
 | 
					                          ),
 | 
				
			||||||
                        ),
 | 
					                        ),
 | 
				
			||||||
                      ),
 | 
					                      ),
 | 
				
			||||||
                    ],
 | 
					                    ],
 | 
				
			||||||
                  ),
 | 
					                  ),
 | 
				
			||||||
                ),
 | 
					                ),
 | 
				
			||||||
              // Main content
 | 
					              // Main content
 | 
				
			||||||
              Expanded(
 | 
					              Expanded(
 | 
				
			||||||
                child: Column(
 | 
					                child: Column(
 | 
				
			||||||
                  children: [
 | 
					                  children: [
 | 
				
			||||||
                    Container(
 | 
					                    Container(
 | 
				
			||||||
                      padding: EdgeInsets.fromLTRB(8.0, 8.0, 8.0, 4.0),
 | 
					                      padding: EdgeInsets.fromLTRB(8.0, 8.0, 8.0, 4.0),
 | 
				
			||||||
                      color: Color.fromARGB(42, 36, 102, 132),
 | 
					                      color: Color.fromARGB(42, 36, 102, 132),
 | 
				
			||||||
                      child: Row(
 | 
					                      child: Row(
 | 
				
			||||||
                        mainAxisAlignment: MainAxisAlignment.center,
 | 
					                        mainAxisAlignment: MainAxisAlignment.center,
 | 
				
			||||||
                        children: [
 | 
					                        children: [
 | 
				
			||||||
                          Container(
 | 
					                          Container(
 | 
				
			||||||
                            width: 800,
 | 
					                            width: 800,
 | 
				
			||||||
                            height: 40,
 | 
					                            height: 40,
 | 
				
			||||||
                            child: TextField(
 | 
					                            child: TextField(
 | 
				
			||||||
                              decoration: InputDecoration(
 | 
					                              decoration: InputDecoration(
 | 
				
			||||||
                                hintText: 'Search...',
 | 
					                                hintText: 'Search...',
 | 
				
			||||||
                                border: OutlineInputBorder(),
 | 
					                                border: OutlineInputBorder(),
 | 
				
			||||||
                                prefixIcon: Icon(Icons.search),
 | 
					                                prefixIcon: Icon(Icons.search),
 | 
				
			||||||
                              ),
 | 
					                              ),
 | 
				
			||||||
                              onSubmitted: (value) {
 | 
					                              onSubmitted: (value) {
 | 
				
			||||||
                                if (value.isNotEmpty) {
 | 
					                                if (value.isNotEmpty) {
 | 
				
			||||||
                                  _performSearch(value, _selectedOption);
 | 
					                                  _performSearch(value, _selectedOption);
 | 
				
			||||||
                                }
 | 
					                                }
 | 
				
			||||||
                                //this is the input box i mentioned
 | 
					                                //this is the input box i mentioned
 | 
				
			||||||
                                // if (value == '') {
 | 
					                                // if (value == '') {
 | 
				
			||||||
                                //   setState(() {
 | 
					                                //   setState(() {
 | 
				
			||||||
                                //     querySearches = false;
 | 
					                                //     querySearches = false;
 | 
				
			||||||
                                //   });
 | 
					                                //   });
 | 
				
			||||||
                                // }
 | 
					                                // }
 | 
				
			||||||
                                // Future<List<String>> results = apiService
 | 
					                                // Future<List<String>> results = apiService
 | 
				
			||||||
                                //     .sonicSearch('INBOX', 20, 0, value);
 | 
					                                //     .sonicSearch('INBOX', 20, 0, value);
 | 
				
			||||||
                                // // print(value);
 | 
					                                // // print(value);
 | 
				
			||||||
                                // print(results);
 | 
					                                // print(results);
 | 
				
			||||||
                                // setState(() {
 | 
					                                // setState(() {
 | 
				
			||||||
                                //   querySearches = true;
 | 
					                                //   querySearches = true;
 | 
				
			||||||
                                // });
 | 
					                                // });
 | 
				
			||||||
                              },
 | 
					                              },
 | 
				
			||||||
                            ),
 | 
					                            ),
 | 
				
			||||||
                          ),
 | 
					                          ),
 | 
				
			||||||
                          SizedBox(
 | 
					                          SizedBox(
 | 
				
			||||||
                            width: 16,
 | 
					                            width: 16,
 | 
				
			||||||
                          ),
 | 
					                          ),
 | 
				
			||||||
                          Container(
 | 
					                          Container(
 | 
				
			||||||
                            width: 80,
 | 
					                            width: 80,
 | 
				
			||||||
                            height: 40,
 | 
					                            height: 40,
 | 
				
			||||||
                            child: ElevatedButton(
 | 
					                            child: ElevatedButton(
 | 
				
			||||||
                              onPressed: _showOptionsSearchDialog,
 | 
					                              onPressed: _showOptionsSearchDialog,
 | 
				
			||||||
                              child: Icon(Icons.manage_search),
 | 
					                              child: Icon(Icons.manage_search),
 | 
				
			||||||
                            ),
 | 
					                            ),
 | 
				
			||||||
                          )
 | 
					                          )
 | 
				
			||||||
                        ],
 | 
					                        ],
 | 
				
			||||||
                      ),
 | 
					                      ),
 | 
				
			||||||
                    ),
 | 
					                    ),
 | 
				
			||||||
                    Container(
 | 
					                    Container(
 | 
				
			||||||
                      padding: EdgeInsets.all(0.0),
 | 
					                      padding: EdgeInsets.all(0.0),
 | 
				
			||||||
                      color: Color.fromARGB(42, 36, 102, 132),
 | 
					                      color: Color.fromARGB(42, 36, 102, 132),
 | 
				
			||||||
                      child: Row(
 | 
					                      child: Row(
 | 
				
			||||||
                        children: [
 | 
					                        children: [
 | 
				
			||||||
                          Container(
 | 
					                          Container(
 | 
				
			||||||
                            height: 2,
 | 
					                            height: 2,
 | 
				
			||||||
                          )
 | 
					                          )
 | 
				
			||||||
                        ],
 | 
					                        ],
 | 
				
			||||||
                      ),
 | 
					                      ),
 | 
				
			||||||
                    ),
 | 
					                    ),
 | 
				
			||||||
                    Container(
 | 
					                    Container(
 | 
				
			||||||
                      color: Color.fromARGB(255, 131, 110, 143),
 | 
					                      color: Color.fromARGB(255, 131, 110, 143),
 | 
				
			||||||
                      child: TabBar(
 | 
					                      child: TabBar(
 | 
				
			||||||
                        controller: _tabController,
 | 
					                        controller: _tabController,
 | 
				
			||||||
                        isScrollable: true,
 | 
					                        isScrollable: true,
 | 
				
			||||||
                        tabs: _tabs
 | 
					                        tabs: _tabs
 | 
				
			||||||
                            .asMap()
 | 
					                            .asMap()
 | 
				
			||||||
                            .entries
 | 
					                            .entries
 | 
				
			||||||
                            .map((entry) => Tab(
 | 
					                            .map((entry) => Tab(
 | 
				
			||||||
                                  child: Row(
 | 
					                                  child: Row(
 | 
				
			||||||
                                    children: [
 | 
					                                    children: [
 | 
				
			||||||
                                      Text(entry.value),
 | 
					                                      Text(entry.value),
 | 
				
			||||||
                                      if (entry.value != 'Emails')
 | 
					                                      if (entry.value != 'Emails')
 | 
				
			||||||
                                        GestureDetector(
 | 
					                                        GestureDetector(
 | 
				
			||||||
                                          onTap: () => _removeTab(entry.key),
 | 
					                                          onTap: () => _removeTab(entry.key),
 | 
				
			||||||
                                          child: Icon(Icons.close, size: 16),
 | 
					                                          child: Icon(Icons.close, size: 16),
 | 
				
			||||||
                                        ),
 | 
					                                        ),
 | 
				
			||||||
                                    ],
 | 
					                                    ],
 | 
				
			||||||
                                  ),
 | 
					                                  ),
 | 
				
			||||||
                                ))
 | 
					                                ))
 | 
				
			||||||
                            .toList(),
 | 
					                            .toList(),
 | 
				
			||||||
                        labelColor: Colors.white,
 | 
					                        labelColor: Colors.white,
 | 
				
			||||||
                        indicatorColor: Colors.white,
 | 
					                        indicatorColor: Colors.white,
 | 
				
			||||||
                      ),
 | 
					                      ),
 | 
				
			||||||
                    ),
 | 
					                    ),
 | 
				
			||||||
                    Container(
 | 
					                    Container(
 | 
				
			||||||
                      // alignment: Alignment.topLeft,
 | 
					                      // alignment: Alignment.topLeft,
 | 
				
			||||||
                      padding: EdgeInsets.all(8.0),
 | 
					                      padding: EdgeInsets.all(8.0),
 | 
				
			||||||
                      color: Colors.white,
 | 
					                      color: Colors.white,
 | 
				
			||||||
                      child: Row(
 | 
					                      child: Row(
 | 
				
			||||||
                        children: [
 | 
					                        children: [
 | 
				
			||||||
                          ElevatedButton(
 | 
					                          ElevatedButton(
 | 
				
			||||||
                            onPressed: () {
 | 
					                            onPressed: () {
 | 
				
			||||||
                              _emailPageKey.currentState!.isBackDisabled ? null: _emailPageKey.currentState
 | 
					                              _emailPageKey.currentState!.isBackDisabled ? null: _emailPageKey.currentState
 | 
				
			||||||
                                  ?.updatePagenation('back');
 | 
					                                  ?.updatePagenation('back');
 | 
				
			||||||
                            },
 | 
					                            },
 | 
				
			||||||
                            child: Icon(Icons.navigate_before),
 | 
					                            child: Icon(Icons.navigate_before),
 | 
				
			||||||
                          ),
 | 
					                          ),
 | 
				
			||||||
                          Text(_emailPageKey.currentState?.getPage() ?? '1'),
 | 
					                          Builder(
 | 
				
			||||||
                          ElevatedButton(
 | 
					                            builder: (context) {
 | 
				
			||||||
                            onPressed: () {
 | 
					                              final emailState = _emailPageKey.currentState;
 | 
				
			||||||
                              _emailPageKey.currentState
 | 
					                              if (emailState == null) {
 | 
				
			||||||
                                  ?.updatePagenation('next');
 | 
					                                // Schedule a rebuild once the state is available
 | 
				
			||||||
                            },
 | 
					                                Future.microtask(() => setState(() {}));
 | 
				
			||||||
                            child: Icon(Icons.navigate_next),
 | 
					                                return Text('Loading...');
 | 
				
			||||||
                          ),
 | 
					                              }
 | 
				
			||||||
                        ],
 | 
					
 | 
				
			||||||
                      ),
 | 
					                              return ValueListenableBuilder<int>(
 | 
				
			||||||
                    ),
 | 
					                                valueListenable: emailState.currentPageNotifier,
 | 
				
			||||||
                    Expanded(
 | 
					                                builder: (context, value, _) => Text('$value'),
 | 
				
			||||||
                      child: TabBarView(
 | 
					                              );
 | 
				
			||||||
                        controller: _tabController,
 | 
					                            },
 | 
				
			||||||
                        children: _tabs.map((tab) {
 | 
					                          ),
 | 
				
			||||||
                          return _tabWidgets[tab] ??
 | 
					                          ElevatedButton(
 | 
				
			||||||
                              Center(child: Text("No content found"));
 | 
					                            onPressed: () {
 | 
				
			||||||
                          // return Center(
 | 
					                              _emailPageKey.currentState
 | 
				
			||||||
                          //     child: EmailPage(
 | 
					                                  ?.updatePagenation('next');
 | 
				
			||||||
                          //   key: _emailPageKey,
 | 
					                            },
 | 
				
			||||||
                          // ));
 | 
					                            child: Icon(Icons.navigate_next),
 | 
				
			||||||
                        }).toList(),
 | 
					                          ),
 | 
				
			||||||
                      ),
 | 
					                        ],
 | 
				
			||||||
                    ),
 | 
					                      ),
 | 
				
			||||||
 | 
					                    ),
 | 
				
			||||||
                    // if (_tabs.isEmpty)
 | 
					                    Expanded(
 | 
				
			||||||
                    //   Expanded(
 | 
					                      child: TabBarView(
 | 
				
			||||||
                    //     child: EmailPage(key: _emailPageKey),
 | 
					                        controller: _tabController,
 | 
				
			||||||
                    //   ),
 | 
					                        children: _tabs.map((tab) {
 | 
				
			||||||
                    // if (_tabs.isNotEmpty)
 | 
					                          return _tabWidgets[tab] ??
 | 
				
			||||||
                    //   Expanded(
 | 
					                              Center(child: Text("No content found"));
 | 
				
			||||||
                    //     // child: Text('supposed to be mails'),
 | 
					                          // return Center(
 | 
				
			||||||
                    //     child: TabBarView(
 | 
					                          //     child: EmailPage(
 | 
				
			||||||
                    //       controller: _tabController,
 | 
					                          //   key: _emailPageKey,
 | 
				
			||||||
                    //       children: _tabs
 | 
					                          // ));
 | 
				
			||||||
                    //           .map((tab) => Center(child: Text('Results for $tab')))
 | 
					                        }).toList(),
 | 
				
			||||||
                    //           .toList(),
 | 
					                      ),
 | 
				
			||||||
                    //     ),
 | 
					                    ),
 | 
				
			||||||
                    //   ),
 | 
					
 | 
				
			||||||
                  ],
 | 
					                    // if (_tabs.isEmpty)
 | 
				
			||||||
                ),
 | 
					                    //   Expanded(
 | 
				
			||||||
              ),
 | 
					                    //     child: EmailPage(key: _emailPageKey),
 | 
				
			||||||
            ],
 | 
					                    //   ),
 | 
				
			||||||
          ),
 | 
					                    // if (_tabs.isNotEmpty)
 | 
				
			||||||
          if (!_isSidebarOpen)
 | 
					                    //   Expanded(
 | 
				
			||||||
            Positioned(
 | 
					                    //     // child: Text('supposed to be mails'),
 | 
				
			||||||
              bottom: 16,
 | 
					                    //     child: TabBarView(
 | 
				
			||||||
              left: 16,
 | 
					                    //       controller: _tabController,
 | 
				
			||||||
              child: FloatingActionButton(
 | 
					                    //       children: _tabs
 | 
				
			||||||
                child: Icon(Icons.menu),
 | 
					                    //           .map((tab) => Center(child: Text('Results for $tab')))
 | 
				
			||||||
                onPressed: () {
 | 
					                    //           .toList(),
 | 
				
			||||||
                  setState(() {
 | 
					                    //     ),
 | 
				
			||||||
                    _isSidebarOpen = true;
 | 
					                    //   ),
 | 
				
			||||||
                  });
 | 
					                  ],
 | 
				
			||||||
                },
 | 
					                ),
 | 
				
			||||||
              ),
 | 
					              ),
 | 
				
			||||||
            ),
 | 
					            ],
 | 
				
			||||||
        ],
 | 
					          ),
 | 
				
			||||||
      ),
 | 
					          if (!_isSidebarOpen)
 | 
				
			||||||
    );
 | 
					            Positioned(
 | 
				
			||||||
  }
 | 
					              bottom: 16,
 | 
				
			||||||
}
 | 
					              left: 16,
 | 
				
			||||||
//   void _showPopupMenu(BuildContext context, Offset position) async {
 | 
					              child: FloatingActionButton(
 | 
				
			||||||
//     final RenderBox overlay =
 | 
					                child: Icon(Icons.menu),
 | 
				
			||||||
//         Overlay.of(context).context.findRenderObject() as RenderBox;
 | 
					                onPressed: () {
 | 
				
			||||||
 | 
					                  setState(() {
 | 
				
			||||||
//     await showMenu<String>(
 | 
					                    _isSidebarOpen = true;
 | 
				
			||||||
//       context: context,
 | 
					                  });
 | 
				
			||||||
//       position: RelativeRect.fromLTRB(
 | 
					                },
 | 
				
			||||||
//         position.dx,
 | 
					              ),
 | 
				
			||||||
//         position.dy,
 | 
					            ),
 | 
				
			||||||
//         overlay.size.width - position.dx,
 | 
					        ],
 | 
				
			||||||
//         overlay.size.height - position.dy,
 | 
					      ),
 | 
				
			||||||
//       ),
 | 
					    );
 | 
				
			||||||
//       items: <PopupMenuEntry<String>>[
 | 
					  }
 | 
				
			||||||
//         PopupMenuItem<String>(
 | 
					}
 | 
				
			||||||
//           value: 'Open',
 | 
					//   void _showPopupMenu(BuildContext context, Offset position) async {
 | 
				
			||||||
//           child: Text('Open'),
 | 
					//     final RenderBox overlay =
 | 
				
			||||||
//         ),
 | 
					//         Overlay.of(context).context.findRenderObject() as RenderBox;
 | 
				
			||||||
//         PopupMenuItem<String>(
 | 
					
 | 
				
			||||||
//           value: 'Reply',
 | 
					//     await showMenu<String>(
 | 
				
			||||||
//           child: Text('Reply'),
 | 
					//       context: context,
 | 
				
			||||||
//         ),
 | 
					//       position: RelativeRect.fromLTRB(
 | 
				
			||||||
//         PopupMenuItem<String>(
 | 
					//         position.dx,
 | 
				
			||||||
//           value: 'Delete',
 | 
					//         position.dy,
 | 
				
			||||||
//           child: Text('Delete'),
 | 
					//         overlay.size.width - position.dx,
 | 
				
			||||||
//         ),
 | 
					//         overlay.size.height - position.dy,
 | 
				
			||||||
//       ],
 | 
					//       ),
 | 
				
			||||||
//     );
 | 
					//       items: <PopupMenuEntry<String>>[
 | 
				
			||||||
//   }
 | 
					//         PopupMenuItem<String>(
 | 
				
			||||||
// }
 | 
					//           value: 'Open',
 | 
				
			||||||
 | 
					//           child: Text('Open'),
 | 
				
			||||||
 | 
					//         ),
 | 
				
			||||||
 | 
					//         PopupMenuItem<String>(
 | 
				
			||||||
 | 
					//           value: 'Reply',
 | 
				
			||||||
 | 
					//           child: Text('Reply'),
 | 
				
			||||||
 | 
					//         ),
 | 
				
			||||||
 | 
					//         PopupMenuItem<String>(
 | 
				
			||||||
 | 
					//           value: 'Delete',
 | 
				
			||||||
 | 
					//           child: Text('Delete'),
 | 
				
			||||||
 | 
					//         ),
 | 
				
			||||||
 | 
					//       ],
 | 
				
			||||||
 | 
					//     );
 | 
				
			||||||
 | 
					//   }
 | 
				
			||||||
 | 
					// }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue