私は基本的に、グリッドが動的に生成されるゲームを作成しています。タイルを作成してリストに追加し、そのリストをchildrenパラメータの引数として使用します。私が難しいのは固定ウィジェットと組み合わせることです。Flutter - 動的に生成された要素をハードコードされた要素と組み合わせる
すべての要素の上に、テキスト要素が必要です。私が今直面する問題は、このように動的に生成されたコンテンツを割り当てた場合:
...
children: mycontent,
...
私はハードコードされたウィジェットを置くことができません。私が何を意味するのか知っていれば幸いです今まで、私はlargetリストを作成し、動的に生成された要素の上にコピーして、それを解決し、その後、私のハードコードされたウィジェットを追加しています
Widget buildTile(int counter) {
return new GestureDetector(
onTap:(){
setState((){
toggleColor(counter);
});
},
child: new Container(
color: colors[counter],
foregroundDecoration: new BoxDecoration(
border: new Border(),
),
width: 75.0,
height: 75.0,
margin: new EdgeInsets.all(2.0),
)
);
}
List<Widget> buildGrid(){
Map dimensions = {"width" : 4, "height" : 6};
List<Widget> grid = new List<Widget>(dimensions["height"]);
List<Widget> tiles = [];
int counter = 0;
for (int i = 0; i < dimensions["height"]; i++){
tiles = [];
for (int j = 0; j < dimensions["width"]; j++){
tiles.add(buildTile(counter));
counter++;
}
grid[i] = new Row(
mainAxisAlignment: MainAxisAlignment.center,
children: tiles,
);
}
return grid;
}
List<Widget> copyElements(List<Widget> from){
List<Widget> to = [];
for (int i = 0; i < from.length; i++){
to.add(from[i]);
}
return to;
}
List<Widget> buildPlayground(List<Widget> grid){
List<Widget> playground = [];
playground = copyElements(grid);
playground.add(new Padding(
padding: new EdgeInsets.all(20.0),
child: new RaisedButton(
color: Colors.purple,
child: new Container(
width: 100.0,
child: new Center(
child: new Text("Done", style: new TextStyle(fontSize: 20.0)),
),
),
onPressed:(){
}
),
));
return playground;
}
@override
build(BuildContext context){
return new Scaffold(
appBar: new AppBar(
title: new Text("Game"),
),
body: new Container(
child: new Column(
mainAxisAlignment: MainAxisAlignment.center,
children: buildPlayground(buildGrid()),
)
),
);
}
それはちょっと動作しますが、私は把握してすぐに非常に退屈です別のハードコーディングされたウィジェットを追加したいと思っています。どのように私はこの問題に対処するための任意の提案? おかげ
すべてのフラッターUIは "動的に"ビルドされます。 - buildメソッドが呼び出されるたびに、 "ゼロから" UI全体を構築します。新しいウィジェットが作成されます。したがって、「ハードコーディング」と「ダイナミック」ウィジェットを同じ方法で扱います。 –