gpt4 book ai didi

flutter - 重用输入验证器

转载 作者:行者123 更新时间:2023-12-03 03:21:46 25 4
gpt4 key购买 nike

我正在尝试创建用于一次重用多个输入验证器的逻辑。这是DartPad代码

void main() {

String value = 'pppppp';

print(InputValidator([InputValidator.minCharacters(value, 2),
InputValidator.maxCharacters(value, 5)
]).validate().toString());
}

class InputValidator {
final List<String> validators;

InputValidator(this.validators);

List<String> validate() {
List<String> result = [];
validators.where((s) => s != null).forEach(result.add);
return result;
}

static String maxCharacters(String value, int limit) {
if (value.length > limit) {
return 'Max $limit characters allowed';
}
return null;
}

static String minCharacters(String value, int limit) {
if (value.length < limit) {
return 'Min $limit characters required';
}
return null;
}
}

逻辑效果很好,但是我试图在不需要将值传递给每个方法的地方简化操作。我想在InputValidator类中设置value参数,并在运行方法时采用该值。问题是每个方法都是静态的,所以我不能在方法中使用该参数。还有其他方法吗?

这是我想使用它的方式
validator: InputValidator(value, [InputValidator.minCharacters(2),
InputValidator.maxCharacters(5)
]).validate()

最佳答案

再次感谢@pskink在FormFieldValidator上指出的地方。这样,重用TextFormField的验证非常简单。

这是验证器类

    FormFieldValidator<String> all(Iterable validators) {
return (String s) {
var error = validators
.map((v) => v(s))
.where((error) => error != null)
.join(' AND ');
return error.isEmpty? null : error;
};
}

FormFieldValidator<String> uppercase() {
return (String s) => s.startsWith(RegExp('[A-Z]'))? null : 'does not start with uppercase' ;
}

FormFieldValidator<String> limit(min, max) {
return (String s) => (min <= s.length && s.length <= max)? null : 'length not in range [$min..$max]';
}

以及如何使用它
Column(
children: [
Form(key: _formKey, child: TextFormField(validator:all([limit(2,5), uppercase()]))),

FlatButton(child:Text('Validate'), onPressed: (){if(_formKey.currentState.validate())
{print('OK');}}),
],
);

关于flutter - 重用输入验证器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62453648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com