4

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

4

5 回答 5

4

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

您在应用程序中启动您的根 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()并在其中放置底层 Widget:

   Consumer<MyStateClass>(builder: (context, state, child) {

      // your code here - return(SomeOtherWidget());
    })

或在您的 Build 方法中:

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

于 2019-10-01T14:38:52.720 回答
3

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

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

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

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

回到舞台上,Provider带有一个监听器,这些监听器被分配给Provider所附加的小部件的子级。

因此,如果用户干扰任何具有侦听器的小部件,则应用程序将仅构建该特定(用户交互的)小部件(而不是整个应用程序)。

于 2019-12-14T15:49:03.257 回答
3

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

provider软件包易于理解,并且不使用太多代码。它还使用适用于所有其他方法的概念。

通过使用 provider 而不是手动编写InheritedWidget,您将获得:

  • 简化资源分配/处置
  • 延迟加载
  • 大大减少了每次创建新课程的样板
  • 开发工具友好
  • 一种常见的消费方式InheritedWidgets
  • 具有复杂性呈指数增长的侦听机制的类的可扩展性增加(例如ChangeNotifier,调度通知的时间为 O(N²))。

请参阅:用法

这个答案是根据:提供者给出的

于 2020-08-27T13:19:43.003 回答
2

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

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

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

每当有变化时,使用 NotifyChangeListener 它将更新所有消费者。

于 2020-07-17T03:29:48.403 回答
0

InheritedWidget 的包装器,使它们更易于使用和更可重用。

通过使用提供程序而不是手动编写 InheritedWidget,您可以获得:

  • 简化资源分配/处置懒惰

  • 每次对开发工具友好时,加载一个大大减少的样板文件而不是创建一个新类

  • 使用 Provider,您的应用程序的状态将在 Flutter 开发工具中可见,这是使用这些 InheritedWidgets 的常用方法

于 2022-01-27T15:09:03.157 回答