Flutter Widget defaultFormField函数参数配置问题求助
解决Flutter自定义defaultFormField添加可选回调参数的问题
正确的参数定义方式
首先明确,Dart里可选参数要么是可空类型(带?)且不加required,要么是带默认值的非空类型。针对你的需求,自定义Widget的参数写法应该是:
Widget defaultFormField({ // 保留你的必填参数,比如controller、hintText等 required TextEditingController controller, required String hintText, // 定义可选回调,指定正确参数类型并设为可空 void Function(String)? onSubmit, void Function(String)? onChange, // 其他可选参数... }) { return TextFormField( controller: controller, hintText: hintText, // 直接将自定义参数赋值给系统回调 onFieldSubmitted: onSubmit, onChanged: onChange, // 其他TextFormField配置... ); }
问题原因及解决点
被迫加required的原因:
你之前定义的Function()是非空类型,Dart要求非空参数必须加required或提供默认值。改成void Function(String)?(可空类型)后,就不需要required,自动成为可选参数。无法传入参数的原因:
基本是类型不匹配导致的:TextFormField的onFieldSubmitted和onChanged要求接收String参数的函数,如果你定义的是无参Function(),类型不兼容就传不进去。必须把参数类型和系统回调保持一致,写void Function(String)?。
调用示例
使用时可选择性传入回调,不需要的直接省略:
defaultFormField( controller: _myController, hintText: "请输入内容", onSubmit: (value) { print("提交内容:$value"); }, onChange: (value) { print("输入变化:$value"); }, );
内容的提问来源于stack exchange,提问作者Ammar
相关产品推荐
相关产品推荐

