提问人:Ammar 提问时间:8/17/2023 最后编辑:Ammar 更新时间:8/19/2023 访问量:32
我想将我的“Widget defaultFormField”的一个参数变成一个函数
I want to make one of the parameters of my "Widget defaultFormField" a function
问:
这是我的代码的屏幕截图
我希望我的 defaultFormField 采用两个可选参数,
Function() onSubmit,如果需要,用作“onFieldSubmitted”的参数
Function() onChange,如果需要,用作“onChanged”的参数
**第一个问题是我被迫对两个参数使用“必需”语句**
**第二个问题是,即使我使用了“required”语句,我仍然无法将参数用作参数**
在我正在观看的课程中,讲师这样做没有任何问题,这是他们代码的屏幕截图 讲师代码的屏幕截图
我想知道这是否只是我正在使用的 flutter 版本的问题,所以我需要回到旧版本,或者我的代码是否存在需要更改的问题。
我还尝试使参数可为 null,如下所示 可为 null 的修复程序的屏幕截图
但我仍然无法在我的代码中使用它们,
我还没有尝试切换回旧版本的 flutter,因为我认为这会很麻烦,而且我不知道该怎么做。
提前致谢
答:
正如你所猜到的,讲师屏幕截图中的代码之所以编译,只是因为它早于 null 安全的 Dart。
您尝试“可为空的修复”不起作用,因为类型仍然不匹配:您需要(这是),而不仅仅是.ValueChanged<String>?
void Function(String value)?
Function?
评论
是的,讲师的代码在旧版本的 Lang 中没有空安全,现在他们添加了空安全。dart
和函数 和 是可为 null 的,因此您需要相应地声明参数。onSubmitted
onChanged
所以使用下面的函数,这里我已经提到了这两个函数的详细类型。获得准确类型的一种简单方法是将鼠标悬停在参数上,看看它需要什么类型的数据并使用它(它可能因 IDE 而异,您也可以查看文档)。
Widget defaultFormField(
{required TextEditingController controller,
required TextInputType type,
required void Function(String?)? onSubmit,
required void Function(String?)? onChange}) =>
TextFormField(
controller: controller,
keyboardType: type,
onChanged: onChange,
onFieldSubmitted: onSubmit,
);
评论
onSubmit: (val) {print(val);}
onSubmit
String?
val
onSubmit: (String? val) {print(val);}
评论