import 'dart:async'; import 'dart:developer'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/material.dart'; import '../product/cache/local_manager.dart'; import '../product/constant/app/api_path_constant.dart'; import '../product/constant/enums/local_keys_enums.dart'; import '../product/network/network_manager.dart'; import '../product/base/bloc/base_bloc.dart'; import '../product/services/api_services.dart'; import '../feature/bell/bell_model.dart'; import '../feature/settings/profile/profile_model.dart'; class MainBloc extends BlocBase { APIServices apiServices = APIServices(); final bellBloc = StreamController.broadcast(); StreamSink get sinkBellBloc => bellBloc.sink; Stream get streamBellBloc => bellBloc.stream; final language = StreamController.broadcast(); StreamSink get sinkLanguage => language.sink; Stream get streamLanguage => language.stream; final theme = StreamController.broadcast(); StreamSink get sinkTheme => theme.sink; Stream get streamTheme => theme.stream; final themeMode = StreamController.broadcast(); StreamSink get sinkThemeMode => themeMode.sink; Stream get streamThemeMode => themeMode.stream; final isVNIcon = StreamController.broadcast(); StreamSink get sinkIsVNIcon => isVNIcon.sink; Stream get streamIsVNIcon => isVNIcon.stream; final userProfile = StreamController.broadcast(); StreamSink get sinkUserProfile => userProfile.sink; Stream get streamUserProfile => userProfile.stream; @override void dispose() {} void getUserProfile(BuildContext context) async { await apiServices.execute(context, () async { User user = await apiServices.getUserDetail(); sinkUserProfile.add(user); }); } getFCMTokenAndPresentations() async { String? firebaseAppToken = await FirebaseMessaging.instance.getToken(); if (firebaseAppToken != null) { log("FCM TOKEN: $firebaseAppToken"); sendNotificationToken(firebaseAppToken); } else { log("FCM TOKEN: null"); } } Future sendNotificationToken(String token) async { String uid = await getUID(); Map body = {"user_id": uid, "app_token": token}; int statusCode = await NetworkManager.instance! .updateDataInServer(APIPathConstants.NOTIFICATION_TOKEN_PATH, body); return statusCode; } Future getUID() async { String uid = LocaleManager.instance.getStringValue(PreferencesKeys.UID); return uid; } }