“在Firebase中捕捉实时数据库中的键的值”与Dart

dxxyhpgq  于 2024-01-03  发布在  其他
关注(0)|答案(2)|浏览(97)

我正在做一个Flutter应用程序,通过Firebase与ESP8266进行通信。所以我试图从Firebase中获取不同传感器的变量到我的Dart文件中。


的数据
但它一直给出这个错误:
未为类型“DatabaseEvent”定义getter“value”。请尝试导入定义“value”的库,将名称更正为现有getter的名称,或者定义名为“value”的getter或字段。
下面是相关代码:

bool ledOn = false;    
bool heaterOn = false;    
double drunkAmount = 0.0;    
String temperature = '';

final database = FirebaseDatabase.instance.ref();
_DashboardContentState() {    
  database.child('ESP').once().then((snapshot) {    
    temperature = snapshot.value['temperature'];    
    drunkAmount = snapshot.value['drunkAmount'];    
    heaterOn = snapshot.value[''] == 0;    
    ledOn = snapshot.value['LED'] == 0;    
  });

  database.child('ESP').onChildChanged.listen((event) {    
    DataSnapshot snap = event.snapshot;   
    if (snap.key == 'drunkAmount') {    
      drunkAmount = snap.snapshot.value;    
      setState(() {});    
    }    
  });    
}

字符串
那么我怎么才能得到这些值,或者有人能向我解释这个错误吗?

jv2fixgn

jv2fixgn1#

once方法返回的future值是DatabaseEvent,而不是DataSnapshot。因此,snapshot变量实际上是DatabaseEvent。要获取DatabaseEvent的快照,请调用其snapshot getter。

database.child('ESP').once().then((event) {
  final snapshot = event.snapshot;
  
  temperature = snapshot.value['temperature'];
  // ...
});

字符串

xqk2d5yq

xqk2d5yq2#

我终于设法解决了这个问题,或者以某种方式解决了它。我相信达芬的答案应该起作用,但它没有,我不知道为什么。所以这就是我所做的;现在一切正常。

databaseReference.child('ESP').onValue.listen((event) {
  final DataSnapshot snapshot = event.snapshot;
  List values = snapshot.children.toList();
  setState(() {
    heaterOn = values[0].value;
    ledOn = values[1].value;
    drunkAmount = values[2].value;
    temperature = values[3].value;
  });
});

字符串

相关问题