This commit is contained in:
J. A. Messias 2024-11-18 09:42:24 -03:00
parent c2d54b6b3f
commit f59293da80
3 changed files with 40 additions and 11 deletions

View File

@ -23,6 +23,8 @@ import 'package:hub/shared/helpers/storage_helper.dart';
import 'package:hub/shared/services/localization/localization_service.dart'; import 'package:hub/shared/services/localization/localization_service.dart';
import 'package:hub/shared/utils/device_util.dart'; import 'package:hub/shared/utils/device_util.dart';
import 'package:hub/shared/utils/dialog_util.dart'; import 'package:hub/shared/utils/dialog_util.dart';
import 'package:hub/shared/utils/log_util.dart';
import 'package:logging/logging.dart';
import 'package:responsive_framework/responsive_framework.dart'; import 'package:responsive_framework/responsive_framework.dart';
import 'backend/notifications/firebase_messaging_service.dart'; import 'backend/notifications/firebase_messaging_service.dart';
@ -37,6 +39,7 @@ void main() async {
Future<void> initializeApp() async { Future<void> initializeApp() async {
WidgetsFlutterBinding.ensureInitialized(); WidgetsFlutterBinding.ensureInitialized();
LogUtil.setupLogging();
await _initializeTracking(); await _initializeTracking();
await StorageHelper().init(); await StorageHelper().init();
@ -182,33 +185,37 @@ class _AppState extends State<App> with WidgetsBindingObserver {
}; };
Future<void> initDeepLinks() async { Future<void> initDeepLinks() async {
final Logger logger = Logger('initDeepLinks');
try { try {
_appLinks = AppLinks(); _appLinks = AppLinks();
logger.severe('initDeepLinks');
_linkSubscription = _appLinks.uriLinkStream.listen((uri) async { _linkSubscription = _appLinks.uriLinkStream.listen((uri) async {
final bool isRecovered = StorageHelper().isRecovered; final bool isRecovered = StorageHelper().isRecovered;
await DialogUtil.error(context, 'isRecovered: $isRecovered'); logger.severe('isRecovered: $isRecovered');
if (!isRecovered) await openAppLink(uri); if (!isRecovered) await openAppLink(uri);
}); });
} catch (e) { } catch (e) {
await DialogUtil.error(context, 'Erro ao tentar abrir o link'); logger.severe('initDeepLinks error: $e');
} }
} }
Future<void> openAppLink(Uri uri) async { Future<void> openAppLink(Uri uri) async {
final Logger logger = Logger('openAppLink');
logger.severe('open app link: $uri');
final bool isRecovered = StorageHelper().isRecovered; final bool isRecovered = StorageHelper().isRecovered;
log('isRecovered: $isRecovered'); logger.severe('isRecovered: $isRecovered');
await DialogUtil.warning(context, 'isRecovered: $isRecovered');
if (isRecovered) return; if (isRecovered) return;
StorageHelper().isRecovered = true; StorageHelper().isRecovered = true;
final String email = uri.queryParameters['email'] ?? ''; final String email = uri.queryParameters['email'] ?? '';
final String token = uri.queryParameters['token'] ?? ''; final String token = uri.queryParameters['token'] ?? '';
logger.severe('email: $email, token: $token');
final bool isNotEmpty = email.isNotEmpty && token.isNotEmpty; final bool isNotEmpty = email.isNotEmpty && token.isNotEmpty;
if (isNotEmpty) { if (isNotEmpty) {
final BuildContext context = StorageHelper().context!; final BuildContext context = StorageHelper().context!;
final FlutterFlowTheme theme = FlutterFlowTheme.of(context); final FlutterFlowTheme theme = FlutterFlowTheme.of(context);
final Widget screen = ForgotPasswordScreen(email: email, token: token); final Widget screen = ForgotPasswordScreen(email: email, token: token);
builder(context) => screen; builder(context) => screen;
await DialogUtil.warning(context, 'Builder: $builder'); logger.severe('showModalBottomSheet');
await showModalBottomSheet( await showModalBottomSheet(
context: context, context: context,
builder: (context) => Padding(padding: MediaQuery.viewInsetsOf(context), child: builder(context)), builder: (context) => Padding(padding: MediaQuery.viewInsetsOf(context), child: builder(context)),
@ -219,9 +226,9 @@ class _AppState extends State<App> with WidgetsBindingObserver {
useSafeArea: true, useSafeArea: true,
enableDrag: true, enableDrag: true,
// isDismissible: true, // isDismissible: true,
).whenComplete(() async { ).whenComplete(() {
StorageHelper().isRecovered = false; StorageHelper().isRecovered = false;
await DialogUtil.success(context, 'isRecovered: ${StorageHelper().isRecovered}'); logger.severe('showModalBottomSheet completed');
}); });
} }
} }
@ -277,7 +284,8 @@ class _AppState extends State<App> with WidgetsBindingObserver {
const Duration(milliseconds: 1000), () => setState(() => _appStateNotifier.stopShowingSplashImage())); const Duration(milliseconds: 1000), () => setState(() => _appStateNotifier.stopShowingSplashImage()));
_setupFirebaseMessaging(); _setupFirebaseMessaging();
WidgetsBinding.instance.addPersistentFrameCallback((_) async => await initDeepLinks()); // WidgetsBinding.instance.addPersistentFrameCallback((_) async => await initDeepLinks());
initDeepLinks();
} }
@override @override

View File

@ -1,19 +1,39 @@
import 'dart:developer'; import 'dart:developer';
import 'package:firebase_crashlytics/firebase_crashlytics.dart'; import 'package:firebase_crashlytics/firebase_crashlytics.dart';
import 'package:flutter/foundation.dart';
import 'package:hub/backend/api_requests/api_calls.dart'; import 'package:hub/backend/api_requests/api_calls.dart';
import 'package:logging/logging.dart';
class LogUtil { class LogUtil {
static void requestAPIFailed(String url, String body, String reason, dynamic error, StackTrace stack) async { static void requestAPIFailed(String url, String body, String reason, dynamic error, StackTrace stack) async {
log("URL: ${PhpGroup.getBaseUrl()}/$url"); final fullUrl = "${PhpGroup.getBaseUrl()}/$url";
log("URL: $fullUrl");
log("Body: $body"); log("Body: $body");
log("Motivo: $reason"); log("Reason: $reason");
log("Error: ${error.toString()}"); log("Error: ${error.toString()}");
log("Stack: ${stack.toString()}"); log("Stack: ${stack.toString()}");
FirebaseCrashlytics.instance.setCustomKey('URL', "${PhpGroup.getBaseUrl()}/$url"); FirebaseCrashlytics.instance.setCustomKey('URL', fullUrl);
FirebaseCrashlytics.instance.setCustomKey('Body', body); FirebaseCrashlytics.instance.setCustomKey('Body', body);
await FirebaseCrashlytics.instance.recordError(error, stack, reason: reason); await FirebaseCrashlytics.instance.recordError(error, stack, reason: reason);
} }
static void setupLogging() {
Logger.root.level = Level.ALL;
Logger.root.onRecord.listen((record) {
final logMessage = '${record.level.name}: ${record.time}: ${record.message}';
if (kReleaseMode) {
log(
logMessage,
name: record.loggerName,
error: record.error,
stackTrace: record.stackTrace,
);
} else {
print(logMessage);
}
});
}
} }

View File

@ -48,6 +48,7 @@ dependencies:
flutter_svg: 2.0.10+1 flutter_svg: 2.0.10+1
font_awesome_flutter: 10.7.0 font_awesome_flutter: 10.7.0
from_css_color: 2.0.0 from_css_color: 2.0.0
logging: ^1.3.0
go_router: ^14.3.0 go_router: ^14.3.0
google_fonts: 6.2.1 google_fonts: 6.2.1
http: 1.2.1 http: 1.2.1