openMailApp method

  1. @override
Future<OpenMailAppResult> openMailApp({
  1. EmailContent? emailContent,
})
override

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');
  }
}