Ahm*_*neh 5 real-time firebase firebase-realtime-database flutter stream-builder
每当我在 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'});
Run Code Online (Sandbox Code Playgroud)
您当前使用的once()
是从数据库中获取值,这意味着它只读取当前值。如果您想继续监视该值,则需要onValue
改用。
databaseReferenceTest
.child('MedicalCenter')
.onValue.listen((event) {
var snapshot = event.snapshot
String value = snapshot.value['Relay1']['Data'];
print('Value is $value');
...
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5190 次 |
最近记录: |