下面的代码是原始版本的简化版本,我的目标是获得一个列表切片列表:列表,我可以跟踪新创建的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没有注册更改并且列表的新元素没有显示,所以我只创建一个新列表和我的问题得到了解决。然而,这已不再可行
答案 0 :(得分:2)
您必须指定由List
创建的new List.from
的类型,否则默认为dynamic
。
事实是,对于强模式,List<dynamic>
不再分配给List<whatever>
。因此,您必须确保List
具有正确的类型。
在你的情况下,一个简单的new List<Widget>.from(notes)
将会解决这个问题