app_bootstrap.dart 1.65 KB
import 'dart:async';

import 'package:flutter/widgets.dart';
import 'package:get/get.dart';

import '../../core/config/app_environment_config.dart';
import '../../core/logging/app_logger.dart';
import '../../core/network/user_agent_provider.dart';
import '../../core/services/user_state_service.dart';
import '../../core/services/app_config_service.dart';
import '../../data/local/local_storage.dart';
import '../../data/local/user_account_storage.dart';
import '../../data/local/user_preferences_storage.dart';
import '../../core/services/loading_service.dart';
import '../../core/services/native_health_data_update_bridge.dart';
import '../bindings/initial_binding.dart';

/// Application startup before [runApp].
abstract final class AppBootstrap {
  static Future<void> init() async {
    WidgetsFlutterBinding.ensureInitialized();
    AppLogger.init();

    await UserAgentProvider.init();

    final local = await LocalStorage.open();

    final environmentConfig = AppEnvironmentConfig(local);
    await environmentConfig.init();

    final userPreferencesStorage =
        UserPreferencesStorage(local.sharedPreferences);
    await userPreferencesStorage.init();

    final userAccountStorage = UserAccountStorage(local.sharedPreferences);

    InitialBinding(
      environmentConfig: environmentConfig,
      userPreferencesStorage: userPreferencesStorage,
      userAccountStorage: userAccountStorage,
      localStorage: local,
    ).dependencies();

    NativeHealthDataUpdateBridge.initialize();

    LoadingService.init();

    if (local.termsAgreed) {
      await Get.find<UserStateService>().initializeSdks();
      unawaited(AppConfigService.to.fetch());
    }
  }
}