默认情况下,在 Flutter 应用程序中 Trim() 输入表单中任何 TextField 的值

Muj*_*uje 2 forms input trim dart flutter

我有不同的表单字段,我想validator在触发方法之前默认修剪表单字段的每个值。

我想要实现这一点的原因是,如果我regexvalidator方法被触发时对 Input 值运行 a ,正则表达式将返回 false,input_text.hasMatch因为输入值末尾有一个无用的空格字符。

例如。alphaNumericText.hasMatch(val)由于输入值末尾有一个无用的额外空格字符,下面的代码将返回 false。

final alphaNumericText = RegExp(r'^[a-zA-Z0-9]+$');

TextFormField(
                  keyboardType: TextInputType.text,
                  decoration: new InputDecoration(
                    labelText: 'Enter your nickname',
                  ),
                  validator: (val) {
                    if (val.isEmpty == true) {
                      return 'Nickname is required!';
                    }
                    if (alphaNumericText.hasMatch(val) == false) {
                      return 'Use alphanumeric characters only in nickname.';
                    }
                    return null;
                  },
                  onSaved: (val) => this.nickname = val,
                ),
Run Code Online (Sandbox Code Playgroud)

注意我不想通过修改alphaNumericText RegExp输入值末尾的额外空格来实现这一点。我不想以这种方式实现这一目标。

我想要的是在调用方法之前默认验证表单中所有 TextField 中的每个值validator

小智 6

只需添加

inputFormatters: [WhitelistingTextInputFormatter(RegExp(r'[a-zA-Z0-9]'))],
Run Code Online (Sandbox Code Playgroud)

作为 TextInputField 的属性,用户甚至无法输入空格或除白名单之外的任何其他字符,您还可以从验证器中删除其他检查

完整示例

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: SafeArea(
          child: Center(
            child: TextFormField(
              inputFormatters: [WhitelistingTextInputFormatter(RegExp(r'[a-zA-Z0-9]'))],
              keyboardType: TextInputType.text,
              decoration: new InputDecoration(
                labelText: 'Enter your nickname',
              ),
              validator: (val) {
                if (val.isEmpty == true) {
                  return 'Nickname is required!';
                }
                return null;
              },
              onSaved: (val) {},
            ),
          ),
        ),
      ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)