Stormy Framework
Stormy 是一个 Flutter 开发框架,提供统一的网络请求、本地存储、对话框管理、刷新等功能。
功能特性
- 网络模块 - 统一的网络请求客户端 (Dio)
- 存储模块 - 本地数据存储服务 (Hive)
- 对话框模块 - 统一对话框管理
- 刷新模块 - 下拉刷新和上拉加载
- 配置模块 - 应用配置管理
- 国际化模块 - 多语言配置与支持 (Stormy I18n)
- 组件库 - 通用 UI 组件
- 工具库 - 常用工具函数
- SDK 集成 - 第三方 SDK 集成
目录结构
lib/
├── stormy.dart # 统一导出文件
├── core/
│ ├── network/ # 网络模块
│ ├── dialog/ # 对话框模块
│ ├── storage/ # 存储模块
│ ├── refresh/ # 刷新模块
│ └── config/ # 配置模块
├── widgets/ # 通用组件
├── utils/ # 工具类
├── sdk/ # SDK 集成
└── modules/ # 模块管理
快速开始
1. 安装依赖
flutter pub get
2. 初始化框架
import 'package:stormy/stormy.dart';
void main() async {
// 初始化存储服务
await StormyStorageService.instance.initialize();
// 初始化配置
StormyAppConfig.instance.initialize(
config: {
'apiBaseUrl': 'https://api.example.com',
'isDebugMode': true,
},
);
runApp(MyApp());
}
3. 使用网络模块
// GET 请求
final response = await StormyConfigAccessor.networkClient!.get('/api/users');
// POST 请求
final response = await StormyConfigAccessor.networkClient!.post(
'/api/login',
data: {'username': 'xxx', 'password': 'xxx'},
);
4. 使用存储模块
// 保存数据
await StormyStorageService.instance.setString('token', 'xxx');
await StormyStorageService.instance.setInt('userId', 123);
await StormyStorageService.instance.setBool('isLogin', true);
await StormyStorageService.instance.setJson('userInfo', {'name': 'xxx'});
// 读取数据
final token = StormyStorageService.instance.getString('token');
final userId = StormyStorageService.instance.getInt('userId');
final isLogin = StormyStorageService.instance.getBool('isLogin');
final userInfo = StormyStorageService.instance.getJson('userInfo');
5. 使用对话框模块
// 确认对话框
final result = await StormyDialogManager.instance.showConfirmDialog(
context: context,
title: '确认删除',
content: '确定要删除这个项目吗?',
confirmText: '删除',
isDestructive: true,
);
// Toast 消息
StormyDialogManager.instance.showToast(context, '操作成功');
6. 使用刷新模块
final controller = StormyRefreshHelper.createRefreshController();
// 下拉刷新
await StormyRefreshHelper.onRefresh(controller, () async {
await fetchData();
});
// 上拉加载
await StormyRefreshHelper.onLoadMore(controller, () async {
await loadMoreData();
});
7. 国际化支持
通过 stormy_i18n 插件,框架提供了对多语言的完整支持:
import 'package:stormy_i18n/stormy_i18n.dart';
// 配置并初始化国际化模块
await stormy()
.i18n(StormyI18nConfig(
defaultLocale: const Locale('zh', 'CN'),
storageKey: 'app_locale',
supportedLocales: const [
Locale('zh', 'CN'),
Locale('en', 'US'),
],
localizationsDelegates: [
// 填入你的项目 delegates,例如:
// AppLocalizations.delegate,
],
))
.build();
贡献
欢迎提交 Issue 和 Pull Request。
许可证
MIT License
Libraries
- config/accessor/config_accessor
- config/builder/stormy_config
- config/config
- config/models/assets_config
- config/models/dialog_config
- config/models/i18n_config
- config/models/refresh_config
- config/models/storage_config
- config/models/stormy_theme_config
- core/app/app
- core/app/app_export
- 应用核心组件导出文件
- core/app/app_initializer
- core/app/error_app
- core/app/models/app_model
- core/dialog/stormy_dialog
- core/network/client/network_client
- core/network/config/network_config
- core/network/error/error_handler
- core/network/error/network_exception
- core/network/interceptors/auth_interceptor
- core/network/interceptors/logging_interceptor
- core/network/interceptors/retry_interceptor
- core/network/parser/data_parser
- core/network/parser/response_parser
- core/network/stormy_network
- 统一对外发布 Stormy 网络底层所需能力
- core/refresh/refresh_helper
- core/refresh/stormy_refresh
- core/storage/adapters/hive_adapters
- core/storage/adapters/hive_storage_engine
- core/storage/interfaces/storage_engine
- core/storage/mixins/storage_operations
- core/storage/models/storage_bucket
- core/storage/models/storage_entry
- core/storage/storage_bucket_accessor
- core/storage/stormy_storage
- core/theme/stormy_theme
- core/theme/stormy_theme_variant
- core/theme/theme_extension
- core/theme/variants/theme_colors
- core/theme/variants/theme_decorations
- core/theme/variants/theme_dimensions
- core/theme/variants/theme_text
- core/theme/variants/theme_typography
- core/theme/variants/theme_variant
- stormy_kit
- utils/controllers/list_select
- 列表选择状态管理控制器
- utils/extension/future_extension
- utils/extension/null_safety_utils
- utils/format/money
- utils/listeners/app_lifecycle_listener
- utils/preload/config/preload_config
- utils/preload/control/preload_semaphore
- utils/preload/engine/dependency_graph
- utils/preload/engine/preload_engine
- utils/preload/engine/task_execution_context
- utils/preload/exception/preload_exception
- utils/preload/model/preload_progress
- utils/preload/model/preload_result
- utils/preload/model/preload_task
- utils/preload/preload
- 预加载管理器模块
- utils/preload/preload_manager
- utils/preload/state/preload_state
- utils/preload/tracker/preload_tracker
- utils/stormy_utils
- utils/tools/app_utils
- utils/tools/func_utils
- utils/tools/image_utils
- utils/tools/log_utils
- utils/tools/path_utils
- utils/tools/permission_utils
- utils/tools/uuid_utils
- utils/validator/validator
- widgets/base/base_app_bar
- widgets/base/base_bottom_sheet
- widgets/base/base_confirm
- widgets/base/base_image
- widgets/base/base_input
- widgets/base/base_load
- widgets/base/base_page
- widgets/base/base_parent
- widgets/base/base_rimg
- widgets/base/base_tab_bar
- widgets/base/corner_filler
- widgets/dialog/stormy_alert_dialog
- widgets/dialog/stormy_confirm_dialog
- widgets/special/before_after/before_after
- widgets/special/before_after/src/before_after
- widgets/special/before_after/src/before_after_theme
- widgets/special/before_after/src/rect_clipper
- widgets/special/before_after/src/slider_painter
- widgets/special/dotted_line_border/dotted_line_border
- widgets/special/h5/h5
- widgets/special/privacy/agreement_widget
- widgets/special/privacy/privacy_policy
- widgets/special/toast/custom_loading_widget
- widgets/special/toast/custom_toast_widget
- widgets/widgets