gpt4 book ai didi

flutter - Provider 和 ChangeNotifierProvider 的区别

转载 作者:行者123 更新时间:2023-12-03 03:14:33 29 4
gpt4 key购买 nike

这两个小部件之间有什么区别以及使用它的必要性ChangeNotifier在每个 Provider或者有很多使用方法Provider ?

最佳答案

提供者在小部件树下公开一个值,以便 children 可以访问它,而不管他们的位置(但是,他们必须至少比提供者低一级)。通常,您使用提供程序向一系列小部件公开“缓存”,或者作为跨多个页面共享数据的一种简洁方式。注意:

  • 默认情况下,当读取存储在提供程序中的值时,什么都不会发生。这意味着如果你公开一个类(class)并且你改变了它的一些内部结构, children 就不会听它。
  • 如果您通过提供程序公开的类(class)与 ChangeNotifier那么当事情发生变化时,你就有可能重建监听器。

  • 你绝对是 不是 被迫使用 ChangeNotifier在提供者公开的模型类中。当您需要一些小部件来监听更改时使用它,但如果不是这种情况,请忽略它。

    示例 1 -(无 ChangeNoftier)
    您正在使用 TabBarView使用标签(假设您有 3 个页面)并且您的页面需要共享一些数据。而不是使用 Navigator 共享数据,这可能会变得很麻烦,请寻求提供者。
    class MyDataHolder {
    int _value = 0;

    void updateValue(int a) {
    _value = a;
    }
    }
    然后做这样的事情:
    Provider<MyDataHolder>(
    create: (_) => MyDataHolder(),
    child: MyWidgetWithTabs(),
    )
    通过这种方式,您可以轻松地在页面之间共享数据
    示例 2 -(使用 ChangeNotifier)
    仍然是上述情况,但如果您希望您的页面监听特定数据的更改,请使用通知程序。像这样:
    class MyDataHolder with ChangeNotifier {
    int _value = 0;

    void updateValue(int a) {
    _value = a;
    notifyListeners();
    }
    }
    现在 children 倾听变化。与以前不同的是,当调用 updateValue监听器将被重建。

    所以这两种方式都很好,但它们有不同的目的。如果您不需要重新构建一系列监听器以响应更新,请不要使用 ChangeNotifier .

    关于flutter - Provider 和 ChangeNotifierProvider 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62750631/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com