firebase - 在 Flutter 的 Firestore 中存储多个 Checkbox 值
问题描述
我为老年人开发了一个应用程序,当他们唱歌时,该应用程序要求他们从多种慢性病中选择他们患有的Checkbox
慢性病 DropDown
。那么我想把这些多项选择存储在 Cloud Firestore 中,我需要知道如何 stroe 吗?我的代码是:
import 'package:flutter/material.dart';
import 'Constants.dart';
import 'checkBox.dart';
class ChronicDiseaseDropDown extends StatelessWidget {
Color borderColor;
Color hintColor;
Color iconColor;
ChronicDiseaseDropDown({
this.borderColor = white,
this.hintColor = white,
this.iconColor = white,
});
@override
//List<Map<String, String>> chronicDisease= [{'id':'1', 'disease':'أمراض القلب'},];
final chronicDiseaseList = const [
{'id': 1, 'disease': 'أمراض القلب'},
{'id': 2, 'disease': 'أمراض السكري'},
{'id': 3, 'disease': 'أمراض الجهاز التنفسي'},
{'id': 4, 'disease': 'أمراض السرطان'},
{'id': 5, 'disease': 'أمراض ارتفاع ضغط الدم'},
];
bool isHeartDisease = false;
bool isDiabetes = false;
bool isRespiratorySystemDisease = false;
bool isCancer = false;
bool isHighBloodDisease = false;
String dropdownValue = 'First';
@override
Widget build(BuildContext context) {
return SizedBox(
height: 50,
width: 350,
child: DropdownButtonFormField(
iconSize: 50,
iconEnabledColor: iconColor,
decoration: InputDecoration(
hintText: 'الأمراض المزمنة',
hintStyle: TextStyle(
fontSize: 23, fontWeight: FontWeight.bold, color: hintColor),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(
color: borderColor,
),
borderRadius: BorderRadius.circular(30.0),
),
),
items: [
DropdownMenuItem(
child: Row(
children: <Widget>[
CheckboxSelectorPage(isHeartDisease),
Text(
chronicDiseaseList[0]['disease'],
style: textStyle1,
),
],
),
),
DropdownMenuItem(
child: Row(
children: <Widget>[
CheckboxSelectorPage(isDiabetes),
Text(
chronicDiseaseList[1]['disease'],
style: textStyle1,
),
],
),
),
DropdownMenuItem(
child: Row(
children: <Widget>[
CheckboxSelectorPage(isRespiratorySystemDisease),
Text(
chronicDiseaseList[2]['disease'],
style: textStyle1,
),
],
),
),
DropdownMenuItem(
child: Row(
children: <Widget>[
CheckboxSelectorPage(isCancer),
Text(
chronicDiseaseList[3]['disease'],
style: textStyle1,
),
],
),
),
DropdownMenuItem(
child: Row(
children: <Widget>[
CheckboxSelectorPage(isHighBloodDisease),
Text(
chronicDiseaseList[4]['disease'],
style: textStyle1,
),
],
),
)
].toList(),
onChanged: (value) {},
),
);
}
}
编辑部分:
CheckboxSelectorPage 类代码
class CheckboxSelectorPage extends StatefulWidget {
bool isChecked = false;
CheckboxSelectorPage(this.isChecked, {Key key}) : super(key: key);
@override
_CheckboxSelectorPageState createState() => _CheckboxSelectorPageState();
}
class _CheckboxSelectorPageState extends State<CheckboxSelectorPage> {
@override
Widget build(BuildContext context) {
return Checkbox(
onChanged: (bool value) {
widget.isChecked = value;
setState(() {
widget.isChecked = value;
});
},
value: widget.isChecked,
);
}
}
解决方案
你是说你想要一个布尔数组。如果是这样,它看起来像这样。
yourDocRef.update({
ChronicDiseases: firebase.firestore.FieldValue.arrayUnion(<your booleans here>)
});
要获取文档引用,您必须进行查询,因为您没有可预测的文档 ID,但是一旦您创建对特定文档的引用,上面的代码就会添加到该数组中。也许将文档 id 设置为用户的 id 以便于查找。不确定您是否检查过这篇文章,但这是您的答案。
推荐阅读
- r - 看似受保护的配对列表的垃圾收集
- python - Django 将上传的图片软调整为多种尺寸并上传到相应的文件夹
- c# - 在 ASP.net Core 3.1 中设置会话超时
- javascript - 将图像插入模态对话框
- mysql - 使用 str_to_date 将子字符串转换为 DATE
- typescript - 如何在打字稿中获取firestore引用类型?
- django - 如何使用 get_context_data Django 按用户和文章过滤评论?
- azure-container-instances - Azure 容器实例的最佳实践
- python - 从 pyqtgraph 中将鼠标单击坐标作为列表返回
- javascript - 与 wss 连接时,Websocket Web 客户端得到 1006