hym_ui/lib/email.dart

137 lines
3.5 KiB
Dart

import 'package:flutter/material.dart';
import 'api_service.dart';
import 'structs.dart';
class EmailListScreen extends StatelessWidget {
final List<GetThreadResponse> emails;
final Future<String> Function(List<String>, 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(),
),
),
);
},
);
},
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<EmailPage> {
final ApiService apiService = ApiService();
List<GetThreadResponse> emails = [];
int page = 1;
bool isBackDisabled = false;
@override
void initState() {
super.initState();
widget.page = page;
isBackDisabled = true;
}
void updateSelectedFolder(String folder) {
setState(() {
widget.selectedFolder = folder;
});
print(folder);
_fetchEmails();
}
String getPage() {
return widget.page.toString();
}
void updatePagenation(String option) {
if (option == "next") {
setState(() {
widget.offset += 50;
widget.page += 1;
isBackDisabled = false;
});
} else if (option == "back") {
setState(() {
widget.offset -= 50;
widget.page -= 1;
if (widget.page == 1) {
isBackDisabled = true;
print("back dis");
}
});
}
// print(currentPage);
_fetchEmails();
}
void _fetchEmails() async {
// print(selectedFolder)
try {
List<GetThreadResponse> 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) {
_fetchEmails();
return Scaffold(
body: EmailListScreen(
emails: emails,
getEmailContent: apiService.fetchEmailContent,
folder: widget.selectedFolder,//try to grab from it directly
),
);
}
}