android/ios-adaption feature, markdown, and augment #6
					 1 changed files with 136 additions and 45 deletions
				
			
		
							
								
								
									
										121
									
								
								lib/email.dart
									
										
									
									
									
								
							
							
						
						
									
										121
									
								
								lib/email.dart
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -3,36 +3,118 @@ 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(
 | 
			
		||||
          final email = widget.emails[index];
 | 
			
		||||
 | 
			
		||||
          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: Text(email.date.toString()),
 | 
			
		||||
              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 getEmailContent(email.messages, folder);
 | 
			
		||||
                    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(
 | 
			
		||||
| 
						 | 
				
			
			@ -49,7 +131,9 @@ class EmailListScreen extends StatelessWidget {
 | 
			
		|||
                      ),
 | 
			
		||||
                    ),
 | 
			
		||||
                  );
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
            ),
 | 
			
		||||
          );
 | 
			
		||||
        },
 | 
			
		||||
        separatorBuilder: (context, index) => Divider(),
 | 
			
		||||
| 
						 | 
				
			
			@ -76,6 +160,9 @@ class EmailPageState extends State<EmailPage> {
 | 
			
		|||
  int page = 1;
 | 
			
		||||
  bool isBackDisabled = false;
 | 
			
		||||
  
 | 
			
		||||
  final GlobalKey<_EmailListScreenState> emailListKey = GlobalKey<_EmailListScreenState>();
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  void initState() {
 | 
			
		||||
    super.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(
 | 
			
		||||
    return Scaffold(body: EmailListScreen(
 | 
			
		||||
      key: emailListKey,
 | 
			
		||||
      emails: emails,
 | 
			
		||||
      // getEmailContent: apiService.fetchEmailContent,
 | 
			
		||||
      getEmailContent: apiService.fetchMarkdownContent,
 | 
			
		||||
      folder: widget.selectedFolder, //try to grab from it directly
 | 
			
		||||
      ),
 | 
			
		||||
    );
 | 
			
		||||
    ));
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue