1、安装get_cli
安卓和苹果电脑安装时有各自的命令,get_cli安装之前要下载配置flutter、dart的SDK
https://docs.flutter.cn/install/archive注:flutter3.19.6的版本,对应的dart的版本为3.3.4。
https://dart.dev/get-dart/archive#stable-channel报错原因:pub.dev访问不了
成功安装
2、初始化项目
用get_cli初始化项目之前在Android Studio中创建好flutter项目
flutter SDK是从官网下载的版本
在项目的终端输入get init,会在lib目录下构建出基本架构
getinitmain.dart
// 导入 Flutter 的 Material Design 组件库import'package:flutter/material.dart';// 导入 GetX 状态管理和路由框架import'package:get/get.dart';// 导入应用的路由配置文件(用 APPRoutes 类管理所有页面路由)import'app/routes/app_pages.dart';// 应用的入口函数,Flutter 启动时会执行这里的 main() 函数voidmain(){// 运行一个 Flutter 应用runApp(// 使用 GetX 框架专用的 GetMaterialApp,它是对原生 MaterialApp 的扩展// 提供了路由管理、依赖注入、国际化等 GetX 功能GetMaterialApp(// 应用标题,在 Android 任务管理器、iOS 应用切换器等处显示title:"Application",// 初始路由:应用启动后第一个显示的页面// 通常定义为 '/'initialRoute:AppPages.INITIAL,// 路由表:定义了路径字符串(如 '/home')与实际页面组件的映射关系// routes 是一个 List<GetPage>,包含了所有页面的配置getPages:AppPages.routes,),);}app_pages.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';// 应用页面路由配置类classAppPages{// 私有构造函数,防止外部实例化该类(仅作为静态工具类使用)AppPages._();// 应用初始路由:启动后第一个显示的页面// Routes.HOME 定义在 app_routes.dart 中,例如值为 '/home'staticconstINITIAL=Routes.HOME;// 路由表(GetPage 列表),定义了路径字符串与实际页面组件的映射关系staticfinalroutes=[GetPage(// 路由名称(路径),在 app_routes.dart 中定义为字符串常量// 例如:const String HOME = '/home';name:_Paths.HOME,// 构建页面组件的函数,使用 const 构造函数可以优化性能page:()=>constHomeView(),// 绑定:负责创建和提供该页面需要的控制器(Controller)// HomeBinding 会在页面打开时懒加载 HomeController,// 并通过 Get.lazyPut() 将其注册到依赖注入系统中,// 这样就可以在 HomeView 中使用 Get.find<HomeController>() 或// 直接在视图里用 controller.属性名 来获取和观察数据变化binding:HomeBinding(),),];}app_routes.dart
// 声明此文件是 app_pages.dart 文件的一部分(part 机制)// 这意味着此文件不能独立存在,必须与 app_pages.dart 一起编译// 通常用于将一个大文件拆分成多个逻辑片段partof'app_pages.dart';// ============================================// 警告:请勿手动编辑此文件// 此文件由 get_cli 工具通过以下命令自动生成:// get generate pages// 如果手动修改,下次运行生成命令时会被覆盖// ============================================/// 路由名称常量类(对外公开使用)/// 用于在代码中跳转页面时指定路由路径/// 例如:Get.toNamed(Routes.HOME)abstractclassRoutes{// 私有构造函数,防止外部实例化此类// 这个类只作为常量的容器使用Routes._();/// 首页路由常量/// 值为 _Paths.HOME(即 '/home')/// 在 Get.toNamed() 中可直接使用 Routes.HOMEstaticconstHOME=_Paths.HOME;}/// 内部路由路径常量类(模块内部使用)/// 使用下划线开头表示这是私有/内部的,不建议外部直接引用/// 实际存储路由路径的字符串值abstractclass_Paths{// 私有构造函数,防止外部实例化_Paths._();/// 首页路由路径/// 实际值为字符串 '/home'/// 这是路由匹配时实际使用的路径标识staticconstHOME='/home';}home_binding.dart
// 导入 GetX 核心库,提供依赖注入、状态管理等能力import'package:get/get.dart';// 导入 HomeController 控制器类import'../controllers/home_controller.dart';/// Home 模块的依赖绑定类/// 继承自 Bindings 接口,GetX 会在进入该页面时自动调用 dependencies() 方法/// 作用:将 Controller 注册到 GetX 的依赖注入系统中,实现在页面中自动获取classHomeBindingextendsBindings{/// 重写 Bindings 接口的 dependencies 方法/// 在该方法中声明所有该模块需要使用的依赖(Controller、Service 等)/// 此方法会在页面打开时、GetPage 的 binding 参数被解析时自动执行@overridevoiddependencies(){// 懒加载方式注册 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
import'package:get/get.dart';classHomeControllerextendsGetxController{//TODO: Implement HomeControllerfinalcount=20.obs;@overridevoidonInit(){super.onInit();}@overridevoidonReady(){super.onReady();}@overridevoidonClose(){super.onClose();}voidincrement()=>count.value++;}home_view.dart
import'package:flutter/material.dart';import'package:get/get.dart';import'../controllers/home_controller.dart';classHomeViewextendsGetView<HomeController>{constHomeView({super.key});@overrideWidgetbuild(BuildContextcontext){returnScaffold(appBar:AppBar(title:constText('HomeView'),centerTitle:true,),body:Center(//在回调函数中拿到controller对应的值child:Obx(()=>Text('${controller.count}',style:TextStyle(fontSize:20),)),),);}}