144 lines
5.1 KiB
Dart
144 lines
5.1 KiB
Dart
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<void> 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<void> 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<void>(
|
|
context: context,
|
|
builder: (context) => AlertDialog(
|
|
title: Text(title),
|
|
content: Text(content),
|
|
actions: [
|
|
TextButton(
|
|
onPressed: () => Navigator.pop(context),
|
|
child: const Text('Continue'),
|
|
),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
|
|
Future<void> _initializeFirebase() async {
|
|
print('Initializing Firebase...');
|
|
await Firebase.initializeApp();
|
|
print('Firebase initialized');
|
|
}
|
|
|
|
Future<void> _initializeNotificationService() async {
|
|
print('Initializing Notification Service...');
|
|
await NotificationService.initialize();
|
|
print('Notification Service initialized');
|
|
}
|
|
|
|
Future<void> _initializeUrlStrategy() async {
|
|
print('Initializing URL Strategy...');
|
|
setUrlStrategy(PathUrlStrategy());
|
|
print('URL Strategy initialized');
|
|
}
|
|
|
|
Future<void> _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<void> _initializeFlutterFlow() async {
|
|
print('Initializing FlutterFlow...');
|
|
await FlutterFlowTheme.initialize();
|
|
await FFLocalizations.initialize();
|
|
print('FlutterFlow initialized');
|
|
}
|
|
|
|
Future<void> _initializeNav() async {
|
|
print('Initializing Nav...');
|
|
GoRouter.optionURLReflectsImperativeAPIs = true;
|
|
usePathUrlStrategy();
|
|
print('Nav initialized');
|
|
}
|