我想从数据库中获取所有项目,但是我被困在如何将Future字符串列表转换为字符串列表中。
var x = DataBaseHelper.instance.queryAllRows();
Future<List<String>> queryAllRows() async {
Database db = await instance._initDatabase();
List<Map<String,dynamic>> s = await db.query(table ,columns: [columnname]);
List<String> list = new List();
for(var x in s){
x.forEach((k,v)=>list.add(v));
}
return list;
}
我想获取数据库中的所有值,但不知道如何将这些值转换为列表
答案 0 :(得分:1)
您需要一个异步函数来检索数据。
void yourFunction() async {
var x = await DataBaseHelper.instance.queryAllRows();
}
答案 1 :(得分:0)
因为db.query是异步的,所以它们将返回Future<List<Map<String,dynamic>>
。为了获得他们的结果而没有未来,我们可以回电,它将返回一个List<Map<String,dynamic>>
。
var x = DataBaseHelper.instance.queryAllRows();
Future<List<String>> queryAllRows() async {
Database db = await instance._initDatabase();
db.query(table ,columns: [columnname]).then((data){
List<Map<String,dynamic>> s = data;
List<String> list = new List();
for(var x in s){
x.forEach((k,v)=>list.add(v));
}
});
return list;
}
答案 2 :(得分:0)
您有两个选择。您可以使用将来的构建器来创建小部件,也可以使用简单的将来+ setState
https://api.flutter.dev/flutter/widgets/FutureBuilder-class.html
https://dart.dev/tutorials/language/futures
List<String> _databaseList
queryAllRows().then((rows) {
setState(() {_databaseList = rows});
})
setState
将告诉该寡妇重建小部件树。 then
处理未来。
答案 3 :(得分:0)
您需要等待queryAllRows()完成。如果您处于可以标记为异步的函数环境中,则只需使用关键字:
Widget test(BuildContext context) {
return FutureBuilder<List<String>>(
future: DataBaseHelper.instance.queryAllRows(),
builder: (context, snap) {
if (snap.hasData && !snap.hasError) {
return ListView(
padding: const EdgeInsets.all(8.0),
children: <Widget>[...snap.data],
);
}
else {
return Container();
}
},
);
}
相反,如果要渲染列表,则可以使用FutureBuilder并根据Future状态管理渲染小部件:
main.tf