【问题标题】:Decoding Firebase Realtime Database Snapshot Flutter解码 Firebase 实时数据库快照 Flutter
【发布时间】:2022-01-21 11:59:53
【问题描述】:

我正在为我的项目使用 firebase 实时数据库,当我从数据库中读取信息时,我得到一个对象作为输出。

final databaseInstance = FirebaseDatabase.instance;
final posts = await databaseInstance.ref("Posts").once();
print(posts.snapshot.value);

我得到的结果是{Test Post: {Description: testing 123123, Date: 19 Dec}}。但是,我不希望它以这种形式出现。我应该如何阅读它以便我可以读取数据,以便当我想要日期时我只得到 12 月 19 日?

【问题讨论】:

    标签: flutter firebase-realtime-database


    【解决方案1】:

    糟糕,我实际上找到了问题的答案。它的问题是当firebase实时数据库将结果返回给我时,它并不是真的是json。 所以我必须自己使用函数jsonEncode(data)将其转换为json。 当代码运行时,{Test Post: {Description: testing 123123, Date: 19 Dec}}{"Test Post":{"Description":"testing 123123","Date":"19 Dec"}},这解决了我的问题,因为我可以在变量后面加上 ['Test Post']

    【讨论】:

      【解决方案2】:

      您可以创建一个名为 post 的类,该类具有描述和日期变量,如下所示:

         class Post{
          final String description, date;
          
          Post({
          required this.description,
          required this.date,
          });
          
          factory Post.fromJson(json){
          return Post(
          description: json['description'],
          date: json['date'],
          );
      }
      }
      

      现在,当您获得快照时,只需像这样使用它:

      var result = posts.snapshot.value;
      
      final post = Post.fromJson(result['Test Post']);
      

      您可以使用post.date 获取您的日期

      【讨论】:

      • 抱歉,但当我使用您的代码时出现此错误:The operator '[]' isn't defined for the type 'Object'. Try defining the operator '[]'.
      • ok 试试这个 var result = posts.snapshot.value as Map;
      • 没有报错,但是运行的时候报了异常:_CastError (type '_InternalLinkedHashMap<Object?, Object?>' is not a subtype of type 'Map<String, dynamic>' in type cast)
      猜你喜欢
      • 2020-04-28
      • 2021-01-21
      • 2021-03-26
      • 2021-06-07
      • 2019-01-07
      • 1970-01-01
      • 2023-04-10
      • 2019-11-01
      • 2022-08-05
      相关资源
      最近更新 更多