109 lines
5.5 KiB
Dart
109 lines
5.5 KiB
Dart
// 2026-04-09 | AppBinding | 全局Binding | Web端跳过permission注册
|
||
// 2026-04-10 | 移除 CartController 注册(收藏功能统一使用 FavoritesController)
|
||
// 2026-04-10 | 新增 ShoppingListController 全局注册(首页需要使用)
|
||
// 2026-04-11 | 统一控制器生命周期管理 | 新增ToolsController/HotController/WhatToEatController全局注册 | 移除路由级重复注册
|
||
// 2026-04-15 | 修复ANR: 非首屏控制器改用lazyPut延迟初始化,避免5个网络请求同时发出导致原生ANR杀进程
|
||
import 'package:flutter/foundation.dart';
|
||
import 'package:get/get.dart';
|
||
import 'package:mom_kitchen/src/controllers/feed/action_controller.dart';
|
||
import 'package:mom_kitchen/src/controllers/feed/hot_controller.dart';
|
||
import 'package:mom_kitchen/src/controllers/data/favorites_controller.dart';
|
||
import 'package:mom_kitchen/src/controllers/feed/feed_controller.dart';
|
||
import 'package:mom_kitchen/src/controllers/home/home_controller.dart';
|
||
import 'package:mom_kitchen/src/controllers/user/preference_controller.dart';
|
||
import 'package:mom_kitchen/src/controllers/user/profile_controller.dart';
|
||
import 'package:mom_kitchen/src/controllers/user/personalization_controller.dart';
|
||
import 'package:mom_kitchen/src/controllers/home/main_navigation_controller.dart';
|
||
import 'package:mom_kitchen/src/controllers/data/meal_record_controller.dart';
|
||
import 'package:mom_kitchen/src/controllers/recipe/search_controller.dart';
|
||
import 'package:mom_kitchen/src/controllers/data/shopping_list_controller.dart';
|
||
import 'package:mom_kitchen/src/controllers/data/cooking_note_controller.dart';
|
||
import 'package:mom_kitchen/src/controllers/data/browse_history_controller.dart';
|
||
import 'package:mom_kitchen/src/controllers/data/rating_records_controller.dart';
|
||
import 'package:mom_kitchen/src/controllers/tools/tools_controller.dart';
|
||
import 'package:mom_kitchen/src/controllers/tools/what_to_eat_controller.dart';
|
||
import 'package:mom_kitchen/src/controllers/data/weekly_menu_controller.dart';
|
||
import 'package:mom_kitchen/src/controllers/tools/bedtime_reminder_controller.dart';
|
||
import 'package:mom_kitchen/src/services/core/app_service.dart';
|
||
import 'package:mom_kitchen/src/services/ui/theme_service.dart';
|
||
import 'package:mom_kitchen/src/services/data/offline_service.dart';
|
||
import 'package:mom_kitchen/src/services/data/data_export_service.dart';
|
||
import 'package:mom_kitchen/src/services/user/taste_preference_service.dart';
|
||
|
||
/// 全局Binding - 应用启动时注册所有全局控制器和服务
|
||
/// 所有 permanent:true 的控制器在此统一管理,路由级Binding禁止重复注册
|
||
///
|
||
/// 初始化策略:
|
||
/// - Get.put: 首屏必需的控制器,立即初始化
|
||
/// - Get.lazyPut: 非首屏控制器,首次访问时才初始化(避免ANR)
|
||
class AppBinding extends Bindings {
|
||
@override
|
||
void dependencies() {
|
||
// --- 服务层(lazyPut + fenix: 允许被回收后自动重建) ---
|
||
Get.lazyPut(() => AppService.instance.api, fenix: true);
|
||
Get.lazyPut(() => AppService.instance.storage, fenix: true);
|
||
if (!kIsWeb && AppService.instance.permission != null) {
|
||
Get.lazyPut(() => AppService.instance.permission!, fenix: true);
|
||
}
|
||
Get.lazyPut(() => AppService.instance.logger, fenix: true);
|
||
Get.lazyPut(() => AppService.instance.animation, fenix: true);
|
||
Get.lazyPut(() => AppService.instance.screenUtil, fenix: true);
|
||
Get.lazyPut(() => AppService.instance.appInfo, fenix: true);
|
||
Get.lazyPut(() => AppService.instance.toast, fenix: true);
|
||
|
||
// --- 离线服务 ---
|
||
Get.put(OfflineService(), permanent: true);
|
||
|
||
// --- 数据导出服务 ---
|
||
Get.put(DataExportService(), permanent: true);
|
||
|
||
// --- 口味偏好服务 ---
|
||
Get.put(TastePreferenceService(), permanent: true);
|
||
|
||
// --- 主题与个性化(首屏必需) ---
|
||
if (!Get.isRegistered<ThemeService>()) {
|
||
Get.put(ThemeService.instance, permanent: true);
|
||
}
|
||
Get.put(PersonalizationController(), permanent: true);
|
||
|
||
// --- 首屏必需控制器(立即初始化,仅HomeController发网络请求) ---
|
||
Get.put(MainNavigationController(), permanent: true);
|
||
Get.put(HomeController(), permanent: true);
|
||
Get.put(ActionController(), permanent: true);
|
||
|
||
// --- 非首屏控制器(延迟初始化,切换Tab时才创建,避免ANR) ---
|
||
Get.lazyPut(() => FeedController(), fenix: true);
|
||
Get.lazyPut(() => HotController(), fenix: true);
|
||
Get.lazyPut(() => WhatToEatController(), fenix: true);
|
||
Get.lazyPut(() => ToolsController(), fenix: true);
|
||
Get.lazyPut(() => PreferenceController(), fenix: true);
|
||
Get.lazyPut(() => ProfileController(), fenix: true);
|
||
Get.lazyPut(() => FavoritesController(), fenix: true);
|
||
Get.lazyPut(() => ShoppingListController(), fenix: true);
|
||
Get.lazyPut(() => CookingNoteController(), fenix: true);
|
||
Get.lazyPut(() => BrowseHistoryController(), fenix: true);
|
||
Get.lazyPut(() => WeeklyMenuController(), fenix: true);
|
||
Get.lazyPut(() => BedtimeReminderController(), fenix: true);
|
||
Get.lazyPut(() => MealRecordController(), fenix: true);
|
||
Get.lazyPut(() => RatingRecordsController(), fenix: true);
|
||
}
|
||
}
|
||
|
||
/// 搜索页Binding - SearchController仅搜索页使用,按需创建
|
||
class SearchBinding extends Bindings {
|
||
@override
|
||
void dependencies() {
|
||
Get.lazyPut(() => SearchController());
|
||
}
|
||
}
|
||
|
||
/// 营养页Binding - MealRecordController带注册检查,避免重复
|
||
class NutritionBinding extends Bindings {
|
||
@override
|
||
void dependencies() {
|
||
if (!Get.isRegistered<MealRecordController>()) {
|
||
Get.put(MealRecordController(), permanent: true);
|
||
}
|
||
}
|
||
}
|