【问题标题】:Call async function inside TextFormField validator Flutter在 TextFormField 验证器 Flutter 中调用异步函数
【发布时间】:2021-05-23 14:14:46
【问题描述】:

在这段代码中:

TextFormField(
        .
        .
        .
        validator: (value) => doFancy();
      ),

doFancy() 被声明为:

Future<something> doFancy() async{...

我如何在TextFormFieldvalidator 中调用doFancy(),因为它是Future 函数,我不能将validator 声明为async

编辑: 这是我达到的最好的,但我仍然有同样的问题The argument type 'Future&lt;String&gt; Function(String)' can't be assigned to the parameter type 'String Function(String)'

validator: (value) async {
          return (await checkMissingId(value, context) == false)
              ?  "Username already taken"
              :  null;
        },

【问题讨论】:

  • 但是文本字段需要一个 函数,你没有理由向它传递一个未来,如果在你的验证器中你正在执行异步代码,你必须创建一个字符串类型的函数并且添加 async 参数,然后异步处理您的方法。如果可能,请添加一个使用异步代码的验证器示例。

标签: flutter dart asynchronous


【解决方案1】:

只需添加 async 关键字:

TextFormField(
        .
        .
        .
        validator: (value) async => doFancy();
      ),

【讨论】:

  • 它说:参数类型'Future Function(String)'不能分配给参数类型'String Function(String)'。
  • 代码:验证器:(value) async => (checkMissingId(value, context)==false) ? "用户名已被占用" : null ,
  • 在 checkMissingId 之前添加“await”没有帮助
【解决方案2】:

解决了移出异步函数并使用 setState 中处理的变量的问题。

【讨论】:

    猜你喜欢
    • 2019-04-11
    • 1970-01-01
    • 2019-12-04
    • 1970-01-01
    • 2023-01-12
    • 2019-08-17
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多