项目场景:
最近在写一个 领淘宝优惠劵的 页面, 逻辑是 点击商品后, 在内部的WebView 显示,显示页面会自动打开scheme链接来尝试启动 淘宝app,
问题描述:
因为flutter没有自带的webView控件 ,这里使用插件来显示页面
flutter_webview_plugin: ^0.3.11
@override
Widget build(BuildContext context) {
var webViewTitle = "领券中...".obs;
FlutterWebviewPlugin()
.onStateChanged
.listen((WebViewStateChanged st) async {
String title =
await FlutterWebviewPlugin().evalJavascript("window.document.title");
title = title.replaceAll("\"", "");
if (!(title == "")) {
webViewTitle.value = title;
}
});
var url = Get.arguments; // 获取传递过来的 淘宝 coupon_share_url 链接
return WebviewScaffold(
url: url,
withZoom: true,
withJavascript: true,
userAgent:
"Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1",
appBar: AppBar(
title: Obx(() => Text(webViewTitle.value)),
),
);
}
使用后页面显示正常, 但是却不能正常打开scheme , 出现 网页无法打开 位于 tbopen://m.taobao.com … ,这样的问题
解决方案:
引入 url_launcher
url_launcher: ^6.0.3
FlutterWebviewPlugin().onUrlChanged.listen((String url) async {
if (!(url.startsWith("http:") || url.startsWith("https:"))) {
await FlutterWebviewPlugin().stopLoading();
await FlutterWebviewPlugin().goBack();
await launch(url); //use url launcher plugin
}
});
添加WebView url改变事件,判断 是否是 scheme 链接后, 调用 url_launcher 打开