Dart 在flatter中在小部件之间传递数据的最佳方法

Dart 在flatter中在小部件之间传递数据的最佳方法,dart,flutter,Dart,Flutter,我开发了自己的自定义小部件,用于其他视图。在这个自定义小部件中,我有一个存储信息的类属性,假设这是一个列表,它在小部件中获取新项目。现在,我想从我的主窗口小部件的级别获取此列表中的项目 怎么做? 我不想创建这样一个变量:var customWidget=MyCustomWidget(),然后获取内部变量,如customWidget.createState().myList——我认为这是一个糟糕的解决方案(我不确定它是否会起作用)。同时,将列表传递给自定义小部件的构造函数看起来非常难看 是否有其他

我开发了自己的自定义小部件,用于其他视图。在这个自定义小部件中,我有一个存储信息的类属性,假设这是一个列表,它在小部件中获取新项目。现在,我想从我的主窗口小部件的级别获取此列表中的项目

怎么做? 我不想创建这样一个变量:
var customWidget=MyCustomWidget()
,然后获取内部变量,如
customWidget.createState().myList
——我认为这是一个糟糕的解决方案(我不确定它是否会起作用)。同时,将列表传递给自定义小部件的构造函数看起来非常难看


是否有其他方法获取其他小部件的状态?

首先,请记住,在颤振中,数据只能向下传递。设计上不可能访问孩子的数据,只有父母(尽管有一些黑客攻击)

从这一点来看,有两种主要的数据传递解决方案:

  • 将所需数据添加到小部件构造函数中 我觉得这里没什么好说的。易于使用。但是,当您想将一个字段传递给所有小部件树时,会很无聊。仅当值的范围受到限制时才使用此方法。如果是配置或用户详细信息,请选择第二种解决方案

    class Bar extends StatelessWidget {
      final String data;
    
      Bar({this.data});
    
      @override
      Widget build(BuildContext context) {
        return Text(data);
      }
    }
    
  • 使用颤振的
    BuildContext
  • 每个小部件都可以访问
    BuildContext
    。此类允许一个小部件使用以下方法之一从其祖先获取信息:

    事实上,如果有需要多次访问的数据,请选择
    inheritFromWidgetOfExactType

    这使用;这是一种访问速度非常快的小部件

    有关其用法的更多详细信息,请参阅


    作为旁注,还有第三种解决方案。那是

    我不想谈太多细节,因为这与其说是一个合适的解决方案,不如说是一个黑客。(见附件)


    但基本上,它允许获取
    build
    调用之外的任何小部件的状态/上下文。无论是家长还是孩子

    也来看看这些网站的建筑示例/想法嗨,不明白你是如何解决的,你能帮我解决这个问题吗:建议:你可以发布自己问题的答案,而不是发布问题的更新,所以这个问题不会出现在“未回答的问题”中