Firebase 使用Firestore布尔值设置开关的值
我正在制作一个在Firestore中切换布尔值的测试应用程序。我需要应用程序从Firestore检索开关的初始值。通过我的方法,我得到错误类型“Future”不是类型“bool”的子类型。布尔值称为LEDOn。这是我的应用程序:Firebase 使用Firestore布尔值设置开关的值,firebase,flutter,google-cloud-firestore,Firebase,Flutter,Google Cloud Firestore,我正在制作一个在Firestore中切换布尔值的测试应用程序。我需要应用程序从Firestore检索开关的初始值。通过我的方法,我得到错误类型“Future”不是类型“bool”的子类型。布尔值称为LEDOn。这是我的应用程序: import 'package:flutter/material.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; void main() => runApp(MyApp()); cla
import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _MyAppState();
}
}
class _MyAppState extends State<MyApp> {
final db = Firestore.instance;
void updateLED(bool newValue) async {
await db
.collection('LEDStatus')
.document('LEDStatus')
.updateData({'LEDOn': newValue});
}
Future<dynamic> checkLEDStatus() async {
DocumentSnapshot snapshot =
await db.collection('LEDStatus').document('LEDStatus').get();
return snapshot.data['LEDOn'];
}
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData(brightness: Brightness.dark),
home: Scaffold(
appBar: AppBar(
title: Text('Thingspeak'),
),
body: Column(
children: <Widget>[
Switch(
value: checkLEDStatus(),
onChanged: (bool newValue) {
setState(() {
print(newValue);
updateLED(newValue);
});
})
],
),
),
);
}
}
导入“包装:颤振/材料.省道”;
导入“包:cloud_firestore/cloud_firestore.dart”;
void main()=>runApp(MyApp());
类MyApp扩展了StatefulWidget{
@凌驾
状态createState(){
返回_MyAppState();
}
}
类MyAppState扩展了状态{
final db=Firestore.instance;
void updateLED(bool newValue)异步{
等待数据库
.collection('LEDStatus')
.文件('LEDStatus')
.updateData({'LEDOn':newValue});
}
Future checkLEDStatus()异步{
文档快照快照=
等待db.collection('LEDStatus')。document('LEDStatus')。get();
返回snapshot.data['LEDOn'];
}
@凌驾
小部件构建(构建上下文){
返回材料PP(
主题:主题数据(亮度:亮度.暗),
家:脚手架(
appBar:appBar(
标题:文本(“Thingspeak”),
),
正文:专栏(
儿童:[
开关(
值:checkLEDStatus(),
一旦更改:(bool newValue){
设置状态(){
打印(新值);
更新(newValue);
});
})
],
),
),
);
}
}
开关
小部件具有属性值
,该属性的值类型为bool
。当前在代码中,您返回的是一个Future
,这就是为什么会出现该错误。应该是这样的:
Switch(
value: isSwitched,
onChanged: (value) {
setState(() {
isSwitched = value;
});
},
您可以从initState
中的firestore中检索布尔值,然后将其分配给属性值
。然后,当用户在setState()
内部切换时,调用更新方法并执行isSwitched=newValue
时,Switch
小部件具有属性value
,该属性的值为bool
类型。当前在代码中,您返回的是一个Future
,这就是为什么会出现该错误。应该是这样的:
Switch(
value: isSwitched,
onChanged: (value) {
setState(() {
isSwitched = value;
});
},
您可以从initState
中的firestore中检索布尔值,然后将其分配给属性值
。然后,当用户在setState()
内切换时,调用更新方法并执行isSwitched=newValue
使用FutureBuilder。另外,将您的checkLEDStatus()
返回类型更改为Future
使用FutureBuilder。另外,将您的checkLEDStatus()
返回类型更改为Future