我是Flutter的新手。我制作了一个有状态的小部件,其中有多个状态选项,而且我不知道如何在状态之间进行切换,甚至无法实现。基本上我有:
class SWidget extends StatefulWidget {
State<StatefulWidget> createState(){
return _State1();
}
}
class _State1 extends State<SWidget> {
...
}
class _State2 extends State<SWidget> {
...
}
我希望SWidget
从_State1
切换到_State2
答案 0 :(得分:0)
很抱歉,如果我不明白您的问题,但状态通常与UI相关联。如果您需要新的状态,那么您可能想要显示一些不同的东西。在这种情况下,您需要通过将两个状态(及其UI组件)放置在它们自己的有状态小部件中来区分它们。然后,您可以在有状态或无状态窗口小部件中的两个窗口小部件之间切换:
class SWidget extends StatelessWidget {
SWidget(this.condition);
final bool condition;
@override
Widget build(BuildContext context) {
return condition ? Foo() : Bar();
}
}
class Foo extends StatefulWidget {
@override
_FooState createState() => _FooState();
}
class _FooState extends State<Foo> {
var _foo = 'foo';
@override
Widget build(BuildContext context) {
return Text(_foo);
}
}
class Bar extends StatefulWidget {
@override
_BarState createState() => _BarState();
}
class _BarState extends State<Bar> {
var _bar = 'bar';
@override
Widget build(BuildContext context) {
return Text(_bar);
}
}
我认为我从未见过有人实际将状态对象从小部件下方切换出来。您也可以通过调用setState并在值之间进行切换来轻松更改小部件的状态:
class SWidget extends StatefulWidget {
@override
_SWidgetState createState() => _SWidgetState();
}
class _SWidgetState extends State<SWidget> {
var _value = true;
@override
Widget build(BuildContext context) {
return Switch(
value: _value,
onChanged: (value) => setState(() => _value = value),
);
}
}