1
0
Fork 0

Add mailbox Select

This commit is contained in:
Florian RICHER (MrDev023) 2022-04-26 21:28:49 +02:00
parent ef3379f1d9
commit 8372769fbb
3 changed files with 76 additions and 6 deletions

View file

@ -4,7 +4,9 @@ import 'dart:math';
import 'package:desktopapp/classes/stream_element.dart';
import 'package:desktopapp/utils/logger.dart';
import 'package:desktopapp/utils/requests.dart';
import 'package:desktopapp/widgets/popups/mailbox_select.dart';
import 'package:enough_mail/enough_mail.dart';
import 'package:flutter/cupertino.dart';
class Mailer {
static final List<String> customMessages = [
@ -17,6 +19,7 @@ class Mailer {
/// High level mail API example
static Future<bool> connect({
required BuildContext context,
required String email,
required String password,
required StreamController<StreamElement> streamController,
@ -37,9 +40,11 @@ class Mailer {
Logger.log(LoggerType.info, Mailer, 'Connected to $email');
streamController
.add(StreamElement(StreamElementType.log, 'Connected to $email'));
await _mailClient!.selectInbox();
streamController.add(
StreamElement(StreamElementType.log, 'INBOX selected for $email'));
var mailboxes = await _mailClient!.listMailboxes();
var mailbox = await MailBoxSelect.show(context, mailboxes: mailboxes);
await _mailClient!.selectMailbox(mailbox!);
streamController.add(StreamElement(
StreamElementType.log, '${mailbox.name} selected for $email'));
List<String> whitelist = [email, ...whiteListEmail];
streamController.add(StreamElement(
StreamElementType.log, 'Listen for emails: ${whitelist.join(', ')}'));
@ -49,9 +54,9 @@ class Mailer {
await _mailClient!.startPolling(const Duration(seconds: 1));
_startDebugProfiler(streamController);
return true;
} on MailException catch (e) {
streamController.add(StreamElement(StreamElementType.log, e.toString()));
Logger.log(LoggerType.error, Mailer, 'High level API failed with $e');
} catch (e) {
streamController
.add(StreamElement(StreamElementType.error, e.toString()));
return false;
}
}

View file

@ -22,6 +22,8 @@ class _HomePageState extends State<HomePage> {
final StreamController<StreamElement> controller =
StreamController<StreamElement>();
final ScrollController _scrollController = ScrollController();
Widget buildContent(BuildContext context, SharedPreferences prefs) {
return Column(children: [
if (!connected)
@ -30,6 +32,7 @@ class _HomePageState extends State<HomePage> {
prefs: prefs,
onValid: (String email, String password) async {
var value = await Mailer.connect(
context: context,
email: email,
password: password,
streamController: controller);
@ -75,7 +78,10 @@ class _HomePageState extends State<HomePage> {
}
return ListView.builder(
itemCount: streamElements.length,
controller: _scrollController,
itemBuilder: (BuildContext context, int index) {
_scrollController
.jumpTo(_scrollController.position.maxScrollExtent);
return StreamElementCard(
streamElement: streamElements[index]);
},

View file

@ -0,0 +1,59 @@
import 'package:flutter/material.dart';
import 'package:enough_mail/enough_mail.dart';
class MailBoxSelect extends StatefulWidget {
static Future<Mailbox?> show(BuildContext context,
{required List<Mailbox> mailboxes}) async {
return await showDialog<Mailbox>(
context: context,
builder: (context) => MailBoxSelect(mailBoxes: mailboxes),
);
}
const MailBoxSelect({Key? key, required this.mailBoxes}) : super(key: key);
final List<Mailbox> mailBoxes;
@override
_MailBoxSelectState createState() => _MailBoxSelectState();
}
class _MailBoxSelectState extends State<MailBoxSelect> {
Mailbox? _selectedMailbox;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Boîte de réception'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
DropdownButton<Mailbox>(
value: _selectedMailbox,
items: widget.mailBoxes.map((Mailbox mailBox) {
return DropdownMenuItem<Mailbox>(
value: mailBox,
child: Text(mailBox.name),
);
}).toList(),
onChanged: (Mailbox? value) {
if (value != null) {
setState(() => _selectedMailbox = value);
}
}),
TextButton(
onPressed: _selectedMailbox == null
? null
: () {
Navigator.pop(context, _selectedMailbox!);
},
child: const Text('Valider'))
],
),
),
);
}
}