我有一个简单的 Flutter 应用程序,它将一个由管道字符分隔的字符串值......恰好是歌曲名称(即:'Rudolf|Jingle Bells|White Christmas')转换为一个 ListView......歌曲名称是 ListTiles。关于我为什么这样做的长篇故事..请耐心等待。我有一个名为“集合”的 Firestore 集合,在集合中我有一个键为 SET01 的文档。然后在 SET01 中,我有一个名为“歌曲”的字段......一个文本字段,其中包含由管道分隔的歌曲。我调用 getSetList() 从 Firestore 检索文本字段。我似乎可以在 set01DocRef.get().then((snapshot)....
但是我似乎无法将该值从 .then() 传递回函数以将其传递回调用小部件。
非常感谢任何帮助。
是
String getSetList () {
String songList = 'Loading.....';
DocumentReference set01DocRef = Firestore.instance.collection('sets').document('SET01');
set01DocRef.get().then((snapshot){
print('String songList inside .then() before assignment: ' + songList); //Wagon Wheel|Her Diamonds|Waterfalls
print('Snapshot value of songs: ' + snapshot['songs']); //Wagon Wheel|Her Diamonds|Waterfalls
songList = snapshot['songs'];
print('String songList inside .then() after assignment: ' + songList); //Wagon Wheel|Her Diamonds|Waterfalls
});
print('Bueller? Bueller??');
print('String songList outside of .then(): ' + songList);
return songList;
}
输出:
flutter: Bueller? Bueller??
flutter: String songList outside of .then(): Loading.....
Reloaded 0 of 424 libraries in 442ms.
flutter: String songList inside .then() before assignment: Loading.....
flutter: Snapshot value of songs: Wagon Wheel|Her Diamonds|Waterfalls
flutter: String songList inside .then() after assignment: Wagon Wheel|Her Diamonds|Waterfalls
**该函数跳过 .get() 并立即返回......我知道这可能与强制系统等待该值从 FS 返回有关......但我不知道如何来处理它。
这是then()
块的预期行为:一旦加载了数据,块内的代码就会被异步调用,因此需要数据的调用代码必须在then()
块内。
幸运的是,Dart 有一个await
关键字可以使这更容易。它基本上取代了then()
块:
Future<String> getSetList () async {
String songList = 'Loading.....';
DocumentReference set01DocRef =
Firestore.instance.collection('sets').document('SET01');
snapshot = await set01DocRef.get();
print('String songList inside .then() before assignment: ' + songList);
//Wagon Wheel|Her Diamonds|Waterfalls
print('Snapshot value of songs: ' + snapshot['songs']); //Wagon
Wheel|Her Diamonds|Waterfalls
songList = snapshot['songs'];
print('String songList inside .then() after assignment: ' + songList);
//Wagon Wheel|Her Diamonds|Waterfalls
print('Bueller? Bueller??');
print('String songList outside of .then(): ' + songList);
return songList;
}
请注意,任何对getSetList()
现在的调用也必须使用await
:
var setlist = await getSetList();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句