我想将我的“Widget defaultFormField”的一个参数变成一个函数

I want to make one of the parameters of my "Widget defaultFormField" a function

提问人:Ammar 提问时间:8/17/2023 最后编辑:Ammar 更新时间:8/19/2023 访问量:32

问:

这是我的代码的屏幕截图

我希望我的 defaultFormField 采用两个可选参数,

  • Function() onSubmit,如果需要,用作“onFieldSubmitted”的参数

  • Function() onChange,如果需要,用作“onChanged”的参数

**第一个问题是我被迫对两个参数使用“必需”语句**

**第二个问题是,即使我使用了“required”语句,我仍然无法将参数用作参数**

在我正在观看的课程中,讲师这样做没有任何问题,这是他们代码的屏幕截图 讲师代码的屏幕截图

我想知道这是否只是我正在使用的 flutter 版本的问题,所以我需要回到旧版本,或者我的代码是否存在需要更改的问题。

我还尝试使参数可为 null,如下所示 可为 null 的修复程序的屏幕截图

但我仍然无法在我的代码中使用它们,

我还没有尝试切换回旧版本的 flutter,因为我认为这会很麻烦,而且我不知道该怎么做。

提前致谢

Flutter 函数 参数

评论


答:

0赞 Tomasz Noinski 8/17/2023 #1

正如你所猜到的,讲师屏幕截图中的代码之所以编译,只是因为它早于 null 安全的 Dart。

您尝试“可为空的修复”不起作用,因为类型仍然不匹配:您需要(这是),而不仅仅是.ValueChanged<String>?void Function(String value)?Function?

评论

0赞 Ammar 8/19/2023
感谢您的回答,我确实尝试将我的代码更改为“void Function(String value)”,但遗憾的是它仍然没有工作,但至少现在我知道了这个问题,并且课程中有一个关于 null 安全性的部分,所以我会先看一下
0赞 pixel 8/17/2023 #2

是的,讲师的代码在旧版本的 Lang 中没有空安全,现在他们添加了空安全。dart

和函数 和 是可为 null 的,因此您需要相应地声明参数。onSubmittedonChanged

所以使用下面的函数,这里我已经提到了这两个函数的详细类型。获得准确类型的一种简单方法是将鼠标悬停在参数上,看看它需要什么类型的数据并使用它(它可能因 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,
  );

评论

0赞 Ammar 8/19/2023
您好,感谢您的回复,我确实尝试将其更改为“required void Function(String?)?”,然后当我使用它时,我是这样写的:“onsubmit:(String?){返回 null;}“那没有用,但现在我知道问题出在哪里了,课程中有一个关于空安全的部分,所以我会先看
0赞 pixel 8/19/2023
不,你应该这样使用它,See 是一个 void 函数,所以你不需要返回任何东西。关于在可用的参数中,您需要提及该字符串的名称吗?所以或者任何事情都可以,为了安全起见,您也可以提及类型onSubmit: (val) {print(val);}onSubmitString?valonSubmit: (String? val) {print(val);}