在Flutter中挂载新状态

时间:2019-11-21 00:17:51

标签: flutter dart

我是Flutter的新手。我制作了一个有状态的小部件,其中有多个状态选项,而且我不知道如何在状态之间进行切换,甚至无法实现。基本上我有:

class SWidget extends StatefulWidget {
  State<StatefulWidget> createState(){
    return _State1();
  }
}

class _State1 extends State<SWidget> {
...
}

class _State2 extends State<SWidget> {
...
}

我希望SWidget_State1切换到_State2

1 个答案:

答案 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),
    );
  }
}