【发布时间】:2020-07-27 09:03:04
【问题描述】:
我有很多复选框,你可以看到上传的图片,请先看图片。
现在的问题是您可以看到 3 张卡片视图条件、过敏和过去的手术。所有这些卡片都包含复选框,现在发生的情况是,当我选中或取消选中任何框时,CheckBox 的 UI 不会更新为勾选或取消勾选,并且我在构建方法之外有复选框。
谁能告诉我我做错了什么,我也会分享复选框代码吗?
编辑
动态创建复选框
List<Widget> _dynamicListWidget(List<dynamic> list) {
List<Widget> widgetList = List<Widget>();
for (var i = 0; i < list.length; i++) {
Condition condition = list[i];
widgetList.add(
Container(
width: _containerWidth,
//padding: EdgeInsets.only(top: 2, bottom: 2),
child: Row(
children: <Widget>[
Expanded(
child: Container(
margin: EdgeInsets.only(left: 10),
child: Text(condition.name, style: _textStyle),
)),
//Expanded(child: Container()),
Checkbox(
value: condition.selected,
onChanged: (bool value) {
print("$value value");
setState(() {
condition.selected = value;
});
addRemoveFavHealth(value, condition.id);
},
),
],
),
),
);
}
return widgetList;
}
创建卡片视图
Widget mainbody(String name, List<dynamic> dynamicList) {
final screenWidth = MediaQuery.of(context).size.width;
final screenheight = MediaQuery.of(context).size.height;
print("$screenWidth width of device");
List<Condition> list = List();
return Container(
width: screenWidth * 0.49,
child: Card(
color: Colors.white,
child: Column(
children: <Widget>[
Container(
//width: 200,
padding: EdgeInsets.symmetric(vertical: 8, horizontal: 8),
decoration: BoxDecoration(
color: Colors.black12,
),
child: Row(
children: <Widget>[
ClipOval(
child: Material(
color: Colors.white,
child: SizedBox(
width: 40,
height: 40,
child:
/*Image.asset(
'assets/icons/doc_icon.png'),*/
Icon(
Icons.playlist_add_check,
color: AppTheme.primaryColor,
),
),
),
),
Flexible(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
_localization.localeString(name),
style: TextStyle(color: AppTheme.primaryColor),
),
],
),
),
),
],
),
),
Container(
child: Column(
children: _dynamicListWidget(list),
),
),
],
),
),
);
}
构建方法
@override
Widget build(BuildContext context) {
_localization = AppTranslations.of(context);
return Expanded(
child: SingleChildScrollView(
child: Column(
children: _mainList,
),
)
);
}
在build方法中,_mainList是MAINBODY METHOD的列表。
【问题讨论】:
-
“发生的情况是,当我选中或取消选中任何框时,CheckBox 的 UI 不会更新为选中或取消选中,并且我在构建方法之外有复选框。”你是什么意思你在构建方法之外有复选框?看来您可能需要与我们分享更多代码以及“条件”变量是什么。
-
@JoãoSoares 我的意思是,条件是您可以看到许多复选框并且带有勾选和取消勾选,所以当我取消勾选带有已勾选框的框时会发生什么,它不会改变取消勾选,它仍然勾选,反之亦然......对于构建方法,我将添加更多代码以让您理解。
-
您遇到这个问题是因为您在
CheckBox内的onChanged属性中犯了一些错误(您提供的条件在某种程度上是错误的)。所以请添加更多代码,以便我们为您提供帮助 -
当您按下任何复选框时,您必须在终端中收到一些消息,您可以添加吗?
-
@HardikKumar 我在终端中没有收到任何消息,因为您可以看到 onChange 中有一个打印命令,如果最初为 false,则它会打印该值的 true 并且不会更改复选框的用户界面,当我再次按下同一个复选框时,它会打印相同的真实值,因此这意味着复选框没有更新自身或值没有改变
标签: flutter checkbox flutter-layout