0

Provider用于状态管理和与 UI 分离的业务逻辑。

我在Provider上面放了一些,MaterialApp所以可以在应用程序的任何地方访问(例如用户信息)。

但是 您不想将 ChangeNotifierProvider 放置得比必要的高(因为您不想污染范围)。

所以我试着放一些Provider只在小部件树中的某些页面上使用的东西。

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

但我的问题是Navigator.push()每次都创建单独的小部件树。因此,如果我在此中初始化 a ProviderSelectItemPage则无法在ConfirmItemPageor中访问CheckOutPage

我想Provider成为这个流程的范围,但我看不出如何。

我该如何解决这个问题?还是我的方法不对?

编辑:我知道我可以使用道具钻孔从SelectItemPage=> ConfirmItemPage=>传递数据,CheckOutPage但这很难维护。我想使用Provider而不是道具钻孔。

4

1 回答 1

0

我认为没有其他办法,您必须在每个类上初始化提供程序

尝试在您的应用上这样使用

在您的主应用程序上

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

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

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

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

final state = Provider.of<yourstate>(context, listen: false);
于 2019-09-12T02:56:44.157 回答