【问题标题】:How should one implement providers scoped to a single route in a Flutter app?应该如何在 Flutter 应用程序中实现范围为单个路由的提供程序?
【发布时间】:2021-06-17 08:20:27
【问题描述】:

假设有一个用户个人资料屏幕和一个用户详细信息提供程序。您可能在给定时间在导航堆栈中有多个用户配置文件屏幕(用户屏幕->“朋友”选项卡->通过点击该选项卡中的一个选项推送的新用户屏幕)。在这种情况下,提供程序不能放在 MaterialApp 之上,并且只要弹出屏幕as mentioned in this issue就重置,因为堆栈中的所有此类屏幕都有唯一的数据。考虑到不鼓励将提供程序的范围限定为特定路由,那么实现这种事情的最佳方法是什么?

【问题讨论】:

    标签: flutter flutter-provider state-management


    【解决方案1】:

    这取决于您想要达到的目标。我看不出有任何理由将具有相似数据模型的屏幕堆叠起来。但万一有需要,

    对于每个 Flutter 应用,都有一个入口点,即 main.dart 文件。您可以从那里在全球范围内管理您的状态。更有效的是,如果所有路由(屏幕)都有一个直接父级,您可以从那里封装路由,而不是深入到 main.dart 文件。

    类似的东西

    GridView.builder(
      padding: const EdgeInsets.all(10.0),
      itemCount: products.length,
      gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
        crossAxisCount: 2,
        childAspectRatio: 3 / 2,
        crossAxisSpacing: 10,
        mainAxisSpacing: 10,
      ),
      itemBuilder: (ctx, i) => ChangeNotifierProvider.value(
        value: products[i],
        child: ProductItem(),
      ),
    )
    

    【讨论】:

    • 我提到了一个示例,其中一些具有相同数据模型的屏幕可能会堆叠在描述中(用户屏幕->“朋友”选项卡->通过点击其中一个选项推送的新用户屏幕选项卡,如果您按返回,您将返回到堆栈中的上一个用户屏幕。)我的问题应该更清楚,您提到的似乎是一个不同的用例。基本上我希望一个特定的屏幕有自己的提供程序来管理仅该屏幕的状态,它可能在堆栈中有多个实例,这对于 materialapp 之上的提供程序是不可能的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-16
    • 2020-10-18
    • 1970-01-01
    • 2021-11-17
    • 2020-05-22
    相关资源
    最近更新 更多