【在flutter项目中使用get_cli初始化项目】

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),
            )),
      ),
    );
  }
}
相关推荐
W蘭2 小时前
Flutter从入门到实战-03-综合案例实战
flutter
jiejiejiejie_3 小时前
Flutter For OpenHarmony:共享元素转场的 OpenHarmony 平台实战
flutter
Zender Han3 小时前
Flutter Edge-to-Edge 介绍及适配使用指南
android·flutter·ios
xmdy58663 小时前
Flutter + 开源鸿蒙实战|城市智慧停车管理系统 Day4 停车订单生成+多状态管理+在线缴费+我的订单+会员中心+个人中心完善
flutter·开源·harmonyos
xmdy58663 小时前
Flutter + 开源鸿蒙实战|城市智慧停车管理系统 Day8 进阶美化与真机调优篇
flutter·华为·harmonyos
Zender Han3 小时前
Flutter 高斯模糊介绍与具体实现
android·flutter·ios
xmdy58663 小时前
Flutter + 开源鸿蒙实战|城市智慧停车管理系统 Day6 全局组件封装+意见反馈+系统设置+代码重构+bug修复+细节调优
flutter·开源·harmonyos