子项的弯曲度不为零,但传入的高度限制不受限制

时间:2019-10-16 07:39:53

标签: flutter

return Card(
  child: Row(
    children: <Widget>[
      Placeholder(
        fallbackHeight: 100,
        fallbackWidth: 100,
      ),
      Column(
        mainAxisSize: MainAxisSize.min,
        children: <Widget>[
          Container(height: 10,  child: Container(child: Text("One"),)),
          Expanded(child: Container(child:  Text("Center") )),

        ],
      )
    ],
  ),
);

在上面的代码中,我得到了错误:

  

I / flutter(4872):在performLayout()期间引发了以下断言:   I / flutter(4872):RenderFlex子级的flex为非零值,但传入的高度限制是无界的。   I / flutter(4872):当列位于不提供有限高度限制的父项中时,例如   I / flutter(4872):在垂直滚动条中,它将尝试沿垂直轴收缩包装其子级。设置一个   I / flutter(4872):在子项上弯曲(例如,使用Expanded)表示该子项将扩展以填充剩余部分   I / flutter(4872):垂直方向上的空间。

整个代码:

class FilmItems extends StatelessWidget {
  List<String> filmListList;

  List<String> _getFilmList() {
    var items = List<String>.generate(101, (counter) => "item $counter");
    return items;
  }

  FilmItems() {
    filmListList = _getFilmList();
  }

  @override
  Widget build(BuildContext context) {
    return ListView.builder(
        itemCount: filmListList.length,
        itemBuilder: (BuildContext context, int index) {
          return Card(
            child: Row(
              children: <Widget>[
                Placeholder(
                  fallbackHeight: 100,
                  fallbackWidth: 100,
                ),
                Column(
                  mainAxisSize: MainAxisSize.min,
                  children: <Widget>[
                    Container(height: 10,  child: Container(child: Text("One"),)),
                    Expanded(child: Container(child:  Text("Center") )),

                  ],
                )
              ],
            ),
          );
        });
  }
}

怎么了?

2 个答案:

答案 0 :(得分:0)

问题是您正在使用Expanded,并且其任何父母的身高都很高。

解决方案取决于您要如何处理Expanded的高度。在您的情况下,似乎您想拥有一个Row且高度固定为Placeholder的{​​{1}}。在这种情况下,您需要用与Row相同的高度包装Placeholder,如下所示:

@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(title: Text("")),
    body: ListView.builder(
        itemCount: 3,
        itemBuilder: (BuildContext context, int index) {
          return Card(
            child: SizedBox(
              height: 100,
              child: Row(
                children: <Widget>[
                  Placeholder(
                    fallbackHeight: 100,
                    fallbackWidth: 100,
                  ),
                  Column(
                    mainAxisSize: MainAxisSize.min,
                    children: <Widget>[
                      Text("One"),
                      Expanded(child: Center(child: Text("Center"))),
                    ],
                  ),
                ],
              ),
            ),
          );
        }),
  );
}

我删除了10的高度Text("One"),因为如果fontSize较大,则文本看起来会被裁剪。我用Text("Center")小部件包裹了Center,我想这就是您想要实现的目标。

建议:如果Row内的内容的高度可能比Row高,则该内容看起来会被裁剪。如果发生这种情况,您可能要采取另一种方法。

答案 1 :(得分:-1)

在使用“列”小部件时,其父级应具有有限的高度。因此,在您的代码中,父级是一行,并且其高度也不是有限的。您需要用容器包装Column并指定一个有限的高度。

Container(
     height: 500,
     child: Column()
)