Отправка логического значения в FireStore в соответствии с состоянием кнопки - PullRequest
1 голос
/ 04 мая 2020

Я создал простой проект домашней автоматизации с флаттером и ESP32. В моем приложении у меня есть несколько кнопок, которые изменят состояние переменных внутри пожарного депо, если они нажаты или нет. Если нажата, отправить True, если не false. Я пытаюсь сделать это, но я не могу понять, как это правильно.

Внутри onPressed есть то, что я пробовал, весь код находится внутри класса Stateful:

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: () => (){
        },

Мой пожарный магазин: image

Вторая попытка:

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

Проблема заключалась в формировании кнопки. Код, отправленный Uni, прекрасно работает.

1 Ответ

1 голос
/ 04 мая 2020

Сначала добавьте firebase в ваше приложение: https://firebase.google.com/docs/flutter/setup?platform=ios

(Импорт Firestore)

Вы можете просто обновить свои данные:

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 позволяет вам выполнять 20 000 операций чтения и 50 000 операций записи в день, поэтому, если у вас есть устройства, которым требуется больше, было бы нецелесообразно использовать FireStore в качестве метода связи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...