7

在此处输入图像描述

每当我对 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'});
           
4

2 回答 2

12

您当前正在使用once()从数据库中获取值,这意味着它只读取当前值。如果你想继续监控这个值,你会想要使用它onValue

databaseReferenceTest
    .child('MedicalCenter')
    .onValue.listen((event) {
      var snapshot = event.snapshot

      String value = snapshot.value['Relay1']['Data'];
      print('Value is $value');

      ...

    });
于 2020-03-31T02:08:50.467 回答
4
databaseReferenceTest
.child('MedicalCenter')
.onValue.listen((event) {
  var snapshot = event.snapshot;
  setState(() {
    String value = snapshot.value['Relay1']['Data'];
  print('Value is $value');
  });
});

这应该工作......我刚刚添加了setState,

于 2020-08-19T19:59:49.477 回答