如何验证Flutter 翼Form中的复选框?其他所有验证都可以正常工作,但复选框不会显示错误. 以下是我的代码:

FormField(
  validator: (value) {
    if (value == false) {
      return 'Required.';
    }
  },
  builder: (FormFieldState<dynamic> field) {
    return CheckboxListTile(
      value: checkboxValue,
      onChanged: (val) {
        if (checkboxValue == false) {
          setState(() {
            checkboxValue = true;
          });
        } else if (checkboxValue == true) {
          setState(() {
            checkboxValue = false;
          });
        }
      },
      title: new Text(
        'I agree.',
        style: TextStyle(fontSize: 14.0),
      ),
      controlAffinity: ListTileControlAffinity.leading,
      activeColor: Colors.green,
    );
  },
),

推荐答案

这个问题的一个更好的解决方案是创建一个扩展FormField<bool>的类

下面是我是如何做到这一点的:

class CheckboxFormField extends FormField<bool> {
  CheckboxFormField(
      {Widget title,
      FormFieldSetter<bool> onSaved,
      FormFieldValidator<bool> validator,
      bool initialValue = false,
      bool autovalidate = false})
      : super(
            onSaved: onSaved,
            validator: validator,
            initialValue: initialValue,
            builder: (FormFieldState<bool> state) {
              return CheckboxListTile(
                dense: state.hasError,
                title: title,
                value: state.value,
                onChanged: state.didChange,
                subtitle: state.hasError
                    ? Builder(
                        builder: (BuildContext context) =>  Text(
                          state.errorText,
                          style: TextStyle(color: Theme.of(context).errorColor),
                        ),
                      )
                    : null,
                controlAffinity: ListTileControlAffinity.leading,
              );
            });
}

Flutter相关问答推荐

如何在Flutter中的textformfield上显示标签文本?

如何在SingleChildScrollView中使用GridView

Flutter ReorderableListView在可滚动父级中无法完美工作

如何使用新的Riverpod语法将依赖传递给AsyncNotifier?

Flutter AppBar Animation反向调试

Flutter 应用程序中的Firebase实时数据库中的orderByChild()不适用于我

Flutter 隔离.使用多个参数运行

如何在抖动中将PNG图像转换为WebP

无法在仿真器上运行Flutter 项目-文件名太长错误

在 flutter 吧蜂巢中拯救主题

TextField 中的富文本并获取 RenderParagraph

参数类型void Function()无法分配给参数类型void Function(LongPressEndDetails)?

如何拥有 StreamProvider 的多个侦听器,其中稍后添加的侦听器接收最新数据?

Flutter firebase_auth 和 firebase_core 依赖错误

FutureProvider 不返回数据给 UI

如何对齐卡片小部件中的图标按钮?

如何根据应用程序主题(深色和浅色)更改谷歌 map 的主题?

如何在图像上点或(图像的一部分)在 flutter 中点击?

Flutter 本地通知在最新版本中不起作用

构建失败 - 无法解析 io.grpc:grpc-core:[1.28.0]. (是的,我已经升级到 mavenCentral())