Flutter Getx 状态管理 --- (依赖管理) GetxController
Flutter Getx 简单的状态管理(依赖管理) GetxController
Getx 依赖管理简介
Controller controller = Get.put(Controller());
// 而不是 Controller controller = Controller();
Controller controller = Get.find();
//是的,它看起来像魔术,Get会找到你的控制器,并将其提供给你。你可以实例化100万个控制器,Get总
会给你正确的控制器。
多页面之间的数据共享
- 每次点击都能改变状态
- 在不同页面之间切换
- 在不同页面之间共享状态
- 将业务逻辑与界面分离
应用程序入口设置
import 'package:flutter/material.dart';
import 'package:get/get.dart'; void main() {
runApp(const MyApp());
} class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return GetMaterialApp();
...
}
}
新建CountController
import 'package:get/get.dart'; class CountController extends GetxController {
RxInt count = 0.obs; // 初始化一个可观察的变量count,初始值为0
void inc() {
count++; // 递增count的值
update(); // 通知侦听器进行更新
}
void dec() {
count--; // 递减count的值
update(); // 通知侦听器进行更新
}
}
TimePag.dart执行inc方法
import 'package:app_flutter01/pages/Key/messages.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart'; class TimePag extends StatefulWidget {
const TimePag({super.key}); @override
State<TimePag> createState() => _TimePagState();
} class _TimePagState extends State<TimePag> {
CountController countController = Get.put(CountController()); //实例化控制器
@override
Widget build(BuildContext context) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Obx(() => Text("${countController.count}",
style: Theme.of(context).textTheme.headline1)),
ElevatedButton(
onPressed: () {
countController.inc();
},
child: const Text("数值+1"))
],
),
);
}
}
myHome.dart执行dec方法
final countController= Get.find<CountController>();
或者
final CountController countController = Get.find();
import 'package:app_flutter01/pages/Key/messages.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart'; class myHome extends StatefulWidget {
const myHome({super.key}); @override
State<myHome> createState() => _myHomeState();
} class _myHomeState extends State<myHome> {
final CountController countController = Get.find();
@override
Widget build(BuildContext context) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Obx(() => Text("${countController.count}" )),
ElevatedButton(
onPressed: () {
countController.dec();
},
child: const Text("数值-1"))
],
),
);
}
}
GetxController 绑定数据的几种方法
方法1:
CountController countController = Get.put(CountController()); //建议使用
或者
final CountController countController = Get.find();
方法2:
GetX<CountController>(
init: CountController(),
builder: (controller) {
return Text(
"${controller.count}",
style: const TextStyle(color: Colors.green, fontSize: 30),
);
},
),
方法3:
CountController countController = Get.put(CountController());
或者
final CountController countController = Get.find(); GetBuilder<CountController>(
init: countController,
builder: (controller) {
return Text(
"${controller.count}",
style: const TextStyle(color: Colors.green, fontSize: 30),
);
},
)
GetX Binding
- Get.put(): 不使用控制器实例也会被创建
- Get.lazyPut(): 懒加载方式创建实例,只有在使用时才创建
- Get.putAsync(): Get.put() 的异步版版本
- Get.create(): 每次使用都会创建一个新的实例
第一步:声明需要进行的绑定控制器类
import 'package:get/get.dart'; class CountController extends GetxController {
RxInt count = 0.obs; // 初始化一个可观察的变量count,初始值为0 void inc() {
count++; // 递增count的值
update(); // 通知侦听器进行更新
} void dec() {
count--; // 递减count的值
update(); // 通知侦听器进行更新
}
}
import 'package:get/get.dart';
class BindingMyController extends GetxController {
var count = 0.obs;
void increment() {
count++;
}
}
import 'package:app_flutter01/pages/Key/messages.dart';
import 'package:get/get.dart'; class AllControllerBinding implements Bindings {
@override
void dependencies() {
// TODO: implement dependencies
Get.lazyPut<CountController>(() => CountController()); //懒加载
Get.lazyPut<BindingHomeController>(() => BindingHomeController());
}
}
第二步:在项目启动时进行初始化绑定
void main() {
runApp(GetMaterialApp(
title: "flutterAPP___test",
initialBinding: AllControllerBinding(), //全局绑定GetxController
home: Scaffold(body: MyFlutter1())));
}
第三步:在页面中使用状态管理器
class myHome extends StatefulWidget {
const myHome({super.key}); @override
State<myHome> createState() => _myHomeState();
} class _myHomeState extends State<myHome> {
CountController countController = Get.find<CountController>(); //实例化控制器 @override
Widget build(BuildContext context) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Obx(() => Text("${countController.count}" )),
ElevatedButton(
onPressed: () {
countController.dec();
},
child: const Text("数值-1"))
],
),
);
}
}
Flutter Getx 状态管理 --- (依赖管理) GetxController的更多相关文章
- Gradle 1.12用户指南翻译——第五十章. 依赖管理
本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见:http://blog.csdn.net/column/details/gradle-translation.html翻译项目请关注Github上 ...
- Gradle笔记——依赖管理基础
1. 什么是依赖管理 依赖管理可以分为两部分:一是依赖,即项目构建或运行时所需要的一些文件:二是发布,即构建完成后上传到某个地方. 1.1 依赖 大部分的项目都需要第三方库类或项目文件,这些文件就是项 ...
- 实用maven笔记二-信息&依赖管理
目前我经历的公司的主要项目管理工具都是maven,maven除了是一个实用的构建工具外,也是一个功能强大的项目管理工具.其管理功能分为信息管理和依赖管理.通过pom.xml文件实现. 信息管理 信息管 ...
- Flutter 对状态管理的认知与思考
前言 由 编程技术交流圣地[-Flutter群-] 发起的 状态管理研究小组,将就 状态管理 相关话题进行为期 两个月 的讨论. 目前只有内定的 5 个人参与讨论,如果你对 状态管理 有什么独特的见解 ...
- (转)flutter 新状态管理方案 Provide (一)-使用
flutter 新状态管理方案 Provide (一)-使用 版权声明:本文为博主原创文章,基于CC4.0协议,首发于https://kikt.top ,同步发于csdn,转载必须注明出处! ...
- 为了弄懂Flutter的状态管理, 我用10种方法改造了counter app
为了弄懂Flutter的状态管理, 我用10种方法改造了counter app 本文通过改造flutter的counter app, 展示不同的状态管理方法的用法. 可以直接去demo地址看代码: h ...
- flutter系列之:用来管理复杂状态的State详解
目录 简介 StatefuWidget和State State的生命周期 总结 简介 Flutter的基础是widget,根据是否需要跟用户进行交互,widget则可以分为StatelessWidge ...
- Go 包依赖管理工具 —— govendor
govendor 是一个基于 vendor 机制实现的 Go 包依赖管理命令行工具.与原生 vendor 无侵入性融合,也支持从其他依赖管理工具迁移,可以很方便的实现同一个包在不同项目中不同版本.以及 ...
- SSM实战——秒杀系统之创建项目、管理依赖、设计数据库
注:本项目使用Myeclipse开发. 一:项目创建 1:使用Myeclipse创建一个web project,命名为MySeckill,并转换为Maven项目. 2:创建项目文件目录如下: 上面四个 ...
- 玩转IDEA项目结构Project Structure,打Jar包、模块/依赖管理全搞定
前言 你好,我是A哥(YourBatman). 如何给Module模块单独增加依赖? 如何知道哪些Module模块用了Spring框架,哪些是web工程? IDEA如何打Jar包?打War包? 熟练的 ...
随机推荐
- python3 gui 计时器
# -*- coding: utf-8 -*- # @Time : 2023/4/4 21:53 # @File : 定时器gui.py # @Software: PyCharm Community ...
- Arduino入门教程
Arduino入门教程 Arduino是一款简单易学的开源电子原型平台,包含硬件(各种型号的Arduino板)和软件(Arduino IDE).它通过各种各样的传感器来感知环境,再通过控制 ...
- SqlServer的执行计划如何分析?
sqlserver的执行计划 执行计划是 SQL Server 中的一个重要工具,用于分析和优化查询的性能.它提供了关于查询的详细信息,包括查询的执行顺序.使用的索引.连接类型.过滤条件等. What ...
- go使用snmp库查询mib数据
转载请注明出处: OID(Object Identifier)是一种用于标识和唯一命名管理信息库中的对象的标准方式.给定一个OID,可以确定特定的管理信息库对象,并对其进行操作. go语言使用snmp ...
- js数据结构--队列
<!DOCTYPE html> <html> <head> <title></title> </head> <body&g ...
- 【matplotlib 实战】--热力图
热力图,是一种通过对色块着色来显示数据的统计图表.它通过使用颜色编码来表示数据的值,并在二维平面上呈现出来.热力图通常用于显示大量数据点的密度.热点区域和趋势. 绘图时,一般较大的值由较深的颜色表示, ...
- 2022-10-22 CSP赛前隔离时的模拟赛 2:3
T1 简单红题,不懈于写. 锐评:镜子反射出来的竟然没有镜像一下. T2 坑人东西调了 2h. 类似于 round1 的 T4. 线性 \(\Theta(n)\) 过. T3 T4 其实简单,负边权要 ...
- Flyweight 享元模式简介与 C# 示例【结构型6】【设计模式来了_11】
〇.简介 1.什么是享元模式? 一句话解释: 将相似或同类的对象共享同一个对象,将这些对象暂存在列表中,使用时直接取出,避免每次使用时都要新建浪费资源. 享元模式的目的是减少对象的创建,通过共享对 ...
- mysql insert的特殊用法
1. 正常的insert语句:插入一条数据如下:INSERT INTO `testdb`.`tb_user` (`id`, `userName`) VALUES (3, '张飞'); 2. inser ...
- rt-thread Env 预处理配置方法
简介 rt-thread 是我非常喜欢的一款RTOS,近期在使用Env更新工程的时候发现,keil MDK 中的预处理型号和器件型号不符. 这就导致我每次更新工程后都需要进入keil MDK手动修改一 ...