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

网站建设流程六个步骤村级网站建设系统

网站建设流程六个步骤,村级网站建设系统,wordpress自动保存图片,建设网站所需要什么在使用Provider的时候#xff0c;我们主要关心三个概念#xff1a; ChangeNotifier#xff1a;真正数据#xff08;状态#xff09;存放的地方ChangeNotifierProvider#xff1a;Widget树中提供数据#xff08;状态#xff09;的地方#xff0c;会在其中创建对应的Ch…在使用Provider的时候我们主要关心三个概念 ChangeNotifier真正数据状态存放的地方ChangeNotifierProviderWidget树中提供数据状态的地方会在其中创建对应的ChangeNotifierConsumerWidget树中需要使用数据状态的地方 前提条件 使用之前我们需要先引入对它的依赖截止这篇文章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进行更新} }importpackage: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 StateMyHomePage {overridevoid initState() {super.initState();}overrideWidget build(BuildContext context) {return Scaffold(// 脚手架appBar: AppBar(title: Text(widget.title),),body: Center(child: Column (mainAxisAlignment: MainAxisAlignment.center,children: [HYShowData01(),HYShowData02(),],),),floatingActionButton: SelectorCounterProvider,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 {overrideWidget build(BuildContext context) {print(HYShowData01);return ConsumerCounterProvider(builder: (ctx, counterPro, child) {// ctx 每个build 方法都会有上下文目的是知道当前树的位置// counterPro对应的实例也是我们在builder函数中主要使用的对象// child: 目的是进行优化如果builder下面有一颗庞大的子树当模型发生改变的时候我们并不希望重新build这颗子树那么就可以将这颗子树放到Consumer的child中在这里直接引用即可print(HYShowData011);return Text(共享状态${counterPro.counter});},);} }class HYShowData02 extends StatefulWidget {overrideStateHYShowData02 createState() _HYShowData02State(); }class _HYShowData02State extends StateHYShowData02 {overridevoid didChangeDependencies() {// TODO: implement didChangeDependenciessuper.didChangeDependencies();}overrideWidget build(BuildContext context) {// 使用Consumer 是为了尽可能少的 rebuild widget// 当我们点击了 FloatingActionButton时HomePage的build方法会被重新调用这意味着HomePage的widget的widget都需要重新build// 使用Consumer 会发现 Homepage的build方法不会被重新调用print(_HYShowData02State);return ConsumerCounterProvider(builder: (ctx, counterPro,child) {print(_HYShowData022State);return Text(共享状态${counterPro.counter});});} }
http://wiki.neutronadmin.com/news/220748/

相关文章:

  • 微网站开发商网站建成
  • 在线观看免费网站开发公司会议提纲
  • WordPress整站搬家插件网站建设ningqueseo
  • wordpress升级需要ftp网站优化的主要目的是什么
  • 黄州区精神文明建设网站网站制作包括数据库吗
  • 丹江口网站制作办公室装修设计网站
  • 群晖wordpress建站教程网站建设邀标比选
  • 兰州专业网站建设公司wordpress个人下载网站模板
  • 对网站建设的维护wordpress知更鸟企业主题
  • 一般网站建设公司怎么收费网站备案规定
  • 在线优化网站建设郑州 服装网站建设
  • 安卓图形网站建设西安seo关键词排名优化
  • 网站建设与管理职业分析市场调研报告总结
  • 做五金上哪个网站推广wordpress修改元内容
  • wordpress扒站一般营销方式三大步骤
  • 企业建设营销网站的目的西宁好的网站建设公司
  • 自助网站设计平台百度怎么做开锁网站
  • 什么叫网站策划书我的个人主页模板
  • 网站更换服务器对seo的影响无锡企业网站建设报价
  • 家居企业网站建设报价抖音seo怎么做的
  • 网站制作排名网站的分页效果怎么做
  • 申请学校网站建设申请书个人怎么做互联网推广平台
  • 镇赉县做网站的企业团队建设案例公司
  • 中国建设银行网站的社保板块在哪里查询优惠券的网站如何做
  • 个人网站建立展示型网站 asp.net
  • 柴沟堡网站建设python基础教程雪峰
  • 苏州建站免费模板苏州建设人才网官网
  • 凌云县 城市建设 网站怎么看网站用哪个系统做的
  • 做网站上传视频关于购物网站建设的论文
  • 宜昌网站建设选择宜昌慧享互动衡阳专业的关键词优化终报价