【问题标题】:What is the use of provider in flutter?Flutter中提供者有什么用?
【发布时间】:2026-02-03 13:45:01
【问题描述】:

好吧,我对 Flutter 有点陌生,我的问题是为什么我们在 Flutter 中使用提供程序,我知道它用于状态管理。但我希望了解提供程序最常见的用例。

【问题讨论】:

    标签: flutter dart flutter-dependencies flutter-provider


    【解决方案1】:

    您需要能够在小部件之间移动数据。这是一种简单的方法。

    您在应用程序中启动您的根 Build 方法:

    @override
      Widget build(BuildContext context) {
        return MultiProvider(  // Multi means you can have more providers if you need
          providers: [
            ChangeNotifierProvider(builder: (context) => MyStateClass()),
          ],
          child: MaterialApp(....
    

    现在您可以将所有需要共享的数据放在MyStateClass() 中,并将底层Widgets 放入其中:

       Consumer<MyStateClass>(builder: (context, state, child) {
    
          // your code here - return(SomeOtherWidget());
        })
    

    或在您的构建方法中:

      @override
      Widget build(BuildContext context) {
       MyStateClass state = Provider.of<MyStateClass>(context);
       // ... TODO  ... return (Widget)
    
    

    【讨论】:

      【解决方案2】:

      正如你问我们为什么在颤振中使用 provider,所以我将只提供理论上的解释,我认为这肯定会帮助你理解什么 实际上提供者是以及为什么使用它。

      假设您正在开发一个包含大量文件夹和文件的大型应用程序。 现在,如果用户与您的应用程序进行了交互(比如按下按钮或类似的东西),那么应用程序必须再次构建自己以更新用户所做的更改。但是等等!这看起来不太划算,重新构建整个应用程序只是为了在某些特定部分进行更改。

      所以,Provider 来解决这个问题。

      Provider 基本上是一个容器或存储,用于存储并向您提供状态或数据。 此外,我们知道小部件像树一样排列在应用程序中。 因此,如果您将 Provider 分配给树中的任何节点,则该节点的所有子节点都可以访问 Provider 提供的数据。

      在后台,Provider 带有一个 listener,这些 listener 被分配给 Provider 的小部件的子级 已附上。

      因此,如果用户干扰任何具有侦听器的小部件,那么该应用将再次构建该特定(用户与之交互的)小部件(而不是整个应用)。

      【讨论】:

        【解决方案3】:

        Provider 是InheritedWidget 的包装器,使它们更易于使用和更可重用。这可能是您应该开始的方法。

        provider 包很容易理解并且不需要太多代码。它还使用了适用于所有其他方法的概念。

        通过使用提供者而不是手动编写InheritedWidget,你得到:

        • 简化资源的分配/处置
        • 延迟加载
        • 与每次都创建一个新类相比大大减少了样板
        • 开发工具友好
        • 消费这些InheritedWidgets的常用方法
        • 通过复杂性呈指数增长的侦听机制(例如 ChangeNotifier,调度通知的 O(N²) 时间)提高了类的可扩展性。

        见:Usage

        这个答案是基于:provider

        【讨论】:

          【解决方案4】:

          什么是提供者以及它是如何工作的?

          Provider 是一种简单的状态管理方式,它基于 PUB_SUB 的概念,

          这意味着有一个提供者和多个订阅者,这里称为消费者。例如:YouTube。

          只要有变化,NotifyChangeListener 就会更新所有的消费者。

          【讨论】:

            最近更新 更多