You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 01:58:19