Files
xianyan/lib/core/utils/safe_init_mixin.dart
Developer 9ea8d3d606 chore: 汇总批量提交的功能优化与bug修复
本次提交包含多项迭代优化和问题修复:
1. 新增缩略图图片组件、数字格式化工具类,补充多语言翻译类型与本地化支持
2. 优化底部导航栏主题色统一使用动态accent色值
3. 修复多处图表动画、路由跳转、API请求相关问题
4. 简化服务器公告文案,调整默认分屏状态为关闭
5. 新增安卓/iOS桌面快捷方式配置
6. 重构多处状态管理类使用SafeNotifierInit统一异常保护
7. 替换硬编码蓝色为主题色,更新版本号获取方式为动态读取
8. 优化缓存预加载逻辑,移除无用代码
9. 调整默认设置项,优化用户体验细节
2026-05-31 12:24:05 +08:00

93 lines
2.4 KiB
Dart

/// ============================================================
/// 闲言APP — 安全初始化 Mixin
/// 创建时间: 2026-05-30
/// 更新时间: 2026-05-30
/// 作用: 为 Provider/Notifier 的 _init() 方法提供统一异常保护
/// 上次更新: 初始创建,支持 AsyncNotifier/Notifier/ChangeNotifier
/// ============================================================
import 'package:xianyan/core/utils/logger.dart';
/// 安全初始化 Mixin — 适用于 Riverpod AsyncNotifier 子类
///
/// 使用方式:
/// ```dart
/// class MyNotifier extends AsyncNotifier<MyState> with SafeAsyncInit {
/// @override
/// MyState build() {
/// safeInit(_init);
/// return const MyState();
/// }
///
/// Future<void> _init() async { ... }
/// }
/// ```
mixin SafeAsyncInit {
/// 安全执行初始化,捕获所有异常并记录日志
Future<void> safeInit(Future<void> Function() init, {String? label}) async {
try {
await init();
} catch (e, stack) {
Log.e('${label ?? runtimeType}._init 失败', e, stack);
}
}
}
/// 安全初始化 Mixin — 适用于 Riverpod Notifier 子类
///
/// 使用方式:
/// ```dart
/// class MyNotifier extends Notifier<MyState> with SafeNotifierInit {
/// @override
/// MyState build() {
/// safeNotifierInit(_init);
/// return const MyState();
/// }
///
/// Future<void> _init() async { ... }
/// }
/// ```
mixin SafeNotifierInit {
/// 安全调度初始化,捕获所有异常并记录日志
void safeNotifierInit(
Future<void> Function() init, {
String? label,
}) {
Future.microtask(() async {
try {
await init();
} catch (e, stack) {
Log.e('${label ?? runtimeType}._init 失败', e, stack);
}
});
}
}
/// 安全初始化 Mixin — 适用于 ChangeNotifier 子类
///
/// 使用方式:
/// ```dart
/// class MyProvider extends ChangeNotifier with SafeChangeNotifierInit {
/// MyProvider() {
/// safeChangeInit(_init);
/// }
///
/// Future<void> _init() async { ... }
/// }
/// ```
mixin SafeChangeNotifierInit {
/// 安全调度初始化,捕获所有异常并记录日志
void safeChangeInit(
Future<void> Function() init, {
String? label,
}) {
Future.microtask(() async {
try {
await init();
} catch (e, stack) {
Log.e('${label ?? runtimeType}._init 失败', e, stack);
}
});
}
}