fconfigproxy 0.0.4 copy "fconfigproxy: ^0.0.4" to clipboard
fconfigproxy: ^0.0.4 copied to clipboard

A Flutter package for configuring proxy with annotation support and code generation.

fconfigproxy #

fconfigproxy 是一个强大的 Flutter 配置代理框架,通过注解和代码生成自动实现配置项的本地持久化、变更通知和多端同步功能。它提供了统一的配置管理接口,支持多种存储实现,并允许灵活扩展。

功能特性 #

  • 注解驱动开发:通过简单的注解声明配置项,自动生成代理代码
  • 多存储后端:内置支持 Hive、MMKV 等存储方式,可轻松扩展自定义存储
  • 响应式更新:集成 ValueNotifier,可自行扩展其他通知机制,配置变更时自动通知 UI 更新
  • 行为扩展:支持方法拦截、自定义处理逻辑和配置验证
  • 跨平台兼容:完全支持 Android、iOS、Web、Windows、macOS 和 Linux
  • 代码优化:自动生成高效的配置访问代码,减少样板代码

快速开始 #

1. 添加依赖 #

在你的 pubspec.yaml 中添加:

dependencies:
  fconfigproxy: ^0.0.2
  fconfigproxy_hive_storage: ^0.0.1
  # 或/和
  fconfigproxy_mmkv_storage: ^0.0.1

dev_dependencies:
  build_runner: ^2.8.0
  source_gen: ^4.0.1
  jinja: ^0.6.4
copied to clipboard

2. 声明配置接口 #

创建一个配置接口类,使用 @FConfig 注解标记,并为每个配置项添加 @FConfigKey 注解:

import 'package:fconfigproxy/annotation/FConfig.dart';
import 'package:fconfigproxy/annotation/FConfigKey.dart';

// 参数1: 配置名称,参数2: 存储代理类
@FConfig('app_config', HiveConfigStorageImpl)
abstract class AppConfig {
  // 配置用户令牌,自定义键名为 'user_token'
  @FConfigKey(keyName: 'user_token')
  String? userToken;

  // 配置是否首次打开应用,默认值为 false
  @FConfigKey(defaultValue: 'false')
  abstract bool isFirstOpen;
  
  // 配置用户年龄
  @FConfigKey(keyName: 'user_age')
  int? userAge;

  factory AppConfig.getAppConfig() => _$GetAppConfig();
}
copied to clipboard

3. 运行代码生成 #

在项目根目录执行以下命令生成代码:

flutter pub run build_runner build --delete-conflicting-outputs
copied to clipboard

4. 初始化配置 #

在应用入口处初始化配置:

import 'package:flutter/material.dart';
import 'AppConfig.dart';

void main() async {

  Hive.init('存储路径');//hive需要在初始化配置之前调用传入存储路径,否则会报错
  await AppConfig.getAppConfig().initAppConfig();
  
  runApp(MyApp(config: config));
}
copied to clipboard

5. 使用配置代理 #

AppConfig.getAppConfig().userToken = 'new_token_${DateTime.now().millisecondsSinceEpoch}';
AppConfig.getAppConfig().isFirstOpen = false;
AppConfig.getAppConfig().userAge = 30;

print(AppConfig.getAppConfig().userToken);
print(AppConfig.getAppConfig().isFirstOpen);
print(AppConfig.getAppConfig().userAge);


copied to clipboard

进阶用法 #

1. 监听配置变更 #

使用 ValueNotifier 监听配置变更:

@FConfig('app_config', HiveConfigStorageImpl)
abstract class AppConfig {
  // 配置项...
  
  @FConfigValueNotifier() // 指定使用ValueNotifier监听配置
  @FConfigKey(keyName: "userToken")// 监听userToken配置项
  abstract final ValueNotifier<String?> userTokenNotifier;

}

//使用
AppConfig.getAppConfig().userTokenNotifier.addListener(() {
  print('userToken changed: ${AppConfig.getAppConfig().userTokenNotifier.value}');
});

copied to clipboard

2. 扩展存储后端 #

创建自定义存储实现:

class MyCustomStorage implements FConfigKeyValueHandle {
  // 实现所有必要的方法...
  
  @override
  Future<void> init([String? boxName]) async {
    // 初始化自定义存储
  }
  
  // ... 其他方法实现 ...
}
copied to clipboard

示例 #

请参考 example/ 目录下的完整示例,包括:

  • 基本配置使用
  • 多存储后端切换
  • 配置变更监听
  • 自定义方法拦截

常见问题 #

1. 如何解决代码生成失败的问题? #

  • 确保所有依赖包已正确安装:flutter pub get
  • 尝试使用 --delete-conflicting-outputs 参数重新运行构建:flutter pub run build_runner build --delete-conflicting-outputs
  • 检查注解是否正确使用,特别是配置名称和代理类是否存在

2. 如何实现配置加密? #

fconfigproxy 本身不提供加密功能,但可以通过自定义存储代理实现加密。在自定义存储代理中,对配置项进行加密存储,读取时解密。

贡献与反馈 #

欢迎提交 issue、PR 和建议!如果你有任何问题或需要帮助,请在 GitHub 仓库中提出。

许可证 #

本项目采用 MIT 许可证,详情请见 LICENSE 文件。


了解更多详细 API 说明和高级用法,请查阅源码注释或访问项目 GitHub 页面。

0
likes
140
points
170
downloads

Publisher

unverified uploader

Weekly Downloads

2024.12.08 - 2025.11.02

A Flutter package for configuring proxy with annotation support and code generation.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

analyzer, build, jinja, meta, source_gen

More

Packages that depend on fconfigproxy