扩展的小部件必须放置在 Flex 小部件中

新飘,能有人告诉我下面的代码有什么问题吗enter image description here

  class GamePage extends StatelessWidget {
int _row;
int _column;


GamePage(this._row,this._column);


@override
Widget build(BuildContext context) {
return new Material(
color: Colors.deepPurpleAccent,
child:new Expanded(
child:new GridView.count(crossAxisCount: _column,children: new List.generate(_row*_column, (index) {
return new Center(
child: new CellWidget()
);
}),) )




);
}
}

附加错误截图。

59105 次浏览

你没有一个 Flex的祖先。

一个展开的小部件必须是 Row、 Column 或 Flex 的后代,从展开的小部件到其封闭的 Row、 Column 或 Flex 的路径必须只包含 StatelessWidgets 或 StatuseWidgets (不包含其他类型的小部件,如 RenderObjectWidgets)。

我不确定在你的情况下是否需要 Expanded。但是移除它或将其包装在 Column中应该可以解决这个问题。

克拉舍

这种情况之所以会崩溃,是因为 Expated 不是 Flex 小部件的后代:

Container(
child: Expanded(
child: MyWidget(),
),
)

可以接受

这里扩展了 ,它是 Flex 的后代:

Flex(
direction: Axis.horizontal,
children: [
Expanded(
child: MyWidget(),
),
],
)

Row 也是一个 Flex 小部件:

Row(
children: [
Expanded(
child: MyWidget(),
),
],
)

专栏也是如此:

Column(
children: [
Expanded(
child: MyWidget(),
),
],
)

另一个选择就是直接去掉展开的小部件:

Container(
child: MyWidget(),
)

另一个与该错误相关的简单示例,但是使用了 Exptended 和 ConstrainedBox:

密码:

Column(
children:  [
ConstrainedBox(
child: Expanded(
child: ...
)
)
]

错误消息:

[ ... ]通常,这意味着展开的小部件具有错误的祖先 RenderObjectWidget。通常,展开的小部件直接放置在 Flex 小部件中。 当前,违规的 Expded 被放置在 ConstrainedBox 小部件中。

为什么代码不能正常工作? 在此示例中,Expded 必须将 Column 作为 direct Parent (这是兼容的父类型)。

解决办法:

Column(
children:  [
Expanded(
child: ConstrainedBox(
child: ...
)
)
]

您需要尝试使用 Flex Widget

有时候,如果在 SingleChildScrollView 小部件中有一个扩展的小部件,那么它也会显示空白屏幕。如果在 SingleChildScrollView 中有任何扩展的小部件,请删除它,它将解决这个问题。

之前

  body: SingleChildScrollView(
child: Column(
children: [
Container(),
Expanded(
child: Container(),
),
],
),
),

之后

  body: SingleChildScrollView(
child: Column(
children: [
Container(),
Container(),
],
),
),