首页 > 解决方案 > 在 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) {},
      ),
    );
  }
}

我想在字段 ChronicDisease 中存储复选框值: 在此处输入图像描述

编辑部分:

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,
    );
  }
}

标签: firebasefluttercheckboxgoogle-cloud-firestore

解决方案


你是说你想要一个布尔数组。如果是这样,它看起来像这样。

yourDocRef.update({
    ChronicDiseases: firebase.firestore.FieldValue.arrayUnion(<your booleans here>)
});

要获取文档引用,您必须进行查询,因为您没有可预测的文档 ID,但是一旦您创建对特定文档的引用,上面的代码就会添加到该数组中。也许将文档 id 设置为用户的 id 以便于查找。不确定您是否检查过这篇文章,但这是您的答案。


推荐阅读