繁体   English   中英

使用 Flutter Form 进行异步验证

[英]Asynchronous validation with Flutter Form

我是 Flutter 的新手。 在我的应用程序中,当用户键入并从文本框中移出焦点时,我需要从数据库中检查用户名是否已存在或不异步的选项。

validator需要String返回类型,这就是为什么我不能添加Future<String>

我如何使用 Flutter TextFormField执行如下操作? 或任何完全满足我要求的过程。

validator: myValidator
Future myValidator(String username) async{
    return await checkUser(username);
}

注意:目前 Flutter 不支持validator的 async 功能。 你可以用一种棘手的方式做到这一点。

定义这些变量

dynamic _validationMsg;
final _usernameCtrl = TextEditingController();

您的异步验证器功能(经过修改)

Future myValidator(String username) async{
    _validationMsg = null;
    setState(() {});

    bool isExist = await checkUser(username);
    
    if(isExist){
      _validationMsg = "${username} already taken";
      setState(() {});
    }
}

现在添加用Focus小部件包装的TextFormField小部件。

Focus(
  child: TextFormField(
    controller: _usernameCtrl,
    autovalidateMode: AutovalidateMode.onUserInteraction,
    validator: (val) => _validationMsg,
  ),
  onFocusChange: (hasFocus) {
    if (!hasFocus) myValidator(_usernameCtrl.text);
  }
)

代码参考: https : //flutter-tutorial.com/flutter-async-validation

你可以尝试这样的事情:

validator: (username) async {
  String result = await checkUser(username);
  return result;  
} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM