flift / dart中swift的DispatchGroup的替代品是什么?

时间:2018-06-09 20:47:01

标签: swift dart flutter

我想知道如何在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())
        })

1 个答案:

答案 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;
}