Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 设置状态不';不要改变TextField的装饰_Android_Flutter_Mobile_Dart_Flutter Layout - Fatal编程技术网

Android 设置状态不';不要改变TextField的装饰

Android 设置状态不';不要改变TextField的装饰,android,flutter,mobile,dart,flutter-layout,Android,Flutter,Mobile,Dart,Flutter Layout,当OnSubmited方法调用时,我想更改TextField的修饰,在setState中,当我调用返回InputDecoration的函数时,它不会更改TextField的修饰 class CustomTextField extends StatefulWidget { final TextEditingController controller; final IconData icon; final String textLabel; final TextInputType t

当OnSubmited方法调用时,我想更改TextField的修饰,在setState中,当我调用返回InputDecoration的函数时,它不会更改TextField的修饰

class CustomTextField extends StatefulWidget {
  final TextEditingController controller;
  final IconData icon;
  final String textLabel;
  final TextInputType textInputType;
  CustomTextField(
      this.controller, this.icon, this.textLabel, this.textInputType);
  @override
  _CustomTextFieldState createState() => _CustomTextFieldState();

}

class _CustomTextFieldState extends State<CustomTextField> {
  InputDecoration inputDecoration;
  double a = 0;
  bool b = true;
  @override
  Widget build(BuildContext context) {
    inputDecoration = noramlInputDecoration(context, widget.textLabel, Icon(widget.icon));
    return Container(
      margin: EdgeInsets.only(top: responsiveHeight(context, 0.8)),
      child: TextField(
        onSubmitted: (mahdi) {
          print('adfaf');
          setState(() {
            inputDecoration = noramlInputDecoration(
                context, widget.textLabel, Icon(widget.icon));
          });
          a++;
          print(a);
        },
        decoration: inputDecoration,
        onTap: () {},
        toolbarOptions: ToolbarOptions(
          paste: true,
          copy: true,
          cut: true,
          selectAll: true,
        ),
        cursorWidth: 2,
        style: TextStyle(
            fontSize: responsiveWidthGivenWidth(
                responsiveWidth(context, 81.6) / 10, 53.3),
            height: 0.5),
        controller: widget.controller,
        maxLines: 1,
        obscureText: b,
        showCursor: true,
        textAlign: TextAlign.end,
        textDirection: TextDirection.ltr,
        keyboardType: widget.textInputType,
        inputFormatters: [],
      ),
    );
  }
}
实际上,我想检查用户是否正确填写文本字段,如果没有,则通过更改文本字段的装饰来警告他们

class CustomTextField extends StatefulWidget {
  final TextEditingController controller;
  final IconData icon;
  final String textLabel;
  final TextInputType textInputType;
  CustomTextField(
      this.controller, this.icon, this.textLabel, this.textInputType);
  @override
  _CustomTextFieldState createState() => _CustomTextFieldState();

}

class _CustomTextFieldState extends State<CustomTextField> {
  InputDecoration inputDecoration;
  double a = 0;
  bool b = true;
  @override
  Widget build(BuildContext context) {
    inputDecoration = noramlInputDecoration(context, widget.textLabel, Icon(widget.icon));
    return Container(
      margin: EdgeInsets.only(top: responsiveHeight(context, 0.8)),
      child: TextField(
        onSubmitted: (mahdi) {
          print('adfaf');
          setState(() {
            inputDecoration = noramlInputDecoration(
                context, widget.textLabel, Icon(widget.icon));
          });
          a++;
          print(a);
        },
        decoration: inputDecoration,
        onTap: () {},
        toolbarOptions: ToolbarOptions(
          paste: true,
          copy: true,
          cut: true,
          selectAll: true,
        ),
        cursorWidth: 2,
        style: TextStyle(
            fontSize: responsiveWidthGivenWidth(
                responsiveWidth(context, 81.6) / 10, 53.3),
            height: 0.5),
        controller: widget.controller,
        maxLines: 1,
        obscureText: b,
        showCursor: true,
        textAlign: TextAlign.end,
        textDirection: TextDirection.ltr,
        keyboardType: widget.textInputType,
        inputFormatters: [],
      ),
    );
  }
}

正如@Ryosuke在问题的评论中所说,我不应该在build方法中使用setState(),因为每次调用setState()时,它都卡在循环中,总是调用build()方法。

setState()
调用build方法。因此,您在
setState
内部分配给
inputDecoration
的值将被您在
build
的第一行中分配给它的值覆盖。因此,请尝试将您的初始
inputDecoration
作业从
build
移动到
build
之外的某个地方,最好是在
initState
内部。哦,我现在明白了,我照您说的做,现在就可以了。非常感谢。