代码之家  ›  专栏  ›  技术社区  ›  Neo

了解状态小部件在颤振中的使用

  •  0
  • Neo  · 技术社区  · 6 年前

    我刚开始摆弄颤振,我不明白 StatefulWidget .我在教程等中看到的所有这些小部件都是 State<MyWidget> 让它完成所有的工作。
    例如,从 this (官方)教程:

    class RandomWords extends StatefulWidget {
      @override
      createState() => new RandomWordsState();
    }
    class RandomWordsState extends State<RandomWords> {
      ...
    }
    

    我想知道的是为什么它是这样构建的,以及外部类的用途(在我的例子中) RandomWords )。

    事先谢谢。

    2 回复  |  直到 6 年前
        1
  •  2
  •   creativecreatorormaybenot    6 年前

    这个 “外部类” final ,每个小部件都是 最终的 .这意味着 属性 必须是 最终的 也:

    class RandomWords extends StatefulWidget {
      final String name;
    
      @override
      createState() => new RandomWordsState();
    }
    
    class RandomWordsState extends State<RandomWords> {
      String name;
    
      @override
      void initState() {
        name = widget.name;
        super.initState();
      }
    
      @override
      Widget build(BuildContext context) => Text(name);
    
      void someMethod() {
        print(widget.name);
        setState(() => name = 'new name');
      }
    }
    

    来自 State 的所有字段 StatefulWidget 可以访问,显然 改变 因为他们是 最终的 .

    但是,可以 更改数据 . setState 将执行其回调,然后 重建 这个 (使用新数据)。

    StatelessWidget 也可以重建的,即在父级正在重建时,但所有状态都将丢失,并且不保留任何数据。这就是 正在用于。

        2
  •  0
  •   Prince Hodonou    6 年前

    据我所知,这是为了保存关于小部件的信息。所以每当您想要保存变量或其他东西时,都要实现setstate。请参见有关在颤振中添加交互的教程。