hym_ui/lib/email.dart

88 lines
2.5 KiB
Dart

import 'package:flutter/material.dart';
import 'api_service.dart';
import 'structs.dart';
import 'folder_drawer.dart';
class EmailListScreen extends StatelessWidget {
final List<GetThreadResponse> emails;
final Future<String> Function(List<String>) getEmailContent;
EmailListScreen({required this.emails, required this.getEmailContent});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Emails'),
),
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);
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(),
),
);
}
}
class EmailPage extends StatefulWidget {
@override
_EmailPageState createState() => _EmailPageState();
}
class _EmailPageState extends State<EmailPage> {
final ApiService apiService = ApiService();
List<GetThreadResponse> emails = [];
// Function to handle folder selection
void _onFolderSelected(String folder) async {
List<GetThreadResponse> fetchedEmails = await apiService.fetchEmailsFromFolder(folder, 0);
setState(() {
emails = fetchedEmails;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Email Page')),
drawer: FolderDrawer(
apiService: apiService,
onFolderTap: _onFolderSelected,
),
body: EmailListScreen(
emails: emails,
getEmailContent: apiService.fetchEmailContent,
),
);
}
}