溢出框 RenderBox 未布局:RenderRepaintBoundary#7796e 需要-布局需要-油漆

Posted

技术标签:

【中文标题】溢出框 RenderBox 未布局:RenderRepaintBoundary#7796e 需要-布局需要-油漆【英文标题】:OverflowBox RenderBox was not laid out: RenderRepaintBoundary#7796e NEEDS-LAYOUT NEEDS-PAINT 【发布时间】:2022-01-19 09:37:33 【问题描述】:

我使用的是 OverflowBox,但我遇到了这个问题。

发生异常时正在处理以下 RenderObject 解雇:RenderConstrainedOverflowBox#8530c NEEDS-LAYOUT NEEDS-PAINT 需要合成位更新:需要合成创建者: 溢出框 ← _BodyBuilder ← MediaQuery ← LayoutId-[<_scaffoldslot.body>] ← CustomMultiChildLayout ← AnimatedBuilder ← DefaultTextStyle ← AnimatedDefaultTextStyle ← _InkFeatures-[GlobalKey#f1374 墨迹渲染器] ← NotificationListener ← PhysicalModel ← AnimatedPhysicalModel ← ⋯ parentData: offset=Offset(0.0, 0.0); id=_ScaffoldSlot.body(可以使用大小) 约束:BoxConstraints(0.0 minHeight: 200.0 maxHeight: 200.0 这个 RenderObject 有 以下后代(显示深度为 5): 孩子:RenderRepaintBoundary#7796e 需要 - 布局需要 - 绘制需要 - 合成 - 位更新 孩子:RenderCustomPaint#57723 需要-布局需要-绘制需要-合成-位更新 孩子:RenderRepaintBoundary#6b624 需要-布局需要-绘制需要-合成-位更新 孩子:_RenderScrollSemantics#80ff2 需要-布局需要-绘制需要-合成-位-更新 孩子:RenderPointerListener#c1da5 需要-布局需要-油漆需要-合成-位更新 ══════════════════════════════════════════════════ ══════════════════════════════════════════════════

抛出了另一个异常:RenderBox 未布局: RenderRepaintBoundary#7796e 需要-布局需要-油漆

代码是:

 Scaffold(
      body: OverflowBox(
        minWidth: double.infinity,
        child: GridView.count(
          crossAxisCount: 5,
          padding: EdgeInsetsDirectional.only(top: 2.h),
          childAspectRatio: 2,
          crossAxisSpacing: 3.w,
          mainAxisSpacing: 3.w,
          clipBehavior: Clip.none,
          children: List.generate(
            5,
            (index) => Material(
              shape: RoundedRectangleBorder(
                // side: ,
                borderRadius: BorderRadius.circular(10.0),
              ),
              color: whiteColor,
              elevation: 5,
              clipBehavior: Clip.antiAliasWithSaveLayer,
              shadowColor: shadowColor.withOpacity(0.5),
              child: Text(
                "Skill$index + 1",
                textAlign: TextAlign.center,
                // textDirection: TextDirection.,

                // textDirection: TextD,

                style: Get.textTheme.headline3!.copyWith(
                  color: faddenGreyColor,
                ),
              ),
            ),
          ),
        ),
      ),

【问题讨论】:

请查看我的更新答案 【参考方案1】:

请参考以下代码:

Scaffold(
        body: OverflowBox(
     // minWidth: double.infinity,
      child:  GridView.count(
        crossAxisCount: 5,
          padding: EdgeInsetsDirectional.only(top: 2.h),
          childAspectRatio: 2,
          crossAxisSpacing: 3.w,
          mainAxisSpacing: 3.w,
        clipBehavior: Clip.none,
        children: List.generate(
          5,
          (index) => Material(
            shape: RoundedRectangleBorder(
              // side: ,
              borderRadius: BorderRadius.circular(10.0),
            ),
            color:whiteColor,
            elevation: 5,
            clipBehavior: Clip.antiAliasWithSaveLayer,
          shadowColor: shadowColor.withOpacity(0.5),
            child: Text(
              "Skill$index + 1",
              textAlign: TextAlign.center,
              // textDirection: TextDirection.,

              // textDirection: TextD,

              style: Get.textTheme.headline3!.copyWith(
                color: faddenGreyColor,
              ),
            ),
          )
        ),
      )
    ))

【讨论】:

我需要知道为什么OverflowBox 有问题@Darshini R Gowda OverflowBox 不是问题。不要给 minWidth: double.infinity,你评论这条线它工作正常。【参考方案2】:

试试下面的代码希望它对你有帮助。我认为这个问题是minWidth: double.infinity, 去掉这个并在里面添加shrinkWrap: true, GridView

参考 GridView here

创建网格列表here

参考 shrinkWrap 属性here

 OverflowBox(
      child: GridView.count(
      shrinkWrap: true,
      // physics: NeverScrollableScrollPhysics(),// if you add extra index(like 10,50,etc) then used physics
      crossAxisCount: 2,
      padding: EdgeInsetsDirectional.only(top: 2),
      childAspectRatio: 2,
      crossAxisSpacing: 3,
      mainAxisSpacing: 3,
      clipBehavior: Clip.none,
      children: List.generate(
        5,
        (index) => Material(
          shape: RoundedRectangleBorder(
            // side: ,
            borderRadius: BorderRadius.circular(10.0),
          ),
          elevation: 5,
          clipBehavior: Clip.antiAliasWithSaveLayer,
          child: Center(
               child: Text(
               "Skill$index + 1",
               textAlign: TextAlign.center,
             ),
          ),
        ),
      ),
    ),
  ),

您的结果屏幕->

【讨论】:

以上是关于溢出框 RenderBox 未布局:RenderRepaintBoundary#7796e 需要-布局需要-油漆的主要内容,如果未能解决你的问题,请参考以下文章

错误:未布置 RenderBox,断言失败:第 1940 行 pos 12:'hasSize'

未放置导致 RenderBox 的卡片中的 ListTile

Flutter RenderBox 没有布局

CSS 溢出未按预期工作,无法滚动到 div 底部

尝试使用堆叠小部件构建布局

RenderBox 未布置:RenderFlex#4a60a 需要-油漆需要-合成-位-更新