【问题标题】:Provider vs ValueNotifier FlutterProvider vs ValueNotifier Flutter
【发布时间】:2020-12-30 16:44:24
【问题描述】:

有人能解释一下使用Provider 包和使用ValueNofifier 之间的区别吗?

现在我在我的应用程序中使用 ValueNotifierValueListenableBuilder,我发现这与使用 Providers 和 Consumers 有很多相似之处。两者都有侦听器,它们使用提供的最新数据重建小部件,并且都使用 ChangeNotifier 和 notifyListeners。

那么有什么区别,我们什么时候应该选择其中一个而不是另一个?

谢谢

【问题讨论】:

    标签: flutter provider


    【解决方案1】:

    就我在应用程序中使用这两种东西的经验而言,主要区别在于

    Provider 可以在应用程序的任何部分提供更改,例如使用notifyListener() 的任何位置,并且可以使用应用程序中的任何位置进行访问。但是,使用 global ValueNotifier 可能会出现错误,不建议这样做。从技术上讲,当代码变大时,您无法对错误跟踪进行太多控制。

    Provider(
      create: (_) => MyModel(),
      child: ...
    )
    

    其他主要区别:

    Provider 使您能够使用多个提供者,并且只能存储在单个提供者数组中,但是,在ValueNotifier 中,您只能使用一个值一次。使用多个ValueNotifier,需要创建多个ValueNotifier,然后每次都dispose。

    MultiProvider(
      providers: [
        Provider<Something>(create: (_) => Something()),
        Provider<SomethingElse>(create: (_) => SomethingElse()),
        Provider<AnotherThing>(create: (_) => AnotherThing()),
      ],
      child: someWidget,
    )
    

    这基本上是一种将业务逻辑与正常应用逻辑分开的巧妙方法。

    【讨论】:

    • 我同意答案的第二部分,但对于第一部分,您可以使用全局 ValueNotfier 并在应用程序的任何位置使用它。为什么不推荐它?为什么提供者会为您提供更好的方法来做同样的事情?
    • 它让您可以更好地控制@Morez 的更改。就像您创建全局值并想要更改任何地方一样,当代码变大时,您可能不知道在哪里更改了值,但是当您有提供者时,您实际上知道,因为您有处理您使用notifyListeners() 的更改的一组类方法。更有效地跟踪错误。 在 Flutter 中使用globals 通常不是一个好习惯。您可以阅读有关它的更多信息,因此是第一部分。
    猜你喜欢
    • 1970-01-01
    • 2020-08-29
    • 2021-01-25
    • 2022-01-05
    • 2020-05-22
    • 2022-11-16
    • 2022-08-14
    • 2020-11-06
    • 1970-01-01
    相关资源
    最近更新 更多