Вызов закрытия с несоответствующими аргументами: функция ‘LoginScreen.build.’

#flutter #flutter-layout #dart-null-safety #null-safety

Вопрос:

Здравствуйте, я получаю эту ошибку, когда пытаюсь запустить код

Вот полная ошибка:

 ======== Exception caught by widgets library ======================================================= The following NoSuchMethodError was thrown building LoginScreen(dirty): Closure call with mismatched arguments: function 'LoginScreen.build.lt;anonymous closuregt;' Receiver: Closure: (String) =gt; String? Tried calling: LoginScreen.build.lt;anonymous closuregt;() Found: LoginScreen.build.lt;anonymous closuregt;(String) =gt; String?  The relevant error-causing widget was:   LoginScreen LoginScreen:file:///C:/Users/diaaa/AndroidStudioProjects/udemy_flutter/lib/main.dart:24:13 When the exception was thrown, this was the stack:  #0 Object.noSuchMethod (dart:core-patch/object_patch.dart:63:5) #1 _objectNoSuchMethod (dart:core-patch/object_patch.dart:106:9) #2 defaultFormFeild (package:udemy_flutter/shared/components/components.dart:41:26) #3 LoginScreen.build (package:udemy_flutter/modules/login/login_screen.dart:31:19) #4 StatelessElement.build (package:flutter/src/widgets/framework.dart:4739:28) #5 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4665:15) #6 Element.rebuild (package:flutter/src/widgets/framework.dart:4355:5) #7 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4643:5) #8 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4638:5) ... Normal element mounting (169 frames) #177 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3673:14) #178 MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6333:36) #179 MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6344:32) ... Normal element mounting (362 frames) #541 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3673:14) #542 Element.updateChild (package:flutter/src/widgets/framework.dart:3425:18) #543 RenderObjectToWidgetElement._rebuild (package:flutter/src/widgets/binding.dart:1198:16) #544 RenderObjectToWidgetElement.mount (package:flutter/src/widgets/binding.dart:1167:5) #545 RenderObjectToWidgetAdapter.attachToRenderTree.lt;anonymous closuregt; (package:flutter/src/widgets/binding.dart:1112:18) #546 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2573:19) #547 RenderObjectToWidgetAdapter.attachToRenderTree (package:flutter/src/widgets/binding.dart:1111:13) #548 WidgetsBinding.attachRootWidget (package:flutter/src/widgets/binding.dart:944:7) #549 WidgetsBinding.scheduleAttachRootWidget.lt;anonymous closuregt; (package:flutter/src/widgets/binding.dart:924:7) (elided 11 frames from class _RawReceivePortImpl, class _Timer, dart:async, and dart:async-patch) ====================================================================================================  ======== Exception caught by widgets library ======================================================= The following NoSuchMethodError was thrown building LoginScreen(dirty): Closure call with mismatched arguments: function 'LoginScreen.build.lt;anonymous closuregt;' Receiver: Closure: (String) =gt; String? Tried calling: LoginScreen.build.lt;anonymous closuregt;() Found: LoginScreen.build.lt;anonymous closuregt;(String) =gt; String?  The relevant error-causing widget was:   LoginScreen LoginScreen:file:///C:/Users/diaaa/AndroidStudioProjects/udemy_flutter/lib/main.dart:24:13 When the exception was thrown, this was the stack:  #0 Object.noSuchMethod (dart:core-patch/object_patch.dart:63:5) #1 _objectNoSuchMethod (dart:core-patch/object_patch.dart:106:9) #2 defaultFormFeild (package:udemy_flutter/shared/components/components.dart:41:26) #3 LoginScreen.build (package:udemy_flutter/modules/login/login_screen.dart:31:19) #4 StatelessElement.build (package:flutter/src/widgets/framework.dart:4739:28) #5 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4665:15) #6 Element.rebuild (package:flutter/src/widgets/framework.dart:4355:5) #7 StatelessElement.update (package:flutter/src/widgets/framework.dart:4746:5) #8 Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15) #9 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6202:14) #10 Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15) #11 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4690:16) #12 Element.rebuild (package:flutter/src/widgets/framework.dart:4355:5) #13 StatelessElement.update (package:flutter/src/widgets/framework.dart:4746:5) #14 Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15) #15 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6202:14) #16 Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15) #17 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6202:14) #18 Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15) #19 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4690:16) #20 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4840:11) #21 Element.rebuild (package:flutter/src/widgets/framework.dart:4355:5) #22 StatefulElement.update (package:flutter/src/widgets/framework.dart:4872:5) #23 Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15) #24 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6202:14) #25 Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15) #26 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6202:14) #27 Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15) #28 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4690:16) #29 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4840:11) #30 Element.rebuild (package:flutter/src/widgets/framework.dart:4355:5) #31 StatefulElement.update (package:flutter/src/widgets/framework.dart:4872:5) #32 Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15) #33 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4690:16) #34 Element.rebuild (package:flutter/src/widgets/framework.dart:4355:5) #35 StatelessElement.update (package:flutter/src/widgets/framework.dart:4746:5) #36 Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15) #37 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4690:16) #38 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4840:11) #39 Element.rebuild (package:flutter/src/widgets/framework.dart:4355:5) #40 StatefulElement.update (package:flutter/src/widgets/framework.dart:4872:5) #41 Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15) #42 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6202:14) #43 Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15) #44 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6202:14) #45 Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15) #46 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4690:16) #47 Element.rebuild (package:flutter/src/widgets/framework.dart:4355:5) #48 ProxyElement.update (package:flutter/src/widgets/framework.dart:5020:5) #49 _InheritedNotifierElement.update (package:flutter/src/widgets/inherited_notifier.dart:181:11) #50 Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15) #51 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6202:14) #52 Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15) #53 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4690:16) #54 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4840:11) #55 Element.rebuild (package:flutter/src/widgets/framework.dart:4355:5) #56 StatefulElement.update (package:flutter/src/widgets/framework.dart:4872:5) #57 Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15) #58 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4690:16) #59 Element.rebuild (package:flutter/src/widgets/framework.dart:4355:5) #60 ProxyElement.update (package:flutter/src/widgets/framework.dart:5020:5) #61 Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15) #62 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4690:16) #63 Element.rebuild (package:flutter/src/widgets/framework.dart:4355:5) #64 ProxyElement.update (package:flutter/src/widgets/framework.dart:5020:5) #65 Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15) #66 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4690:16) #67 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4840:11) #68 Element.rebuild (package:flutter/src/widgets/framework.dart:4355:5) #69 StatefulElement.update (package:flutter/src/widgets/framework.dart:4872:5) #70 Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15) #71 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4690:16) #72 Element.rebuild (package:flutter/src/widgets/framework.dart:4355:5) #73 StatelessElement.update (package:flutter/src/widgets/framework.dart:4746:5) #74 Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15) #75 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4690:16) #76 Element.rebuild (package:flutter/src/widgets/framework.dart:4355:5) #77 StatelessElement.update (package:flutter/src/widgets/framework.dart:4746:5) #78 Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15) #79 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6202:14) #80 Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15) #81 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4690:16) #82 Element.rebuild (package:flutter/src/widgets/framework.dart:4355:5) #83 ProxyElement.update (package:flutter/src/widgets/framework.dart:5020:5) #84 Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15) #85 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4690:16) #86 Element.rebuild (package:flutter/src/widgets/framework.dart:4355:5) #87 ProxyElement.update (package:flutter/src/widgets/framework.dart:5020:5) #88 Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15) #89 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4690:16) #90 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4840:11) #91 Element.rebuild (package:flutter/src/widgets/framework.dart:4355:5) #92 StatefulElement.update (package:flutter/src/widgets/framework.dart:4872:5) #93 Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15) #94 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4690:16) #95 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4840:11) #96 Element.rebuild (package:flutter/src/widgets/framework.dart:4355:5) #97 StatefulElement.update (package:flutter/src/widgets/framework.dart:4872:5) #98 Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15) #99 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4690:16) #100 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4840:11) #101 Element.rebuild (package:flutter/src/widgets/framework.dart:4355:5) #102 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2620:33) #103 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:882:21) #104 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:319:5) #105 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1143:15) #106 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1080:9) #107 SchedulerBinding.scheduleWarmUpFrame.lt;anonymous closuregt; (package:flutter/src/scheduler/binding.dart:863:7) (elided 4 frames from class _RawReceivePortImpl, class _Timer, and dart:async-patch) ====================================================================================================  

Мой код для входа в систему:

 import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:udemy_flutter/shared/components/components.dart'; class LoginScreen extends StatelessWidget {  var emailController = TextEditingController();  var passController = TextEditingController();  var formKey = GlobalKeylt;FormStategt;();  @override  Widget build(BuildContext context) {  return Scaffold(  appBar: AppBar(),  body: Padding(  padding: const EdgeInsets.all(20.0),  child: Center(  child: SingleChildScrollView(  child: Form(  key: formKey,  child: Column(  crossAxisAlignment: CrossAxisAlignment.start,  children: [  const Text(  'Login',  style: TextStyle(  fontSize: 40.0,  fontWeight: FontWeight.bold  ),  ),  const SizedBox(  height: 40.0,  ),  defaultFormFeild(  controller: emailController,  label: 'Email',  prefix: Icons.email,  type: TextInputType.emailAddress,  validate: (String value){  if(value.isEmpty != null){  return 'Email Cannot Be Empty';  }  return null;  }  ),  const SizedBox(  height: 15.0,  ),  TextFormField(  controller: passController,  obscureText: true,  keyboardType: TextInputType.visiblePassword,  decoration: const InputDecoration(  border: OutlineInputBorder(),  labelText: 'Password',  prefixIcon: Icon(  Icons.lock  ),  suffixIcon: Icon(  Icons.remove_red_eye,  )  ),  onChanged: (value) {  print(value);  },  onFieldSubmitted: (value) {  print(value);  },  validator: (value) {  if(value!.isEmpty){  return 'Password cannot be empty';  }  return null;  },  ),  const SizedBox(  height: 10.0,  ),  defaultButton(  function: (){  print(emailController.text);  print(passController.text);  },  text: 'Login',  ),  const SizedBox(  height: 10.0,  ),  defaultButton(  text: 'ReGister',  function: () {  print('You have just clicked on register');  },  background: Colors.red,  isUpperCase: false  ),  Row(  mainAxisAlignment: MainAxisAlignment.center,  children: [  const Text('Don't you have an account?'),  TextButton(onPressed: () {}, child: const Text(  'Register Now'  ))  ],  )  ],  ),  ),  ),  ),  ),  );  } }  

My main.dart code:

 import 'package:flutter/material.dart'; import 'package:udemy_flutter/modules/bmi_result/bmi_result_screen.dart'; import 'modules/bmi_result/bmi_result_screen.dart'; import 'modules/bmi/bmi_screen.dart'; import 'modules/home/home_screen.dart'; import 'modules/login/login_screen.dart'; import 'modules/messenger/messenger_screen.dart'; import 'modules/users/users_screen.dart'; import 'modules/counter/counter_screen.dart';  void main() {  runApp(MyApp());  MyApp app = MyApp(); }  //Stateless widget //Stateful widget  class MyApp extends StatelessWidget {  @override  Widget build(BuildContext context) {  return MaterialApp(  debugShowCheckedModeBanner: false,  home: LoginScreen(),  );  } }  

Редактировать: У меня есть этот код в отдельном файле под названием components.dart

 import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart';  Widget defaultButton(  {double width = double.infinity,  Color background = Colors.blue,  double radius = 10.0,  required Function function,  required String text,  bool isUpperCase = true}) =gt;  Container(  height: 40.0,  width: width,  child: MaterialButton(  onLongPress: () {},  onPressed: function(),  child: Text(  isUpperCase ? text.toUpperCase() : text.toLowerCase(),  style: TextStyle(color: Colors.white),  )),  decoration: BoxDecoration(  borderRadius: BorderRadiusDirectional.circular(radius),  color: background,  ),  );  Widget defaultFormFeild({  required TextEditingController controller,  required TextInputType type,  Function? onSubmit, //Add question mark  Function? onChange, //Add question mark  required Function validate,  required var label,  required IconData prefix, }) =gt;  TextFormField(  controller: controller,  keyboardType: type,  onFieldSubmitted: onSubmit != null? onSubmit() : null, //do null checking  onChanged: onChange != null? onChange() : null, //do null checking  validator: validate(),  decoration: InputDecoration(  labelText: label,  prefixIcon: Icon(prefix),  border: OutlineInputBorder()  ),  );  

может ли кто-нибудь сказать мне, где я ошибаюсь Я новичок в платформе Flutter и пытаюсь создавать экраны для различных применений, так как у меня были проблемы с нулевой безопасностью, и мне удалось ее решить, но я точно не знал, в чем проблема с этим кодом

Комментарии:

1. Что такое defaultButton и defaultFormFeild ? Пожалуйста, приведите полный пример.

2. Спасибо за ваш комментарий, я изменил сообщение и добавил то, что вы просили

Ответ №1:

Избегайте использования простого Function в ваших типах функций:

 Widget defaultFormFeild({  required TextEditingController controller,  required TextInputType type,  void Function(String)? onSubmit,  void Function(String)? onChange,  required String? Function(String) validate,  required var label,  required IconData prefix, })  

Посмотрите, где вы используете onSubmit . Если вы используете IDE, наведите курсор мыши перед : включением onSubmit: onSubmit и посмотрите, какого типа эта функция. В противном случае ознакомьтесь с документацией, чтобы узнать, какой тип onSubmit принимает.

Сделайте то же самое для defaultButton .