我已阅读其他问题,虽然它们的标题与此问题相似,但它们并未涵盖我的问题。请阅读下文。
我使用的是 Android Studio。我有一个带有 GridView 的简单有状态应用程序。它的孩子在列表“geza”中。当我按下按钮时,一个 Text('Hello') 被添加到列表中。
这是在 setState() 方法中完成的。新添加的小部件不会出现在网格中。
如果我从 Android Studio 进行热重新部署,那么在重新部署后小部件会出现。所以看起来小部件被添加到列表中,但网格没有更新。
我做错了什么?
class MyHomePage extends StatefulWidget {
MyHomePage({Key? key}) : super(key: key);
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
var geza = <Widget>[ Text('AAA') ];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('My Test'),
),
body: Center(
child: GridView.count(crossAxisCount: 2,
children: this.geza
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
setState(() {
this.geza.add(Text('Hello'));
});
},
child: Icon(Icons.add),
),
);
}
}
答案 0 :(得分:1)
我认为 Flutter 会特别对待小部件列表,正如您在此 similar case 中所见。此解决方案使用 ListView.builder
:在您的情况下,您可以使用 GridView.builder
,但您也可以在 geza
列表中使用字符串而不是小部件以避免任何进一步的问题:
class _MyHomePageState extends State<MyHomePage> {
// Use a list of strings
final List<String> geza = ['AAA'];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('My Test'),
),
body: Center(
child: GridView.count(
crossAxisCount: 2,
// Convert to a list of widgets here
children: this.geza.map((v) => Text(v)).toList(),
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
// Add a string to the list
setState(() => this.geza.add('Hello'));
},
child: Icon(Icons.add),
),
);
}
}
答案 1 :(得分:1)
您可以使用扩展运算符 (Integer.valueOf
) 来解决此问题。
...