_getstockList
_getstockList( List<dynamic> nlist) async {
Map<String, dynamic> userdocdata;
var userdata = await firestore.collection('users').doc('NVPjZEAZneKblrubGZSW').get();
userdocdata = userdata.data() as Map<String, dynamic>;
nlist = userdocdata['favorite'];
}
主要代碼
Widget build(BuildContext context) {
List<dynamic> list = [];
List<Map<String, dynamic>> stockcardlist = [];
_getstockList(list);
print(list); // output
_getstockInfo(list, stockcardlist);
~~~
}
_getstockInfo
_getstockInfo(List<dynamic> nlist, List<Map<String,dynamic>> stockcardlist){
print(nlist.length); // output
}
期望的結果
print(list)
print(nlist.length)
有效值
但
結果
print(list) = []
print(nlist.length) = 0
請幫助我,我使用 Future,同步,不等待,但我無法解決
uj5u.com熱心網友回復:
它看起來像_getStockList不回傳任何東西。當您通過它時,原始物件不受影響。你可以嘗試解決這個問題:
Future<List<dynamic>> _getstockList() async {
Map<String, dynamic> userdocdata;
var userdata = await firestore.collection('users').doc('NVPjZEAZneKblrubGZSW').get();
userdocdata = userdata.data() as Map<String, dynamic>;
List<dynamic> nlist = userdocdata['favorite'];
return nlist;
}
現在你需要呼叫這個函式來填充串列
Widget build(BuildContext context) {
List<Map<String, dynamic>> stockcardlist = [];
List<dynamic> list = await _getstockList(); // DOES NOT WORK!
print(list);
_getstockInfo(list, stockcardlist);
...
}
但是,這不起作用,因為您不允許使用awaitin build,這不是異步的。為了解決這個問題,您可以使用FutureBuilder:
https ://api.flutter.dev/flutter/widgets/FutureBuilder-class.html
Widget build(BuildContext context) {
return FutureBuilder<List<dynamic>>(
future: _getstockList(),
builder: (BuildContext context, AsyncSnapshot<List<dynamic>> snapshot) {
List<dynamic> list = snapshot.data ?? [];
print(list);
return MyAwesomeScreenWithAList(list);
}
);
}
現在,如果您想在第二個異步函式中使用第一個異步函式的結果,最簡單的方法可能是使用兩個嵌套FutureBuilder的 s,盡管并不理想。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/471679.html
