未定义函数'setState'



我得到错误

The function 'setState' isn't defined.
Try importing the library that defines 'setState', correcting the name to the name of an existing function, or defining a function named '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;
},
);
},
),
),
),
),
],
),
);
}

Set State仅可用于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;
},
);
},
),
),
),
),
],
),
);
}
}

上面的代码只是解释为什么没有定义SETSTATE。

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

p.S-最好使用一些国家管理。


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

最新更新