flutter - 如何使用全局 Key 从 Flutter 中的另一个小部件更新小部件状态?

标签 flutter dart flutter-layout

我有一个主小部件屏幕,其中包含两个主要小部件,一个标题(用红色标记)和一个列表(用紫色标记) my main screen widget
这是我的代码:

    class ScreenClient extends StatefulWidget {
      _ClientState createState() => _ClientState();
    }
    
    class _ClientState extends State<ScreenClient> {
      @override
      Widget build(BuildContext context) {
        return Column(
          mainAxisAlignment: MainAxisAlignment.start,
          children: <Widget>[
            ClientHeader(), // this is my header widget red
            Expanded(
              child: ClientList(), // this is my list widget purple
            ),
          ],
        );
      }
    }

标题小部件有三个选项,如您所见 Tous Bloquéayant Retard ,我想要实现的是通过单击的选项的值到标有紫色的列表小部件(因为这些选项是过滤器,列表元素应根据所选选项显示)
我很难理解状态管理包,据我了解,Global Keys 可以做到这一点,但如何实现? 。 这是我的标题小部件代码:

class ClientHeader extends StatefulWidget {
  _HeaderClientState createState() => _HeaderClientState();
}

class _HeaderClientState extends State<ClientHeader> {
  String nomSituation;
  String option = "Tous";

  @override
  Widget build(BuildContext context) {
    return Container(
      child: Row(
        children: <Widget>[
          GestureDetector(
            child: Text(
              "Tous",
              style: TextStyle(
                color: option == "Tous" ? Colors.white : Colors.grey[400],
              ),
            ),
            onTap: () {
              setState(() {
                option = "Tous";
              });
            },
          ),
          GestureDetector(
            child: Text(
              "Bloqué",
              style: TextStyle(
                color: option == "Bloqué" ? Colors.white : Colors.grey[400],
              ),
            ),
            onTap: () {
              setState(() {
                option = "Bloqué";
                //add send value to ClientList widet ?
              });
            },
          ),
          GestureDetector(
            child: Text(
              "Ayant Retard",
              style: TextStyle(
                color:
                    option == "Ayant Retard" ? Colors.white : Colors.grey[400],
              ),
            ),
            onTap: () {
              setState(() {
                option = "Ayant Retard";
              });
            },
          ),
        ],
      ),
    );
  }
}

最佳答案

我建议您可以观看此视频中的 2 个示例 Pragmatic State Management in Flutter (Google I/O'19)关于状态管理。这个视频对我刚开始学习flutter的时候帮助很大。他们解释了如何从另一个控制 StatefulWidget:

  1. 使状态全局化,由另一个小部件控制 ( from 5m30s )
  2. 使用 Provider(Flutter 中非常流行的解决方案)来控制 2 个 widget 之间的值共享 ( from 15m05s )

如果你有更多的时间,你可以研究更多花哨的状态管理方法,如 Bloc、MobX ( List of state management approaches ) 甚至名为 riverpodProvider 的高级版本几个月前刚刚推出,尝试解决使用 Provider 时的一些缺点。

关于flutter - 如何使用全局 Key 从 Flutter 中的另一个小部件更新小部件状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65054185/

相关文章:

dart - 如何以编程方式为整个应用程序更改脚手架小部件的背景颜色

flutter - 如何使ListView可以单击文本的整个宽度和高度?

flutter - 即使已安装,软件包也不会显示在 dart 软件包文件夹中

ios - 将 TikTok 的 iOS 登录套件与 Flutter 结合使用

dart - 角达特 : Creating a Form with Reactive Form Builder

dart - AngularDART 组件

flutter - [flutter]为什么我的列对齐总是居中?

flutter - Flutter ListView-中心项目(如果未扩展到屏幕之外)

flutter - 如何更改父小部件内所有子小部件的文本?

dart - Flutter:如何一次又一次停止不必要地渲染 "Widget build()"?