[英]how to open a url with url_launcher and onTap of InkWell only once?
如果我触摸它一次,它会打印出 1 行 123
如果我多次触摸它,它会打印出很多行 123
那么当我多次触摸它时它会打印出 1 行 123 或退出 _launchUrl
当我多次触摸它时,我也不得不回到那个次数以摆脱 _launchUrl
我的代码在这里 希望得到大家的帮助!
final Uri _url = Uri.parse('https://flutter.dev');
....
Future<void> _launchUrl() async {
if (!await launchUrl(_url)) {
throw 'Could not launch $_url';
}
}
...
InkWell(
onTap: () {
_launchUrl;
print('123');
}
)
我尝试使用等待功能,但仍然没有得到想要的结果
创建一个变量 buttonPressed 并将其默认设置为 false
bool buttonPressed = false;
在您的 onTap 中,您可以检查 buttonPressed 是否设置为 false。 如果它设置为 false,您可以将其设置为 true 并运行您的 _launchUrl 函数。 调用 _launchUrl 后,您可以将其设置回 false 以再次运行它。
if(buttonPressed == false){
buttonPressed = true;
await _launchUrl();
buttonPressed = false;
}
同时将您的 onTap 标记为异步以使用 await 关键字
onTap: () async {
我通过以下方式修复它
Uri uri = Uri.parse('https://flutter.dev');
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => LoadURL(uri),
)
);
// Navigate to here
import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';
class LoadURL extends StatelessWidget {
late final Uri uri;
LoadURL(this.uri);
Future<void> _launchUrl(Uri uri) async {
if (!await launchUrl(uri)) {
throw 'Could not launch $uri';
}
}
@override
Widget build(BuildContext context) {
return Center(
child: FutureBuilder(
future: _launchUrl(uri),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
Navigator.pop(context);
}
return CircularProgressIndicator();;
},
),
);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.