【问题标题】:Flutter : Is there anyway to share a provider among multiple routes other than wrapping a nested navigator with the provider?Flutter:除了用提供者包装嵌套导航器之外,是否有在多个路由之间共享提供者?
【发布时间】:2020-08-16 15:02:33
【问题描述】:

我想让多个路由共享同一个提供程序,但我想出的唯一方法是将这些路由包装在嵌套导航器中,并且提供程序位于嵌套导航器的顶部

任何其他方式来做这样的事情

【问题讨论】:

    标签: flutter provider state-management


    【解决方案1】:

    通常的做法是将Provider 放在小部件树的最顶端。例如,在provider example 中,它位于runApp() 调用中。

    【讨论】:

    • 对,但是由于不同的路由有不同的上下文,新的路由将无法访问原始上下文根目录的提供者。
    • 这就是InheritedWidget 和状态管理解决方案的意义所在。它向上搜索树中的数据。
    • 我同意你的看法,在这种情况下,应用程序小部件树顶部的提供程序将永远不会被释放,除非应用程序关闭或被侧滑杀死,但在我的情况下,我需要具体提供者临时导致他们的后代在某些时候会被处置,因此他们的提供者也会被处置
    【解决方案2】:

    您可以将共享的内容传递给新路由和新的 Provider 小部件,该小部件可以将其提供给该路由的小部件树。因此,您可以拥有一个 bloc 类的单个实例,例如可访问多个路由,但仍然只实例化该 bloc 一次。

    【讨论】:

    • 你的意思是我应该将要共享的提供者作为值传递给新路由的提供者吗?
    • 比如说你正在使用 Provider 来访问一个 bloc 实例,比如 authBloc。我会将 authBloc 添加为要传递给新页面的构造函数的变量,并在新页面中有一个新的提供程序小部件以将该实例重新提供给新的上下文。
    猜你喜欢
    • 2021-12-04
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2015-08-02
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多