flutter 如何将新的launchUrl()方法与“mailto:“链接一起使用?

inkz8wg9  于 2023-03-04  发布在  Flutter
关注(0)|答案(2)|浏览(162)

我的应用程序中有一个小链接,上面写着"向我们发送电子邮件"。当你点击它时,我希望打开默认的电子邮件应用程序,并向我们的电子邮件地址发送一封电子邮件。我曾经使用url_launcher包中的launch()方法使其完全做到这一点,如下所示:

import 'package:url_launcher/url_launcher.dart' as url;

Future<bool?> pressedSendUsEmail() async {
  bool? success;
  try {
    print('Pressed Send us an e-mail...');
    success = await url.launch('mailto:our.email@gmail.com');  // Works like a charm...
    print('success is $success');
  } catch (e) {
    print('Caught an error in Send us an e-mail!');
    print('e is: ${e.toString()}');
  }
  return success;
}

但是现在,我收到一个警告,说launch()被弃用了!我应该使用launchUrl()来代替。但是launchUrl()不接受String参数,它接受Uri参数...而且我不知道如何正确地编写这个Uri,以便它能做我想做的事情!我尝试了:

success = await url.launchUrl(Uri(path: 'mailto:our.email@gmail.com'));

但这会抛出一个错误,因为它无法解释":"字符。我尝试过:

success = await url.launchUrl(
    Uri.https('mailto:our.email@gmail.com', ''),
  );

这会启动链接,但在浏览器中...它不会启动一封电子邮件到预先打印的地址。我试着添加:

success = await url.launchUrl(
    Uri.https('mailto:our.email@gmail.com', ''),
    mode: url.LaunchMode.externalApplication,
  );

而这给了我一个选择,用哪个外部应用程序打开链接,但不幸的是,只有浏览器应用程序列出...而不是电子邮件应用程序!
我应该如何编写我的命令,使launchUrl()只做旧的launch()所做的事情??非常感谢帮助!
编辑:
在下面满意地回答了这个问题之后,我现在有一个后续qn:
在应用程序的另一个部分,有一个地方,用户可以输入链接,我曾经用launch()启动它...有没有一个简单的方法来做到这一点,以及?
因为在这种情况下,我不知道链接是http还是https,或者是mailto:!......我不想写太多的代码来找出答案!我只想让它尝试启动链接,只要它写得正确,它就会工作。

sdnqo3pr

sdnqo3pr1#

试试这个:

void _sendEmail(){
   final Uri emailLaunchUri = Uri(
     scheme: 'mailto',
     path: 'our.email@gmail.com',
     queryParameters: {
      'subject': 'CallOut user Profile',
      'body': widget.userModel?.username ?? ''
     },
    );
   launchUrl(emailLaunchUri);
}
iyfamqjs

iyfamqjs2#

当另一个答案已经内置到Uri中时,就不需要另一个答案的无意义的冗余子例程了!

void _sendEmail(){

  final Uri emailLaunchUri = Uri(
    scheme: 'mailto',
    path: 'our.email@gmail.com',
    queryParameters: {
       'subject': 'CallOut user Profile',
       'body': widget.userModel?.username ?? ''
      },
    );
launchUrl(emailLaunchUri);

}

相关问题