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(),
),
),
),
),
],
),
);
}