Flutter之GetX之GetBuilder
Flutter之GetX之GetBuilder
GetX是Flutter的一个非常强力的三方库,包含了非常多的功能,比如状态管理、路由管理、国际化、路由中间件、主题、数据库等等
今天简单介绍一下状态管理中的GetBuilder实现
有关状态管理
当你的 Flutter 应用的状态发生改变时(例如,用户在设置界面中点击了一个开关选项)你改变了状态,这将会触发用户界面的重绘。去改变用户界面本身是没有必要的(例如 widget.setText )—你改变了状态,那么用户界面将重新构建。Flutter 应用是 声明式 的,这也就意味着 Flutter 构建的用户界面就是应用的当前状态。
状态类
在 GetX 中称之为 Controller,需要继承GetxController,当状态发生改变的时候,调用 update 方法即可通知依赖状态的组件进行刷新。
实现最简单的计数器demo
class CounterController extends GetxController {
int _counter = 0;
get counter => _counter;
void increment() {
_counter++;
update();
}
}
视图界面
界面层在需要使用状态的地方使用 GetBuilder 包裹,然后就可以使用 Controller 访问状态对象和操作状态方法了。其中GetBuilder只需要两个参数:
init:初始状态对象,在这里可以完成状态对象的初始化。
builder 方法:这个方法用于构建依赖状态的组件树,方法携带状态对象参数,因此下面的组件可以访问到状态对象。而且一旦状态对象通过 update 方法通知有更新时,依赖状态对象的组件就会被刷新。
Widget build(BuildContext context) {
return GetBuilder<CounterController>(
init: CounterController(),
builder: (controller) => Scaffold(
appBar: AppBar(
title: Text('GetX计数器'),
),
body: Center(
child: Text(
'${controller.counter}',
style: TextStyle(
color: Colors.blue,
fontSize: 24.0,
),
),
),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.add),
onPressed: () {
controller.increment();
},
),
),
);
}
以上代码有点问题,GetBuilder包住了整个Scaffold,我们没必要把不需要刷新的组件包住
可以改成
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('GetX计数器'),
),
body: Center(
child: GetBuilder<CounterController>(
init: CounterController(),
builder: (_) => Text(
'${CounterController.to.counter}',
style: TextStyle(
color: Colors.blue,
fontSize: 24.0,
),
),
),
),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.add),
onPressed: () {
CounterController.to.increment();
},
),
);
当只包住需要刷新的Text组件时,按钮的点击方法和GetBuilder在同一个层级,没办法访问到buidler中的controller,这时候可以在controller中定义一个静态的别名方法
static CounterController get to => Get.find();
直接通过CounterController.to就可以访问到,但是要用Get.find()的话必须要先用Get.put()或者Get.LazyPut()注册依赖,然后就可以通过CounterController.to全局访问了
Flutter之GetX之GetBuilder的更多相关文章
- Flutter GetX使用---简洁的魅力!
前言 使用Bloc的时候,有一个让我至今为止十分在意的问题,无法真正的跨页面交互!在反复的查阅官方文档后,使用一个全局Bloc的方式,实现了"伪"跨页面交互,详细可查看:flutt ...
- 【源码篇】Flutter GetX深度剖析 | 我们终将走出自己的路(万字图文)
前言 人心中的成见是一座大山,任你怎么努力都休想搬动. 这是电影<哪吒>里申公豹说的一句话,也是贯彻整部电影的一个主题:或许这句话引起了太多人的共鸣:35岁职场危机,大厂卡本科学历,无房无 ...
- GetX代码生成IDEA插件,超详细功能讲解(透过现象看本质)
前言 本文章不是写getx框架的使用,而且其代码生成IDEA插件的功能讲解 我之前写过俩篇很长很长的getx文章 一篇入门使用:Flutter GetX使用---简洁的魅力! 一篇原理深度剖析:Flu ...
- 干货 | 把Flutter扩展到微信小程序端的探索
Google Flutter是一个非常优秀的跨端框架,不仅可以运行在Android. iOS平台,而且可以支持Web和桌面应用.在国内小程序是非常重要的技术平台,我们也一直思考能否把Flutter扩展 ...
- Flutter 改善套娃地狱问题(仿喜马拉雅PC页面举例)
前言 这篇文章是我一直以来很想写的一篇文章,终于下定决心动笔了. 写Flutter的小伙伴可能都感受到了:掘金的一些热门的Flutter文章下,知乎的一些Flutter的话题下或者一些论坛里面,喷Fl ...
- 源码篇:Flutter Provider的另一面(万字图文+插件)
前言 阅读此文的彦祖,亦菲们,附送一枚Provider模板代码生成插件! 我为啥要写这个插件呢? 此事说来话短,我这不准备写解析Provider源码的文章,肯定要写这框架的使用样例啊,然后再哔哔源码呀 ...
- Flutter 对状态管理的认知与思考
前言 由 编程技术交流圣地[-Flutter群-] 发起的 状态管理研究小组,将就 状态管理 相关话题进行为期 两个月 的讨论. 目前只有内定的 5 个人参与讨论,如果你对 状态管理 有什么独特的见解 ...
- Flutter 状态管理框架 Provider 和 Get 分析
文/ Nayuta,CFUG 社区 状态管理一直是 Flutter 开发中一个火热的话题.谈到状态管理框架,社区也有诸如有以 Get.Provider 为代表的多种方案,它们有各自的优缺点. 面对这么 ...
- dart+flutter中使用PaginatedDataTable分页时最后一页多出空白行问题
使用PaginatedDataTable时解决最后一页不够当前行的话会有很空白行的问题 解决的场景: 比如下图,28行数据,每页5行最后一页会多出两行空白. 解决方法: 可以使用PaginatedDa ...
- 12.创建一个Point类,有成员变量x,y,方法getX(),setX(),还有一个构造方 法初始化x和y。创建类主类A来测试它。
package java1; public class Point { int x; int y; Point(int x,int y) { this.x = x; this.y = y; } pub ...
随机推荐
- SXYZ-12天集训
Day 1(6月25日) 早上四点多钟起床做七点到九点四十的飞机到杭州萧山(空客330) 然后坐一小时车到绍兴一中对面的酒店. 中午曾老师请我们在酒店隔壁吃了一桌家常菜(味道可以),以此庆祝曾老师52 ...
- 点亮PC13- 使用寄存器点亮
#include "stm32f10x.h" // Device header int main(void) { // 打卡GPIOC的时钟 RCC->APB2ENR = 0 ...
- text-align的对齐方式
text-align的6种取值 left:左对齐 right:右对齐 center:居中 start:如果内容方向是左至右,则等于left,反之则为right. end:如果内容方向是左至右,则等于r ...
- 有没有开发过⼀些vue插件?举例说说 - 批量引入插件
有过,项⽬开发的时间⻓了,沉淀了不少业务通⽤全局组件,想把他们统⼀进⾏注册,就封装了⼀个⼩ 插件 当时其实⼀开始也没有什么思路,后来扒了⼀下 elementUI的源码,仿了⼀下它的写法,流程我还⼤概记 ...
- 使用 KubeSphere 和极狐GitLab 打造云原生持续交付系统
KubeSphere 简介 Kubernetes 是一个非常复杂的容器编排平台,学习成本非常高,KubeSphere 所做的事情就是高度产品化和抽象了底层 Kubernetes,是一个面向云原生的操作 ...
- 再见,Centos!
近日,CentOS官方宣布CentOS系列稳定版Linux系统将停止维护,取而代之的是测试版的CentOS Stream,这也意味着CentOS将会退出历史舞台,因此引发了CentOS用户的强烈不满. ...
- linux 基础(8)例行任务
我们的 linux 系统,有时会自动进行线上更新,会定时升级locate用到的数据库.用户也会"在每天0点备份数据"或者"每天8点分析登录文件",管理这些例行任 ...
- nginx关于正向代理与反向代理的概念区分
正向代理:如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理. 反向代理 反向代理中客户端对 ...
- 微信H5分享外部链接,缩略图不显示
可关注微信公众号酒酒酒酒查看原文: 前言:最近做了一款推广茶的APP软件,展厅.产品需要分享功能:从APP内分享到H5网页:微信内打开H5网页,点击微信内右上角三个点,可再次分享: 注意:大多数情况下 ...
- react hooks + ts 封装组件
react hooks+ts组件封装 简介 在react使用ts封装组件,需要注意类型, 使用 forwardRef 方法包起来 子组件 import * as React from "re ...