如何获取复选框值以用于其他功能?

时间:2019-09-27 17:28:13

标签: flutter dart

我有一个显示复选框的小部件。复选框显示星期几。 我很好奇我如何在其他函数中使用下面的值? 例如,如何在另一个功能中知道用户在一周的工作日中选择了什么?

这是我的复选框小部件代码:

  bool monVal = false;
  bool tuVal = false;
  bool wedVal = false;
  bool thurVal = false;
  bool friVal = false;
  bool satVal = false;
  bool sunVal = false;

  Widget checkbox(String title, bool boolValue) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Text(title),
        Checkbox(
          value: boolValue,
          onChanged: (bool value) {
            /// manage the state of each value
            setState(() {
              switch (title)
              {
                case "Mon":
                  monVal = value;
                  print(value);
                  break;
                case "Tu":
                  tuVal = value;
                  print(value);
                  break;
                case "Wed":
                  wedVal = value;
                  print(value);

                  break;
                case "Thur":
                  thurVal = value;
                  print(value);

                  break;
                case "Fri":
                  friVal = value;
                  print(value);

                  break;
                case "Sat":
                  satVal = value;
                  print(value);

                  break;
                case "Sun":
                  sunVal = value;
                  print(value);

                  break;
              }
            });
          },
        )
      ],
    );
  }

print(value)是没有意义的。.我只是尝试看看是否可以选择星期几,但它只会返回true或false。

这是我用来显示复选框的代码。

                  child: Center(
                    child: Column(
                      mainAxisAlignment: MainAxisAlignment.center,
                      children: <Widget>[
                        Row(
                          mainAxisAlignment: MainAxisAlignment.center,
                          children: <Widget>[
                            checkbox("Mon", monVal),
                            checkbox("Tu", tuVal),
                            checkbox("Wed", wedVal),
                            checkbox("Thur", thurVal),
                            checkbox("Fri", friVal),
                            checkbox("Sat", satVal),
                            checkbox("Sun", sunVal),

                          ],
                        ),
                      ],
                    ),
                  )

3 个答案:

答案 0 :(得分:1)

创建几天的enum并创建一个全局变量day,您也可以在另一个文件中使用它。

enum Day { sun, mon, tue, wed, thu, fri, sat }

Day day = Day.sun; // default day

并使用这种方法

Widget checkbox(String title, bool boolValue) {
  return Column(
    mainAxisAlignment: MainAxisAlignment.center,
    children: <Widget>[
      Text(title),
      Checkbox(
        value: boolValue,
        onChanged: (bool value) {
          setState(() {
            switch (title) {
              case "Sun":
                setState(() => day = Day.sun);
                break;
              case "Mon":
                setState(() => day = Day.mon);
                break;
              case "Tu":
                setState(() => day = Day.tue);
                break;
              case "Wed":
                setState(() => day = Day.wed);
                break;
              case "Thur":
                setState(() => day = Day.thu);
                break;
              case "Fri":
                setState(() => day = Day.fri);
                break;
              case "Sat":
                setState(() => day = Day.sat);
                break;
            }
          });
        },
      )
    ],
  );
}

只要您需要知道选择哪一天,只需使用变量day,它可以是Day.sun, Day.mon, Day.tue ... Day.sat

答案 1 :(得分:1)

如果要跟踪多天,则可以像这样使用Map<String, bool>

Map<String, bool> days = {}; // global variable

您的函数如下:

Widget checkbox(String title, bool boolValue) {
  return Column(
    mainAxisAlignment: MainAxisAlignment.center,
    children: <Widget>[
      Text(title),
      Checkbox(
        value: boolValue,
        onChanged: (bool value) {
          boolValue = value; // forgot to add this
          setState(() => days[title] = value);
        },
      )
    ],
  );
}

现在您只需使用

bool isMondayChecked = days["Mon"]; 

答案 2 :(得分:1)

屏幕截图:

enter image description here


回答已编辑的帖子:

static String sun = "Sun";
static String mon = "Mon";
static String tue = "Tue";
static String wed = "Wed";

Map<String, bool> days = {
  sun: false,
  mon: false,
  tue: false,
  wed: false,
}; // global variable

@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(),
    body: Column(
      children: <Widget>[
        checkbox(sun, days[sun]),
        checkbox(mon, days[mon]),
        checkbox(tue, days[tue]),
        checkbox(wed, days[wed]),
      ],
    ),
  );
}

Widget checkbox(String title, bool boolValue) {
  return Column(
    mainAxisAlignment: MainAxisAlignment.center,
    children: <Widget>[
      Text(title),
      Checkbox(
        value: boolValue,
        onChanged: (value) => setState(() => days[title] = value),
      )
    ],
  );
}