我想知道如何在flutter / dart中编写此代码?我不知道flutter中可以通知某些代码在另一个代码完成后执行的任何类。
var posts = [Post]()
let dispatchGroup = DispatchGroup()
snapshot.forEach({ (postSnapshot) in
guard let postDict = postSnapshot.value as? [String : Any],
let posterUID = postDict["poster_uid"] as? String
else { return }
let postKey = postSnapshot.key
dispatchGroup.enter()
showUserPost(forKey: postKey, posterUID: posterUID) { (post) in
if let post = post {
posts.append(post)
}
dispatchGroup.leave()
}
})
dispatchGroup.notify(queue: .main, execute: {
completion(nil, posts.reversed())
})
答案 0 :(得分:3)
有多种选择:
Listenable
,例如ValueNotifier
,由flutter提供
final valueNotifier = new ValueNotifier(42);
valueNotifier.addListener(() {
print(valueNotifier.value);
});
valueNotifier.value++; // automatically notify all listener
或Stream
/ Sink
,而StreamController
来自dart:async
。
final streamController = new StreamController<int>.broadcast();
streamController.stream.listen((value) {
print(value);
});
streamController.sink.add(45);
如果可以,请优先Stream
超过Listenable
。由于dart本身支持流并使用一些语法糖(例如:
await for (final value in stream) {
print(value);
}
或
Stream<int> createStream() async* {
yield 42;
}