flutter中的状态管理Provider

  今天简单说一下flutter中的状态管理,我们这次使用provider;

  ps:先说一个概念,Model,模型,这里面定义了我们准备全局使用的数据,或者方法;

  举个栗子:我们有一个User类,用来储存用户的信息,比如登录之后,我们会拿到用户的一些个人数据,那么这些数据就可以作为属性写在Model里,同时我们在User内部,还会提供一个upUser方法,用来更新用户信息,那么这个方法也可以写在Model中,OK,以上就是我们准备的User Model;

  下面是正题,go,go,go

  

  一、Provider的三个好兄弟:

    老大 -- MultiProvider

    老二 -- Providers

    老三 -- Provider.of<T>(context)  /  Widget Consumer

  

  二、三兄弟的组合拳:

    其实很好理解,我们不去说精髓,先把拳法说一下,靠着拳法去揣摩精髓,会简单很多;

    1、老大 MultiProvider 

  Widget build(BuildContext context) {
    return MultiProvider(
      providers: [], ///先不考虑这一句
      child: MaterialApp(
        title: ‘Provider Demo‘,
        initialRoute: ‘/‘,
      ),
    );
  }

  上面这段代码想必大家很熟悉,一个根widget(先不考虑这一句 providers: [] ),老大的任务就是包裹根节点,将我们准备好的Model和View建立联系;可以想象成一只巨大章鱼包裹了一棵大树,他可以将触手随意的伸向某一节树枝;

  

  2、老二 Providers登场:

    其实也很好理解,既然老大可以将我们准备好的各个Model输送到各个节点,那前提是不是老大得知道都有哪些Model需要被送走呢,老二出现了,他就负责预先定义好,需要被共享的Model;

    那老二该如何定义呢,我们上面“先不考虑”的那一句就该出现了,providers,老二是个数组,providers中的s也很明显是个复数,他和老大一起使用,老二就是货源,老大就是供货商,那么老三就是消费者了;

    当然老二这个数组里面不会这么简单,providers:[provider,provider,providers],它肯定不会是这个样子,因为我们使用Model的需求不同,老二这个数组里装的儿子有好几种,下面我们就说一下,老二几个常用的儿子:

    大儿子:provider  不需要被监听,有的常量或者方法,根本不需要“牵一发而动全身”,也就是说他们不会被要求随着变动而变动,这样的需求就用大儿子定义;

    二儿子: ChangeNotifierProvider  对这个儿子父亲要求的就比较多了,它会随着某些数据改变而被通知更新,也就是说,比如这个Model被用在多个page,那么当其中一处被改变时,他就应该告诉其他的地方,改更新了,这样的需求就是用二儿子定义;

    三儿子: ChangeNotifierProxyProvider   对这个儿子要求就更高了,所以它的名字都比老二长一截,他不仅要像老二一样,通知更新,还要协调Model与Model之间的更新,比如一个ModelA依赖另一个ModelB,ModelB更新,他就要让依赖它的ModelA也随之更新,这就是老三的活;

    具体写法呢,也很简单,官网走起

  3、老三这个人有点怪

    我们上面说了老三是消费者,也就是说,他就是负责从各个节点取出数据来使用的;

    为什么说他怪,因为他有两种形态,一种是需要绑定在widget中展示用的,另一种则不是,只是需要作为数据去使用;

    变身一

 var foo = Provider.of<T>(context);

    T是你需要的Model,只需如此,你的foo就取出来了;

    变身二

Consumer<T>(
    builder: (context,foo, child) => Text(‘$foo.text‘)
)

    widget展示,foo如上,也是从Model中取出的数据,随意使用;

    OK,三兄弟基本介绍完毕,我也是今天刚刚看到的Provider,如果理解的不对,请你也假装对,哈哈哈,开玩笑,希望大家共同进步;

    

  

原文地址:https://www.cnblogs.com/webcabana/p/12149972.html

时间: 2024-10-11 10:07:21

flutter中的状态管理Provider的相关文章

4-Vue中的状态管理模式

安装 npm install vuex --save 在自定义文件夹中的index.js中书写内容 import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) export default new Vuex.Store({ state: { user: { } }, mutations: { login (state,user) { state.user=user; } } }) 如 将其注入到vue中 存入 取出 computed: 

Vuex内容解析和vue cli项目中使用状态管理模式Vuex

中文文档:vuex官方中文网站 一.vuex里面都有些什么内容? const store = new Vuex.Store({ state: { name: 'weish', age: 22 }, getters: { personInfo(state) { return `My name is ${state.name}, I am ${state.age}`; } } mutations: { SET_AGE(state, age) { commit(age, age); } }, acti

Vue中的状态管理器 - Vuex

我们知道vue是组件式开发的,当你的项目越来越大后,每个组件背后的数据也会变得越来越难以理顺, 这个时候你就可以考虑使用vuex了. 备注: 官方建议小项目不要使用,引入vuex会带来新的概念和模式,这对于新手而言理解上本身有难度,而且小项目中vuex发挥的功效确实不怎么明显, 反而增加了开发难度,就像后端项目中常说的 过度设计. 说了这么多,下面介入正题(以下讲解需要一个空的vue项目,推荐使用 vue-cli 创建,快速搭建一个vue开发环境 ): vuex的作用就是作为一个数据仓库(sto

Flutter 功能型组件:跨组件状态共享(Provider)

前言 ??在Flutter开发中,状态管理是一个永恒的话题. ??一般的原则是:如果状态是组件私有的,则应该由组件自己管理:如果状态要跨组件共享,则该状态应该由各个组件共同的父元素来管理. ??对于组件私有的状态管理很好理解,但对于跨组件共享的状态,管理的方式就比较多了,如使用全局事件总线EventBus,它是一个观察者模式的实现,通过它就可以实现跨组件状态同步:状态持有方(发布者)负责更新.发布状态,状态使用方(观察者)监听状态改变事件来执行一些操作. ??但是观察者模式来实现跨组件状态共享有

第92讲 SparkStreming中的Transformations和状态管理

本期内容: 1.SparkStreaming中的Transforamtions 2.SparkStreaming中的状态管理 一.DStream就是一个RDD之上的一个抽象,DStream和时间结合起来就不断的触发产生RDD的实例,可以说我们对Dstream的操作就初步定义了对RDD的操作,只不过需要时间的间隔也就是internalbatch去激活这个模板,生成具体的RDD的实例和具体的job. 二.我们鼓励Repartition,更多的是把更多的partition变成更少的partition,

httpClient HTTP状态管理

HTTP状态管理 原始的HTTP是被设计为无状态的,面向请求/响应的协议,没有特殊规定有状态的,贯穿一些逻辑相关的请求/响应交换的会话.由于HTTP协议变得越来越普及和受欢迎,越来越多的从前没有打算使用它的系统也开始为应用程序来使用它,比如作为电子商务应用程序的传输方式.因此,支持状态管理就变得非常必要了. 网景公司,一度成为Web客户端和服务器软件开发者的领导方向,在它们基于专有规范的产品中实现了对HTTP状态管理的支持.之后,网景公司试图通过发布规范草案来规范这种机制.它们的努力通过RFC标

SERVLETJSP学习(六)—— 状态管理-cookie

1. 状态管理-Cookie 1.1. 状态管理 1.1.1. 为什么需要状态管理 Web应用程序使用HTTP协议作为传输数据的标准协议,而HTTP协议是无状态协议,即一次请求对应一次响应,响应结束后连接即断开,同一个用户的不同请求对于服务器端来讲并不会认为这两个请求有什么关联性,并不会以此区分不同的客户端.但实际情况中还是需要服务器端能够区分不同的客户端以及记录与客户端相关的一些数据,所以状态管理能够做到不同客户端的身份识别. 1.1.2. 什么是状态管理 将客户端与服务器之间多次交互当做一个

Flink状态管理和容错机制介绍

本文主要内容如下: 有状态的流数据处理: Flink中的状态接口: 状态管理和容错机制实现: 阿里相关工作介绍: 一.有状态的流数据处理# 1.1.什么是有状态的计算# 计算任务的结果不仅仅依赖于输入,还依赖于它的当前状态,其实大多数的计算都是有状态的计算. 比如wordcount,给一些word,其计算它的count,这是一个很常见的业务场景.count做为输出,在计算的过程中要不断的把输入累加到count上去,那么count就是一个state. 1.2.传统的流计算系统缺少对于程序状态的有效

(译) Google Flutter 中的简单状态管理

原文链接 我是如何遇见 Google Flutter的 这对我来这是像往常一样的码代码的一天.我的一个朋友在我们的开发者群组中发了这么一个问题,是否有人尝试过Google Flutter.它想要知道React Native 和 Google Flutter之间的比较.这个问题让我种草了Google Flutter.我之前从没有听过Google Flutter.它是否值得与React Native进行比较,就像AngularJS相较于ReactJS? 我必须承认.我是一个React的迷弟.我已经使