firebase - 更改 Firebase 实时数据库中的值时如何查看 flutter 应用程序的更改?

标签 firebase flutter firebase-realtime-database real-time stream-builder

enter image description here
每当我在 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');

      ...

    });

关于firebase - 更改 Firebase 实时数据库中的值时如何查看 flutter 应用程序的更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60942014/

相关文章:

angular - Angular 2 和 Angularfire2 中的三种方式绑定(bind)

javascript - 如何防止用户刷新页面时触发功能?

ios - 我怎样才能只从 firebase 获取 key ?

ios - 使用 FIRAuth 实现创建用户时遇到问题

dart - 在 Column Flutter 中居中展开的 ListView

email - 直接从表单发送电子邮件

java - 从 Firebase 获得双倍

javascript - 在新表中从 Firebase 存储打开文件而不下载

flutter - 如何在容器内添加文本 flutter

android - Firebase 在不读取快照或尝试写入(对于唯一用户名)的情况下检查值是否存在?