Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.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
Flutter 函数';设置状态';isn';t定义_Flutter - Fatal编程技术网

Flutter 函数';设置状态';isn';t定义

Flutter 函数';设置状态';isn';t定义,flutter,Flutter,我发现了错误 未定义函数“setState”。 尝试导入定义“setState”的库,将名称更正为现有函数的名称,或定义名为“setState”的函数。 在我的代码中。我确保使用了StatefulWidget,并且使用了正确的语法。代码正在我的其他页面上运行,所以我不确定出了什么问题 这是导致错误的代码 Widget buildPassTextBox() { return Padding( padding: EdgeInsets.only( left: 40,

我发现了错误

未定义函数“setState”。
尝试导入定义“setState”的库,将名称更正为现有函数的名称,或定义名为“setState”的函数。
在我的代码中。我确保使用了StatefulWidget,并且使用了正确的语法。代码正在我的其他页面上运行,所以我不确定出了什么问题

这是导致错误的代码

Widget buildPassTextBox() {
  return Padding(
    padding: EdgeInsets.only(
      left: 40,
      right: 40,
    ),
    child: Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: <Widget>[
        Padding(
          padding: EdgeInsets.symmetric(horizontal: 5, vertical: 3),
          child: TextField(
            obscureText: _isObscure,
            decoration: InputDecoration(
              border: OutlineInputBorder(
                borderRadius: BorderRadius.circular(10),
              ),
              isDense: true,
              hintStyle: TextStyle(
                color: Colors.grey,
                fontFamily: "DMSans",
              ),
              hintText: 'Enter your Password',
              suffixIcon: IconButton(
                icon:
                    Icon(_isObscure ? Icons.visibility : Icons.visibility_off),
                onPressed: () {
                  setState(
                    () {
                      _isObscure = !_isObscure;
                    },
                  );
                },
              ),
            ),
          ),
        ),
      ],
    ),
  );
}
Widget buildPassTextBox(){
返回填充(
填充:仅限边缘设置(
左:40,,
右:40,,
),
子:列(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
填充物(
填充:边缘组。对称(水平:5,垂直:3),
孩子:TextField(
模糊文本:_isObscure,
装饰:输入装饰(
边框:大纲输入边框(
边界半径:边界半径。圆形(10),
),
是的,
hintStyle:TextStyle(
颜色:颜色。灰色,
fontFamily:“DMSans”,
),
hintText:'输入您的密码',
后缀:图标按钮(
偶像:
图标(_isObscure?Icons.visibility:Icons.visibility_off),
已按下:(){
设定状态(
() {
_isObscure=!\u isObscure;
},
);
},
),
),
),
),
],
),
);
}

设置状态仅适用于StatefulWidgets。我也是

class MyStfWidget extends StatefulWidget {
  @override
  _MyStfWidgetState createState() => _MyStfWidgetState();
}

class _MyStfWidgetState extends State<MyStfWidget> {
  @override
  Widget build(BuildContext context) {
    return  Padding(
      padding: EdgeInsets.only(
        left: 40,
        right: 40,
      ),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: <Widget>[
          Padding(
            padding: EdgeInsets.symmetric(horizontal: 5, vertical: 3),
            child: TextField(
              obscureText: _isObscure,
              decoration: InputDecoration(
                border: OutlineInputBorder(
                  borderRadius: BorderRadius.circular(10),
                ),
                isDense: true,
                hintStyle: TextStyle(
                  color: Colors.grey,
                  fontFamily: "DMSans",
                ),
                hintText: 'Enter your Password',
                suffixIcon: IconButton(
                  icon:
                  Icon(_isObscure ? Icons.visibility : Icons.visibility_off),
                  onPressed: () {
                    setState(
                          () {
                        _isObscure = !_isObscure;
                      },
                    );
                  },
                ),
              ),
            ),
          ),
        ],
      ),
    );
  }
}
类MyStfWidget扩展StatefulWidget{
@凌驾
_MyStfWidgetState createState()=>\u MyStfWidgetState();
}
类_MyStfWidgetState扩展状态{
@凌驾
小部件构建(构建上下文){
返回填充(
填充:仅限边缘设置(
左:40,,
右:40,,
),
子:列(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
填充物(
填充:边缘组。对称(水平:5,垂直:3),
孩子:TextField(
模糊文本:_isObscure,
装饰:输入装饰(
边框:大纲输入边框(
边界半径:边界半径。圆形(10),
),
是的,
hintStyle:TextStyle(
颜色:颜色。灰色,
fontFamily:“DMSans”,
),
hintText:'输入您的密码',
后缀:图标按钮(
偶像:
图标(_isObscure?Icons.visibility:Icons.visibility_off),
已按下:(){
设定状态(
() {
_isObscure=!\u isObscure;
},
);
},
),
),
),
),
],
),
);
}
}
上面的代码只是解释为什么没有定义SETSTATE

但我不认为这是你想要的。不过我猜。因此,传递一个回调,该回调可以调用相关父类中的setState

另外,最好使用一些状态管理


class MyStfWidget extends StatefulWidget {
  @override
  _MyStfWidgetState createState() => _MyStfWidgetState();
}

class _MyStfWidgetState extends State<MyStfWidget> {
  bool _isObscure = false;

  void callSetState() {
    setState(() {
      _isObscure = !_isObscure;
    });
  }

  @override
  Widget build(BuildContext context) {
    return buildPassTextBox(callSetState, _isObscure);
  }
}

Widget buildPassTextBox(
    void Function() callSetState, bool isObscure) {
  return Padding(
    padding: EdgeInsets.only(
      left: 40,
      right: 40,
    ),
    child: Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: <Widget>[
        Padding(
          padding: EdgeInsets.symmetric(horizontal: 5, vertical: 3),
          child: TextField(
            obscureText: isObscure,
            decoration: InputDecoration(
              border: OutlineInputBorder(
                borderRadius: BorderRadius.circular(10),
              ),
              isDense: true,
              hintStyle: TextStyle(
                color: Colors.grey,
                fontFamily: "DMSans",
              ),
              hintText: 'Enter your Password',
              suffixIcon: IconButton(
                icon: Icon(isObscure ? Icons.visibility : Icons.visibility_off),
                onPressed: () => callSetState(),
              ),
            ),
          ),
        ),
      ],
    ),
  );
}

类MyStfWidget扩展了StatefulWidget{
@凌驾
_MyStfWidgetState createState()=>\u MyStfWidgetState();
}
类_MyStfWidgetState扩展状态{
bool _isObscure=false;
void callSetState(){
设置状态(){
_isObscure=!\u isObscure;
});
}
@凌驾
小部件构建(构建上下文){
返回buildPassTextBox(callSetState,_isObscure);
}
}
Widget buildPassTextBox(
void函数()callSetState,bool isObscure){
返回填充(
填充:仅限边缘设置(
左:40,,
右:40,,
),
子:列(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
填充物(
填充:边缘组。对称(水平:5,垂直:3),
孩子:TextField(
模糊文字:isObscure,
装饰:输入装饰(
边框:大纲输入边框(
边界半径:边界半径。圆形(10),
),
是的,
hintStyle:TextStyle(
颜色:颜色。灰色,
fontFamily:“DMSans”,
),
hintText:'输入您的密码',
后缀:图标按钮(
图标:图标(isObscure?图标。可见性:图标。可见性关闭),
按下时:()=>callSetState(),
),
),
),
),
],
),
);
}