ダイアログ実装の続きをやる。
いろいろ調べてみると、AlertDialogとsimpleDialogという基本クラスがあって、自分が作ろうとしている部品はAlertDialogで作るのが適当らしいということを知る。
ていうか全然調べられてない!
他は、静的なwidgetの作成をlistViewを使わないでどうやって動的に実装するかを考えたりした。
例えば、こんな感じに静的に生成するAlertDialogのサンプルコードより
Future<void> _showMyDialog() async {
return showDialog<void>(
context: context,
barrierDismissible: false, // user must tap button!
builder: (BuildContext context) {
return AlertDialog(
title: Text('AlertDialog Title'),
content: SingleChildScrollView(
child: ListBody(
children: <Widget>[
// ここを動的にしたい
Text('This is a demo alert dialog.'),
Text('Would you like to approve of this message?'),
],
),
),
actions: <Widget>[
TextButton(
child: Text('Approve'),
onPressed: () {
Navigator.of(context).pop();
},
),
],
);
},
);
}
List<Widget>を関数で返せばいいじゃないかと思って、書いたらいけました。
List<Widget> getWordMeanWidgets() {
List<Widget> wordMeanWidgets = new List<Widget>();
wordMeans.forEach((element) {
// wordMeanWidgetはカスタムwidgetクラス
// 本来はここをDBから取得して値を入れる
wordMeanWidgets.add(wordMeanWidget(0, "name", 0));
});
return wordMeanWidgets;
}
Future<void> _showMyDialog() async {
return showDialog<void>(
context: context,
barrierDismissible: false, // user must tap button!
builder: (BuildContext context) {
return AlertDialog(
title: Text('AlertDialog Title'),
content: SingleChildScrollView(
child: ListBody(
children: <Widget>[
// 先の関数
getWordMeanWidgets()
],
),
),
actions: <Widget>[
TextButton(
child: Text('Approve'),
onPressed: () {
Navigator.of(context).pop();
},
),
],
);
},
);
}
とりあえず、これでいける。
いけてないのは、学ぶにつれて修正していけばいい!