【发布时间】:2022-01-01 21:27:59
【问题描述】:
背景
我使用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 中?
【问题讨论】:
-
你试过
flutter_inappwebview包吗? -
@GNassro 不,如果可能的话,我宁愿单独使用 webview_flutter 包