当前位置: 首页 > news >正文

seo关键词排名公司榆林百度seo

seo关键词排名公司,榆林百度seo,深圳罗湖做网站的公司哪家好,成都推广公司联系电话在使用Provider的时候,我们主要关心三个概念: ChangeNotifier:真正数据(状态)存放的地方ChangeNotifierProvider:Widget树中提供数据(状态)的地方,会在其中创建对应的Ch…

在使用Provider的时候,我们主要关心三个概念:

  • ChangeNotifier:真正数据(状态)存放的地方
  • ChangeNotifierProvider:Widget树中提供数据(状态)的地方,会在其中创建对应的ChangeNotifier
  • Consumer:Widget树中需要使用数据(状态)的地方

前提条件:
使用之前,我们需要先引入对它的依赖,截止这篇文章,Provider的最新版本为6.0.4:

dependencies:provider:^4.0.4

第一步:创建自己的ChangeNotifier
(这里可以对每个需要共享的数据创建自己的文件进行管理)

/*** 使用继承自ChangeNotifier,也可以使用混入,这里取决于是否需要已经继承了其他的类* 创建一个私有的 _counter,并且提供get set方法* 在set方法中监听 _counter的改变,如果改变就调用 notifyListeners方法、通知所有的Consumer进行更新*/
class CounterProvider extends ChangeNotifier {int _counter = 100;int get counter => _counter;set counter(int value) {_counter = value;notifyListeners(); // 通知所有的Consumer进行更新}
}
import'package:flutter/material.dart';class UserInfo {String nickname;int level;UserInfo(this.nickname, this.level);
}class UserProvider extends ChangeNotifier {UserInfo _userInfo = UserInfo("why", 18);set userInfo(UserInfo info){_userInfo = info;notifyListeners();}get userinfo{return _userInfo;}}

第二步:在Widget Tree中插入ChangeNotifierProvider

void main() {runApp(// ChangeNotifierProvider 放到顶层,这样方便在整个应用的任何地方可以使用 CounterProviderMultiProvider(providers: [// 存放多个共享数据ChangeNotifierProvider(create: (ctx)=> CounterProvider()),ChangeNotifierProvider(create: (ctx) => UserProvider())],child: MyApp(),),);
}

第三步:在首页中使用Consumer引入和修改状态
(这里使用了Selector 替换了Consumer进行了优化 )

class _MyHomePageState extends State<MyHomePage> {void initState() {super.initState();}Widget build(BuildContext context) {return Scaffold(// 脚手架appBar: AppBar(title: Text(widget.title),),body: Center(child: Column (mainAxisAlignment: MainAxisAlignment.center,children: [HYShowData01(),HYShowData02(),],),),floatingActionButton: Selector<CounterProvider,CounterProvider> (// 某种情况下使用 Selector代替Consumer,性能会更高selector: (ctx,provider) => provider,shouldRebuild: (pre, next) => false,// 是否需要重新 buildbuilder: (ctx, counterPro,child) {print("floatingActionButton 展示位置builder被调用");return FloatingActionButton(child: child,onPressed: () {counterPro.counter +=1;});},child: const Icon(Icons.add),),);}
}class HYShowData01 extends StatelessWidget {Widget build(BuildContext context) {print("HYShowData01");return Consumer<CounterProvider>(builder: (ctx, counterPro, child) {// ctx: 每个build 方法都会有上下文,目的是知道当前树的位置// counterPro:对应的实例,也是我们在builder函数中主要使用的对象// child: 目的是进行优化,如果builder下面有一颗庞大的子树,当模型发生改变的时候,我们并不希望重新build这颗子树,那么就可以将这颗子树放到Consumer的child中,在这里直接引用即可print("HYShowData011");return Text("共享状态:${counterPro.counter}");},);}
}class HYShowData02 extends StatefulWidget {State<HYShowData02> createState() => _HYShowData02State();
}class _HYShowData02State extends State<HYShowData02> {void didChangeDependencies() {// TODO: implement didChangeDependenciessuper.didChangeDependencies();}Widget build(BuildContext context) {// 使用Consumer 是为了尽可能少的 rebuild widget// 当我们点击了 FloatingActionButton时,HomePage的build方法会被重新调用,这意味着HomePage的widget的widget都需要重新build// 使用Consumer 会发现 Homepage的build方法不会被重新调用print("_HYShowData02State");return Consumer<CounterProvider>(builder: (ctx, counterPro,child) {print("_HYShowData022State");return Text("共享状态:${counterPro.counter}");});}
}
http://www.ds6.com.cn/news/80460.html

相关文章:

  • 手机网站域名哪里注册站内seo的技巧
  • 网站建设资金管理办法郑州最好的建站公司
  • 衡水医院网站建设十大网络舆情案例
  • 张北北京网站建设360竞价推广技巧
  • 东营市住房和城乡建设管理局汕头seo网络推广
  • 网站制作公司去哪找客户同城广告发布平台
  • 南充市住房和城乡建设局网站目前最流行的拓客方法
  • 给金融公司群做网站合法吗国内新闻最近新闻今天
  • 设计一个网站开发方案新手学seo
  • 吉林省 网站建设seo 优化
  • 山西建设执业注册管理中心网站外贸b2b平台都有哪些网站
  • 网站建设的概念app开发公司排名
  • 连云港市网站优化网络推广公司怎么找客户
  • 网站建设 考题百度站点
  • 南海网站建设网络营销的发展前景
  • 公司网站做推广支出分录百度seo优化怎么做
  • 如何免费做网站域名谷歌海外推广
  • 动态网页设计网站建设国外免费舆情网站有哪些软件
  • 做家常菜哪个网站最好宽带业务如何推广
  • 公司网站的搭建方案沧州网站运营公司
  • 织梦系统如何做网站电商运营基本知识
  • 网站标题更改后要多久才能收录长春网站建设解决方案
  • wordpress报价武汉seo和网络推广
  • 推荐成都网站建设域名购买哪个网站好
  • 深圳住房和建设局网站 宝安搜索到的相关信息
  • 网站大图轮播江门网站定制多少钱
  • php网站实例电商运营培训班
  • 学做网站论坛视频下载上海营销seo
  • 济南莱芜区疫情最新消息通知站外seo推广
  • 亳州电子商务网站建设公司中国突然宣布一重磅消息