Flutter 状态管理库-----GetX(一)

ops/2025/2/21 6:26:32/

Flutter 状态管理库-----GetX(一)

一、GetX特点
  1. 状态管理
    • GetX 提供了非常简洁的 API 来管理 Flutter 中的状态。它可以通过 GetX()Obx() 来监听和更新界面。通过响应式编程,GetX 可以在数据变化时自动更新 UI。
    • 它避免了传统的 Flutter 状态管理方法(如 setStateProvider)中可能出现的复杂性和冗余代码。
  2. 路由管理
    • GetX 提供了简单且强大的路由管理功能。你可以通过 Get.to()Get.back() 等方法实现页面跳转。它也支持命名路由、参数传递和动态路由等功能。
    • 它支持路由的简单声明和快速导航,不需要使用 Navigator 或其他复杂的路由设置。
  3. 依赖注入
    • GetX 还提供了依赖注入(DI)功能。通过 Get.put()Get.find(),你可以方便地将对象注入到你的应用中,无需手动管理对象生命周期。
  4. 高效的性能
    • GetX 在更新 UI 时通过响应式编程减少不必要的重建,只更新那些需要变化的部分,这使得它的性能非常高。
    • GetX 采用懒加载的方式,只有在需要时才会创建对象,这样可以进一步提高应用的性能。
  5. 简单易用
    • GetX 强调易于使用,减少了很多样板代码。它的语法简洁明了,非常适合快速开发。
二、GetX引入

1.命令行引入

flutter pub add get

2.配置文件引入

dependencies:get: ^4.7.2
三、使用案例
1.状态管理(Reactive State Management)

GetX 通过 .obsObx 实现响应式编程,自动更新 UI。

import 'package:flutter/material.dart';
import 'package:get/get.dart';class CounterController extends GetxController {var count = 0.obs;  // 使用.obs创建响应式变量void increment() {count++;}
}void main() {runApp(MyApp());
}class MyApp extends StatelessWidget {Widget build(BuildContext context) {return MaterialApp(home: Scaffold(appBar: AppBar(title: Text('GetX Example')),body: Center(child: GetX<CounterController>(  // 使用GetX来监听状态变化init: CounterController(),    // 初始化控制器builder: (controller) {return Column(mainAxisAlignment: MainAxisAlignment.center,children: [Text('Count: ${controller.count}'),ElevatedButton(onPressed: controller.increment, // 增加计数child: Text('Increment'),),],);},),),),);}
}
2.依赖注入(Dependency Injection)

GetX 提供了便捷的依赖注入方法。

import 'package:flutter/material.dart';
import 'package:get/get.dart';class MyService extends GetxService {void printMessage() {print('Hello from MyService!');}
}void main() {// 初始化依赖注入Get.put(MyService()); // 将 MyService 注入到 GetX 的依赖管理中runApp(MyApp());
}class MyApp extends StatelessWidget {Widget build(BuildContext context) {return MaterialApp(home: Scaffold(appBar: AppBar(title: Text('GetX Dependency Injection')),body: Center(child: ElevatedButton(onPressed: () {// 获取 MyService 实例并调用方法Get.find<MyService>().printMessage();},child: Text('Call Service'),),),),);}
}
3.路由管理(Routing)

GetX 提供了非常简便的路由管理方法。

import 'package:flutter/material.dart';
import 'package:get/get.dart';void main() {runApp(MyApp());
}class MyApp extends StatelessWidget {Widget build(BuildContext context) {return MaterialApp(home: HomeScreen(),navigatorKey: Get.key, // 使用 GetX 提供的 navigatorKey);}
}class HomeScreen extends StatelessWidget {Widget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('GetX Routing')),body: Center(child: ElevatedButton(onPressed: () {// 使用 Get.to() 跳转到其他页面Get.to(SecondScreen());},child: Text('Go to Second Screen'),),),);}
}class SecondScreen extends StatelessWidget {Widget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('Second Screen')),body: Center(child: ElevatedButton(onPressed: () {// 使用 Get.back() 返回上一页Get.back();},child: Text('Go Back'),),),);}
}
4. 路由命名与参数传递(Named Routes & Arguments)

GetX 支持命名路由和通过路由传递参数。

import 'package:flutter/material.dart';
import 'package:get/get.dart';void main() {runApp(MyApp());
}class MyApp extends StatelessWidget {Widget build(BuildContext context) {return MaterialApp(initialRoute: '/',getPages: [GetPage(name: '/', page: () => HomeScreen()),GetPage(name: '/details', page: () => DetailScreen()),],);}
}class HomeScreen extends StatelessWidget {Widget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('GetX Named Routes')),body: Center(child: ElevatedButton(onPressed: () {// 通过命名路由跳转并传递参数Get.toNamed('/details', arguments: 'Hello from Home!');},child: Text('Go to Details'),),),);}
}class DetailScreen extends StatelessWidget {Widget build(BuildContext context) {// 获取路由传递的参数final message = Get.arguments ?? 'No message passed';return Scaffold(appBar: AppBar(title: Text('Detail Screen')),body: Center(child: Text(message),),);}
}
5.页面生命周期管理

GetX 提供了对页面生命周期的管理方法,可以通过生命周期钩子来执行某些操作。

import 'package:flutter/material.dart';
import 'package:get/get.dart';class LifecycleScreen extends StatelessWidget {Widget build(BuildContext context) {// 使用GetX的生命周期钩子Get.log('LifecycleScreen created');return Scaffold(appBar: AppBar(title: Text('GetX Lifecycle')),body: Center(child: ElevatedButton(onPressed: () {Get.back();},child: Text('Go Back'),),),);}void dispose() {Get.log('LifecycleScreen disposed');super.dispose();}
}
6.Snackbar, Dialog, BottomSheet

GetX 提供了简洁的方式来显示 Snackbar、Dialog 和 BottomSheet。

import 'package:flutter/material.dart';
import 'package:get/get.dart';void main() {runApp(MyApp());
}class MyApp extends StatelessWidget {Widget build(BuildContext context) {return MaterialApp(home: HomeScreen(),);}
}class HomeScreen extends StatelessWidget {Widget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('GetX Snackbar, Dialog, BottomSheet')),body: Center(child: Column(mainAxisAlignment: MainAxisAlignment.center,children: [ElevatedButton(onPressed: () {// 显示SnackbarGet.snackbar('Title', 'This is a snackbar');},child: Text('Show Snackbar'),),ElevatedButton(onPressed: () {// 显示DialogGet.dialog(AlertDialog(title: Text('This is a Dialog'),content: Text('Hello from GetX dialog'),actions: [TextButton(onPressed: () => Get.back(),child: Text('Close'),),],),);},child: Text('Show Dialog'),),ElevatedButton(onPressed: () {// 显示BottomSheetGet.bottomSheet(Container(padding: EdgeInsets.all(20),color: Colors.white,child: Center(child: Text('This is a BottomSheet')),),);},child: Text('Show BottomSheet'),),],),),);}
}

http://www.ppmy.cn/ops/159692.html

相关文章

Nat. Genet | 单细胞多组回归模型识别功能和疾病相关增强子,并实现染色质潜力分析

Nat. Genet | 单细胞多组回归模型识别功能和疾病相关增强子&#xff0c;并实现染色质潜力分析 本文提出了一种名为SCARlink的基因调控模型&#xff0c;通过结合单细胞RNA测序&#xff08;scRNA-seq&#xff09;和单细胞开放染色质测序&#xff08;scATAC-seq&#xff09;数据&…

图论- 经典最小生成树算法

最小生成树算法 什么是最小生成树Kruskal算法关键代码实现 Prim 最小生成树算法Kruskal 和 Prim 算法的区别为什么Prim算法不需要判断成环,但Kruskal需要 什么是最小生成树 在图中找一棵包含图中所有节点的树, 且权重和最小的那棵树就叫最小生成树. 如下:右侧生成树的权重和显…

应用案例 | uaGate SI助力汽车零部件工厂将生产数据传输到MES

一、背景和挑战 &#xff08;图1 汽车零部件工厂生产车间&#xff09; 随着汽车工业的不断发展&#xff0c;新能源汽车市场的竞争日益激烈&#xff0c;这对汽车零部件供应商提出了更高的要求&#xff0c;包括提升产品精度、增强可靠性、节能环保以及控制成本等多个方面。某国际…

黑神话悟空风格事务解读snapshot

第一幕&#xff1a;编程式事务の「五指山压顶」 场景&#xff1a;天庭财务部手动记账&#xff0c;悟空大闹数据库 // 手动挡事务&#xff08;玉帝亲自执笔版&#xff09; public class 蟠桃园会计系统 { public void 分发蟠桃(神仙 领桃人, int 数量) { Connection conn …

Javascript中的深拷贝详解

在 Javascript 开发中&#xff0c;深拷贝&#xff08;Deep Clone&#xff09;是一个经常遇到的问题。本文将详细介绍深拷贝的概念、实现方法以及注意事项。 什么是深拷贝&#xff1f; 在 Javascript 中&#xff0c;数据类型分为基本类型&#xff08;如 Number、String、Boole…

VMware按照的MacOS升级后无法联网

背景 3年前公司使用Flutter开发了一款app&#xff0c;现在app有微小改动需要重新发布到AppStore 问题 问题是原来的Vmware搭建的开发环境发布App失败了 提示&#xff1a;App需要使用xcode15IOS 17 SDK重新构建&#xff0c;这样的话MacOS至少需要升级到13.5 Xcode - 支持 - Ap…

【JavaScript】正则表达式综合案例

目录 1、正则表达式 1.1 什么是正则表达式 1.2 语法 test() 方法 用来查看正则表达式与指定的字符串是否匹配 exec() 方法 在一个指定字符串中执行一个搜索匹配 1.3 元字符 1. 边界符 2. 量词 3. 字符类&#xff1a; 案例 用户名验证案例 1.4 修饰符 案例 过滤…

从零开始构建一个小型字符级语言模型的详细教程(基于Transformer架构)之一数据准备

最近特别火的DeepSeek,是一个大语言模型,那一个模型是如何构建起来的呢?DeepSeek基于Transformer架构,接下来我们也从零开始构建一个基于Transformer架构的小型语言模型,并说明构建的详细步骤及内部组件说明。我们以构建一个字符级语言模型(Char-Level LM)为例,目标是通…