feat(app): refactoring of sentry using, feat(become_consultant): fixed possible infinite loading, feat(push_notifications): fixed push navigation from paid plan push

This commit is contained in:
misha
2026-04-07 10:05:11 +03:00
parent b6b13b1db5
commit aac085def4
133 changed files with 2344 additions and 2456 deletions

View File

@@ -7,6 +7,7 @@ import 'package:eatvio_app/features/notifications/models/notification_model.dart
import 'package:eatvio_app/features/notifications/presentation/notifications_cubit/notifications_state.dart';
import 'package:eatvio_app/features/notifications/repository/notifications_repository.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:eatvio_app/core/error_reporting/report_from.dart';
class NotificationsCubit extends Cubit<NotificationsState> {
final List<BaseNotificationModel> _notifications = [];
@@ -16,10 +17,14 @@ class NotificationsCubit extends Cubit<NotificationsState> {
NotificationsCubit({required this.wsManager, required this.notificationsRepository}) : super(const NotificationsState.empty());
Future<void> connectToWebSocket() async {
await _newNotificationsSubscription?.cancel();
_newNotificationsSubscription = wsManager.newNotificationsStream?.listen((event) {
_handleNotification(event.data);
});
try {
await _newNotificationsSubscription?.cancel();
_newNotificationsSubscription = wsManager.newNotificationsStream?.listen((event) {
_handleNotification(event.data);
});
} catch (e, st) {
await reportFrom(e, st, this);
}
}
BaseNotificationModel _parseNotification(Map<String, dynamic> notificationJson, NotificationType type) {
@@ -341,12 +346,21 @@ class NotificationsCubit extends Cubit<NotificationsState> {
),
NotificationType.unknown => UnknownNotification(type: type, createdAt: parseDate(createdAt ?? jsonEncode(notificationJson))),
};
} catch (e) {
} catch (e, st) {
unawaited(reportFrom(e, st, this));
return UnknownNotification(type: NotificationType.unknown, createdAt: DateTime.now());
}
}
void _handleNotification(String notificationData) {
try {
_handleNotificationParsed(notificationData);
} catch (e, st) {
unawaited(reportFrom(e, st, this));
}
}
void _handleNotificationParsed(String notificationData) {
final json = jsonDecode(notificationData) as Map<String, dynamic>;
// Улучшенная логика определения типа уведомления (порядок: database_type → type → notification_class_name)
@@ -420,6 +434,7 @@ class NotificationsCubit extends Cubit<NotificationsState> {
);
}
} catch (e, st) {
await reportFrom(e, st, this);
log(e.toString(), stackTrace: st);
}
}
@@ -456,6 +471,7 @@ class NotificationsCubit extends Cubit<NotificationsState> {
emit(currentState.copyWith(isLoadingMore: false));
}
} catch (e, st) {
await reportFrom(e, st, this);
log(e.toString(), stackTrace: st);
emit(currentState.copyWith(isLoadingMore: false));
}
@@ -471,6 +487,7 @@ class NotificationsCubit extends Cubit<NotificationsState> {
await getNotifications();
emit(currentState.copyWith(isLoading: false, hasUnreadNotifications: false));
} catch (e, st) {
await reportFrom(e, st, this);
log(e.toString(), stackTrace: st);
emit(currentState.copyWith(isLoading: false));
}