import 'dart:developer'; import 'dart:io'; import 'package:app_tracking_transparency/app_tracking_transparency.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_crashlytics/firebase_crashlytics.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_web_plugins/url_strategy.dart'; import 'package:hub/features/notification/index.dart'; import 'package:hub/features/storage/index.dart'; import 'package:hub/flutter_flow/flutter_flow_theme.dart'; import 'package:hub/flutter_flow/flutter_flow_util.dart'; import 'package:hub/flutter_flow/nav/nav.dart'; Future initializeApp() async { // await _initializeTracking(); // WidgetsFlutterBinding.ensureInitialized() // .addPostFrameCallback((_) => _initializeAppTrackingTransparency()); await StorageHelper().init(); await _initializeFirebase(); await _initializeNotificationService(); await _initializeUrlStrategy(); await _initializeSystemSettings(); await _initializeFlutterFlow(); await _initializeNav(); } void _initializeAppTrackingTransparency() async { if (Platform.isIOS) { final status = await AppTrackingTransparency.trackingAuthorizationStatus; if (status == TrackingStatus.notDetermined) { await Future.delayed(const Duration(seconds: 2)); final request = await AppTrackingTransparency.requestTrackingAuthorization(); if (request == TrackingStatus.authorized) { log('Tracking authorized'); } else { log('Tracking not authorized'); } } } } Future showCustomTrackingDialog(BuildContext context) async { // final String title = FFLocalizations.of(context).getVariableText( // enText: 'Privacy', // ptText: 'Privacidade', // ); // final String content = FFLocalizations.of(context).getVariableText( // enText: // 'We care about your privacy and data security. We need your permission to use your data for crash reporting and diagnostics. ' // 'This helps us improve the app and provide a better user experience.\n\nYou can change your choice anytime in the app settings.', // ptText: // 'Prezamos pela sua privacidade e segurança dos seus dados. Precisamos da sua permissão para usar seus dados para relatórios de falhas e diagnósticos.' // 'Isso nos ajuda a melhorar o aplicativo e fornecer uma melhor experiência ao usuário.\n\nVocê pode alterar sua escolha a qualquer momento nas configurações do aplicativo.', // ); const String title = 'Privacy'; const String content = 'We care about your privacy and data security. We need your permission to use your data for crash reporting and diagnostics. ' 'This helps us improve the app and provide a better user experience.\n\nYou can change your choice anytime in the app settings.'; return await showDialog( context: context, builder: (context) => AlertDialog( title: Text(title), content: Text(content), actions: [ TextButton( onPressed: () => Navigator.pop(context), child: const Text('Continue'), ), ], ), ); } Future _initializeFirebase() async { print('Initializing Firebase...'); await Firebase.initializeApp(); print('Firebase initialized'); } Future _initializeNotificationService() async { print('Initializing Notification Service...'); await NotificationService.initialize(); print('Notification Service initialized'); } Future _initializeUrlStrategy() async { print('Initializing URL Strategy...'); setUrlStrategy(PathUrlStrategy()); print('URL Strategy initialized'); } Future _initializeSystemSettings() async { print('Initializing System Settings...'); await SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); final crashlyticsInstance = FirebaseCrashlytics.instance; if (kDebugMode) { print('Debug mode'); await crashlyticsInstance.setCrashlyticsCollectionEnabled(false); } else { print('Release mode'); await crashlyticsInstance.setCrashlyticsCollectionEnabled(true); if (crashlyticsInstance.isCrashlyticsCollectionEnabled) { // Configura o tratamento de erros não capturados FlutterError.onError = crashlyticsInstance.recordFlutterError; crashlyticsInstance.checkForUnsentReports().then((unsentReports) { if (unsentReports) { crashlyticsInstance.sendUnsentReports(); print('Existem relatórios de falhas não enviados.'); } else { print('Todos os relatórios de falhas foram enviados.'); } }).catchError((error) { print('Erro ao verificar ou enviar relatórios não enviados: $error'); }); } print('Crashlytics enabled'); } } Future _initializeFlutterFlow() async { print('Initializing FlutterFlow...'); await FlutterFlowTheme.initialize(); await FFLocalizations.initialize(); print('FlutterFlow initialized'); } Future _initializeNav() async { print('Initializing Nav...'); GoRouter.optionURLReflectsImperativeAPIs = true; usePathUrlStrategy(); print('Nav initialized'); }