Asynchronous 如何在Flatter中调用Firebase快照上的未来?
当我使用StreamBuilder返回一个快照时,我得到一个重复的错误,该错误仅持续一两秒钟,该快照显示“快照调用为空”。我相信我需要使快照异步,但我可能完全错了。这是我的密码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
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