首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我可以在我的自定义小部件中制作类似于textfield的验证器吗?

我可以在我的自定义小部件中制作类似于textfield的验证器吗?
EN

Stack Overflow用户
提问于 2022-04-21 04:03:52
回答 1查看 56关注 0票数 0
代码语言:javascript
复制
   TextFormField(
      validator: validator,
   ),

在textfield中,有一个名为validator的属性,可以与Form小部件一起使用来显示错误。我需要在我的自定义小部件中制作一个验证器,它也可以在Form小部件中工作。怎么做?

假设我的自定义小部件如下所示:

代码语言:javascript
复制
class MyCustomWidget extends StatelessWidget {
  const MyCustomWidget({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Container(
      width: double.infinity,
      height: 100,
      color: Colors.green,
    );
  }
}

如何使我自己的验证器在可以在Form小部件内工作的绿色容器下面显示错误?

EN

Stack Overflow用户

回答已采纳

发布于 2022-04-21 04:36:53

是的,您可以像下面这样创建一个自定义表单字段。

代码语言:javascript
复制
class CounterFormField extends FormField<int> {

  CounterFormField({
    FormFieldSetter<int> onSaved,
    FormFieldValidator<int> validator,
    int initialValue = 0,
    bool autovalidate = false
  }) : super(
      onSaved: onSaved,
      validator: validator,
      initialValue: initialValue,
      autovalidate: autovalidate,
      builder: (FormFieldState<int> state) {
        return Column(
          children: <Widget>[
            Row(
              mainAxisSize: MainAxisSize.min,
              children: <Widget>[
                IconButton(
                  icon: Icon(Icons.remove),
                  onPressed: () {
                    state.didChange(state.value - 1);
                  },
                ),
                Text(
                    state.value.toString()
                ),
                IconButton(
                  icon: Icon(Icons.add),
                  onPressed: () {
                    state.didChange(state.value + 1);
                  },
                ),
              ],
            ),
            state.hasError?
            Text(
              state.errorText,
              style: TextStyle(
                  color: Colors.red
              ),
            ) :
            Container()
          ],
        );
      }
  );

使用

代码语言:javascript
复制
CounterFormField(
   autovalidate: false,
   validator: (value) {
     if (value < 0) {
       return 'Negative values not supported';
     }
    },
   onSaved: (value) => this._age = value,
)
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71948813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档