1. 插件介绍

fluttertpc_get 是基于 GetX 开发的鸿蒙系统适配版本,是一个轻量级且功能强大的 Flutter 解决方案。它提供了三大核心功能:高性能的状态管理、智能的依赖注入和便捷的路由管理,旨在帮助开发者更高效地构建鸿蒙平台上的 Flutter 应用。

核心特性

  • 高性能: 专注于性能和最小资源消耗,未使用的功能不会被编译到最终代码中
  • 高效率: 简洁的语法设计,极大缩短开发时长
  • 高内聚: 界面、逻辑、依赖和路由完全解耦,代码更易维护
  • 全平台支持: 除了鸿蒙系统,还支持 Android、iOS、Web、Mac、Linux 和 Windows 等平台

鸿蒙适配特性

  • 完全兼容鸿蒙系统的 Flutter 开发环境
  • 提供与原生 GetX 一致的 API 接口,降低迁移成本
  • 支持鸿蒙平台的特殊配置和权限管理
  • 经过严格测试,确保在鸿蒙系统上稳定运行

2. 安装与配置

由于 fluttertpc_get 是自定义修改版本,需要通过 Git 形式引入依赖。

2.1 添加依赖

在项目的 pubspec.yaml 文件中添加以下配置:

dependencies:
  get:
    git:
      url: "https://gitcode.com/openharmony-sig/fluttertpc_get"

2.2 安装依赖

执行以下命令安装依赖:

flutter pub get

2.3 导入包

在需要使用的文件中导入包:

import 'package:get/get.dart';

3. 核心功能使用

3.1 状态管理

fluttertpc_get 提供了两种状态管理方式:简单状态管理器(GetBuilder)和响应式状态管理器(GetX)。

响应式状态管理示例
// 创建控制器
class CounterController extends GetxController {
  var count = 0.obs; // 使用 .obs 使变量可观察

  void increment() => count++;
  void decrement() => count--;
}

// 在页面中使用
class CounterPage extends StatelessWidget {
  
  Widget build(BuildContext context) {
    // 实例化控制器
    final controller = Get.put(CounterController());

    return Scaffold(
      appBar: AppBar(title: Text('计数器')),
      body: Center(
        // 使用 Obx 监听变量变化并更新 UI
        child: Obx(() => Text(
              '计数: ${controller.count}',
              style: TextStyle(fontSize: 24),
            )),
      ),
      floatingActionButton: Column(
        mainAxisAlignment: MainAxisAlignment.end,
        children: [
          FloatingActionButton(
            onPressed: controller.increment,
            child: Icon(Icons.add),
          ),
          SizedBox(height: 10),
          FloatingActionButton(
            onPressed: controller.decrement,
            child: Icon(Icons.remove),
          ),
        ],
      ),
    );
  }
}

3.2 路由管理

fluttertpc_get 提供了简洁的路由管理 API,无需上下文(context)即可进行导航操作。

基本路由跳转
// 导航到新页面
Get.to(NextScreen());

// 导航到新页面并传递参数
Get.to(DetailScreen(), arguments: {'id': 1, 'name': '示例'});

// 在目标页面接收参数
var arguments = Get.arguments;
print(arguments['id']); // 输出: 1

// 返回上一页
Get.back();

// 导航到新页面并替换当前页面
Get.off(NextScreen());

// 导航到新页面并清除所有之前的页面
Get.offAll(HomeScreen());
命名路由
  1. 首先定义路由表:
// app_routes.dart
class AppRoutes {
  static const home = '/';
  static const detail = '/detail';
}

// app_pages.dart
class AppPages {
  static final routes = [
    GetPage(name: AppRoutes.home, page: () => HomeScreen()),
    GetPage(name: AppRoutes.detail, page: () => DetailScreen()),
  ];
}
  1. 配置 GetMaterialApp
class MyApp extends StatelessWidget {
  
  Widget build(BuildContext context) {
    return GetMaterialApp(
      initialRoute: AppRoutes.home,
      getPages: AppPages.routes,
      debugShowCheckedModeBanner: false,
    );
  }
}
  1. 使用命名路由导航:
// 导航到详情页
Get.toNamed(AppRoutes.detail, arguments: {'id': 1});

// 带参数的命名路由
Get.toNamed('/detail/1');

3.3 依赖管理

fluttertpc_get 的依赖管理器允许你轻松地管理和共享类实例,无需 Provider context 或 inheritedWidget。

基本用法
// 实例化一个类并使其在整个应用中可用
var controller = Get.put(MyController());

// 在应用的任何地方获取该实例
var sameController = Get.find<MyController>();

// 异步实例化
Get.putAsync<MyService>(() async {
  await Future.delayed(Duration(seconds: 1));
  return MyService();
});

// 延迟实例化(使用时才创建)
Get.lazyPut<MyController>(() => MyController());
依赖绑定
// 创建绑定类
class HomeBinding extends Bindings {
  
  void dependencies() {
    Get.lazyPut<HomeController>(() => HomeController());
    Get.put<HomeService>(HomeService());
  }
}

// 在路由中使用绑定
GetPage(
  name: '/home',
  page: () => HomeScreen(),
  binding: HomeBinding(),
);

3.4 实用工具

国际化
// 创建翻译类
class Messages extends Translations {
  
  Map<String, Map<String, String>> get keys => {
        'zh_CN': {
          'hello': '你好',
          'welcome': '欢迎使用 Flutter Get',
        },
        'en_US': {
          'hello': 'Hello',
          'welcome': 'Welcome to Flutter Get',
        }
      };
}

// 配置国际化
GetMaterialApp(
  translations: Messages(),
  locale: Locale('zh', 'CN'),
  fallbackLocale: Locale('en', 'US'),
);

// 使用翻译
Text('hello'.tr);

// 切换语言
Get.updateLocale(Locale('en', 'US'));
主题管理
// 切换主题
Get.changeTheme(ThemeData.light());

// 根据当前主题切换
Get.changeTheme(Get.isDarkMode ? ThemeData.light() : ThemeData.dark());
对话框和 Snackbar
// 显示对话框
Get.defaultDialog(
  title: '提示',
  middleText: '确定要执行此操作吗?',
  onConfirm: () => print('确认'),
  onCancel: () => print('取消'),
);

// 显示 Snackbar
Get.snackbar(
  '通知',
  '操作成功完成',
  snackPosition: SnackPosition.TOP,
);

// 显示底部弹窗
Get.bottomSheet(
  Container(
    child: Wrap(
      children: <Widget>[
        ListTile(
          leading: Icon(Icons.music_note),
          title: Text('音乐'),
        ),
        ListTile(
          leading: Icon(Icons.videocam),
          title: Text('视频'),
        ),
      ],
    ),
  ),
);

4. 鸿蒙平台特殊配置

4.1 权限管理

根据应用需求,可能需要配置鸿蒙系统的相关权限。在 ohos/entry/src/main/module.json5 文件中添加所需权限:

{
  "module": {
    "abilities": [
      {
        "permissions": [
          "ohos.permission.INTERNET",
          "ohos.permission.READ_MEDIA"
        ]
      }
    ]
  }
}

4.2 性能优化

针对鸿蒙系统的特性,可以进行以下性能优化:

  1. 减少不必要的重建:使用 GetBuilder 代替 Obx 来减少响应式监听开销
  2. 合理使用依赖注入:避免过度使用 put 方法,尽量使用 lazyPut
  3. 优化路由管理:使用 binding API 将界面与控制器连接,自动管理控制器生命周期

5. 示例应用

fluttertpc_get 提供了完整的示例应用,位于项目的 example 目录下。你可以通过运行示例应用来了解更多使用细节:

cd example
flutter run

6. 总结

fluttertpc_get 是一个功能强大且易于使用的 Flutter 解决方案,为鸿蒙系统提供了完整的 GetX 功能支持。它的三大核心功能(状态管理、路由管理、依赖管理)可以帮助开发者更高效地构建鸿蒙平台上的 Flutter 应用。

通过本指南,你已经了解了 fluttertpc_get 的基本概念、安装配置和核心功能使用方法。无论是开发新应用还是将现有 GetX 应用迁移到鸿蒙平台,fluttertpc_get 都是一个理想的选择。

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐