Column
のchildren
に、List<Widget>
で定義したリストを渡すと変更が反映されません。何が原因なのか知りたいです。
例えば下記のようなコードがあるとします。
ボタンを押すと_changeText()
が呼ばれ、 _text
が変わり画面に反映されます。
dart
1class _MyHomePageState extends State<MyHomePage> { 2 String _text = 'foo'; 3 4 5 Widget build(BuildContext context) { 6 return Scaffold( 7 appBar: AppBar( 8 title: Text('title'), 9 ), 10 body: Column( 11 children: [ 12 Column( 13 children: [Text(_text)], 14 ), 15 ElevatedButton( 16 onPressed: () => _changeText(), child: Text("Change Text")) 17 ], 18 ), 19 ); 20 } 21 22 _changeText() { 23 setState(() { 24 _text = 'bar'; 25 }); 26 } 27}
しかし下記のように List<Widget>
でウィジェットを格納するリストを用意し、その中にText
を入れて同じようなことをすると、ボタンを押しても変更が反映されません。なぜでしょうか?
dart
1class _MyHomePageState extends State<MyHomePage> { 2 String _text = 'foo'; 3 List<Widget> _widgetList = []; 4 5 6 void initState() { 7 super.initState(); 8 _widgetList = [ 9 Text(_text) 10 ]; 11 } 12 13 14 Widget build(BuildContext context) { 15 return Scaffold( 16 appBar: AppBar( 17 title: Text('title'), 18 ), 19 body: Column( 20 children: [ 21 Column( 22 children: _widgetList, 23 ), 24 ElevatedButton( 25 onPressed: () => _changeText(), child: Text("Change Text")) 26 ], 27 ), 28 ); 29 } 30 31 _changeText() { 32 setState(() { 33 _text = 'bar'; 34 }); 35 } 36}
よろしくおねがいします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/07 10:57