在树中的哪个位置用 Provider 包装小部件以使用 Provider 在整个应用程序中维护状态?
Where in the tree to wrap widget with Provider to use the Provider for maintaining state throughout an app?
我的应用有一个简单的主页屏幕
class StartPage extends StatelessWidget {}
和两个额外的屏幕。用户被路由到其他屏幕,代码如下
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) => Page2(),
),
和
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) => Page3(),
),
Page2()
有一个简单的秒表,我用 Provider 实现了它。我想将相同的秒表代码添加到 Page3()
。我认为 StartPage()
比 Page2()
和 Page3()
更靠近 "tree",并且如果我用 Provider 包装 StartPage
的构建方法(连同Consumer widget里面的相关代码类)
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<StopWatchProvider>(
create: (context) => StopWatchProvider(),
child: Scaffold()
那么秒表应该在 Page2()
和 Page3()
中都按预期工作(由 支持)。但这会引发无法找到提供者的错误,相反,我需要使用提供者包装 Page2()
和 Page3()
的构建器。
我错过了什么?
你试过用你的Provider()
包裹MaterialApp
吗?
我的应用有一个简单的主页屏幕
class StartPage extends StatelessWidget {}
和两个额外的屏幕。用户被路由到其他屏幕,代码如下
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) => Page2(),
),
和
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) => Page3(),
),
Page2()
有一个简单的秒表,我用 Provider 实现了它。我想将相同的秒表代码添加到 Page3()
。我认为 StartPage()
比 Page2()
和 Page3()
更靠近 "tree",并且如果我用 Provider 包装 StartPage
的构建方法(连同Consumer widget里面的相关代码类)
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<StopWatchProvider>(
create: (context) => StopWatchProvider(),
child: Scaffold()
那么秒表应该在 Page2()
和 Page3()
中都按预期工作(由 Page2()
和 Page3()
的构建器。
我错过了什么?
你试过用你的Provider()
包裹MaterialApp
吗?