【问题标题】:What is the alternative to swift’s DispatchGroup in flutter/dart?Flutter/dart 中 swift 的 DispatchGroup 的替代方案是什么?
【发布时间】:2018-06-09 20:47:00
【问题描述】:

我想知道如何在 Flutter/dart 中编写此代码?我不知道颤振中的任何类可以通知某些代码在另一个代码完成后执行。

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())
        })

【问题讨论】:

    标签: swift dart flutter


    【解决方案1】:

    有多种选择:

    ListenableValueNotifier,由flutter提供

      final  valueNotifier = new ValueNotifier(42);
      valueNotifier.addListener(() {
        print(valueNotifier.value);
      });
      valueNotifier.value++; // automatically notify all listener
    

    或者Stream/Sink,它是来自dart:asyncStreamController

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

    【讨论】:

    • 谢谢。我认为 ValueNotifier 正是我一直在寻找的。​​span>
    【解决方案2】:

    我想你也可以使用Future.wait

    图片感谢easy FLUTTER

    【讨论】:

      猜你喜欢
      • 2018-11-29
      • 1970-01-01
      • 1970-01-01
      • 2021-11-13
      • 2018-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多