如何在Flutter beta 2更新后更新ListView

时间:2018-04-15 16:31:42

标签: dart flutter

下面的代码是原始版本的简化版本,我的目标是获得一个列表切片列表:列表,我可以跟踪新创建的ListTile小部件,我可以将其作为参数传递给ListView 。

class Notes extends StatefulWidget{

  _NotesState createState() => new _NotesState();
}

class _NotesState extends State<Notes>{

  List<ListTile> notes =[];

  void addNewNote(){
     setState((){
        notes.add(new ListTile(title: new Text("Broccolli")));
  }

  @override
  Widget build(BuildContext context){
     return new Scaffold(
       appBar: new AppBar(title: "NOTES"),
       body: new Stack(
       children: <Widget>[
        // The notes
        new Container(
          child: new ListView(
            children: new List.from(notes, growable: false),
          )
        ),
        // The add notes button
        new FloatingActionButton(
          tooltip: 'Add a note',
          onPressed: addNewNote, 
        )
       ],
      ),
     );
  }

这曾经在最后一次更新之前工作得很好,因为它引入了Dart 2,但现在我收到以下消息:

type 'List<dynamic>' is not a subtype of type 'List<Widget>' where
  List is from dart:core
  List is from dart:core
  Widget is from package:flutter/src/widgets/framework.dart

问题源于:新的List.from(notes,growable:false)

我这样做的原因是因为当我将列表作为参数传递给ListView.children时,flutter没有注册更改并且列表的新元素没有显示,所以我只创建一个新列表和我的问题得到了解决。然而,这已不再可行

1 个答案:

答案 0 :(得分:2)

您必须指定由List创建的new List.from的类型,否则默认为dynamic

事实是,对于强模式,List<dynamic>不再分配给List<whatever>。因此,您必须确保List具有正确的类型。

在你的情况下,一个简单的new List<Widget>.from(notes)将会解决这个问题