Flutter 加载本地HTML
2021-04-07 本文已影响0人
一只哈哈
///获取打包后的资源文件实际路径
///如assets/files/index.html
String getAssetsPath(String path) {
if (Platform.isAndroid) {
return 'file:///android_asset/flutter_assets/' + path;
} else {
return 'file://Frameworks/App.framework/flutter_assets/' + path;
}
}
使用
image.png
android设备上已经可以正常显示本地html页面了,但是IOS设备还需要修改下插件IOS部分的源码,FlutterWebView.m文件:
image.png//判断url的加载方式
if([url hasPrefix:@"http"]) {
[_webView loadRequest:request];
}else{
// 我自己项目中传过来的路径中含有@"file://",所以需要替换为空,实际应以当前项目为主
url = [url stringByReplacingOccurrencesOfString:@"file://" withString:@""];
if (@available(iOS 9.0, *)) {
NSURL *findUrl = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/%@", [[NSBundle mainBundle] bundlePath], url]];
[_webView loadFileURL:findUrl allowingReadAccessToURL:[findUrl URLByDeletingLastPathComponent]];
} else {
// Fallback on earlier versions
NSLog(@"webview_flutter: loadFileUrl error");
}
}
android 跨域问题
image.png
FlutterWebView.java 添加代码
webView.getSettings().setAllowUniversalAccessFromFileURLs(true);
webView.getSettings().setAllowFileAccessFromFileURLs(true);