背景
我使用webview_flutter 3.0.0
它来呈现我正在实时创建的复杂 HTML 字符串。所以它不是从网络加载的内容。我这样做如下:
final Completer<WebViewController> _controller =
Completer<WebViewController>();
late WebViewController _con;
var finalThreadHTML;
_loadHTML() async {
finalThreadHTML = createComplexHTMLStringInRealTime();
}
_con.loadUrl(Uri.dataFromString(
setThreadHTML(
finalThreadHTML
),
mimeType: 'text/html',
encoding: Encoding.getByName('utf-8')
).toString());
}
然后在我的用户界面中
WebView(
initialUrl: '',
javascriptMode: JavascriptMode.unrestricted,
javascriptChannels: <JavascriptChannel>[
JavascriptChannel(
name: 'MessageInvoker',
onMessageReceived: (s) {
}),
].toSet(),
onWebViewCreated: (WebViewController webViewController) {
_con = webViewController;
_loadHTML();
},
onProgress: (int progress) {
print("WebView is loading (progress : $progress%)");
},
navigationDelegate: (NavigationRequest request) {
if (request.url.startsWith('https://www.youtube.com/')) {
print('blocking navigation to $request}');
return NavigationDecision.prevent;
}
print('allowing navigation to $request');
return NavigationDecision.navigate;
},
onPageStarted: (String url) {
print('Page started loading: $url');
},
onPageFinished: (String url) {
print('Page finished loading: $url');
},
gestureNavigationEnabled: true,
)
我的实时 HTML 字符串(createComplexHTMLStringInRealTime())看起来像这样:
String createComplexHTMLStringInRealTime(){
return ('''
<html>
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
</head>
<body style="height:100vh;">
Testing some stuff
<img src="/images/blankAvatar.jpg" />
Testing more stuff
</body>
</html>
''');
}
我的问题
在我形成的 HTML 字符串中,我想包含一些图像,它们是 pubspec.yaml 中定义的本地资产文件
所以我试着这样做:
<img src="/images/blankAvatar.jpg" />
但这没有加载任何东西,然后我尝试了
<img src="file:///images/blankAvatar.jpg" />
依然没有。
无论如何要加载与我生成的文本内联的本地文件以将本地文件加载到 webview 中?