为了创建返回TextFormField的可重用小部件,有没有办法将onSaved(值)传递给另一个在调用onSaved时需要更新的小部件? 我想我对这段代码已经差不多了,只是在将(值)添加到类中时出现了一个错误

  class InputName extends StatefulWidget {
  final TextEditingController controller;
   
  final Function(value)? onSaved;
  //this is where i get the error "Undefined class 'value' "

  const InputName({Key? key, required this.controller, this.onSaved}) : super(key: key);

  @override
  State<InputName> createState() => _InputNameState();
}

class _InputNameState extends State<InputName> {
  @override
  Widget build(BuildContext context) {  //inputNameWidget
    return Padding(
      padding: const EdgeInsets.only(left: 16.0, right: 16),
      child: TextFormField(
        keyboardType: TextInputType.text,
        controller: widget.controller,
        style: TextStyle(fontSize: 20, height: 0.6),
        validator: (value) {
          if(value!.isEmpty ){
            return 'Please enter a name';
          }else{
            return null;
          }},
        
        onSaved: (value){
          widget.onSaved?.call(value);
        }

      ),
    );
  }

然后将值传递给另一个小部件:

InputName(controller: _nameController,
                       onSaved: (value){
                            _categoryName = value!;
                            },

            ),

Update

  class InputName extends StatefulWidget {
  final TextEditingController controller;
  final Function(String)? onSaved;
  final Function(String)? validator;

  const InputName({Key? key, required this.controller,  this.onSaved, this.validator}) : super(key: key);

 //then-->
 validator: (value){
      widget.validator;
    },
    onSaved: (value){
      widget.onSaved;
    }

 //my other widget class
  InputName(
     controller: _nameController,
                onSaved: (value) {
                  _categoryName = value;
                },
                validator: (value) {
                  if (value.isEmpty) {
                    return 'Please enter a name';
                  } else {
                    return null;
                  }
                }),

推荐答案

将您的InputName级更改为:

class InputName extends StatefulWidget {
  final TextEditingController controller;
  final String? Function(String?)? validator; //<--- change this
  final Function(String?)? onSaved;//<--- change this

  const InputName({Key? key, required this.controller, this.onSaved, this.validator})
      : super(key: key);

  @override
  State<InputName> createState() => _InputNameState();
}

同时更改_InputNameState级中的onSavedvalidator:

onSaved: widget.onSaved,
validator: widget.validator,

Flutter相关问答推荐

壁炉有序在Flutter

Riverpod状态管理-在调用请求时更新用户界面

为什么Flutter 翼扩展卡有上下边框?

出现异常.RangeError(RangeError(index):无效值:有效值范围为空:0).分度误差

如何将Xpriter代码页更改为代码页27?

BoxConstraints强制使用无限宽度(列中的Listview)

Flutter 块消费者仅对特定的状态属性更改做出react

有没有方法可以从当前时间轻松计算TimeStamp?

如何在 Flutter 中创建具有渐变背景色的自定义 Snackbar?

如何使用 Material3 创建带有高度的完美白色提升按钮?

如何在flutter中将所有单词的第一个字母大写

通过一个具体的例子理解Flutter约束的本质

在 Flutter 中读取 Firebase 数据库数据时遇到问题

如何在 flutter 的alert 对话框中实现进度指示器?

如何在 Flutter 执行通知时运行后台代码?

使用 onPressed 切换到另一个屏幕无法正常工作

Flutter Web Responsiveness 效率不高

在 Flutter Bloc 中具有称为 status 的属性的一种状态或不同的状态,哪个更可取?

我们什么时候在flutter中初始化一个provider?

单击列表视图导航到 Flutter 中的另一个页面