firebase - Flutter Switch 使用 realtimeDB Firebase 控制 Relay
问题描述
我正在尝试创建一个sonoff(https://sonoff.tech/)类型的设备,它基本上通过连接到服务器(在我的情况下为Firebase Realtime)来打开和关闭继电器,对于我正在尝试实现的交换机aa 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();
}
});
},
),
],
)),
);
}
}
解决方案
推荐阅读
- python - 标记和复合词的向量表示
- dagger-2 - 将 Dagger2 与 Lombok 一起使用
- typescript - TypeScript - 找不到名称“图像”
- django - 在 `{% 按钮 %}` 中包裹按钮
- r - R:根据第一次出现分配组值
- firebase - 未能登录到 Firebase 帐户会引发异常并停止颤振应用程序
- c# - JSON 到 XML,以及 C# 中单个对象的一行
- c# - MVC Core 自包含包含 4.6.x System.* dll
- java - mongo-java-driver 3.2 如何动态添加过滤器构建器?
- r - 在执行任务调度程序后将 R 写入 xlsx2 命名 sheetname 今天的日期