如何使Provider和Navigator一起工作?

时间:2019-09-11 20:19:58

标签: flutter dart flutter-provider

我使用Provider进行状态管理以及将UI与UI分开的业务逻辑。

我在Provider上方放置了MaterialApp,因此可以访问应用中的所有位置(例如用户信息)。

但是 You don’t want to place ChangeNotifierProvider higher than necessary (because you don’t want to pollute the scope).

因此,我尝试放置一些Provider,它们仅在窗口小部件树中较低的某些页面上使用。

例如,在我的采购流程中,我可以拥有:SelectItemPage => ConfirmItemPage => CheckOutPage

但是我的问题是每次Navigator.push()都创建一个单独的小部件树。因此,如果我在Provider中初始化SelectItemPage,则无法在ConfirmItemPageCheckOutPage中访问它。

我希望Provider属于此流程的范围,但我不知道如何。

我该如何解决? 还是我的方法不对?

编辑:我知道我可以对来自SelectItemPage => ConfirmItemPage => CheckOutPage的传递数据使用道具钻取,但这很难维护。我想用Provider代替道具钻。

1 个答案:

答案 0 :(得分:0)

我认为别无选择,您必须在每个类上初始化提供程序

在您的应用上尝试使用此类

在您的主应用上

MultiProvider(
      providers: ChangeNotifierProvider<yourstate>(
          builder: (context) => yourstate,
        ),
child: MaterialApp...

在每个页面上,您都可以使用以下代码进行初始化

final state = Provider.of<yourstate>(context);

如果您不想听状态的任何变化,请像这样使用

final state = Provider.of<yourstate>(context, listen: false);