在我的 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();
}
}),
我只想在文本小部件中显示最新的“数据”。
当您对 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());
}