1、安装get_cli
安卓和苹果电脑安装时有各自的命令,get_cli安装之前要下载配置flutter、dart的SDK
dart
https://docs.flutter.cn/install/archive
注:flutter3.19.6的版本,对应的dart的版本为3.3.4。

dart
https://dart.dev/get-dart/archive#stable-channel

报错原因:pub.dev访问不了

成功安装

2、初始化项目
用get_cli初始化项目之前在Android Studio中创建好flutter项目

flutter SDK是从官网下载的版本

在项目的终端输入get init,会在lib目录下构建出基本架构
dart
get init

main.dart
dart
// 导入 Flutter 的 Material Design 组件库
import 'package:flutter/material.dart';
// 导入 GetX 状态管理和路由框架
import 'package:get/get.dart';
// 导入应用的路由配置文件(用 APPRoutes 类管理所有页面路由)
import 'app/routes/app_pages.dart';
// 应用的入口函数,Flutter 启动时会执行这里的 main() 函数
void main() {
// 运行一个 Flutter 应用
runApp(
// 使用 GetX 框架专用的 GetMaterialApp,它是对原生 MaterialApp 的扩展
// 提供了路由管理、依赖注入、国际化等 GetX 功能
GetMaterialApp(
// 应用标题,在 Android 任务管理器、iOS 应用切换器等处显示
title: "Application",
// 初始路由:应用启动后第一个显示的页面
// 通常定义为 '/'
initialRoute: AppPages.INITIAL,
// 路由表:定义了路径字符串(如 '/home')与实际页面组件的映射关系
// routes 是一个 List<GetPage>,包含了所有页面的配置
getPages: AppPages.routes,
),
);
}
app_pages.dart
dart
// 导入 GetX 核心库,提供路由、状态管理等能力
import 'package:get/get.dart';
// 导入 Home 模块的绑定类(用于依赖注入)
import '../modules/home/bindings/home_binding.dart';
// 导入 Home 模块的视图(UI 页面)
import '../modules/home/views/home_view.dart';
// 包含路由路径常量的文件(通常是自动生成或手动维护的字符串常量)
// 例如:Routes.HOME = '/home', _Paths.HOME = '/home'
part 'app_routes.dart';
// 应用页面路由配置类
class AppPages {
// 私有构造函数,防止外部实例化该类(仅作为静态工具类使用)
AppPages._();
// 应用初始路由:启动后第一个显示的页面
// Routes.HOME 定义在 app_routes.dart 中,例如值为 '/home'
static const INITIAL = Routes.HOME;
// 路由表(GetPage 列表),定义了路径字符串与实际页面组件的映射关系
static final routes = [
GetPage(
// 路由名称(路径),在 app_routes.dart 中定义为字符串常量
// 例如:const String HOME = '/home';
name: _Paths.HOME,
// 构建页面组件的函数,使用 const 构造函数可以优化性能
page: () => const HomeView(),
// 绑定:负责创建和提供该页面需要的控制器(Controller)
// HomeBinding 会在页面打开时懒加载 HomeController,
// 并通过 Get.lazyPut() 将其注册到依赖注入系统中,
// 这样就可以在 HomeView 中使用 Get.find<HomeController>() 或
// 直接在视图里用 controller.属性名 来获取和观察数据变化
binding: HomeBinding(),
),
];
}
app_routes.dart
dart
// 声明此文件是 app_pages.dart 文件的一部分(part 机制)
// 这意味着此文件不能独立存在,必须与 app_pages.dart 一起编译
// 通常用于将一个大文件拆分成多个逻辑片段
part of 'app_pages.dart';
// ============================================
// 警告:请勿手动编辑此文件
// 此文件由 get_cli 工具通过以下命令自动生成:
// get generate pages
// 如果手动修改,下次运行生成命令时会被覆盖
// ============================================
/// 路由名称常量类(对外公开使用)
/// 用于在代码中跳转页面时指定路由路径
/// 例如:Get.toNamed(Routes.HOME)
abstract class Routes {
// 私有构造函数,防止外部实例化此类
// 这个类只作为常量的容器使用
Routes._();
/// 首页路由常量
/// 值为 _Paths.HOME(即 '/home')
/// 在 Get.toNamed() 中可直接使用 Routes.HOME
static const HOME = _Paths.HOME;
}
/// 内部路由路径常量类(模块内部使用)
/// 使用下划线开头表示这是私有/内部的,不建议外部直接引用
/// 实际存储路由路径的字符串值
abstract class _Paths {
// 私有构造函数,防止外部实例化
_Paths._();
/// 首页路由路径
/// 实际值为字符串 '/home'
/// 这是路由匹配时实际使用的路径标识
static const HOME = '/home';
}
home_binding.dart
dart
// 导入 GetX 核心库,提供依赖注入、状态管理等能力
import 'package:get/get.dart';
// 导入 HomeController 控制器类
import '../controllers/home_controller.dart';
/// Home 模块的依赖绑定类
/// 继承自 Bindings 接口,GetX 会在进入该页面时自动调用 dependencies() 方法
/// 作用:将 Controller 注册到 GetX 的依赖注入系统中,实现在页面中自动获取
class HomeBinding extends Bindings {
/// 重写 Bindings 接口的 dependencies 方法
/// 在该方法中声明所有该模块需要使用的依赖(Controller、Service 等)
/// 此方法会在页面打开时、GetPage 的 binding 参数被解析时自动执行
@override
void dependencies() {
// 懒加载方式注册 HomeController(最常用的方式)
// Get.lazyPut:只有在第一次被 Get.find() 或视图使用 GetBuilder/GetX 时才会创建实例
// 优点:节省资源,按需加载,提升应用启动性能
Get.lazyPut<HomeController>(
() => HomeController(),
);
// 其他可选的注册方式(当前代码未使用,仅供参考):
// Get.put(HomeController()) // 立即创建,不懒加载
// Get.lazyPut(() => HomeController(), fenix: true) // 懒加载,并在销毁后可重新创建
// Get.create(() => HomeController()) // 每次调用都创建新实例
// Get.putAsync(() async => await HomeController()) // 异步创建
}
}
home_controller.dart
dart
import 'package:get/get.dart';
class HomeController extends GetxController {
//TODO: Implement HomeController
final count = 20.obs;
@override
void onInit() {
super.onInit();
}
@override
void onReady() {
super.onReady();
}
@override
void onClose() {
super.onClose();
}
void increment() => count.value++;
}
home_view.dart
dart
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../controllers/home_controller.dart';
class HomeView extends GetView<HomeController> {
const HomeView({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('HomeView'),
centerTitle: true,
),
body: Center(
//在回调函数中拿到controller对应的值
child: Obx(() => Text(
'${controller.count}',
style: TextStyle(fontSize: 20),
)),
),
);
}
}