flutter 命名参数“obscured”是必需的,但没有相应的参数,尝试添加所需的参数

d7v8vwbk  于 2023-06-30  发布在  Flutter
关注(0)|答案(3)|浏览(191)

MyTextFields我得到一条消息,需要一个名为“obscured”的参数,但没有相应的参数。尝试添加所需的参数。我已经试着修复了一段时间,但问题还是一样。我把数据放到mysql里。我从youtube上看了这个视频代码,但是教程可以正常运行,没有任何问题。

  1. MyTextFields.dart
  2. class MyTextFields extends StatelessWidget {
  3. MyTextFields(
  4. {super.key,
  5. required this.lableltext,
  6. required this.obscured,
  7. required this.Inputcontroller});
  8. final String lableltext;
  9. final bool obscured;
  10. final TextEditingController Inputcontroller;
  11. @override
  12. Widget build(BuildContext context) {
  13. return Padding(
  14. padding: const EdgeInsets.symmetric(horizontal: 20.0),
  15. child: TextFormField(
  16. obscureText: obscured,
  17. controller: Inputcontroller,
  18. validator: (value) {
  19. if (value!.isEmpty) {
  20. return "$lableltext is required";
  21. }
  22. },
  23. decoration: InputDecoration(
  24. labelText: lableltext,
  25. enabledBorder: OutlineInputBorder(
  26. borderSide: BorderSide(width: 3, color: Colors.blueAccent)),
  27. focusedBorder: OutlineInputBorder(
  28. borderSide: BorderSide(width: 3, color: Colors.blueAccent)),
  29. errorBorder: OutlineInputBorder(
  30. borderSide: BorderSide(width: 3, color: Colors.blueAccent)),
  31. focusedErrorBorder: OutlineInputBorder(
  32. borderSide: BorderSide(width: 3, color: Colors.blueAccent)),
  33. ),
  34. ),
  35. );
  36. }
  37. }
  38. report.dart
  39. class report_problem extends StatefulWidget {
  40. @override
  41. _report_problemState createState() => _report_problemState();
  42. }
  43. class _report_problemState extends State<report_problem> {
  44. TextEditingController name_surname = TextEditingController();
  45. TextEditingController address = TextEditingController();
  46. TextEditingController phone_number = TextEditingController();
  47. TextEditingController area = TextEditingController();
  48. @override
  49. Widget build(BuildContext context) {
  50. return Scaffold(
  51. appBar: AppBar(
  52. backgroundColor: Color.fromARGB(255, 14, 12, 134),
  53. title: const Text('report'),
  54. ),
  55. body: SingleChildScrollView(
  56. child: Column(
  57. children: [
  58. SizedBox(height: 30.0),
  59. Form(
  60. child: Column(
  61. children: [
  62. //Error MyTextFields(
  63. lableltext: "name:", Inputcontroller: name_surname),
  64. SizedBox(height: 10.0),
  65. MyTextFields(lableltext: "address:", Inputcontroller: address),
  66. SizedBox(height: 10.0),
  67. MyTextFields(
  68. lableltext: "number:", Inputcontroller: phone_number),
  69. SizedBox(height: 10.0),
  70. MyTextFields(
  71. lableltext: "location:",
  72. Inputcontroller: area),
  73. ],
  74. ))
  75. ],
  76. ),
  77. ),
  78. );
  79. }
  80. }
g6baxovj

g6baxovj1#

通过写作

  1. MyTextFields(
  2. {super.key,
  3. required this.lableltext,
  4. required this.obscured,
  5. required this.Inputcontroller});

你字面上说你必须在调用构造函数的任何地方填充隐藏的参数,但你没有这样做,例如在

  1. MyTextFields(lableltext: "address:", Inputcontroller: address)

所以改成

  1. MyTextFields(lableltext: "address:", obscured: false, Inputcontroller: address)

或通过提供默认值使其不需要,如

  1. MyTextFields(
  2. {super.key,
  3. required this.lableltext,
  4. this.obscured = false,
  5. required this.Inputcontroller});
展开查看全部
uajslkp6

uajslkp62#

按照调用构造函数的方式,所有三个字段都是必需的,并且已经初始化了它们。把这个换掉

  1. MyTextFields(
  2. {super.key,
  3. required this.lableltext,
  4. required this.obscured,
  5. required this.Inputcontroller});

  1. MyTextFields(
  2. {super.key,
  3. required this.lableltext,
  4. this.obscured = false,
  5. required this.Inputcontroller});

这将给予默认值为obscure(false),除非您对其进行初始化。希望这能消除你的错误。

展开查看全部
7y4bm7vi

7y4bm7vi3#

有一些方法可以解决你的问题。构建MyTextFields Widget的方式向Dart表明,要示例化类,需要一个布尔参数obscured,沿着其他必要的参数,例如:labletextInputcontroller
我可以想象,您不希望总是在MyTextFields Widget构造器上设置这个参数,以避免代码中出现不必要的文本。所以,你可以通过在MyTextFields构造函数上向obscured添加一个默认值来解决问题,如下所示:

  1. class MyTextFields extends StatelessWidget {
  2. MyTextFields(
  3. {super.key,
  4. this.obscured = false,
  5. required this.lableltext,
  6. required this.Inputcontroller});
  7. final String lableltext;
  8. final bool obscured;
  9. final TextEditingController Inputcontroller;

它可以让您保持代码原来的样子,但是当您想使用MyTextFields小部件时,您只能在示例化它的地方添加此参数。像这样:

  1. MyTextFields(
  2. lableltext: "name:", Inputcontroller: name_surname, obscured: true),
  3. SizedBox(height: 10.0),
  4. MyTextFields(lableltext: "address:", Inputcontroller: address),
  5. SizedBox(height: 10.0),
  6. MyTextFields(
  7. lableltext: "number:", Inputcontroller: phone_number, obscured: true),
  8. SizedBox(height: 10.0),
展开查看全部

相关问题