是否有可能将WebView
(webview_flutter)放在ListView
内而不指定尺寸,而是自动采用其高度。我发现的唯一可行的解决方案是通过分配WebView的高度来将其放置在Container中,但是我不想分配任何高度,我只是希望它根据其内容占据高度。
为此,我尝试了许多解决方案,包括Expanded
,但遇到有关无限高度的错误。有解决办法吗?
答案 0 :(得分:1)
直到现在,您仍无法达到我的期望...但是您可以在webview小部件中添加滚动条
导入这些库:
import'package:flutter / gestures.dart';
导入“ package:flutter / foundation.dart”;
将此行添加到您的webview窗口小部件中:
gestureRecognizers: Set()..add(Factory<VerticalDragGestureRecognizer>(()=>VerticalDragGestureRecognizer())),
您已完成:)
编辑 flutter_widget_from_html插件现在支持webview和iframe,您可以在web_view插件中使用它,而无需使用高度
答案 1 :(得分:1)
对不起,很晚了,但是现在可以正常工作了。
我将WebView包装到SizedBox中,并指定高度,如下所示:
_webViewController
.evaluateJavascript("document.body.clientHeight")
.then((height) {
print("Height of Page is: $height}");
setState(() {
sizedBoxHeight = double.parse(height);
});
});
对于更高级的解决方案,我们可以使用如下所示的JavascriptChannels:
javascriptChannels: Set.from([
JavascriptChannel(
name: 'RenderedWebViewHeight',
onMessageReceived: (JavascriptMessage message) {
setState(() {
sizedBoxHeight = double.parse(message.message);
});
]),
在JavaScript中,我们可以做类似的事情。
onload="RenderedWebViewHeight.postMessage(document.body.clientHeight);"
现在,我们可以看到它正在动态计算WebView的高度,该高度与WebView的高度一起包装在SizedBox中,因此我们可以将其放入ListView。
有关更详细的解决方案,请查看this。