更改 Firebase 实时数据库中的值时如何查看 flutter 应用程序的变化?
How to see changes in flutter app when changing values in Firebase Realtime Database?
每当我在 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'});
您目前正在使用 once()
从数据库中获取值,这意味着它只读取当前值。如果您想继续监控该值,则需要使用 onValue
。
databaseReferenceTest
.child('MedicalCenter')
.onValue.listen((event) {
var snapshot = event.snapshot
String value = snapshot.value['Relay1']['Data'];
print('Value is $value');
...
});
databaseReferenceTest
.child('MedicalCenter')
.onValue.listen((event) {
var snapshot = event.snapshot;
setState(() {
String value = snapshot.value['Relay1']['Data'];
print('Value is $value');
});
});
这应该有效...
我刚刚添加了 setState,
每当我在 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'});
您目前正在使用 once()
从数据库中获取值,这意味着它只读取当前值。如果您想继续监控该值,则需要使用 onValue
。
databaseReferenceTest
.child('MedicalCenter')
.onValue.listen((event) {
var snapshot = event.snapshot
String value = snapshot.value['Relay1']['Data'];
print('Value is $value');
...
});
databaseReferenceTest
.child('MedicalCenter')
.onValue.listen((event) {
var snapshot = event.snapshot;
setState(() {
String value = snapshot.value['Relay1']['Data'];
print('Value is $value');
});
});
这应该有效... 我刚刚添加了 setState,