使用 Flutter Form 进行异步验证

Aka*_*han 4 flutter

我是颤振新手。在我的应用程序中,当用户键入并从文本框中聚焦时,我需要选择检查用户名是否已存在或是否从数据库异步检查。

需要返回类型validatorString这就是我无法添加的原因Future<String>

我怎样才能用 Flutter 做如下事情TextFormField?或任何完全满足我的要求的过程。

validator: myValidator
Run Code Online (Sandbox Code Playgroud)
Future myValidator(String username) async{
    return await checkUser(username);
}
Run Code Online (Sandbox Code Playgroud)

Har*_*run 6

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

定义这些变量

dynamic _validationMsg;
final _usernameCtrl = TextEditingController();
Run Code Online (Sandbox Code Playgroud)

您的异步验证器函数(经过修改)

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

    bool isExist = await checkUser(username);
    
    if(isExist){
      _validationMsg = "${username} already taken";
      setState(() {});
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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