flutter - 从有状态小部件中的 FormField 扩展

标签 flutter

从有状态小部件中的 FormField 扩展

我有一个带有属性和功能的有状态小部件。我想从 FormField 扩展小部件,因为我需要验证小部件上的一些用户输入。

似乎无法从多个类(StatefulWidget 和 FormField)进行扩展。

如果我尝试创建一个从 FormField 扩展的普通类:

class CustomInput extends FormField<bool> {
  final Widget label;
  final void Function(bool?) onChanged;

  userClicked() {
    print('User clicked');
  }

  CustomInput({
    required this.label,
    required this.onChanged,
    FormFieldValidator<bool>? validator,
  }) : super(
          validator: validator,
          builder: (field) {           
            return Column(
              children: [
                TextButton(
                  onPressed: () => userClicked(), //<-- The instance member 'userClicked' can't be accessed in an initializer.
                  child: Text('Call internal function'),
                ),
            

...然后我无法访问内部方法,因为“无法在初始化程序中访问实例成员“userClicked”。”错误。

那么如何创建一个从 FormField 扩展的小部件以使用 validatoronChangedonSaved 等,但同时又时间有内部逻辑可以从widget树正常访问吗?

最佳答案

解决方案不是扩展 FormField,而是从 StatefulWidget 返回 FormField。在本例中,验证内容是一个字符串数组,但它当然可以是任何内容:

class CustomInput extends StatefulWidget {
  final String? Function(List<String>)? validator;
  final Function(List<String>)? onChanged;

  const CustomInput({this.onChanged, this.validator, Key? key}) : super(key: key);

  @override
  State<CustomInput> createState() => _CustomInputState();
}

class _CustomInputState extends State<CustomInput> {

  @override
  void initState() {
    super.initState();
  }
  
 userClicked() {
    print('User clicked');
  }

  @override
  Widget build(BuildContext context) {
    return FormField(validator: ((value) {
      if (widget.validator != null) {
        return widget.validator!(widget.imagePaths);
      }
      return null;
    }), builder: (FormFieldState<List<String>> state) {
      return Column(
              children: [
                TextButton(
                  onPressed: () => userClicked(), //<-- The instance member 'userClicked' can't be accessed in an initializer.
                  child: Text('Call internal function'),
                ),
                ]
          );
        
    });
  }
}

关于flutter - 从有状态小部件中的 FormField 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74277545/

相关文章:

flutter - 动态更改 gridview 横轴计数以填充 flutter 中的动态列

dart - mulFromInteger 在 null 时被调用

android - 如何减少 flutter 中的视频录制大小?

flutter - 从导航堆栈弹出后打开屏幕时调用哪个函数?

flutter - 处理小部件内部的 Future<String>

firebase - 我怎样才能等到在 Flutter 中检索到 Firebase 数据库数据?

flutter - 如何在 PageView 内的 TabBarView 上滚动 "merge"?

ios - 如何在 iOS 中安装用 Flutter 编写的应用程序?

flutter - 在 Dart/Flutter 中动态访问类的属性

flutter - 每次按下导航项时,底部导航栏都会重新加载所有小部件