Flutter Switch для управления реле с помощью RealtimeDB Firebase - PullRequest
1 голос
/ 11 июля 2020

Я пытаюсь создать устройство типа sonoff (https://sonoff.tech/), которое в основном включает и выключает реле, подключаясь к серверу (в моем случае Firebase Realtime), для коммутатора i Я пытаюсь реализовать Flutter Switch в приложении, где переключатель считывает состояние логического значения на сервере и обновляет его в onchanged! Моя серверная часть запущена и готова, даже мой тестовый переключатель работает успешно, только я не могу успешно реализовать переключатель. Образец Firebase

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:firebase_database/firebase_database.dart';


class SwitchPage extends StatefulWidget {
  static const String id = 'switch_screen';

  @override
  _SwitchPageState createState() => _SwitchPageState();
}

class _SwitchPageState extends State<SwitchPage> {
  final DBref = FirebaseDatabase.instance.reference();

  bool isSwitched;
  bool newVal;


  void LedOn() async {
    await DBref.child("DHT11")
        .child("Device1")
        .child("LED_STATUS")
        .update({'DATA': 'TRUE'});
  }

  void LedOFF() async {
    await DBref.child("DHT11")
        .child("Device1")
        .child("LED_STATUS")
        .update({'DATA': 'FALSE'});
  }

  void getStatus() async {
    String newValue = (await FirebaseDatabase.instance
            .reference()
            .child("DHT11/Device1/LED_STATUS/DATA")
            .once())
        .value;
    print(isSwitched);
    print(newValue);
    setState(() {
      if (newValue == 'TRUE') {
        isSwitched = true;
      } else {
        isSwitched = false;
      }
    });
  }


  @override
  void initState() {
    getStatus(); 
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return SafeArea(
      child: Scaffold(
          appBar: AppBar(
            title: Text('Device Center'),
          ),
          backgroundColor: Colors.white,
          body: Column(
            children: <Widget>[
              FlatButton(
                  onPressed: () async {
                    await getStatus();
                  },
                  child: Text('TEST STATUS')),
              FlatButton(
                  onPressed: () {
                    LedOn();
                    print('ON');
                  },
                  child: Text('LED ON')),
              FlatButton(
                  onPressed: () {
                    LedOFF();
                    print('OFF');
                  },
                  child: Text('LED OFF')),
              Switch(
                value: isSwitched,
                onChanged: (value) {
                  setState(() {
                    isSwitched = value;
                    if (isSwitched == "TRUE") {
                      return LedOFF();
                    } else if (isSwitched == "FALSE") {
                      return LedOn();
                    }
                  });
                },
              ),
            ],
          )),
    );
  }
}
...