【问题标题】:Where in the tree to wrap widget with Provider to use the Provider for maintaining state throughout an app?在树中的哪个位置使用 Provider 包装小部件以使用 Provider 来维护整个应用程序的状态?
【发布时间】:2023-03-20 21:14:01
【问题描述】:

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

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() 更接近“树”,如果我用提供者包装StartPage 的构建方法(以及相关类中的消费者小部件代码)

 @override
  Widget build(BuildContext context) {
    return ChangeNotifierProvider<StopWatchProvider>(
      create: (context) => StopWatchProvider(),
      child: Scaffold()

那么秒表应该在Page2()Page3()(由this SO post 支持)中按预期工作。但这会引发无法找到提供程序的错误,相反,我需要使用提供程序包装 Page2()Page3() 的构建器。

我错过了什么?

【问题讨论】:

    标签: flutter flutter-provider


    【解决方案1】:

    你试过用你的Provider()包裹MaterialApp吗?

    【讨论】:

    • 我知道这会让我听起来很愚蠢,但我已经尝试包装了很多东西,现在我已经忘记了。我应该包装MaterialApp 吗? (就在这一分钟我看到了stackoverflow.com/questions/60045822/…
    • 是的,这可以确保您可以在应用程序的任何地方访问该提供程序。如果这是你需要的,那就去吧
    • 是的,做到了:-) ...我仍然不确定为什么我的原始代码不起作用,但你肯定解决了这个问题。
    猜你喜欢
    • 2021-01-20
    • 2019-11-11
    • 1970-01-01
    • 2020-01-01
    • 2021-06-18
    • 2021-02-08
    • 2021-02-28
    • 1970-01-01
    • 2021-06-28
    相关资源
    最近更新 更多