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

石家庄网站建设行业公司南通企业网站有哪些

石家庄网站建设行业公司,南通企业网站有哪些,网络市场调研,前端开发培训机构排名flutter开发实战-ValueListenableBuilder实现局部刷新功能 在创建的新工程中,点击按钮更新counter后,通过setState可以出发本类的build方法进行更新。当我们只需要更新一小部分控件的时候,通过setState就不太合适了,这就需要进行…

flutter开发实战-ValueListenableBuilder实现局部刷新功能

在创建的新工程中,点击按钮更新counter后,通过setState可以出发本类的build方法进行更新。当我们只需要更新一小部分控件的时候,通过setState就不太合适了,这就需要进行局部更新,可以通过provider等状态管理库来实现。当然flutter为我们提供了ValueListenableBuilder来实现局部控件的刷新。

一、ValueListenableBuilder

ValueListenableBuilder的属性如下

const ValueListenableBuilder({super.key,required this.valueListenable,required this.builder,this.child,}) : assert(valueListenable != null),assert(builder != null);
  • ValueListenable继承自Listenable,是一个可监听对象。
  • builder是一个typedef
    typedef ValueWidgetBuilder = Widget Function(BuildContext context, T value, Widget? child);
  • child,可选,可为空

查看ValueListenableBuilder类的实现可以看到

class _ValueListenableBuilderState<T> extends State<ValueListenableBuilder<T>> {late T value;@overridevoid initState() {super.initState();value = widget.valueListenable.value;widget.valueListenable.addListener(_valueChanged);}@overridevoid didUpdateWidget(ValueListenableBuilder<T> oldWidget) {super.didUpdateWidget(oldWidget);if (oldWidget.valueListenable != widget.valueListenable) {oldWidget.valueListenable.removeListener(_valueChanged);value = widget.valueListenable.value;widget.valueListenable.addListener(_valueChanged);}}@overridevoid dispose() {widget.valueListenable.removeListener(_valueChanged);super.dispose();}void _valueChanged() {setState(() { value = widget.valueListenable.value; });}@overrideWidget build(BuildContext context) {return widget.builder(context, value, widget.child);}
}

在initState中对传入的可监听对象进行监听,执行_valueChanged方法,_valueChanged执行了setState来触发当前状态的刷新。我们知道setState会执行build方法,触发执行build方法,最总触发widget.builder回调,这样就实现了局部刷新。

child的作用也是非常重要的,我们将Widget放到child中,在执行builder时,会直接使用child,将不会再构建一遍child。

二、ValueListenableBuilder实现局部刷新示例

下面使用ValueListenableBuilder来实现一个局部刷新的示例。示例中,在界面中,有一个显示按钮与隐藏按钮控制修改isShowNotifier的value。通过ValueListenableBuilder的builder中来判断需要显示的内容。
示例代码如下

import 'package:flutter/material.dart';class ValueListenablePage extends StatefulWidget {const ValueListenablePage({super.key});@overrideState<ValueListenablePage> createState() => _ValueListenablePageState();
}class _ValueListenablePageState extends State<ValueListenablePage> {final isShowNotifier = ValueNotifier<bool>(false);@overridevoid initState() {// TODO: implement initStatesuper.initState();}void show() {isShowNotifier.value = true;}void hide() {isShowNotifier.value = false;}@overridevoid dispose() {// TODO: implement disposeisShowNotifier.dispose();super.dispose();}@overrideWidget build(BuildContext context) {Size screenSize = MediaQuery.of(context).size;return Scaffold(appBar: AppBar(title: const Text('ValueListenablePage'),),body: Container(width: screenSize.width,height: screenSize.height,child: Stack(alignment: Alignment.center,children: [Positioned(top: 50,child: buildValueListenable(context),),Positioned(top: 200,child: buildButton(context),),],),),);}Widget buildHide(BuildContext context) {return Container(color: Colors.green,padding: EdgeInsets.symmetric(vertical: 20, horizontal: 50),child: Text("当前隐藏",textAlign: TextAlign.center,overflow: TextOverflow.ellipsis,softWrap: true,style: TextStyle(fontSize: 16,fontWeight: FontWeight.w600,fontStyle: FontStyle.italic,color: Colors.white,decoration: TextDecoration.none,),),);}Widget buildValueListenable(BuildContext context) {return ValueListenableBuilder(valueListenable: isShowNotifier,builder: (BuildContext aContext, bool isShow, Widget? child) {if (isShow) {return child ?? buildHide(context);} else {return buildHide(context);}},child: Container(color: Colors.blueGrey,padding: EdgeInsets.symmetric(vertical: 50, horizontal: 50),child: Text("ValueListenableBuilder Child",textAlign: TextAlign.center,overflow: TextOverflow.ellipsis,softWrap: true,style: TextStyle(fontSize: 16,fontWeight: FontWeight.w600,fontStyle: FontStyle.italic,color: Colors.white,decoration: TextDecoration.none,),),),);}Widget buildButton(BuildContext context) {return Container(width: 300,height: 220,color: Colors.deepOrange,child: Column(mainAxisAlignment: MainAxisAlignment.center,crossAxisAlignment: CrossAxisAlignment.center,children: [TextButton(onPressed: () {show();},child: Container(height: 50,width: 200,color: Colors.lightBlue,alignment: Alignment.center,child: Text('点击显示',style: TextStyle(fontSize: 14,color: Colors.white,),),),),TextButton(onPressed: () {hide();},child: Container(height: 50,width: 200,color: Colors.lightBlue,alignment: Alignment.center,child: Text('点击隐藏',style: TextStyle(fontSize: 14,color: Colors.white,),),),),],),);}
}

效果图如下

在这里插入图片描述

在这里插入图片描述

三、小结

flutter开发实战-ValueListenableBuilder实现局部刷新功能

学习记录,每天不停进步。

http://www.yayakq.cn/news/738561/

相关文章:

  • 做好直播运营必备的五大能力网页搜索引擎优化技术
  • 神木网站设计公司关键词搜索网站
  • 做外贸的网站有哪些想做电商怎么入手视频
  • 网站导航建设注意广州 网站设计
  • 如何做网站数据分析网站建设立项报告
  • wordpress怎么搜索网站梁山网站建设电话
  • 专门做肥料外贸的网站七牛cdn wordpress
  • 广东建设职业技术学院官方网站cdr平面设计教程
  • wordpress 全站过滤wordpress 主题 前端
  • 搭建网站的主要风险做外贸网站可以收付款吗
  • wordpress建站手机端大连模板网站制作推荐
  • 徐州建站模板公司菜单网站图片素材
  • 服务器做的网站 怎么使用重庆地区专业做网站的公司
  • 销售一个产品的网站怎么做的dedecms双语网站
  • 公司和网站备案查询密码好用的h5网站模板下载
  • 网站开发 访问速度慢前程无忧网深圳网站建设类岗位
  • 如何与别的网站做友情链接贵阳网站建设制作
  • 医联体网站建设视频类网站怎么做
  • 不花钱的网站建设网站后缀com
  • 设计 网站 现状网站建设找盖亚科技
  • 义乌公司网站建设网站建设的建议和意见
  • 国外建站 网站 推荐高唐做网站建设的公司
  • 小清新 轻音乐网站 wordpress网站建设十大公司
  • 上海网站建设费用学网站建设要多久
  • 怎么给搞笑网站做文案创建一个网站需要做哪些准备
  • 天津市建设银行网站重庆建设厅的网站
  • 温州设计集团网站建设建设上海公司网站
  • 香奈儿网站建设目标网站系统的建设与管理
  • 做视频网站视频做逆战网站的名字
  • 乐清网站制作哪家好大庆信息网