Flutter WebView加载本地html的问题

  • 目前项目中使用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,他的局限是无法很好的嵌入页面中。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容