select emails in bulk and each, select all and unselect
This commit is contained in:
parent
71707bd1c0
commit
5d4854901e
181
lib/email.dart
181
lib/email.dart
@ -3,53 +3,137 @@ import 'api_service.dart';
|
||||
import 'structs.dart';
|
||||
import 'emailView.dart';
|
||||
|
||||
class EmailListScreen extends StatelessWidget {
|
||||
class EmailListScreen extends StatefulWidget {
|
||||
final List<GetThreadResponse> emails;
|
||||
final Future<List<String>> Function(List<String>, String) getEmailContent;
|
||||
final String folder;
|
||||
final GlobalKey<_EmailListScreenState> key;
|
||||
|
||||
EmailListScreen(
|
||||
{required this.emails,
|
||||
EmailListScreen({
|
||||
required this.key,
|
||||
required this.emails,
|
||||
required this.getEmailContent,
|
||||
required this.folder});
|
||||
//fix the email list
|
||||
required this.folder})
|
||||
: super(key: key);
|
||||
|
||||
@override
|
||||
_EmailListScreenState createState() => _EmailListScreenState();
|
||||
}
|
||||
|
||||
class _EmailListScreenState extends State<EmailListScreen> {
|
||||
late List<bool> selectStates; // for checkboxes if its selected or not
|
||||
late List<GetThreadResponse> selectedEmails =
|
||||
[]; // holds the emails that are selected i.e. the emails that got the checkbox on
|
||||
final Set<int> _hoveredRows = {}; //the row that is being hovered over atm
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
selectStates = List<bool>.filled(widget.emails.length, false);
|
||||
}
|
||||
|
||||
@override
|
||||
void didUpdateWidget(covariant EmailListScreen oldWidget) {
|
||||
super.didUpdateWidget(oldWidget);
|
||||
if (oldWidget.emails.length != widget.emails.length) {
|
||||
selectStates = List<bool>.filled(widget.emails.length, false);
|
||||
}
|
||||
}
|
||||
|
||||
bool selectAllChecks(bool selectionType) {
|
||||
setState(() {
|
||||
for (int email = 0; email < selectStates.length; email++) {
|
||||
selectStates[email] = selectionType;
|
||||
}
|
||||
});
|
||||
printTheSelected();
|
||||
return false;
|
||||
}
|
||||
|
||||
void printTheSelected() {
|
||||
for (int i = 0; i < selectedEmails.length; i++) {
|
||||
print(selectedEmails);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
body: ListView.separated(
|
||||
itemCount: emails.length,
|
||||
itemCount: widget.emails.length,
|
||||
itemBuilder: (context, index) {
|
||||
final email = emails[index];
|
||||
return ListTile(
|
||||
title: Text(email.from_name,
|
||||
style: TextStyle(fontWeight: FontWeight.bold)),
|
||||
subtitle: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [Text(email.subject)],
|
||||
),
|
||||
trailing: Text(email.date.toString()),
|
||||
onTap: () async {
|
||||
List<String> emailContent = // list of the html
|
||||
await getEmailContent(email.messages, folder);
|
||||
final email = widget.emails[index];
|
||||
|
||||
print(email.messages); //email ids of the thread
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
// could call collapsable and inside collable each calls email view?
|
||||
builder: (context) => EmailView(
|
||||
emailContent: emailContent,
|
||||
from: email.from_address,
|
||||
name: email.from_name,
|
||||
to: email.to.toString(),
|
||||
subject: email.subject,
|
||||
date: email.date.toString(),
|
||||
id: email.id.toString(), //i think this is thread id?
|
||||
messages: email.messages,
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
return MouseRegion(
|
||||
onEnter: (_) => setState(() => _hoveredRows.add(index)),
|
||||
onExit: (_) => setState(() => _hoveredRows.remove(index)),
|
||||
child: ListTile(
|
||||
leading: Checkbox(
|
||||
value: selectStates[index],
|
||||
onChanged: (bool? value) {
|
||||
setState(() {
|
||||
//works great
|
||||
selectStates[index] = value ?? false;
|
||||
if (value!) {
|
||||
selectedEmails.add(widget.emails[index]);
|
||||
} else {
|
||||
selectedEmails.remove(widget.emails[index]);
|
||||
}
|
||||
});
|
||||
},
|
||||
),
|
||||
title: Text(email.from_name,
|
||||
style: TextStyle(fontWeight: FontWeight.bold)),
|
||||
subtitle: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [Text(email.subject)],
|
||||
),
|
||||
trailing: _hoveredRows.contains(index)
|
||||
? Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
IconButton(
|
||||
icon: Icon(Icons.mark_email_read_outlined),
|
||||
onPressed: () {
|
||||
//mark email as read
|
||||
},
|
||||
),
|
||||
IconButton(
|
||||
icon: Icon(Icons.delete_outline),
|
||||
onPressed: () {
|
||||
//delete email
|
||||
},
|
||||
),
|
||||
],
|
||||
)
|
||||
: Text(email.date.toString()),
|
||||
onTap: () async {
|
||||
List<String> emailContent = // list of the html
|
||||
await widget.getEmailContent(email.messages, widget.folder);
|
||||
|
||||
print(email.messages); //email ids of the thread
|
||||
if (widget.folder == "Drafts") {
|
||||
print("IN DRAFTS MOVE THE CONTENT TO THE WRITING THING");
|
||||
} else {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
// could call collapsable and inside collable each calls email view?
|
||||
builder: (context) => EmailView(
|
||||
emailContent: emailContent,
|
||||
from: email.from_address,
|
||||
name: email.from_name,
|
||||
to: email.to.toString(),
|
||||
subject: email.subject,
|
||||
date: email.date.toString(),
|
||||
id: email.id.toString(), //i think this is thread id?
|
||||
messages: email.messages,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
},
|
||||
),
|
||||
);
|
||||
},
|
||||
separatorBuilder: (context, index) => Divider(),
|
||||
@ -75,6 +159,9 @@ class EmailPageState extends State<EmailPage> {
|
||||
ValueNotifier<int> currentPageNotifier = ValueNotifier<int>(1);
|
||||
int page = 1;
|
||||
bool isBackDisabled = false;
|
||||
|
||||
final GlobalKey<_EmailListScreenState> emailListKey = GlobalKey<_EmailListScreenState>();
|
||||
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
@ -84,6 +171,7 @@ class EmailPageState extends State<EmailPage> {
|
||||
_fetchEmails();
|
||||
}
|
||||
|
||||
List<GetThreadResponse> get getEmails => emails;
|
||||
String getPage() => widget.page.toString();
|
||||
bool get backDisabled => isBackDisabled;
|
||||
|
||||
@ -114,7 +202,6 @@ class EmailPageState extends State<EmailPage> {
|
||||
}
|
||||
});
|
||||
}
|
||||
// print(currentPage);
|
||||
print(widget.page);
|
||||
_fetchEmails();
|
||||
}
|
||||
@ -133,15 +220,19 @@ class EmailPageState extends State<EmailPage> {
|
||||
}
|
||||
}
|
||||
|
||||
bool selectAllEmails(bool selectionType) {
|
||||
emailListKey.currentState?.selectAllChecks(selectionType);
|
||||
return false;
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
body: EmailListScreen(
|
||||
emails: emails,
|
||||
// getEmailContent: apiService.fetchEmailContent,
|
||||
getEmailContent: apiService.fetchMarkdownContent,
|
||||
folder: widget.selectedFolder, //try to grab from it directly
|
||||
),
|
||||
);
|
||||
return Scaffold(body: EmailListScreen(
|
||||
key: emailListKey,
|
||||
emails: emails,
|
||||
// getEmailContent: apiService.fetchEmailContent,
|
||||
getEmailContent: apiService.fetchMarkdownContent,
|
||||
folder: widget.selectedFolder, //try to grab from it directly
|
||||
));
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user