微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Flutter 来回获取类字段值

如何解决Flutter 来回获取类字段值

我正在尝试创建一个自定义复选框小部件,但无法从另一个类中获取该复选框的 bool 值: 所以我在有状态小部件注册中有一个表单,在这个表单中我调用我的 CustomCheckBox 小部件(也是一个有状态小部件)。

问题:当我单击复选框时,它在 CustomCheckBox 小部件中的值更改为 true,但是在“注册”小部件中提交表单后,该值始终为 false(两个小部件之间没有后台通信)

我的 CustomCheckBox 代码

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 举报,一经查实,本站将立刻删除。