got back the functionality of switching between folders

This commit is contained in:
Juan Marulanda De Los Rios 2024-10-21 02:09:56 -04:00
parent 83592472d4
commit a34ca6512e
4 changed files with 40 additions and 160 deletions

View File

@ -1,8 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'api_service.dart'; import 'api_service.dart';
import 'structs.dart'; import 'structs.dart';
import 'folder_drawer.dart';
class EmailListScreen extends StatelessWidget { class EmailListScreen extends StatelessWidget {
final List<GetThreadResponse> emails; final List<GetThreadResponse> emails;
@ -13,15 +11,13 @@ class EmailListScreen extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
appBar: AppBar(
title: Text('Emails'),
),
body: ListView.separated( body: ListView.separated(
itemCount: emails.length, itemCount: emails.length,
itemBuilder: (context, index) { itemBuilder: (context, index) {
final email = emails[index]; final email = emails[index];
return ListTile( return ListTile(
title: Text(email.from_name, style: TextStyle(fontWeight: FontWeight.bold)), title: Text(email.from_name,
style: TextStyle(fontWeight: FontWeight.bold)),
subtitle: Column( subtitle: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [Text(email.subject)], children: [Text(email.subject)],
@ -52,32 +48,43 @@ class EmailListScreen extends StatelessWidget {
} }
} }
class EmailPage extends StatefulWidget { class EmailPage extends StatefulWidget {
EmailPage({Key? key}) : super(key: key);
String selectedFolder = "INBOX";
@override @override
_EmailPageState createState() => _EmailPageState(); EmailPageState createState() => EmailPageState();
} }
class _EmailPageState extends State<EmailPage> { class EmailPageState extends State<EmailPage> {
final ApiService apiService = ApiService(); final ApiService apiService = ApiService();
List<GetThreadResponse> emails = []; List<GetThreadResponse> emails = [];
// Function to handle folder selection void updateSelectedFolder(String folder) {
void _onFolderSelected(String folder) async {
List<GetThreadResponse> fetchedEmails = await apiService.fetchEmailsFromFolder(folder, 0);
setState(() { setState(() {
emails = fetchedEmails; widget.selectedFolder = folder;
}); });
print(folder);
_fetchEmails();
}
void _fetchEmails() async {
// print(selectedFolder)
try {
List<GetThreadResponse> fetchedEmails =
await apiService.fetchEmailsFromFolder(widget.selectedFolder, 0);
setState(() {
emails = fetchedEmails; // Update the list of emails
});
} catch (e) {
print('Error fetching emails: $e');
}
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
_fetchEmails();
return Scaffold( return Scaffold(
appBar: AppBar(title: Text('Email Page')),
drawer: FolderDrawer(
apiService: apiService,
onFolderTap: _onFolderSelected,
),
body: EmailListScreen( body: EmailListScreen(
emails: emails, emails: emails,
getEmailContent: apiService.fetchEmailContent, getEmailContent: apiService.fetchEmailContent,

View File

@ -45,7 +45,8 @@ class _FolderDrawerState extends State<FolderDrawer> {
title: Text(folder), title: Text(folder),
onTap: () { onTap: () {
widget.onFolderTap(folder); widget.onFolderTap(folder);
Navigator.pop(context); // Close the drawer after selecting a folder Navigator.pop(
context); // Close the drawer after selecting a folder
}, },
); );
}).toList(), }).toList(),
@ -53,7 +54,7 @@ class _FolderDrawerState extends State<FolderDrawer> {
leading: Icon(Icons.refresh), leading: Icon(Icons.refresh),
title: Text('Refresh Folders'), title: Text('Refresh Folders'),
onTap: () { onTap: () {
_fetchFolders(); // Refresh folders when this tile is tapped _fetchFolders(); // Refresh folders when this tile is tapped
Navigator.pop(context); // Close the drawer after refresh Navigator.pop(context); // Close the drawer after refresh
}, },
), ),

View File

@ -1,59 +1,37 @@
// import 'package:crab_ui/email.dart';
import 'package:crab_ui/folder_drawer.dart'; import 'package:crab_ui/folder_drawer.dart';
import 'package:flutter/widgets.dart';
import 'api_service.dart'; import 'api_service.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'email.dart'; import 'email.dart';
import 'dart:html' as html;
import 'dart:ui_web' as ui;
class HomeScreen extends StatefulWidget { class HomeScreen extends StatefulWidget {
@override @override
_HomeScreenState createState() => _HomeScreenState(); _HomeScreenState createState() => _HomeScreenState();
} }
//TODO: ADD ALL THE DIFF FOLDERS TO THE SIDEBAR
class _HomeScreenState extends State<HomeScreen> { class _HomeScreenState extends State<HomeScreen> {
// final _emailPageState = EmailPageState();
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>(); final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
final GlobalKey<EmailPageState> _emailPageKey = GlobalKey<EmailPageState>();
ApiService apiService = ApiService(); ApiService apiService = ApiService();
bool _isSidebarOpen = true;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
} }
bool _isSidebarOpen = true;
// void holder() async {
// List<Widget> drawerItems = await EmailPageState.getDrawerItems(context);
// }
// Method to handle what happens when a folder is tapped
void _onFolderSelected(String folder) async {
// Fetch emails from the selected folder using the ApiService
// List fetchedEmails = await apiService.fetchEmailsFromFolder(folder);
// setState(() {
// emails = fetchedEmails; // Update the email list
// });
print(folder);
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final List<String> emails = [
'Welcome to Flutter!',
'You have new updates',
'Your order is shipped',
'Important: Security update',
'Meeting tomorrow',
];
return Scaffold( return Scaffold(
key: _scaffoldKey, key: _scaffoldKey,
drawer: FolderDrawer( drawer: FolderDrawer(
apiService: apiService, apiService: apiService,
onFolderTap: _onFolderSelected, onFolderTap: (folder) {
_emailPageKey.currentState?.updateSelectedFolder(folder);
},
), ),
body: Stack( body: Stack(
children: [ children: [
Row( Row(
@ -78,119 +56,13 @@ class _HomeScreenState extends State<HomeScreen> {
// Navigate to Settings // Navigate to Settings
}, },
), ),
// EmailPage(),
// GestureDetector(
// // onTapDown: (TapDownDetails details) {
// // _showPopupMenu(context, details.globalPosition);
// // },
// // child: Expanded(
// child: Scaffold(
// appBar: AppBar(
// // leading: Icon(Icons.email),
// // flexibleSpace: Padding(
// // padding: const EdgeInsets.only(
// // top: 40), // Adjust padding as needed
// // child: Wrap(
// // spacing: 10.0,
// // alignment: WrapAlignment.center,
// // // children: [
// // // ListTile(leading: Icon(Icons.mail),),
// // // ListTile(leading: Icon(Icons.mail),),
// // // ListTile(leading: Icon(Icons.mail),),
// // // ],
// // ),
// // ),
// // ],
// ),
// body: ListView.separated(
// itemBuilder: (context, index) {
// return ListTile(
// leading: Icon(Icons.mail),
// title: Text(emails[index]),
// );
// },
// separatorBuilder: (context, index) => Divider(),
// itemCount: 5,
// ),
// )
ListTile( ListTile(
leading: Icon(Icons.email), leading: Icon(Icons.email),
onTap: () { onTap: () {
_scaffoldKey.currentState?.openDrawer(); _scaffoldKey.currentState?.openDrawer();
}, },
), ),
// leading: SizedBox(
// width: 20,
// child: GestureDetector(
// onTapDown: (TapDownDetails details) {
// _showPopupMenu(context, details.globalPosition);
// },
// child: SizedBox(
// width: 40,
// child: Icon(Icons.email)
// ),
// ),
// ),
// ),
// trailing: SizedBox(
// width: 20,
// child: PopupMenuButton<String>(
// onSelected: (value) {
// print(value);
// print('ajdsnv');
// },
// itemBuilder: (BuildContext context) {
// return <PopupMenuEntry<String>>[
// PopupMenuItem<String>(
// value: 'Open',
// child: Text('Open'),
// )
// ];
// },
// ),
// ),
// ),
// onTap: () {
// Navigator.push(
// context,
// MaterialPageRoute(
// builder: (context) => EmailPage()),
// );
// },
// ),
// Drawer(
// child: FutureBuilder<List<Widget>>()
// future: _emailPageState.getDrawerItems(context), // call the async function to get the future
// builder: (BuildContext context,
// AsyncSnapshot<List<Widget>> snapshot) {
// if (snapshot.connectionState ==
// ConnectionState.waiting) {
// // While data is loading, show a progress indicator
// return Center(child: CircularProgressIndicator());
// } else if (snapshot.hasError) {
// // If something went wrong, show an error message
// return Center(
// child: Text('Error: ${snapshot.error}'));
// } else {
// // When data is fetched successfully, display the items
// return ListView(
// padding: EdgeInsets.zero,
// children: snapshot
// .data!, // Unwrap the data once confirmed it's there
// );
// }
// },
// )
// ),
Spacer(), Spacer(),
Padding( Padding(
padding: const EdgeInsets.all(8.0), padding: const EdgeInsets.all(8.0),
child: Align( child: Align(
@ -251,12 +123,11 @@ class _HomeScreenState extends State<HomeScreen> {
Container( Container(
child: Text('hiiiiiii'), child: Text('hiiiiiii'),
), ),
], ],
), ),
), ),
Expanded( Expanded(
child: EmailPage(selectedFolder: "INBOX",), child: EmailPage(key: _emailPageKey),
) )
], ],
), ),

View File

@ -1,8 +1,9 @@
import 'package:crab_ui/contact.dart'; import 'package:crab_ui/contact.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'home_page.dart'; import 'home_page.dart';
import 'api_service.dart'; // import 'api_service.dart';
import 'login.dart'; import 'login.dart';
import 'email.dart';
void main() { void main() {
WidgetsFlutterBinding.ensureInitialized(); WidgetsFlutterBinding.ensureInitialized();
@ -25,7 +26,7 @@ class HyM extends StatelessWidget {
routes: { routes: {
"/login": (context) => const LoginPage(), "/login": (context) => const LoginPage(),
"/email": (context) => EmailPage(), // "/email": (context) => EmailPage(),
"/contacts": (context) => ContactsPage(), "/contacts": (context) => ContactsPage(),
}, },
); );