我有一个显示复选框的小部件。复选框显示星期几。 我很好奇我如何在其他函数中使用下面的值? 例如,如何在另一个功能中知道用户在一周的工作日中选择了什么?
这是我的复选框小部件代码:
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),
],
),
],
),
)
答案 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)
屏幕截图:
回答已编辑的帖子:
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),
)
],
);
}