Flutter封装可复用TextFormField时报missing default_value_for parameter错如何解决?
错误截图

报错原因
- Flutter 2.0及以上版本默认启用空安全校验,所有非空的final成员变量必须在构造阶段完成赋值
- 你代码中多个非可空类型的成员变量被放在可选命名参数中,既没有标记
required强制调用方传入,也没有设置默认值,不符合空安全规则,触发参数缺少默认值的报错。 - 涉及的变量包括:
textInputType、hintText、prefixIcon、defaultText、focusNode、controller、functionValidate、parametersValidate、onSubmitField、onFieldTap。
修复方案
方案一:非必填参数改为可空类型
如果对应参数允许调用方不传,直接在类型后加?声明为可空类型即可,修改后完整代码如下:
import 'package:flutter/material.dart'; class TextFormFieldWidget extends StatelessWidget { final TextInputType? textInputType; final String? hintText; final Widget? prefixIcon; final String? defaultText; final FocusNode? focusNode; final bool obscureText; final TextEditingController? controller; final Function? functionValidate; final String? parametersValidate; final TextInputAction actionKeyboard; final Function? onSubmitField; final Function? onFieldTap; const TextFormFieldWidget( {Key? key, this.hintText, this.focusNode, this.textInputType, this.defaultText, this.obscureText = false, this.controller, this.functionValidate, this.parametersValidate, this.actionKeyboard = TextInputAction.next, this.onSubmitField, this.onFieldTap, this.prefixIcon}) : super(key: key); @override Widget build(BuildContext context) { return Container(); } }
后续使用可空参数时,需要通过非空判断、
!强转或??运算符处理空值情况,避免运行时空异常。
方案二:必填参数加required标记
如果部分参数是组件使用时必须传入的,在构造函数的对应参数前加required强制调用方传值即可,示例如下:
// 成员变量保持非空 final String hintText; // 构造函数中标记required const TextFormFieldWidget( {Key? key, required this.hintText, // 其他参数 })
你可以根据业务需求组合使用两种方案:必填参数加required,非必填参数改为可空类型。
内容的提问来源于stack exchange,提问作者Karan Gupta
相关产品推荐
相关产品推荐

