Flutter 在树中的何处使用提供程序包装小部件以使用提供程序在整个应用程序中维护状态?

Flutter 在树中的何处使用提供程序包装小部件以使用提供程序在整个应用程序中维护状态?,flutter,flutter-provider,Flutter,Flutter Provider,我的应用程序有一个简单的主页屏幕 class StartPage extends StatelessWidget {} 和另外两个屏幕。用户被路由到其他屏幕,代码如下 Navigator.push( context, MaterialPageRoute( builder: (BuildContext context) => Page2(), ), 及 Page2有一个简单的秒表,我用一个提供程序实现它。我想在第3页添加相同的秒

我的应用程序有一个简单的主页屏幕

class StartPage extends StatelessWidget {}
和另外两个屏幕。用户被路由到其他屏幕,代码如下

Navigator.push(
       context,
       MaterialPageRoute(
         builder: (BuildContext context) => Page2(),
       ),

Page2有一个简单的秒表,我用一个提供程序实现它。我想在第3页添加相同的秒表代码。我认为StartPage比Page2和Page3更高级,如果我将StartPage的构建方法与提供者以及相关类中的消费者小部件代码包装在一起

 @override
  Widget build(BuildContext context) {
    return ChangeNotifierProvider<StopWatchProvider>(
      create: (context) => StopWatchProvider(),
      child: Scaffold()
然后秒表应在支持的第2页和第3页中按预期工作。但这会引发一个错误,即找不到提供程序,相反,我需要用提供程序包装Page2和Page3的生成器


我遗漏了什么?

你有没有尝试过与你的供应商包装MaterialApp?

我知道这会让我听起来很愚蠢,但我已经尝试过包装很多东西,现在我已经忘记了。我应该把材料包起来吗?就在这一分钟,我看到了是的,这表明你可以在应用程序的任何地方访问该提供商。如果这是你需要的,那就去做吧是的,成功了:-。。。我仍然不确定为什么我的原始代码不起作用,但你肯定解决了这个问题。
 @override
  Widget build(BuildContext context) {
    return ChangeNotifierProvider<StopWatchProvider>(
      create: (context) => StopWatchProvider(),
      child: Scaffold()