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

View File

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

View File

@ -36,7 +36,8 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
setState(() {
if (!_tabs.contains(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);
}
});
@ -72,76 +73,80 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
// ),
// );
return FutureBuilder<List<SerializableMessage>>(
future: apiService.sonicSearch("INBOX", 10, 0, query),
builder: (BuildContext context, AsyncSnapshot<List<SerializableMessage>> snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Center(child: CircularProgressIndicator());
} else if (snapshot.hasError) {
return Center(child: Text('Error: ${snapshot.error}'));
} else if (!snapshot.hasData || snapshot.data!.isEmpty) {
return Center(child: Text('No results found for: $query'));
} else {
List<SerializableMessage> result = snapshot.data!;
return Scaffold(
body: ListView.separated(
itemCount: result.length,
itemBuilder: (context, index){
final email = result[index];
return ListTile(
title: Text(email.from,
style: TextStyle(fontWeight: FontWeight.bold)),
subtitle: Column(
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(),
),
future: apiService.sonicSearch("INBOX", 10, 0, query),
builder: (BuildContext context,
AsyncSnapshot<List<SerializableMessage>> snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Center(child: CircularProgressIndicator());
} else if (snapshot.hasError) {
return Center(child: Text('Error: ${snapshot.error}'));
} else if (!snapshot.hasData || snapshot.data!.isEmpty) {
return Center(child: Text('No results found for: $query'));
} else {
List<SerializableMessage> result = snapshot.data!;
return Scaffold(
body: ListView.separated(
itemCount: result.length,
itemBuilder: (context, index) {
final email = result[index];
return ListTile(
title: Text(email.from,
style: TextStyle(fontWeight: FontWeight.bold)),
subtitle: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [Text(email.subject)],
),
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(),
),
// child: Column(
// mainAxisAlignment: MainAxisAlignment.center,
// children: [
// Text("Results for: $query", style: TextStyle(fontSize: 24)),
// // Display the actual data
// Text(result[0].name), // Accessing the first result safely
// Text(result[0].from), // Displaying the 'from' field as an example
// Text(result[0].hash),
// Text(result[0].subject),
// Text(result[0].uid.toString()),
// Text(result[0].list),
// Text(result[0].id),
// // Add more fields or customize the display
// // SerializableEmailListScreen(emails: result, getEmailContent: getEmailContent)
// // Expanded(
// child: Column(
// mainAxisAlignment: MainAxisAlignment.center,
// children: [
// Text("Results for: $query", style: TextStyle(fontSize: 24)),
// // Display the actual data
// Text(result[0].name), // Accessing the first result safely
// Text(result[0].from), // Displaying the 'from' field as an example
// Text(result[0].hash),
// Text(result[0].subject),
// Text(result[0].uid.toString()),
// Text(result[0].list),
// Text(result[0].id),
// // child:
// // ),
// // Add more fields or customize the display
// // SerializableEmailListScreen(emails: result, getEmailContent: getEmailContent)
// // Expanded(
// // child:
// // ),
// ],
);
// );
}
},
);
// );
}
},
);
}
@override
@ -160,7 +165,6 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
_emailPageKey.currentState?.updateSelectedFolder(folder);
},
),
body: Stack(
children: [
Row(
@ -316,7 +320,7 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
controller: _tabController,
children: _tabs.map((tab) {
return _tabWidgets[tab] ??
Center(child: Text("No content found"));
Center(child: Text("No content found"));
// return Center(
// child: EmailPage(
// key: _emailPageKey,