got back the functionality of switching between folders
This commit is contained in:
parent
83592472d4
commit
a34ca6512e
@ -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,
|
||||||
|
@ -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
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
@ -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),
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
@ -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(),
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
Loading…
Reference in New Issue
Block a user