参数不匹配的闭包调用:函数 'LoginScreen.build。<匿名关闭>"



你好,我在尝试运行代码时遇到了这个错误

以下是完整的错误:

======== Exception caught by widgets library =======================================================
The following NoSuchMethodError was thrown building LoginScreen(dirty):
Closure call with mismatched arguments: function 'LoginScreen.build.<anonymous closure>'
Receiver: Closure: (String) => String?
Tried calling: LoginScreen.build.<anonymous closure>()
Found: LoginScreen.build.<anonymous closure>(String) => 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.<anonymous closure> (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.<anonymous closure> (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.<anonymous closure>'
Receiver: Closure: (String) => String?
Tried calling: LoginScreen.build.<anonymous closure>()
Found: LoginScreen.build.<anonymous closure>(String) => 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.<anonymous closure> (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 = GlobalKey<FormState>();
@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'
))
],
)
],
),
),
),
),
),
);
}
}

我的主要零件代码:

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}) =>
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,
}) =>
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平台的新手,我正在尝试构建各种用途的屏幕,因为我遇到了Null安全问题,我设法解决了它,但我不知道这个代码的问题到底是

避免在函数类型中使用纯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执行相同操作。