如何在Flutter中创建ListTile列表?

时间:2018-04-03 16:44:51

标签: android ios mobile dart flutter

我的目标是拥有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:方法'add在null上调用。 接收者:null 尝试调用:添加(实例'ListTile')

我认为应该可以这样做,虽然我当然可能会弄错。提前感谢您帮助我解决我可能存在的愚蠢问题。

1 个答案:

答案 0 :(得分:3)

问题有两个: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],
       ]
     );
  }
}

这样的可变数据需要在State中的原因是窗口小部件本身可能会重建几十次,删除所有笔记。  例如,如果您的窗口小部件是动画的子窗口,它将每秒重建60次。这也意味着你根本不应该在构建方法中改变数据,因为它可能会被你更频繁地调用。