86 lines
2.4 KiB
Dart
86 lines
2.4 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'api_service.dart';
|
|
import 'structs.dart';
|
|
|
|
class SerializableMessageListScreen extends StatefulWidget {
|
|
@override
|
|
_SerializableMessageListScreenState createState() => _SerializableMessageListScreenState();
|
|
}
|
|
|
|
class _SerializableMessageListScreenState extends State<SerializableMessageListScreen> {
|
|
List<SerializableMessage>? messages;
|
|
bool isLoading = true;
|
|
bool hasError = false;
|
|
|
|
final ApiService apiService = ApiService();
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
_fetchMessages();
|
|
}
|
|
|
|
Future<void> _fetchMessages() async {
|
|
try {
|
|
List<SerializableMessage> fetchedMessages = await apiService.sonicSearch("INBOX", 10, 0, "searchQuery");
|
|
setState(() {
|
|
messages = fetchedMessages;
|
|
isLoading = false;
|
|
});
|
|
} catch (e) {
|
|
setState(() {
|
|
hasError = true;
|
|
isLoading = false;
|
|
});
|
|
}
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
if (isLoading) {
|
|
return Center(child: CircularProgressIndicator());
|
|
}
|
|
|
|
if (hasError) {
|
|
return Center(child: Text("Error fetching messages."));
|
|
}
|
|
|
|
if (messages == null || messages!.isEmpty) {
|
|
return Center(child: Text("No messages found."));
|
|
}
|
|
|
|
return ListView.separated(
|
|
itemCount: messages!.length,
|
|
itemBuilder: (context, index) {
|
|
final message = messages![index];
|
|
return ListTile(
|
|
title: Text(message.name, style: TextStyle(fontWeight: FontWeight.bold)),
|
|
subtitle: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [Text(message.subject)],
|
|
),
|
|
trailing: Text(message.date),
|
|
onTap: () async {
|
|
String emailContent = await apiService.fetchEmailContent([message.id], message.list);
|
|
Navigator.push(
|
|
context,
|
|
MaterialPageRoute(
|
|
builder: (context) => EmailView(
|
|
emailContent: emailContent,
|
|
from: message.from,
|
|
name: message.name,
|
|
to: message.to.toString(),
|
|
subject: message.subject,
|
|
date: message.date,
|
|
id: message.id,
|
|
),
|
|
),
|
|
);
|
|
},
|
|
);
|
|
},
|
|
separatorBuilder: (context, index) => Divider(),
|
|
);
|
|
}
|
|
}
|