From 74df7d82db0dd9f8af2f5ad6a28cc65b9a0c9b54 Mon Sep 17 00:00:00 2001 From: mso7nueh Date: Mon, 14 Jul 2025 14:06:07 +0300 Subject: [PATCH] feat(notifications): Issue-562 --- lib/core/app_router.dart | 18 +++---------- lib/core/const.dart | 1 - lib/core/firebase_api.dart | 25 +++++++++++++++++++ .../auth/presentation/pages/auth_screen.dart | 2 ++ lib/features/chat/services/chat_service.dart | 4 +-- .../registration_cubit.dart | 3 +++ lib/main.dart | 3 ++- 7 files changed, 38 insertions(+), 18 deletions(-) diff --git a/lib/core/app_router.dart b/lib/core/app_router.dart index 9dc8612f..ee0278c8 100644 --- a/lib/core/app_router.dart +++ b/lib/core/app_router.dart @@ -121,7 +121,9 @@ class AppRouter { GoRoute( path: 'forget-password-screen', name: 'forgetPasswordScreen', - builder: (context, state) => ForgetPasswordScreen(isAuth: state.extra as bool,), + builder: (context, state) => ForgetPasswordScreen( + isAuth: state.extra as bool, + ), ), GoRoute( path: 'scan-qr-code-screen', @@ -205,21 +207,9 @@ class AppRouter { builder: (context, state) => const WelcomeScreen(), redirect: (context, state) async { try { - if (await TokenStorage.haveTokenInStorage()) { - final firebaseApi = sl(); - final fbToken = await firebaseApi.getToken(); - final deviceInfo = DeviceInfoPlugin(); - await sl().post( - '/api/profile/notification/token/register', - data: { - 'platform': Platform.isIOS ? 'ios' : 'android', - 'hw_id': Platform.isIOS ? (await deviceInfo.iosInfo).identifierForVendor : (await deviceInfo.androidInfo).id, - 'token': fbToken, - }, - ); - } final sharedPreferences = await SharedPreferences.getInstance(); final welcomeScreenWasShowed = sharedPreferences.getBool('welcomeScreenWasShowed') ?? false; + await sl().registerPushToken(); if (welcomeScreenWasShowed == false) { return null; } else if (await TokenStorage.haveTokenInStorage()) { diff --git a/lib/core/const.dart b/lib/core/const.dart index 31c47e9c..618a9866 100644 --- a/lib/core/const.dart +++ b/lib/core/const.dart @@ -1,5 +1,4 @@ String baseUrl = 'https://eatvio.ru'; -// String baseUrl = 'https://dev2.eatvio.com'; const List durationValues = [7, 14, 21]; diff --git a/lib/core/firebase_api.dart b/lib/core/firebase_api.dart index fbf8e5c1..572b56f6 100644 --- a/lib/core/firebase_api.dart +++ b/lib/core/firebase_api.dart @@ -1,3 +1,10 @@ +import 'dart:developer'; +import 'dart:io'; + +import 'package:device_info_plus/device_info_plus.dart'; +import 'package:dio/dio.dart'; +import 'package:eatvio_app/core/locator_service.dart'; +import 'package:eatvio_app/core/token_storage.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; class FirebaseApi { @@ -7,4 +14,22 @@ class FirebaseApi { await _firebaseMessaging.requestPermission(); return await _firebaseMessaging.getToken(); } + + Future registerPushToken() async { + if (await TokenStorage.haveTokenInStorage()) { + try { + final deviceInfo = DeviceInfoPlugin(); + await sl().post( + '/api/profile/notification/token/register', + data: { + 'platform': Platform.isIOS ? 'ios' : 'android', + 'hw_id': Platform.isIOS ? (await deviceInfo.iosInfo).identifierForVendor : (await deviceInfo.androidInfo).id, + 'token': await getToken(), + }, + ); + } catch (e, st) { + log(e.toString(), stackTrace: st); + } + } + } } diff --git a/lib/features/auth/presentation/pages/auth_screen.dart b/lib/features/auth/presentation/pages/auth_screen.dart index 10fb4172..f5fd7a34 100644 --- a/lib/features/auth/presentation/pages/auth_screen.dart +++ b/lib/features/auth/presentation/pages/auth_screen.dart @@ -1,6 +1,7 @@ import 'dart:async'; import 'package:eatvio_app/core/app_router.dart'; import 'package:eatvio_app/core/const.dart'; +import 'package:eatvio_app/core/firebase_api.dart'; import 'package:eatvio_app/core/locator_service.dart'; import 'package:eatvio_app/core/theme/theme_helper.dart'; import 'package:eatvio_app/core/utils/image_constant.dart'; @@ -66,6 +67,7 @@ class _AuthScreenState extends State { await sl().connectToWebSocket(); await sl().getNotifications(); await sl().connectToWebSocket(); + await sl().registerPushToken(); showSuccessToast('Успешный вход'); } catch (e) { rethrow; diff --git a/lib/features/chat/services/chat_service.dart b/lib/features/chat/services/chat_service.dart index dee63eab..cceaa9d0 100644 --- a/lib/features/chat/services/chat_service.dart +++ b/lib/features/chat/services/chat_service.dart @@ -16,7 +16,7 @@ abstract class ChatService { @GET('/api/chat/index') Future getChatRooms({ @Query('page') required int page, - @Query('find') String? query, + @Query('filters[data][\$conversation_name]') String? query, }); @GET('/api/chat/show/{uuid}') @@ -82,7 +82,7 @@ abstract class ChatService { @Body() required PlanComplainModel body, }); - @GET('/api/v2/chat/get_by_user/{slug}') + @GET('/api/chat/get_by_user/{slug}') Future getChatByUserSlug({ @Path() required String slug, }); diff --git a/lib/features/registration/presentation/bloc/registration_cubit/registration_cubit.dart b/lib/features/registration/presentation/bloc/registration_cubit/registration_cubit.dart index 83592c3b..fa2948bc 100644 --- a/lib/features/registration/presentation/bloc/registration_cubit/registration_cubit.dart +++ b/lib/features/registration/presentation/bloc/registration_cubit/registration_cubit.dart @@ -1,6 +1,8 @@ import 'dart:developer'; import 'package:eatvio_app/core/app_router.dart'; +import 'package:eatvio_app/core/firebase_api.dart'; +import 'package:eatvio_app/core/locator_service.dart'; import 'package:eatvio_app/core/token_storage.dart'; import 'package:eatvio_app/features/registration/models/user_registration_model.dart'; @@ -59,6 +61,7 @@ class RegistrationCubit extends Cubit { ); await TokenStorage.saveTokenInStorage(token); AppRouter.navigatorKey.currentContext?.pushNamed('verifyEmailScreen'); + await sl().registerPushToken(); } catch (e, st) { log(e.toString(), stackTrace: st); } diff --git a/lib/main.dart b/lib/main.dart index 005afaac..3fd39e7f 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -11,6 +11,7 @@ import 'package:eatvio_app/features/internet_connection_checker/internet_connect import 'package:eatvio_app/firebase_options.dart'; import 'package:eatvio_app/generated/l10n.dart'; import 'package:firebase_core/firebase_core.dart'; +import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; @@ -22,8 +23,8 @@ import 'package:sentry_flutter/sentry_flutter.dart'; Future main() async { WidgetsBinding widgetsBinding = SentryWidgetsFlutterBinding.ensureInitialized(); FlutterNativeSplash.preserve(widgetsBinding: widgetsBinding); - await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform); + await FirebaseMessaging.instance.requestPermission(); await di.init(); await SentryFlutter.init(