我使用Provider
进行状态管理以及将UI与UI分开的业务逻辑。
我在Provider
上方放置了MaterialApp
,因此可以访问应用中的所有位置(例如用户信息)。
因此,我尝试放置一些Provider
,它们仅在窗口小部件树中较低的某些页面上使用。
例如,在我的采购流程中,我可以拥有:SelectItemPage
=> ConfirmItemPage
=> CheckOutPage
。
但是我的问题是每次Navigator.push()
都创建一个单独的小部件树。因此,如果我在Provider
中初始化SelectItemPage
,则无法在ConfirmItemPage
或CheckOutPage
中访问它。
我希望Provider
属于此流程的范围,但我不知道如何。
我该如何解决? 还是我的方法不对?
编辑:我知道我可以对来自SelectItemPage
=> ConfirmItemPage
=> CheckOutPage
的传递数据使用道具钻取,但这很难维护。我想用Provider
代替道具钻。
答案 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);