firebase FLUTTER没有为类型“Object”定义运算符“[]”

x0fgdtte  于 2023-03-03  发布在  Flutter
关注(0)|答案(1)|浏览(108)

我想从firebase获取数据,但出现错误。
这是密码:

late final dref = FirebaseDatabase.instance.reference();
  late DatabaseReference databaseReference;
  showData(){
    dref.once().then((snapshot){
      print(snapshot.snapshot.value);
    });
  }

@override
void initState(){ 
  super.initState();
  databaseReference = dref;
}

child: 
                Container(  
                  height:300,
                  child: GridView.count(
                    crossAxisCount: 2, 
                    crossAxisSpacing: 12, 
                    mainAxisSpacing: 8,
                    childAspectRatio: 1.30,
                    children: [
                      FirebaseAnimatedList(
                        shrinkWrap:true,
                        query: databaseReference,
                      itemBuilder: ( BuildContext context, DataSnapshot snapshot, Animation animation, int index){  
                        return ListTile(
                          title: Text(snapshot.value!["intime"]),
                          subtitle : _parkingslot(name:'Floor'),);
                      }),

它有一个错误。"["有一个红色下划线,句子是:将此数据快照的内容作为本机类型返回。无法无条件调用方法"[]",因为接收方可以为"null"。请尝试使调用具有条件(使用"?.")或向目标("!")添加null检查。
我试着添加'!'和'?',但仍然有错误,但句子是:没有为类型"Object"定义运算符"[]"。
请帮帮忙

a64a0gku

a64a0gku1#

不能保证snapshot.valueMap,因为它声明为返回Object?,如果你 * 知道 * 它返回一个map,你必须通过强制转换结果来告诉编译器:

itemBuilder: ( BuildContext context, DataSnapshot snapshot, Animation animation, int index){  
  var map = Map<String, dynamic>.from(snapshot.value! as Map); // 👈
  return ListTile(
    title: Text(map["intime"]),  // 👈
    subtitle : _parkingslot(name:'Floor'),);
}),

另见:

  • 从Map〈dynamic,dynamic〉flutter中获取Map〈String,dynamic〉
  • 如何将数据从Firebase转换为完全类型化的Map?
  • 如何在Firebase数据库Flutter中从Map中取值
  • 如何通过Map〈〉将快照键值拉到列表中?

相关问题