TF-1360 Fix can not add data to stream controller when re-login

This commit is contained in:
dab246
2023-01-09 14:11:19 +07:00
committed by Dat H. Pham
parent d2f03a9567
commit eadc0c4ddc
20 changed files with 260 additions and 148 deletions
@@ -47,7 +47,7 @@ class FcmController extends BaseController {
GetSessionInteractor? _getSessionInteractor;
FcmController._internal() {
_listenFcmMessageStream();
_listenFcmStream();
}
static final FcmController _instance = FcmController._internal();
@@ -59,17 +59,33 @@ class FcmController extends BaseController {
FcmTokenHandler.instance.initialize();
}
void _listenFcmMessageStream() {
log('FcmController::_listenFcmMessageStream():');
void _listenFcmStream() async {
await Future.wait([
listenForegroundMessageStream(),
listenBackgroundMessageStream(),
listenTokenStream()
]);
}
Future<void> listenForegroundMessageStream() {
FcmService.instance.foregroundMessageStream
.throttleTime(const Duration(milliseconds: FcmService.durationMessageComing))
.listen(_handleForegroundMessageAction);
return Future.value();
}
Future<void> listenBackgroundMessageStream() {
FcmService.instance.backgroundMessageStream
.throttleTime(const Duration(milliseconds: FcmService.durationMessageComing))
.listen(_handleBackgroundMessageAction);
return Future.value();
}
FcmService.instance.fcmTokenStream.listen(FcmTokenHandler.instance.handle);
Future<void> listenTokenStream() {
FcmService.instance.fcmTokenStream
.debounceTime(const Duration(milliseconds: FcmService.durationRefreshToken))
.listen(FcmTokenHandler.instance.handleTokenAction);
return Future.value();
}
void _handleForegroundMessageAction(RemoteMessage newRemoteMessage) {
@@ -253,13 +269,6 @@ class FcmController extends BaseController {
_remoteMessageBackground = null;
}
@override
void dispose() {
_clearRemoteMessageBackground();
FcmService.instance.dispose();
super.dispose();
}
@override
void onData(Either<Failure, Success> newState) {
super.onData(newState);
@@ -54,14 +54,14 @@ class FcmTokenHandler {
}
}
void handle(String? token) {
log('FcmTokenHandler::handle():token: $token');
void handleTokenAction(String? token) {
log('FcmTokenHandler::handleTokenAction():token: $token');
if (token != null) {
_fcmToken = FirebaseToken(token);
final deviceId = FcmUtils.instance.hashTokenToDeviceId(token);
_deviceClientId = DeviceClientId(deviceId);
log('FcmTokenHandler::handle(): fcmToken: $_fcmToken');
log('FcmTokenHandler::handle(): deviceId: $deviceId');
log('FcmTokenHandler::handleTokenAction(): fcmToken: $_fcmToken');
log('FcmTokenHandler::handleTokenAction(): deviceId: $deviceId');
_getFcmTokenFromBackend(deviceId);
} else {
_getFCMSubscriptionLocalAction();
@@ -171,7 +171,7 @@ class FcmTokenHandler {
deviceClientId: deviceClientId,
types: [TypeName.emailType, TypeName.mailboxType, TypeName.emailDelivery]
);
log('FcmTokenHandler::_handleSuccessViewState():firebaseSubscription: $firebaseSubscription');
log('FcmTokenHandler::_handleRegisterNewToken():firebaseSubscription: $firebaseSubscription');
_invokeRegisterNewTokenAction(RegisterNewTokenRequest(
generateCreationId,
firebaseSubscription