【问题标题】:How to call a Future on a Firebase snapshot in Flutter?如何在 Flutter 的 Firebase 快照上调用 Future?
【发布时间】:2018-05-13 05:47:40
【问题描述】:

当我使用 StreamBuilder 返回一个显示“在 null 上调用快照”的快照时,我收到一个重复错误,该错误仅持续一两秒。我相信我需要使我的快照异步,但我可能完全错了。这是我的代码...

child: new StreamBuilder(
                        stream: fb.child('UserVideo/${fUser.uid}').orderByKey().onValue,
                        builder: (BuildContext context, AsyncSnapshot<Event> event) {
                          if (event.data.snapshot.value == null) {
                            return new Card(
                              child: new Center(
                                child: new Text('SEARCH',
                                    textAlign: TextAlign.center,
                                    style: new TextStyle(
                                        fontSize: 30.0,
                                        fontFamily: 'Chewy',
                                        color: Colors.black)),
                              ),
                            );
                          } else if (event.data.snapshot.value != null) {
                              Map unsorted =
                                  event.data.snapshot.value; //store each map

                              final myMap =
                              new SplayTreeMap<String, dynamic>.from(
                                  unsorted,
                                      (a, b) => unsorted[a]['rank']
                                      .compareTo(unsorted[b]['rank']));

                              //Map myMap = event.data.snapshot.value; //store each map
                              var titles = myMap.values;

                              List onesTitles = new List();
                              List onesIds = new List();
                              List onesImages = new List();
                              List onesRank = new List();

                              for (var items in titles) {
                                onesTitles.add(items['title']);
                                onesIds.add(items['videoID']);
                                onesImages.add(items['imageString']);
                                onesRank.add(items['rank'].toString());
                              }

                              names = onesTitles;
                              ids = onesIds;
                              numbers = onesRank;
                              vidImages = onesImages;

我正在将我的用户信息整理到列表中,然后从中填充卡片信息。

【问题讨论】:

    标签: asynchronous stream async-await dart flutter


    【解决方案1】:

    使用安全导航运算符应该可以防止该错误

    event.data?.snapshot?.value
    

    仅当之前的部分评估为!= null时,它才会评估后续部分

    【讨论】:

    • 谢谢。不知道语法对 dart 的作用与对 Swift 的作用相同。 event.data!.snapshot!.value 是否也像 assert 一样用于 Swift 编程?
    • assert 确实(并且它们在发布版本中被删除。! 我不认为 kso
    猜你喜欢
    • 2018-05-19
    • 1970-01-01
    • 2020-08-17
    • 2018-04-30
    • 2021-09-05
    • 2020-01-16
    • 1970-01-01
    • 2019-01-07
    • 1970-01-01
    相关资源
    最近更新 更多