好吧,我对 Flutter 有点陌生,我的问题是为什么我们在 Flutter 中使用提供程序,我知道它用于状态管理。但我希望了解提供者最常见的用例。
5 回答
您需要能够在小部件之间移动数据。这是一种简单的方法。
您在应用程序中启动您的根 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)
正如你问到为什么我们在颤振中使用提供者,所以我将只提供理论解释,我认为这肯定会帮助你理解提供者的实际含义以及使用它的原因。
假设您正在开发一个包含大量文件夹和文件的大型应用程序。现在,如果用户与您的应用程序进行了交互(比如按下了按钮或类似的东西),那么应用程序必须再次构建自己以更新用户所做的更改。但是等等!这看起来不太划算,重新构建整个应用程序只是为了在某些特定部分进行更改。
所以,Provider来解决这个问题。
Provider基本上是一个容器或存储,用于存储并向您提供状态或数据。此外,我们知道小部件像树一样排列在应用程序中。因此,如果您将 Provider 分配给树中的任何节点,则该节点的所有子节点都将有权访问Provider提供的数据。
回到舞台上,Provider带有一个监听器,这些监听器被分配给Provider所附加的小部件的子级。
因此,如果用户干扰任何具有侦听器的小部件,则应用程序将仅构建该特定(用户交互的)小部件(而不是整个应用程序)。
Provider 是一个包装器InheritedWidget
,使它们更易于使用和更可重用。这可能是您应该开始的方法。
该provider
软件包易于理解,并且不使用太多代码。它还使用适用于所有其他方法的概念。
通过使用 provider 而不是手动编写InheritedWidget
,您将获得:
- 简化资源分配/处置
- 延迟加载
- 大大减少了每次创建新课程的样板
- 开发工具友好
- 一种常见的消费方式
InheritedWidgets
- 具有复杂性呈指数增长的侦听机制的类的可扩展性增加(例如
ChangeNotifier
,调度通知的时间为 O(N²))。
请参阅:用法
这个答案是根据:提供者给出的
什么是提供者以及它是如何工作的?
Provider 是一种简单的状态管理方式,它基于 PUB_SUB 的概念,
这意味着有一个提供者和多个订阅者,这里称为消费者。例如:YouTube。
每当有变化时,使用 NotifyChangeListener 它将更新所有消费者。
InheritedWidget 的包装器,使它们更易于使用和更可重用。
通过使用提供程序而不是手动编写 InheritedWidget,您可以获得:
简化资源分配/处置懒惰
每次对开发工具友好时,加载一个大大减少的样板文件而不是创建一个新类
使用 Provider,您的应用程序的状态将在 Flutter 开发工具中可见,这是使用这些 InheritedWidgets 的常用方法