我的目标是拥有一个 ListTiles 列表,以便进行跟踪,能够添加/删除稍后可以在 ListView 中显示的项目。这是我的代码的简化版本:
class Notes extends StatefulWidget{
List<ListTile> notes;
_NotesState createState() => new _NotesState();
}
class _NotesState extends State<Notes>{
@override
Widget build(BuildContext context){
widget.notes.add(new ListTile(title: new Text("Title")));
return new ListView(
children: <ListTile>[
notes[0],
]
);
}
}
但我收到以下信息:
NoSuchMethodError:在 null 上调用了方法“add”。 接收者:空 尝试调用:add('ListTile'的实例)
我认为应该可以这样做,尽管我当然可能是错的。预先感谢您帮助我解决我可能愚蠢的问题。
最佳答案
问题有两个:1)您的注释字段可能未初始化。 2) 您将状态存储在 State
对象之外。相反,请将注释放在状态对象中并初始化成员,如下所示:
class _NotesState extends State<Notes>{
List<ListTile> notes = [
new ListTile(title: new Text("Title")),
];
@override
Widget build(BuildContext context){
return new ListView(
children: <ListTile>[
notes[0],
]
);
}
}
像这样的可变数据需要处于状态
的原因是小部件本身可能会被重建数十次,从而删除所有笔记。
例如,如果您的小部件是动画的子级,则它将每秒重建 60 次。这也意味着您根本不应该在构建方法内部改变数据,因为它的调用频率可能比您想象的要高。
关于android - 如何在 Flutter 中创建 ListTile 列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49635217/