WIP: folders actions #5

Draft
Juan wants to merge 8 commits from login into main
2 changed files with 600 additions and 576 deletions
Showing only changes of commit b5cb5b99fb - Show all commits

View File

@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'api_service.dart'; import 'api_service.dart';
import 'structs.dart'; import 'structs.dart';
@ -7,8 +8,10 @@ class EmailListScreen extends StatelessWidget {
final Future<String> Function(List<String>, String) getEmailContent; final Future<String> Function(List<String>, String) getEmailContent;
final String folder; final String folder;
EmailListScreen(
EmailListScreen({required this.emails, required this.getEmailContent, required this.folder}); {required this.emails,
required this.getEmailContent,
required this.folder});
//fix the email list //fix the email list
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -26,7 +29,8 @@ class EmailListScreen extends StatelessWidget {
), ),
trailing: Text(email.date.toString()), trailing: Text(email.date.toString()),
onTap: () async { onTap: () async {
String emailContent = await getEmailContent(email.messages, folder); String emailContent =
await getEmailContent(email.messages, folder);
Navigator.push( Navigator.push(
context, context,
MaterialPageRoute( MaterialPageRoute(
@ -64,6 +68,7 @@ class EmailPage extends StatefulWidget {
class EmailPageState extends State<EmailPage> { class EmailPageState extends State<EmailPage> {
final ApiService apiService = ApiService(); final ApiService apiService = ApiService();
List<GetThreadResponse> emails = []; List<GetThreadResponse> emails = [];
ValueNotifier<int> currentPageNotifier = ValueNotifier<int>(1);
int page = 1; int page = 1;
bool isBackDisabled = false; bool isBackDisabled = false;
@ -74,6 +79,9 @@ class EmailPageState extends State<EmailPage> {
isBackDisabled = true; isBackDisabled = true;
} }
String getPage() => widget.page.toString();
bool get backDisabled => isBackDisabled;
void updateSelectedFolder(String folder) { void updateSelectedFolder(String folder) {
setState(() { setState(() {
widget.selectedFolder = folder; widget.selectedFolder = folder;
@ -82,21 +90,22 @@ class EmailPageState extends State<EmailPage> {
_fetchEmails(); _fetchEmails();
} }
String getPage() { // String getPage() => widget.page.toString();
return widget.page.toString();
}
void updatePagenation(String option) { void updatePagenation(String option) {
if (option == "next") { if (option == "next") {
setState(() { setState(() {
widget.offset += 50; widget.offset += 50;
widget.page += 1; widget.page += 1;
currentPageNotifier.value = widget.page;
isBackDisabled = false; isBackDisabled = false;
}); });
} else if (option == "back") { } else if (option == "back") {
setState(() { setState(() {
widget.offset -= 50; widget.offset -= 50;
widget.page -= 1; widget.page -= 1;
currentPageNotifier.value = widget.page;
if (widget.page == 1) { if (widget.page == 1) {
isBackDisabled = true; isBackDisabled = true;
print("back dis"); print("back dis");
@ -104,6 +113,7 @@ class EmailPageState extends State<EmailPage> {
}); });
} }
// print(currentPage); // print(currentPage);
print(widget.page);
_fetchEmails(); _fetchEmails();
} }
@ -129,7 +139,7 @@ class EmailPageState extends State<EmailPage> {
body: EmailListScreen( body: EmailListScreen(
emails: emails, emails: emails,
getEmailContent: apiService.fetchEmailContent, getEmailContent: apiService.fetchEmailContent,
folder: widget.selectedFolder,//try to grab from it directly folder: widget.selectedFolder, //try to grab from it directly
), ),
); );
} }

View File

@ -347,7 +347,21 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
}, },
child: Icon(Icons.navigate_before), child: Icon(Icons.navigate_before),
), ),
Text(_emailPageKey.currentState?.getPage() ?? '1'), Builder(
builder: (context) {
final emailState = _emailPageKey.currentState;
if (emailState == null) {
// Schedule a rebuild once the state is available
Future.microtask(() => setState(() {}));
return Text('Loading...');
}
return ValueListenableBuilder<int>(
valueListenable: emailState.currentPageNotifier,
builder: (context, value, _) => Text('$value'),
);
},
),
ElevatedButton( ElevatedButton(
onPressed: () { onPressed: () {
_emailPageKey.currentState _emailPageKey.currentState