openMailApp method
Opens the default email app or shows picker if multiple apps exist
Implementation
@override
Future<OpenMailAppResult> openMailApp({EmailContent? emailContent}) async {
try {
final Map<dynamic, dynamic>? result = await methodChannel.invokeMethod(
'openMailApp',
emailContent?.toMap(),
);
if (result == null) {
return OpenMailAppResult.error('Failed to open mail app');
}
final Map<String, dynamic> resultMap = Map<String, dynamic>.from(result);
final bool didOpen = resultMap['didOpen'] as bool? ?? false;
final bool canOpen = resultMap['canOpen'] as bool? ?? false;
final List<dynamic> optionsList =
resultMap['options'] as List<dynamic>? ?? [];
final List<MailApp> options = optionsList
.cast<Map<dynamic, dynamic>>()
.map((map) => MailApp.fromMap(Map<String, dynamic>.from(map)))
.toList();
if (didOpen) {
return OpenMailAppResult.success(options: options);
} else if (canOpen && options.isNotEmpty) {
return OpenMailAppResult.multiple(options: options);
} else {
return OpenMailAppResult.noApps();
}
} on PlatformException catch (e) {
return OpenMailAppResult.error(e.message ?? 'Unknown error');
}
}