Flutter中提供者有啥用?
Posted
技术标签:
【中文标题】Flutter中提供者有啥用?【英文标题】:What is the use of provider in flutter?Flutter中提供者有什么用? 【发布时间】:2020-01-30 18:51:55 【问题描述】:好吧,我对 Flutter 有点陌生,我的问题是为什么我们在 Flutter 中使用提供程序,我知道它用于状态管理。但我希望了解提供程序最常见的用例。
【问题讨论】:
【参考方案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 就会更新所有的消费者。
【讨论】:
以上是关于Flutter中提供者有啥用?的主要内容,如果未能解决你的问题,请参考以下文章