get the email view when on search

This commit is contained in:
Juan Marulanda De Los Rios 2024-10-24 14:12:58 -04:00
parent 61c91b633b
commit 1db462ec8e
3 changed files with 75 additions and 69 deletions

View File

@ -15,7 +15,7 @@ class ApiService {
try { try {
var url = Uri.http('127.0.0.1:3001', 'sorted_threads_by_date', { var url = Uri.http('127.0.0.1:3001', 'sorted_threads_by_date', {
'folder': folder, 'folder': folder,
'limit': '20', 'limit': '50',
'offset': pagenitaion.toString(), 'offset': pagenitaion.toString(),
}); });
var response = await http.get(url); var response = await http.get(url);
@ -90,7 +90,7 @@ class ApiService {
// - messagesJson.map((mj) => SerializableMessage.fromJson(mj)).toList(); // - messagesJson.map((mj) => SerializableMessage.fromJson(mj)).toList();
// print("above mess"); // print("above mess");
print(messages[0].uid); // print(messages[0].uid);
return messages; return messages;
} }
} catch (e) { } catch (e) {

View File

@ -84,12 +84,12 @@ class EmailPageState extends State<EmailPage> {
void updatePagenation(String option) { void updatePagenation(String option) {
if (option == "next") { if (option == "next") {
setState(() { setState(() {
widget.offset += 20; widget.offset += 50;
widget.page += 1; widget.page += 1;
}); });
} else if (option == "back") { } else if (option == "back") {
setState(() { setState(() {
widget.offset -= 20; widget.offset -= 50;
widget.page -= 1; widget.page -= 1;
}); });
} }
@ -102,6 +102,8 @@ class EmailPageState extends State<EmailPage> {
try { try {
List<GetThreadResponse> fetchedEmails = await apiService List<GetThreadResponse> fetchedEmails = await apiService
.fetchEmailsFromFolder(widget.selectedFolder, widget.offset); .fetchEmailsFromFolder(widget.selectedFolder, widget.offset);
if (!mounted) return;
setState(() { setState(() {
emails = fetchedEmails; // Update the list of emails emails = fetchedEmails; // Update the list of emails
}); });

View File

@ -36,7 +36,8 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
setState(() { setState(() {
if (!_tabs.contains(query)) { if (!_tabs.contains(query)) {
_tabs.add(query); _tabs.add(query);
_tabWidgets[query] = _buildSearchResultsWidget(query); // Store a different widget for this tab _tabWidgets[query] = _buildSearchResultsWidget(
query); // Store a different widget for this tab
_tabController = TabController(length: _tabs.length, vsync: this); _tabController = TabController(length: _tabs.length, vsync: this);
} }
}); });
@ -72,76 +73,80 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
// ), // ),
// ); // );
return FutureBuilder<List<SerializableMessage>>( return FutureBuilder<List<SerializableMessage>>(
future: apiService.sonicSearch("INBOX", 10, 0, query), future: apiService.sonicSearch("INBOX", 10, 0, query),
builder: (BuildContext context, AsyncSnapshot<List<SerializableMessage>> snapshot) { builder: (BuildContext context,
if (snapshot.connectionState == ConnectionState.waiting) { AsyncSnapshot<List<SerializableMessage>> snapshot) {
return Center(child: CircularProgressIndicator()); if (snapshot.connectionState == ConnectionState.waiting) {
} else if (snapshot.hasError) { return Center(child: CircularProgressIndicator());
return Center(child: Text('Error: ${snapshot.error}')); } else if (snapshot.hasError) {
} else if (!snapshot.hasData || snapshot.data!.isEmpty) { return Center(child: Text('Error: ${snapshot.error}'));
return Center(child: Text('No results found for: $query')); } else if (!snapshot.hasData || snapshot.data!.isEmpty) {
} else { return Center(child: Text('No results found for: $query'));
List<SerializableMessage> result = snapshot.data!; } else {
return Scaffold( List<SerializableMessage> result = snapshot.data!;
body: ListView.separated( return Scaffold(
itemCount: result.length, body: ListView.separated(
itemBuilder: (context, index){ itemCount: result.length,
final email = result[index]; itemBuilder: (context, index) {
return ListTile( final email = result[index];
title: Text(email.from, return ListTile(
style: TextStyle(fontWeight: FontWeight.bold)), title: Text(email.from,
subtitle: Column( style: TextStyle(fontWeight: FontWeight.bold)),
crossAxisAlignment: CrossAxisAlignment.start, subtitle: Column(
children: [Text(email.subject)], crossAxisAlignment: CrossAxisAlignment.start,
), children: [Text(email.subject)],
trailing: Text(email.date.toString()),
onTap: () async {
String emailContent = await apiService.fetchEmailContent(email.id as List<String>);
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => EmailView(
emailContent: emailContent,
from: email.from,
name: email.name,
to: email.to.toString(),
subject: email.subject,
date: email.date.toString(),
id: email.id.toString(),
),
), ),
trailing: Text(email.date.toString()),
onTap: () async {
print('tapped');
String emailContent = await apiService
.fetchEmailContent([email.id]);
print('content below');
print(emailContent);
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => EmailView(
emailContent: emailContent,
from: email.from,
name: email.name,
to: email.to.toString(),
subject: email.subject,
date: email.date.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
// // SerializableEmailListScreen(emails: result, getEmailContent: getEmailContent)
// // Expanded(
// // child: // // Add more fields or customize the display
// // ), // // SerializableEmailListScreen(emails: result, getEmailContent: getEmailContent)
// // Expanded(
// // child:
// // ),
// ], // ],
); );
// ); // );
} }
}, },
); );
} }
@override @override
@ -160,7 +165,6 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
_emailPageKey.currentState?.updateSelectedFolder(folder); _emailPageKey.currentState?.updateSelectedFolder(folder);
}, },
), ),
body: Stack( body: Stack(
children: [ children: [
Row( Row(
@ -316,7 +320,7 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
controller: _tabController, controller: _tabController,
children: _tabs.map((tab) { children: _tabs.map((tab) {
return _tabWidgets[tab] ?? return _tabWidgets[tab] ??
Center(child: Text("No content found")); Center(child: Text("No content found"));
// return Center( // return Center(
// child: EmailPage( // child: EmailPage(
// key: _emailPageKey, // key: _emailPageKey,