Asynchronous 如何在Flatter中调用Firebase快照上的未来?

Asynchronous 如何在Flatter中调用Firebase快照上的未来?,asynchronous,stream,async-await,dart,flutter,Asynchronous,Stream,Async Await,Dart,Flutter,当我使用StreamBuilder返回一个快照时,我得到一个重复的错误,该错误仅持续一两秒钟,该快照显示“快照调用为空”。我相信我需要使快照异步,但我可能完全错了。这是我的密码 child: new StreamBuilder( stream: fb.child('UserVideo/${fUser.uid}').orderByKey().onValue, builder: (BuildContext

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

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;
子项:新的StreamBuilder(
流:fb.child('UserVideo/${fUser.uid}').orderByKey().onValue,
生成器:(BuildContext上下文,异步快照事件){
if(event.data.snapshot.value==null){
归还新卡(
孩子:新中心(
子项:新文本('搜索',
textAlign:textAlign.center,
样式:新文本样式(
字体大小:30.0,
fontFamily:“耐嚼”,
颜色:颜色。黑色),
),
);
}else if(event.data.snapshot.value!=null){
未排序的地图=
event.data.snapshot.value;//存储每个映射
最终myMap=
新SplayTreeMap.from(
未分类,
(a,b)=>未排序的[a]['rank']
.compareTo(未排序的[b]['rank']);
//Map myMap=event.data.snapshot.value;//存储每个映射
var titles=myMap.values;
List onesTitles=新列表();
List onesIds=新列表();
List onesImages=新列表();
List onesRank=新列表();
用于(标题中的var项目){
添加(项目['title']);
添加(项['videoID']);
添加(items['imageString']);
onesRank.add(items['rank'].toString());
}
名称=一针;
ids=onesIds;
数字=一个银行;
vidImages=onesImages;

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

使用安全导航操作器应该可以防止出现这种错误

event.data?.snapshot?.value

仅当使用安全导航操作符计算为
!=null

之前的零件应防止该错误时,它才会显示后续零件

event.data?.snapshot?.value

仅当前面的部分计算为
!=null

谢谢。我不知道语法对dart的作用与对Swift的作用一样。是否
事件.data!.snapshot!.value
也与对Swift编程的作用相同(它们在发布版本中被删除。
我不知道dart的语法与Swift的语法一样有效。
事件.数据!.snapshot!.value
也与Swift编程的
断言
一样有效吗?
断言
有效(它们在发布版本中被删除。
我不喜欢kso