Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ListView或CustomScrollView中的颤振WebView-在Android上因高度过大而崩溃_Android_Flutter_Webview_Crash - Fatal编程技术网

ListView或CustomScrollView中的颤振WebView-在Android上因高度过大而崩溃

ListView或CustomScrollView中的颤振WebView-在Android上因高度过大而崩溃,android,flutter,webview,crash,Android,Flutter,Webview,Crash,目前,我们在ScrollView中的FlatterWebView有一个问题。我们希望在图像下方显示一个WebView,其中包含以HTML编写的文章内容,以及标题或按钮等其他内容。不可能只滚动WebView。相反,整个内容应该一起滚动 问题是,WebView应该与标题一起滚动。因此,据我所知,WebView需要一个固定的高度。通过Javascript可以获得WebView的滚动高度。这在iOS上非常好,但在Android上,当网络视图的高度太大时,应用程序就会崩溃。原因似乎是在Android系统下

目前,我们在ScrollView中的FlatterWebView有一个问题。我们希望在图像下方显示一个WebView,其中包含以HTML编写的文章内容,以及标题或按钮等其他内容。不可能只滚动WebView。相反,整个内容应该一起滚动

问题是,WebView应该与标题一起滚动。因此,据我所知,WebView需要一个固定的高度。通过Javascript可以获得WebView的滚动高度。这在iOS上非常好,但在Android上,当网络视图的高度太大时,应用程序就会崩溃。原因似乎是在Android系统下,网络视图的高度可能只有屏幕那么大。否则会出现警告消息:

创建大小为[108011303]的虚拟显示可能会导致 问题()。它更大 超过设备屏幕大小:[10801794]

是否有更好的可能性在ListView中使用WebView?我们也尝试过,但在一些文章中,我们也需要JavaScript,这是不受支持的。在大页面上,它也有点滞后

这是当前问题的一个示例应用程序。它适用于小页面,但不适用于大页面。碰撞时的高度取决于设备。例如,您可以手动将高度设置为类似13000的值:

导入“包装:颤振/材料.省道”;
导入“package:webview_flatter/webview_flatter.dart”;
void main()=>runApp(MaterialApp(home:CrashingWebViewExample());
类CrashingWebViewExample扩展StatefulWidget{
@凌驾
_CrashingWebViewExampleState createState()=>\u CrashingWebViewExampleState();
}
类\u CrashingWebViewExampleState扩展状态{
WebViewController _WebViewController;
double _webViewHeight=1;
@凌驾
小部件构建(构建上下文){
返回SingleChildScrollView(
子:列(
儿童:[
容器(高度:100,颜色:颜色。绿色),
容器(
高度:_webview高度,
孩子:网络视图(
初始URL:'https://en.wikipedia.org/wiki/Cephalopod_size',
javascriptMode:javascriptMode.unrestricted,
onPageFinished:(字符串url)=>\u onPageFinished(上下文,url),
onWebViewCreated:(控制器)异步{
_webViewController=控制器;
},
),
),
容器(高度:100,颜色:颜色。黄色),
],
),
);
}
Future _onPageFinished(构建上下文上下文,字符串url)异步{
double newHeight=double.parse(
wait_webViewController.evaluateJavascript(“document.documentElement.scrollHeight;”),
);
设置状态(){
_webViewHeight=新高度;
});
}
}
代码也可用

颤振存储库中现在也有此问题的解决方案。

此问题仍然存在:

不太完美的解决方法:

  @override
  Widget build(BuildContext context) {
    return SingleChildScrollView(
      child: Column(
        children: <Widget>[
          Container(height: 100, color: Colors.green),
          Container(
            height: 500, // or any other height
            width: MediaQuery.of(context).size.width - 150 // need to leave blank space on sides so the whole screen could be scrollable
            child: WebView(
              // this makes inside of webView scrollable
              gestureRecognizers: Set()..add(Factory<OneSequenceGestureRecognizer>(() => EagerGestureRecognizer())),
              initialUrl: 'https://en.wikipedia.org/wiki/Cephalopod_size',
              javascriptMode: JavascriptMode.unrestricted,
            ),
          ),
          Container(height: 100, color: Colors.yellow),
        ],
      ),
    );
  }
@覆盖
小部件构建(构建上下文){
返回SingleChildScrollView(
子:列(
儿童:[
容器(高度:100,颜色:颜色。绿色),
容器(
高度:500,//或任何其他高度
宽度:MediaQuery.of(context).size.width-150//需要在两侧留出空白,以便整个屏幕可以滚动
孩子:网络视图(
//这使得webView内部可以滚动
gestureRecognizers:Set()…添加(工厂(()=>WangerGestureRecognizer()),
初始URL:'https://en.wikipedia.org/wiki/Cephalopod_size',
javascriptMode:javascriptMode.unrestricted,
),
),
容器(高度:100,颜色:颜色。黄色),
],
),
);
}