import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; import 'api_service.dart'; import 'structs.dart'; class EmailListScreen extends StatelessWidget { final List emails; final Future Function(List, String) getEmailContent; final String folder; EmailListScreen( {required this.emails, required this.getEmailContent, required this.folder}); //fix the email list @override Widget build(BuildContext context) { return Scaffold( body: ListView.separated( itemCount: emails.length, itemBuilder: (context, index) { final email = emails[index]; return ListTile( title: Text(email.from_name, style: TextStyle(fontWeight: FontWeight.bold)), subtitle: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [Text(email.subject)], ), trailing: Text(email.date.toString()), onTap: () async { String emailContent = await getEmailContent(email.messages, folder); Navigator.push( context, MaterialPageRoute( builder: (context) => EmailView( emailContent: emailContent, from: email.from_address, name: email.from_name, to: email.to.toString(), subject: email.subject, date: email.date.toString(), id: email.id.toString(), //i think this is thread id? ), ), ); }, ); }, 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; int page = 1; @override EmailPageState createState() => EmailPageState(); } class EmailPageState extends State { final ApiService apiService = ApiService(); List emails = []; ValueNotifier currentPageNotifier = ValueNotifier(1); int page = 1; bool isBackDisabled = false; @override void initState() { super.initState(); widget.page = page; isBackDisabled = true; _fetchEmails(); } String getPage() => widget.page.toString(); bool get backDisabled => isBackDisabled; void updateSelectedFolder(String folder) { setState(() { widget.selectedFolder = folder; }); print(folder); _fetchEmails(); } // String getPage() => widget.page.toString(); void updatePagenation(String option) { if (option == "next") { setState(() { widget.offset += 50; widget.page += 1; currentPageNotifier.value = widget.page; isBackDisabled = false; }); } else if (option == "back") { setState(() { widget.offset -= 50; widget.page -= 1; currentPageNotifier.value = widget.page; if (widget.page == 1) { isBackDisabled = true; print("back disabled"); } }); } // print(currentPage); print(widget.page); _fetchEmails(); } void _fetchEmails() async { try { List fetchedEmails = await apiService .fetchEmailsFromFolder(widget.selectedFolder, widget.offset); if (!mounted) return; setState(() { emails = fetchedEmails; // Update the list of emails }); } catch (e) { print('Error fetching emails: $e'); } } @override Widget build(BuildContext context) { return Scaffold( body: EmailListScreen( emails: emails, getEmailContent: apiService.fetchEmailContent, folder: widget.selectedFolder, //try to grab from it directly ), ); } }