Flutter报错:自定义组件MyTextFields必填参数'obscured'未传入
问题解决:Flutter组件缺少必填参数编译报错
报错信息
"The named parameter 'obscured' is required, but there's no corresponding argument. Try adding the required argument"
问题根源
你定义的MyTextFields组件构造函数中,obscured被标记为必填参数(带required修饰),但在report.dart调用该组件时,所有实例都未传递这个参数,导致编译失败。
两种可行解决方法
方法1:调用时显式传入obscured参数
你的输入框都是普通文本输入(姓名、地址等无需隐藏内容),直接传递obscured: false即可:
// 修改report.dart中的组件调用 MyTextFields( lableltext: "name:", obscured: false, // 新增必填参数 Inputcontroller: name_surname ), MyTextFields( lableltext: "address:", obscured: false, Inputcontroller: address ), MyTextFields( lableltext: "number:", obscured: false, Inputcontroller: phone_number ), MyTextFields( lableltext: "location:", obscured: false, Inputcontroller: area ),
方法2:给obscured设置默认值(更灵活)
如果希望大部分输入框默认不隐藏内容,仅在需要时传递参数,可以修改MyTextFields的构造函数,给obscured添加默认值并移除required修饰:
// 修改MyTextFields.dart的构造函数 MyTextFields( {super.key, required this.lableltext, this.obscured = false, // 设置默认值为false required this.Inputcontroller});
修改后,普通文本框调用时无需传obscured,只有密码框这类需要隐藏内容的输入框,再传递obscured: true即可。
修改后的完整代码示例
MyTextFields.dart(方法2修改后)
class MyTextFields extends StatelessWidget { MyTextFields( {super.key, required this.lableltext, this.obscured = false, required this.Inputcontroller}); final String lableltext; final bool obscured; final TextEditingController Inputcontroller; @override Widget build(BuildContext context) { return Padding( padding: const EdgeInsets.symmetric(horizontal: 20.0), child: TextFormField( obscureText: obscured, controller: Inputcontroller, validator: (value) { if (value!.isEmpty) { return "$lableltext is required"; } }, decoration: InputDecoration( labelText: lableltext, enabledBorder: OutlineInputBorder( borderSide: BorderSide(width: 3, color: Colors.blueAccent)), focusedBorder: OutlineInputBorder( borderSide: BorderSide(width: 3, color: Colors.blueAccent)), errorBorder: OutlineInputBorder( borderSide: BorderSide(width: 3, color: Colors.blueAccent)), focusedErrorBorder: OutlineInputBorder( borderSide: BorderSide(width: 3, color: Colors.blueAccent)), ), ), ); } }
report.dart(方法1修改后,方法2无需修改)
class report_problem extends StatefulWidget { @override _report_problemState createState() => _report_problemState(); } class _report_problemState extends State<report_problem> { TextEditingController name_surname = TextEditingController(); TextEditingController address = TextEditingController(); TextEditingController phone_number = TextEditingController(); TextEditingController area = TextEditingController(); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( backgroundColor: Color.fromARGB(255, 14, 12, 134), title: const Text('report'), ), body: SingleChildScrollView( child: Column( children: [ SizedBox(height: 30.0), Form( child: Column( children: [ MyTextFields( lableltext: "name:", obscured: false, Inputcontroller: name_surname), SizedBox(height: 10.0), MyTextFields( lableltext: "address:", obscured: false, Inputcontroller: address), SizedBox(height: 10.0), MyTextFields( lableltext: "number:", obscured: false, Inputcontroller: phone_number), SizedBox(height: 10.0), MyTextFields( lableltext: "location:", obscured: false, Inputcontroller: area), ], )) ], ), ), ); } }
内容的提问来源于stack exchange,提问作者KHL kh
相关产品推荐
相关产品推荐

