类 'Future<dynamic>' 没有实例方法 '[]'。扑动



我不太了解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函数。尝试以下操作:

  1. 删除GetList函数
  2. future: Database_().entries()更改为future: Database_().entries
  3. Text("${GetList()[i]}")更改为Text(${snapshot.data[i]})

我认为由于您代码中的这一行:

Text("${GetList()[i]}"),

它也可以像一个额外的((

getData()();

最新更新