嵌套Map访问键值

问题描述 投票:0回答:1

在我的 Firebase 实时数据库中,我的架构是。

我的型号是

class Data {
  final double data;
  final DateTime timestamp;

  Data({
    required this.data,
    required this.timestamp,
  });

  factory Data.fromRTDB(Map<String, dynamic> data) {
    return Data(
      data: data['data'] ?? 0.00,
      timestamp: (data['timestamp'] != null)
          ? DateTime.fromMillisecondsSinceEpoch((data['timestamp']))
          : DateTime.now(),
    );
  }
}

现在我想只显示最后一个键值对“数据”,如何访问它?

StreamBuilder(
              stream:
                  _database.child(
                      '/UsersData/C14SAlxF5ma70xxx6wV9d1xxxxx/xxxxx/uplink').orderByKey().limitToLast(1).onValue,
              builder: (context, snapshot) {
                if (snapshot.hasData) {
                  final datat = Data.fromRTDB(
                    Map<String, dynamic>.from(
                      Map<String, dynamic>.from(snapshot.data!.snapshot.value
                          as Map<dynamic, dynamic>),
                    ),
                  );
                  debugPrint(datat.data.toString());
                  return Text(datat.data.toString());
                } else {
                  return const CircularProgressIndicator();
                }
              }),

我只想在文本小部件中显示最新的“数据”。

flutter firebase-realtime-database
1个回答
0
投票

当您对 Firebase 数据库执行查询时,可能会出现多个结果。因此快照包含这些结果的列表。即使只有一个结果,快照也会包含一个结果的列表。

乍一看,您的代码无法处理该列表。

if (snapshot.hasData) {
  final firstChild = snapshot.data!.snapshot.children[0];
  final values = firstChild.value as as Map<dynamic, dynamic>);
  final datat = Data.fromRTDB(
    Map<String, dynamic>.from(values)
  );
  debugPrint(datat.data.toString());
}
© www.soinside.com 2019 - 2024. All rights reserved.