我正在使用名为search_widget
的Flutter插件。
此小部件的data参数带有一个列表。但是,当我使用sqlite
来获取数据时,我将其以Future<List>
的形式保存。
有什么方法可以将Future<List>
转换为List
?
或通过其他任何方式使其正常工作。
答案 0 :(得分:2)
List list = await _fetchList();
假设_fetchList()
类似于:
Future<List> _fetchList() {...}
答案 1 :(得分:0)
假设这是我们返回的函数dataList(),它是Futur:
List yourlist = new List();
dataList().then((resultat){
setState(() => yourlist.add(resultat);
});
答案 2 :(得分:0)
从search_widget借用示例,您需要在dataList
这样的小部件中:
SearchWidget<LeaderBoard>(
dataList: list,
textFieldBuilder: (TextEditingController controller, FocusNode focusNode) {
return MyTextField(controller, focusNode);
},
)
当然,您可以像其他答案一样将Future<List>
转换为List
。但是您将无法执行dataList: await _sqliteCall();
,因为build
方法被设计为纯同步的。
“未来”完成时,您将必须返回诸如进度指示器之类的东西。为此,您可以使用FutureBuilder
:
FutureBuilder<List<Leaderboard>>(
future: _sqliteCall(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return SearchWidget<LeaderBoard>(
dataList: snapshot.data,
textFieldBuilder: (TextEditingController controller, FocusNode focusNode) {
return MyTextField(controller, focusNode);
},
)
}
return CircularProgressIndicator();
}
),
当然也可以使用StatefulWidget
完成,您可以选中this article for a detailed explanation of the issue。
答案 3 :(得分:0)
使用await
关键字将等待Future完成,一旦执行Future,其结果将返回给您。
import 'dart:async';
void main() async {
Future<List> _futureOfList = _getList();
List list = await _futureOfList ;
print(list); // will print [1, 2, 3, 4] on console.
}
Future<List> _getList(){
return Future.value([1,2,3,4]);
}
要使其正常工作,您调用的方法应该为async
我希望这会有所帮助,如有任何疑问,请发表评论。
答案 4 :(得分:0)
那是我解决问题的方式...
初始版本:
ModelCheckpoint
已清理/最终版本:
@override
List<Product> getAll() {
List<Product> _listProducts;
Future<List<Product>> listFuture;
listFuture = _repo.getAll();
listFuture.then((value) {
if (value != null) value.forEach((item) => _listProducts.add(item));
});
return _listProducts == null ? [] : _listProducts;
}
答案 5 :(得分:0)
Node.js
答案 6 :(得分:0)
您应该在 {} of then 上调用 value,如下所示:
onPressed: () {
_apiService.getProductList().then((result) {
print(result);
print("kkkkkkkk:"+result.length.toString());
for (var item in result){
_dsSanpham.add(item);
}
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => nhaphangle(
username: username, dshangle: dshangle, dssanpham: _dsSanpham)),);
});