Flutter Web:底部溢出问题

Posted

技术标签:

【中文标题】Flutter Web:底部溢出问题【英文标题】:Flutter Web: Overflow issue in bottom 【发布时间】:2020-09-08 02:01:51 【问题描述】:

代码:基本上我有一个简单的应用程序,三个图像对齐。我有 1 列和 2 行。第一行有两个图像,第二行有一个对齐的图像。它的应用程序的结构。当在设备中的代码下方运行时,它只是完美对齐,但是当我在 WEB 上运行时,就会出现这种溢出。我尝试调整浏览器窗口的大小,然后它又开始变得漂亮了。 Flutter Web 是否有解决方法,请问我应该如何在这里进行对齐?下面的代码在主体内部和脚手架内部。我从没有问题的设备和有溢出问题的 Flutter web 附加图片。

return Column(
  mainAxisAlignment: MainAxisAlignment.center,
  //crossAxisAlignment: CrossAxisAlignment.stretch,
  children: <Widget>[
    Row(
      children: <Widget>[
        Expanded(
          child: FlatButton(
            child: Image.asset('images/image1.png'),
          ),
        ),
        Expanded(
          child: FlatButton(

            child: Image.asset('images/image1.png'),
          ),
        ),
      ],
    ),
    Row(
      children: <Widget>[
        Expanded(
          child: Image.asset('images/image1.png'),
        ),
      ],
    ),
  ],
);

错误:

══╡ 渲染库发现异常 ╞═════════════════════════════════════════════════ ════════ 在布局期间引发了以下断言:A RenderFlex 溢出 底部 1238 像素。

相关的导致错误的小部件是:列 file:///C:/Users/1025632/Documents/GitHub/flutter-course/diceylips/lib/main.dart:43:12

溢出的 RenderFlex 的方向为 Axis.vertical。这 溢出的 RenderFlex 边缘已在 用黄色和黑色条纹图案渲染。这通常是 由于内容对于 RenderFlex 来说太大。考虑 应用弹性因子(例如,使用 Expanded 小部件)来强制 RenderFlex 的子代以适应可用空间 的大小到他们的自然大小。这被认为是一个错误 条件,因为它表明有内容不能 见过。如果内容合法地大于可用空间, 考虑在将其放入 flex,或者使用可滚动容器而不是 Flex,例如 列表显示。有问题的具体 RenderFlex 是:RenderFlex#1ad1e relayoutBoundary=up1 OVERFLOWING: creator: Column ← DicePage ← _BodyBuilder ← MediaQuery ← LayoutId-[<_scaffoldslot.body>] ← CustomMultiChildLayout ← AnimatedBuilder ← DefaultTextStyle ← AnimatedDefaultTextStyle ← _InkFeatures-[GlobalKey#cb60e 墨迹渲染器] ← NotificationListener ← PhysicalModel ← ⋯ parentData: offset=Offset(0.0, 56.0); id=_ScaffoldSlot.body(可以使用大小)约束: BoxConstraints(0.0

方向:垂直 主轴对齐:中心 主轴尺寸:最大 crossAxisAlignment:中心 垂直方向:向下

设备中没有问题的图像 Image with overflow issue in chrome

【问题讨论】:

【参考方案1】:

用一个指定高度和宽度的大小盒子或容器包裹列

SizedBox(
height:200,
width:200,
child: your column goes here,
)


【讨论】:

试过了,这只在一定程度上有所帮助。整个内容现在被挤压到左边,web 中的应用程序在右边都是空的。我可能需要进一步检查对齐属性以使内容居中.. 在中心内进一步添加了尺寸框,可能最接近我想要的。希望有更好的方法。现在将此标记为答案【参考方案2】:

在容器内添加以下代码

Container(

         width: MediaQuery.of(context).size.width,
         height: MediaQuery.of(context).size.height,
....
....
)

这是定义容器全宽和全高的通用方法

【讨论】:

我尝试包装在容器中并添加了建议的代码。它只是同样的问题。底部溢出 1268px【参考方案3】:

如果您不尝试将小部件放入屏幕并且滚动是您的选择,您可以使用 listview 或类似的小部件。

ListView(
     children: <Widget>[
              Column(

否则,使用 MediaQuery.of(context).size.width 和 MediaQuery.of(context).size.height 包装 Container 将起作用,但这里只有一个问题,如果您使用 appbar,此高度应为“MediaQuery .of(context).size.height - AppBar().preferredSize.height"

【讨论】:

以上是关于Flutter Web:底部溢出问题的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 中的底部被无限像素溢出

Flutter SliverPersistentHeader 导致“滚动时底部溢出”

Flutter TextField在键盘上溢出底部

如何在 Flutter 中删除父 ListView 之外的 InkWell 悬停颜色溢出?

Flutter for Web:Android Chrome 底部的文本被截断

带有 url 更新和超链接支持的 Flutter web 底部导航栏