我不太了解flutter中的未来,这是我所有应用程序中持续的斗争。这就是其中一个错误。当我删除";[]";它显示了";"Future"的实例;仅此而已。
Class 'Future<dynamic>' has no instance method '[]'.
Receiver: Instance of 'Future<dynamic>'
Tried calling: [](0)
class ListOfEntries extends StatelessWidget{
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
shape: RoundedRectangleBorder(borderRadius: BorderRadius.vertical(bottom: Radius.circular(30))),
title: Text("Your entries"),
toolbarHeight: 50,
),
body: FutureBuilder<List>(
future: Database_().entries(),
builder: (context, snapshot) {
return snapshot.hasData ?
new ListView.builder(
padding: const EdgeInsets.all(10.0),
itemCount: snapshot.data.length,
itemBuilder: (context, i) {
return Column(
children: [
Text("${GetList()[i]}"),
],
);
},
)
: Center(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
CircularProgressIndicator(),
Text(""),
Text("No entries yet:("),
],
)
);
}
),
);
}
GetList()async{
final list = await Database_().entries();
return list;
}
}
这是返回列表的函数。
Future<List<Entry_>> entries() async {
final Database db = await database;
final List<Map<String, dynamic>> maps = await db.query('[Journal Entries]');
return List.generate(maps.length, (i) {
return Entry_(
maps[i]["_entry"],
maps[i]["_date"],
);
});
}
通常,当您使用FutureBuilder时,您会传递想要完成的future,然后将该future中的数据用于您的小部件。我认为您应该调用函数GetList()
而不是Database_().entries()
,并在文本上输出snapshot.data[i].entrywhatever
由于您使用的是FutureBuilder,因此可以取消GetList函数。尝试以下操作:
- 删除GetList函数
- 将
future: Database_().entries()
更改为future: Database_().entries
- 将
Text("${GetList()[i]}")
更改为Text(${snapshot.data[i]})
我认为由于您代码中的这一行:
Text("${GetList()[i]}"),
它也可以像一个额外的((
getData()();