ListView中的WebView而不分配其尺寸

时间:2019-03-21 06:00:52

标签: listview webview flutter

是否有可能将WebView(webview_flutter)放在ListView内而不指定尺寸,而是自动采用其高度。我发现的唯一可行的解​​决方案是通过分配WebView的高度来将其放置在Container中,但是我不想分配任何高度,我只是希望它根据其内容占据高度。

为此,我尝试了许多解决方案,包括Expanded,但遇到有关无限高度的错误。有解决办法吗?

2 个答案:

答案 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