前言:android
Flutter項目須要使用WebView來加載網頁,在這裏我使用的是flutter_inappbrowser插件在APP內部加載網頁的。下面我簡單總結一下在Flutter中如何使用WebView,主要包括WebView的實現,WebView的超連接用系統瀏覽器打開網頁和WebView的超連接沒法加載網頁的異常處理。web
實現的步驟:瀏覽器
1.在pubspec.yaml添加sdkapp
dependencies: ... cupertino_icons: ^0.1.0 flutter_inappbrowser: ^1.1.1 url_launcher: ^4.0.1+1
2.WebView的實現框架
import 'package:flutter_inappbrowser/flutter_inappbrowser.dart'; class CommonWebViewPageState extends State<CommonWebViewPage> { InAppWebViewController webView; String url = url; //url的連接 @override Widget build(BuildContext context) { return new Scaffold( appBar: new AppBar( title: new Text("標題」)), body: new InAppWebView( initialUrl: url, onWebViewCreated: (InAppWebViewController controller) { webView = controller; }, onLoadStart: (InAppWebViewController controller, String url) { setState(() { this.url = url; }); }, ), ); } }
3.WebView的超連接用系統瀏覽器打開網頁ide
import 'package:flutter_inappbrowser/flutter_inappbrowser.dart'; import 'package:url_launcher/url_launcher.dart'; class CommonWebViewPageState extends State<CommonWebViewPage> { InAppWebViewController webView; String url = url; //url的連接 @override Widget build(BuildContext context) { return new Scaffold( appBar: new AppBar( title: new Text("標題」)), body: InAppWebView( initialUrl: url, initialOptions: { "useShouldOverrideUrlLoading": true, //設置useShouldOverrideUrlLoading爲true,不然無效 }, onWebViewCreated: (InAppWebViewController controller) { webView = controller; }, onLoadStart: (InAppWebViewController controller, String url) { setState(() { this.url = url; }); }, shouldOverrideUrlLoading: (InAppWebViewController controller, String url) { if (url.contains("android_asset")) { return false;//用webview打開 } launch(url); return true; //用瀏覽器打開 } ) ); } }
4.WebView的超連接沒法加載網頁的異常處理ui
4.1 在iOS 的info.plist中添加對HTTP的信任。(webview插件在iOS中沒法加載HTTP請求,雖然Flutter能夠加載HTTP請求,Flutter跟iOS的框架是有區別的,Flutter是獨立於UIKit框架的) this
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
4.2 在Android的清單文件中設置networkSecurityConfig屬性。(Android9.0以前的系統,使用過程當中並未發生異常。 可是Android9.0以後,不支持HTTP,一樣也得添加信任)url
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="項目包名"> <application android:name="io.flutter.app.FlutterApplication" android:label="項目名稱" android:icon="@mipmap/ic_launcher" android:networkSecurityConfig="@xml/network_security_config"> </application> </manifest>
4.3 在Android的資源文件夾res/xml下面建立network_security_config.xml插件
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true"> <trust-anchors> <certificates src="system" /> </trust-anchors> </base-config> </network-security-config>
5.總結
在Flutter上使用WebView來加載網頁的功能已經實現啦,歡迎你們圍觀。若是有什麼疑問的話,能夠留言聯繫我哦!