- 目前項目中使用webview_flutter0.3.9,安卓端加載本地html沒有問題,ios端無法加載本地html,查看源碼發現沒有做適配,解決辦法修改插件中ios端源碼
打開ios>Classes下的FlutterWebView.m,大概281行代碼修改成
- (bool)loadUrl:(NSString*)url withHeaders:(NSDictionary<NSString*, NSString*>*)headers {
NSURL* nsUrl = [NSURL URLWithString:url];
if (!nsUrl) {
return false;
}
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:nsUrl];
[request setAllHTTPHeaderFields:headers];
//判斷是url,然后使用不同的加載方式
if([url hasPrefix:@"http"]) {
[_webView loadRequest:request];
}else{
[_webView loadFileURL:nsUrl allowingReadAccessToURL:[nsUrl URLByDeletingLastPathComponent]];
}
return true;
}
修改后使用
WebView(
//加載本地文件使用file://開頭,網絡的正常使用
initialUrl: "file://xxxx/xxx/xxx/html",
javascriptMode: JavascriptMode.unrestricted,
onPageFinished: (url) {},
onWebViewCreated: (WebViewController controller) {},
)
- 如果url中有空格ios是加載不出來的,需要轉義后在使用:
//Uri.encodeFull()會把空格轉義成%20%,轉義后安卓和ios都能使用
WebView( initialUrl: Uri.encodeFull(url))
- 目前android端使用webview_flutter鍵盤無法呼起還是無解,實在需要可以使用flutter_webview_plugin,他的局限是無法很好的嵌入頁面中。