
每当我在Firebase实时数据库中做任何更改时,我都会尝试让这些滚动开关改变它的值。
更具体地说,每当我将Relay1/Data的值更改为0时,我希望该开关变为非活动状态。
我试过找遍所有地方,但我找不到任何解决方案。
bool relay1pressed;
final databaseReferenceTest = FirebaseDatabase.instance.reference();
@override
void initState() {
super.initState();
databaseReferenceTest
.child('MedicalCenter')
.once()
.then((DataSnapshot snapshot) {
String value = snapshot.value['Relay1']['Data'];
print('Value is $value');
if (value == '1') {
relay1pressed = true;
} else
relay1pressed = false;
setState(() {
isLoading = true;
});
});
}
//Widget build
StreamBuilder(
stream: databaseReferenceTest
.child('MedicalCenter')
.child('Relay1')
.onValue,
builder: (BuildContext context, AsyncSnapshot<Event> snapshot) {
databaseReferenceTest
.child('MedicalCenter')
.once()
.then((DataSnapshot snapshot) {
String value = snapshot.value['Relay1']['Data'];
print('Value is $value');
if (value == '1') {
relay1pressed = true;
print('relay1 bool $relay2pressed');
} else {
relay1pressed = false;
print('relay1 bool $relay2pressed');
}
});
return LiteRollingSwitch(
value: relay1pressed,
textOn: 'active',
textOff: 'inactive',
colorOn: Colors.deepOrange,
colorOff: Colors.blueGrey,
iconOn: Icons.lightbulb_outline,
iconOff: Icons.power_settings_new,
onChanged: (bool state) {
state
? databaseReferenceTest
.child('MedicalCenter')
.update({'Relay1/Data': '1'})
: databaseReferenceTest
.child('MedicalCenter')
.update({'Relay1/Data': '0'});发布于 2020-03-31 10:08:50
您当前正在使用once()从数据库中获取值,这意味着它只读取当前值。如果您希望继续监视该值,则需要改用onValue。
databaseReferenceTest
.child('MedicalCenter')
.onValue.listen((event) {
var snapshot = event.snapshot
String value = snapshot.value['Relay1']['Data'];
print('Value is $value');
...
});发布于 2020-08-20 03:59:49
databaseReferenceTest
.child('MedicalCenter')
.onValue.listen((event) {
var snapshot = event.snapshot;
setState(() {
String value = snapshot.value['Relay1']['Data'];
print('Value is $value');
});
});这应该行得通。我刚加了setState
https://stackoverflow.com/questions/60942014
复制相似问题