MoodCanvas/lib/main.dart
fengshengxiong 91b7eebbf2 接入TopON
2026-01-22 16:34:55 +08:00

115 lines
3.8 KiB
Dart

import 'dart:async';
import 'dart:ui';
import 'package:aesthetica_wallpaper/providers/editor_provider.dart';
import 'package:aesthetica_wallpaper/providers/recipe_provider.dart';
import 'package:aesthetica_wallpaper/providers/weather_provider.dart';
import 'package:aesthetica_wallpaper/providers/puzzle_provider.dart';
import 'package:aesthetica_wallpaper/providers/drag_puzzle_provider.dart';
import 'package:aesthetica_wallpaper/core/app.dart';
import 'package:firebase_analytics/firebase_analytics.dart';
import 'package:firebase_analytics/observer.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_crashlytics/firebase_crashlytics.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'core/firebase_optinons.dart';
bool isFirebaseInitialized = false;
void main() async {
runZonedGuarded<Future<void>>(() async {
WidgetsFlutterBinding.ensureInitialized();
try {
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
).timeout(const Duration(seconds: 10)); // 设置15秒超时
print("✅ Firebase 初始化成功。");
isFirebaseInitialized = true; // 成功后设置标志
} on TimeoutException {
print("⚠️ Firebase 初始化超时 (超过15秒),应用将继续运行但相关功能将不可用。");
} catch (error, stack) {
print("!!!!!!!!!! Firebase 初始化失败 !!!!!!!!!!: $error");
FirebaseCrashlytics.instance.recordError(error, stack, fatal: false);
}
// Firebase 成功初始化后,配置依赖它的服务
if (isFirebaseInitialized) {
//设置全局错误处理器
FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterError;
PlatformDispatcher.instance.onError = (error, stack) {
FirebaseCrashlytics.instance.recordError(error, stack, fatal: true);
return true;
};
// 使用安全服务来记录 App Open
AnalyticsService.instance.logAppOpen();
}
final analyObserver = SafeFirebaseAnalyticsObserver();
runApp(
MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => EditorProvider()),
ChangeNotifierProvider(
create: (_) => RecipeProvider()..loadRecipes(),
),
ChangeNotifierProvider(create: (_) => WeatherProvider()),
ChangeNotifierProvider(create: (_) => PuzzleProvider()),
ChangeNotifierProvider(create: (_) => DragPuzzleProvider()),
],
child: AestheticaApp(analyObserver: analyObserver),
),
);
}, (e, s) {});
}
class AnalyticsService {
// 单例模式
AnalyticsService._();
static final instance = AnalyticsService._();
final _analytics = FirebaseAnalytics.instance;
/// 安全地记录一个 App Open 事件。
void logAppOpen() {
if (isFirebaseInitialized) {
_analytics.logAppOpen();
} else {
print("[AnalyticsService] Skipped logAppOpen: Firebase not initialized.");
}
}
}
class SafeFirebaseAnalyticsObserver extends NavigatorObserver {
late final FirebaseAnalyticsObserver _observer;
SafeFirebaseAnalyticsObserver() {
if (isFirebaseInitialized) {
_observer = FirebaseAnalyticsObserver(
analytics: AnalyticsService.instance._analytics,
);
}
}
@override
void didPush(Route<dynamic> route, Route<dynamic>? previousRoute) {
if (isFirebaseInitialized) {
_observer.didPush(route, previousRoute);
}
}
@override
void didPop(Route<dynamic> route, Route<dynamic>? previousRoute) {
if (isFirebaseInitialized) {
_observer.didPop(route, previousRoute);
}
}
@override
void didReplace({Route<dynamic>? newRoute, Route<dynamic>? oldRoute}) {
if (isFirebaseInitialized) {
_observer.didReplace(newRoute: newRoute, oldRoute: oldRoute);
}
}
}