Flutter WebView加载本地html的问题

  • 目前项目中使用webview_flutter0.3.9,安卓端加载本地html没有问题,ios端无法加载本地html,查看源码发现没有做适配,解决办法修改插件中ios端源码
    打开ios>Classes下的FlutterWebView.m,大概281行代码修改成
- (bool)loadUrl:(NSString*)url withHeaders:(NSDictionary*)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,他的局限是无法很好的嵌入页面中。

你可能感兴趣的:(Flutter WebView加载本地html的问题)