Firebase 如何在颤振中更改StreamBuilder中特定切换开关的状态
我正在使用Flatter构建一个学校服务跟踪应用程序。因为我是移动应用开发的新手,所以我面临着很多错误。其中之一是, 用户登录应用程序后,在仪表板中,它将在卡片小部件中显示其子女的个人资料。每个配置文件作为切换开关按钮更新其出勤情况 只要他们点击开关按钮,数据库中的数据就会更新。但不知道如何改变点击切换开关按钮的状态 我正在使用Google Firebase Firestore数据库Firebase 如何在颤振中更改StreamBuilder中特定切换开关的状态,firebase,flutter,google-cloud-firestore,state,toggleswitch,Firebase,Flutter,Google Cloud Firestore,State,Toggleswitch,我正在使用Flatter构建一个学校服务跟踪应用程序。因为我是移动应用开发的新手,所以我面临着很多错误。其中之一是, 用户登录应用程序后,在仪表板中,它将在卡片小部件中显示其子女的个人资料。每个配置文件作为切换开关按钮更新其出勤情况 只要他们点击开关按钮,数据库中的数据就会更新。但不知道如何改变点击切换开关按钮的状态 我正在使用Google Firebase Firestore数据库 CustomScrollView( slivers: <Widget&g
CustomScrollView(
slivers: <Widget>[
SliverList(
delegate: SliverChildListDelegate([
whiteLogo(), // this is a logo widget
]),
),
StreamBuilder(
stream: Firestore.instance.collection('profiles').snapshots(),
builder: (context, snapshot) => SliverList(
delegate: SliverChildBuilderDelegate((context, index) =>
Container(
child: userCard(context, snapshot.data.documents[index]), // profile card
),
childCount: snapshot.hasData ? snapshot.data.documents.length : 0,
),
)
)
],
)
这是我的数据库结构
配置文件(子项)表结构
以下是考勤表的结构。每个文档将以特定日期的名称每天创建一次。在每个文档配置文件中,ID存储为子集合
在每个配置文件子集合中,文档将在配置文件名称下包含考勤详细信息
这就是我从数据库检索数据的方式
CustomScrollView(
slivers: <Widget>[
SliverList(
delegate: SliverChildListDelegate([
whiteLogo(), // this is a logo widget
]),
),
StreamBuilder(
stream: Firestore.instance.collection('profiles').snapshots(),
builder: (context, snapshot) => SliverList(
delegate: SliverChildBuilderDelegate((context, index) =>
Container(
child: userCard(context, snapshot.data.documents[index]), // profile card
),
childCount: snapshot.hasData ? snapshot.data.documents.length : 0,
),
)
)
],
)
在当前实现中,开关状态不反映数据库的值,因为没有更新其值的数据订阅。您可以将
UserCard
小部件设为无状态,只需使用StreamBuilder
从考勤收集中读取开关的值即可
类似这样的操作可以实现这一目的,您的考勤开关将根据考勤文档设置其状态(如果尚未创建文档,则应将其设置为false
)
列(
儿童:[
正文(
“缺席/出席”,
样式:TextStyle(
颜色:颜色(0xff868686),
字体大小:12.0
),
),
StreamBuilder(
流:attendanceReference.snapshots(),
initialData:null,
建造商:(ctx,snap){
返回开关(
值:snap.data==null?false:snap.data[“考勤状态”],
一旦更改:(值){
Firestore.instance.runTransaction((事务)异步{
DocumentSnapshot freshSnap=等待事务.get(attendanceReference);
等待事务处理。更新(freshSnap.reference{
“出席情况”:值
});
});
},
);
},
)
感谢您的快速响应。出现了一个错误弹出窗口。引发了另一个异常:“DocumentSnapshot”类型不是“bool”类型的子类型。
Ya,很抱歉在值分配中出现了错误。请尝试查看分配开关
值的行现在是否工作得更好。您就是那个人。它工作得很好。一个小的e出现了错误。在我将检索方法更改为这种方式后,它工作了。snap.data[“考勤状态”]
很高兴听到这个消息!我更新了答案以反映:-)
initState() {
status = true;
super.initState();
}