当前位置: 首页 > 知识库问答 >
问题:

根据按钮状态向FireStore发送布尔值

吕胤
2023-03-14

我用Flatter和ESP32创建了一个简单的家庭自动化项目,在我的应用程序上,我有一系列按钮,如果按下或不按下,这些按钮将改变firestore中变量的状态。如果按下,则发送True,如果不发送false。我正在努力实现这一点,但我似乎做不好

在onPressed中是我尝试过的,所有代码都在一个有状态类中:

bool pressed = false;

Random no effect code...

CustomButton(
        icon: Icons.lightbulb_outline,
        text: 'On',
        text2: 'Lâmpada 1\nSchuma',
        onPressed: () => (){
             dynamic databaseReference = Firestore.instance.collection('sensores').where('Led1','==',pressed);
        Firestore.instance.runTransaction((transaction) async {
          await transaction.update(
        documentReference, _value);
        };
         },
        ),
        SizedBox(width: 30.0),

        CustomButton(
        icon: Icons.lightbulb_outline,
        text: 'On',
        text2: 'Lâmpada 2\nSchuma',
        onPressed: () => (){
        },

第二次尝试:

CustomButton(
                        icon: Icons.lightbulb_outline,
                        text: 'On',
                        text2: 'Lâmpada 1\nSchuma',
                        onPressed: () => (){
                          Firestore.instance.collection("sensores").document("2KbeT....").updateData({
                          'Led1': true,
                        });
                        },
                      ),

问题在于按钮的格式。Uni发送的代码非常有效。

共有1个答案

汪胤
2023-03-14

首先将firebase添加到你的应用程序:https://firebase.google.com/docs/flutter/setup?platform=ios

(进口消防)

您可以简单地更新您的数据:

Firestore.instance.collection('YourCollection').document('YourDocument').updateData({
 'Led1': true,
});

要从服务器获取数据,请执行以下操作:

await Firestore.instance
    .collection('YourCollection')
    .document('YourDocument')
    .get()
    .then((DocumentSnapshot ds) {
  led1 = ds["Led1"];
  led2 = ds["Led2"];
  led3 = ds["Led3"];
});

我建议使用MQTT协议与您的ESP32通信,而不是将其存储在firestore中。请注意,firestore允许您每天有20k次读取和50k次写入,因此,如果您的设备需要更多的读取和写入,那么使用firestore作为通信方法是不切实际的。

 类似资料:
  • 我有一个3D看按钮在正常状态下,与3DP在右侧和底部,当我按下按钮,我希望它看起来3D与3DP在左侧和顶部,这一次。但是,当我更改项形状的按下状态的填充值时,即使按钮处于正常状态/未按下,填充值的更改也会显示出来。 我的按钮看起来是这样的: 我也希望它按下时也是这样: btn_gray1.xml btn_gray2.xml btn_gray.xml

  • 正如标题所述,我正在尝试根据表行数据中的布尔值启用/禁用表行中的按钮。到目前为止,这是我的代码: 不幸的是,我的代码在底线的第五行中断。如果我排除该行并将下面的行更改为,它会非常有效。我可以根据按钮所在的数据禁用此按钮吗?

  • 问题内容: 我有一个名称列表和一些带有产品名称的按钮。当单击其中一个按钮时,列表信息将发送到PHP脚本,但是我无法点击“提交”按钮来发送其值。怎么做?我将代码简化为以下内容: 发送页面: 接收页面:buy.php 除了发送提交按钮值外,其他所有东西都可以正常工作。 问题答案: 按钮名称未提交,因此未设置php 值。如in 评估为false。

  • 问题内容: 我正在Ajax调用中发送一些数据。值之一是设置为FALSE的布尔值。在Ajax调用的PHP脚本中,始终将其评估为TRUE。有任何想法吗? 在上面的Ajax中调用的脚本vote.php中,我检查了布尔值: 但条件始终满足。 问题答案: 帖子只是文字,文字在php中的评估结果为true。一种快速的解决方法是发送零而不是false。您也可以在PHP中用引号引起来。 然后,您可以传递正确/错误

  • 问题内容: 当我运行下面的代码时,它显示如下。为什么不是x’x’而是一个布尔值?这仅发生在传递给使用lambda调用的函数的第一个参数时。 错误y / home / me / model / some_file 问题答案: 导致该问题的原因是,传递了一个布尔值,该布尔值指示是否已被检查。适当的事情是使用参数来使用该参数:

  • 问题内容: 我有一个线程,它等待布尔值更改,如下所示: 这不是我首选的方法,因为这会导致大量CPU消耗。 有什么方法可以阻止线程,直到布尔值更改其状态? 问题答案: 这不是我首选的方法,因为这会导致大量CPU消耗。 如果这实际上是您的工作代码,则只需保留该代码即可。每秒检查一次布尔值不会导致可测量的CPU负载。没有任何。 真正的问题是检查该值的线程可能由于缓存而没有看到任意长时间的更改。为了确保该