gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 18:08:38 24 4
gpt4 key购买 nike

我的应用程序中有一个小链接,上面写着“给我们发电子邮件”。当您单击它时,我希望打开默认电子邮件应用程序,并开始向我们的电子邮件地址发送电子邮件。我曾经使用 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() 做?非常感谢帮助!


编辑:

在下面那个问题得到满意的回答后,我现在有一个后续问题:

在应用程序的另一部分,有一个用户可以输入链接的地方,我曾经使用 launch() 来启动它...有没有简单的方法可以做到那,还有?

因为在那种情况下,我不知道链接是 http 还是 https 还是 mailto:!... 我宁愿不必编写大量代码来找出它!我只是想让它尝试完全按照编写的方式启动链接,只要编写正确,它就会工作。

最佳答案

试试这个:

void _sendEmail(){
String? encodeQueryParameters(Map<String, String> params) {
return params.entries.map((e) =>
'${Uri.encodeComponent(e.key)}=${Uri.encodeComponent(e.value)}')
.join('&');
}

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

关于flutter - 如何将新的 launchUrl() 方法与 "mailto:"链接一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72812591/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com