- 目前项目中使用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,他的局限是无法很好的嵌入页面中。