我遇到了完全相同的问题,并且花了我很多钱才解决它。
Akif,即使在你提出问题5个月后,我也会发布解决方案,因为我相信它仍然会帮助很多人。
下面的解决方案是使用 STANDART FLUTTER WEBVIEW 并使用 URL LAUNCHER。
Add the url_launcher
and webview_flutter
到你的文件pubspec.yaml
dependencies:
flutter:
sdk: flutter
webview_flutter: ^1.0.5
url_launcher: ^5.7.10
现在在您的网络视图中它需要包含navigationDelegate
见下文...
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Title Your App',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
body: Container(
child: WebView(
initialUrl: 'https://website.com',
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (WebViewController webViewController) {
_controller.complete(webViewController);
},
navigationDelegate: (NavigationRequest request) {
if (request.url.startsWith("https://website.com")) {
return NavigationDecision.navigate;
} else {
_launchURL(request.url);
return NavigationDecision.prevent;
}
},
),
)));
}
_launchURL(String url) async {
if (await canLaunch(url)) {
await launch(url);
} else {
throw 'Could not launch $url';
}
}
}
不要忘记您需要添加 URL LAUNCHER 依赖项。
import 'package:url_launcher/url_launcher.dart';
解释:
此代码使 Web 视图中发出的每个请求都通过以下测试:
- 如果请求地址以您的 webview 的起始地址开头,它通常会在 webview 内执行。
- 如果请求地址与您的网络视图的初始地址不同,它会向手机的默认浏览器启动该请求。
我希望它仍然可以帮助您,或者从现在开始可以帮助需要它的人。
Hugs.