私ははためくのは初めてです。グリッドビューを中央に配置するだけです。
以下は私が試したコードです:
@override
Widget build(BuildContext context) {
return new Material(
color: Colors.deepPurpleAccent,
child: new Column(
mainAxisAlignment: MainAxisAlignment.center,
children:<Widget>[new GridView.count(crossAxisCount: _column,children: new List.generate(_row*_column, (index) {
return new Center(
child: new CellWidget()
);
}),)]
)
);
}
次の例外:
I/flutter ( 9925): ══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
I/flutter ( 9925): The following assertion was thrown during performResize():
I/flutter ( 9925): Vertical viewport was given unbounded height.
I/flutter ( 9925): Viewports expand in the scrolling direction to fill their container.In this case, a vertical
I/flutter ( 9925): viewport was given an unlimited amount of vertical space in which to expand. This situation
I/flutter ( 9925): typically happens when a scrollable widget is nested inside another scrollable widget.
I/flutter ( 9925): If this widget is always nested in a scrollable widget there is no need to use a viewport because
I/flutter ( 9925): there will always be enough vertical space for the children. In this case, consider using a Column
I/flutter ( 9925): instead. Otherwise, consider using the "shrinkWrap" property (or a ShrinkWrappingViewport) to size
I/flutter ( 9925): the height of the viewport to the sum of the heights of its children.
I/flutter ( 9925):
I/flutter ( 9925): When the exception was thrown, this was the stack:
I/flutter ( 9925): #0 RenderViewport.performResize.<anonymous closure> (package:flutter/src/rendering/viewport.Dart:827:15)
I/flutter ( 9925): #1 RenderViewport.performResize (package:flutter/src/rendering/viewport.Dart:880:6)
I/flutter ( 9925): #2 RenderObject.layout (package:flutter/src/rendering/object.Dart:1555:9)
前もって感謝します!
この2行を追加
ListView.builder(
scrollDirection: Axis.vertical,
shrinkWrap: true,
...
flexibleまたはExpandedウィジェット内にグリッドビューを配置する
return new Material(
color: Colors.deepPurpleAccent,
child: new Column(
mainAxisAlignment: MainAxisAlignment.center,
children:<Widget>[
Flexible(
child: GridView.count(crossAxisCount: _column,children: new List.generate(_row*_column, (index) {
return new Center(
child: new CellWidget(),
);
}),))]
)
);
これは通常、ListView
内でGridView
/Column
を使用しようとしたときに発生します。それを解決する方法はたくさんあります。
ListView
をExpanded
で囲む
Column(
children: <Widget>[
Expanded( // wrap in Expanded
child: ListView(...),
),
],
)
ListView
をSizedBox
でラップし、バウンドheight
を指定します
Column(
children: <Widget>[
SizedBox(
height: 400, // fixed height
child: ListView(...),
),
],
)
ListView
でshrinkWrap: true
を使用します。
Column(
children: <Widget>[
ListView(
shrinkWrap: true, // use this
),
],
)
単一の子の配置にColumn
を使用しないでください。代わりにAlign
を使用してください。
new Align(
alignment: Alignment.topCenter,
child: new GridView(),
)
あなたのコラムは、どれくらいの高さがかかるかを知りません。 Flexible を使用して、主軸の利用可能なスペースを拡張および充填する柔軟性を持つようにColumnをラップします。
@override
Widget build(BuildContext context) {
return new Material(
color: Colors.deepPurpleAccent,
child: Flexible(
child: new Column(
mainAxisAlignment: MainAxisAlignment.center,
children:<Widget>[new GridView.count(crossAxisCount: _column,children: new List.generate(_row*_column, (index) {
return new Center(
child: new CellWidget()
);
}),)]
)
)
);
}