如何解决Flutter 来回获取类字段值
我正在尝试创建一个自定义复选框小部件,但无法从另一个类中获取该复选框的 bool 值: 所以我在有状态小部件注册中有一个表单,在这个表单中我调用我的 CustomCheckBox 小部件(也是一个有状态小部件)。
问题:当我单击复选框时,它在 CustomCheckBox 小部件中的值更改为 true,但是在“注册”小部件中提交表单后,该值始终为 false(两个小部件之间没有后台通信)
import 'package:Flutter/material.dart';
import 'package:tunimmo/Constants/palette.dart';
class CustomCheckBox extends StatefulWidget {
bool checked;
final String label;
CustomCheckBox({this.checked,this.label});
@override
_CustomCheckBoxState createState() => _CustomCheckBoxState();
}
class _CustomCheckBoxState extends State<CustomCheckBox> {
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.only(top: 15.0,left: 30,right: 30),child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,children: [
Row(
children: [
Container(
height: 30,decoration: Boxdecoration(
color: myPrimaryColor,),child: Text(" "),Text(' ${widget.label}',style: Theme.of(context).textTheme.bodyText1),],Center(
child: InkWell(
onTap: () {
setState(() {
widget.checked = !widget.checked;
});
},child: Container(
decoration: Boxdecoration(
shape: BoxShape.circle,color: widget.checked ? myPrimaryColor : myWhiteColor,border: Border.all(
color: myPrimaryColor,width: 3,child: Padding(
padding: const EdgeInsets.all(3.0),child: widget.checked
? Icon(
Icons.check,size: 25.0,color: myWhiteColor,)
: Icon(
Icons.check_Box_outline_blank,)),);
}
}
在 Signup 小部件中,我只是调用构造函数并传递一个 bool 字段(预期发送/获取 CustomCheckBox 小部件中的值)和一个字符串标签。
PS:我的表单中有不止一个复选框。
请指教!
解决方法
问题是您没有更改屏幕中的选中值(注册)而是更改自定义复选框,要解决此问题,请在 SignUp 中定义 checked
变量(如果尚未这样做),然后定义函数回调在 checkbox
小部件中,如下所示:
final Function(bool)checkChanged;
CustomCheckBox({this.checked,this.label,this.checkedChanged});
然后在ontap中调用它并改变值
onTap: () {
widget.checkedChanged(!widget.checked);
setState(() {
widget.checked = !widget.checked;
});
}
在调用 CustomCheckbox 时执行以下操作:
CustomCheckBox(
checked:false,label:'a label',checkedChanged:(val){
checked=val;
}
)
并在提交表单时使用该 checked
变量,这应该可以解决您的问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。