fix: fix notifs listeners
Some checks failed
continuous-integration/drone/pr Build is failing

This commit is contained in:
Malo Léon 2023-08-18 15:57:58 +02:00
parent 18fffa09fb
commit 871c52f54d
14 changed files with 91 additions and 34 deletions

View File

@ -19,5 +19,5 @@ import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:wyatt_cloud_messaging_bloc_base/wyatt_cloud_messaging_bloc.dart'; import 'package:wyatt_cloud_messaging_bloc_base/wyatt_cloud_messaging_bloc.dart';
extension BuildContextExtension on BuildContext { extension BuildContextExtension on BuildContext {
CloudmessagingCubit get cloudMessaging => read<CloudmessagingCubit>(); CloudMessagingCubit get cloudMessaging => read<CloudMessagingCubit>();
} }

View File

@ -64,7 +64,7 @@ class CloudMessagingRepositoryImpl extends CloudMessagingRepository {
@override @override
FutureOrResult<Stream<RemoteNotification>> onNotification() => FutureOrResult<Stream<RemoteNotification>> onNotification() =>
Result.tryCatchAsync( Result.tryCatchAsync(
_notificationRemoteDataSource.onNotificationBackground, _notificationRemoteDataSource.onNotification,
(error) => error is AppException (error) => error is AppException
? error ? error
: NotificationException(error.toString()), : NotificationException(error.toString()),

View File

@ -23,11 +23,13 @@ import 'package:wyatt_cloud_messaging_bloc_base/src/domain/entities/remote_notif
import 'package:wyatt_cloud_messaging_bloc_base/src/domain/repositories/cloud_messaging_repository.dart'; import 'package:wyatt_cloud_messaging_bloc_base/src/domain/repositories/cloud_messaging_repository.dart';
import 'package:wyatt_type_utils/wyatt_type_utils.dart'; import 'package:wyatt_type_utils/wyatt_type_utils.dart';
class ListenNotification extends StreamUseCase<NoParam, RemoteNotification> { class ListenNotificationUseCase
extends StreamUseCase<NoParam, RemoteNotification> {
final CloudMessagingRepository _notificationRepository; final CloudMessagingRepository _notificationRepository;
ListenNotification({required CloudMessagingRepository notificationRepository}) ListenNotificationUseCase({
: _notificationRepository = notificationRepository; required CloudMessagingRepository notificationRepository,
}) : _notificationRepository = notificationRepository;
@override @override
FutureOrResult<Stream<RemoteNotification>> execute(NoParam? params) async { FutureOrResult<Stream<RemoteNotification>> execute(NoParam? params) async {
Stream<RemoteNotification>? notificationStream; Stream<RemoteNotification>? notificationStream;
@ -53,11 +55,11 @@ class ListenNotification extends StreamUseCase<NoParam, RemoteNotification> {
await _notificationRepository.onNotificationForeground(); await _notificationRepository.onNotificationForeground();
if (notificationForegroundStreamResponse.isErr) { if (notificationForegroundStreamResponse.isErr) {
return Err(notificationBackgroundStreamResponse.err!); return Err(notificationForegroundStreamResponse.err!);
} }
notificationStream = Rx.merge([ notificationStream = Rx.merge([
notificationBackgroundStreamResponse.ok!, notificationForegroundStreamResponse.ok!,
notificationBackgroundStreamResponse.ok!, notificationBackgroundStreamResponse.ok!,
]); ]);
} }

View File

@ -19,11 +19,12 @@ import 'dart:async';
import 'package:wyatt_architecture/wyatt_architecture.dart'; import 'package:wyatt_architecture/wyatt_architecture.dart';
import 'package:wyatt_cloud_messaging_bloc_base/src/domain/repositories/cloud_messaging_repository.dart'; import 'package:wyatt_cloud_messaging_bloc_base/src/domain/repositories/cloud_messaging_repository.dart';
class Subscribe extends AsyncUseCase<String, void> { class SubscribeToNotificationTopicUseCase extends AsyncUseCase<String, void> {
final CloudMessagingRepository _notificationRepository; final CloudMessagingRepository _notificationRepository;
Subscribe({required CloudMessagingRepository notificationRepository}) SubscribeToNotificationTopicUseCase({
: _notificationRepository = notificationRepository; required CloudMessagingRepository notificationRepository,
}) : _notificationRepository = notificationRepository;
@override @override
FutureOr<void> onStart(String? params) { FutureOr<void> onStart(String? params) {

View File

@ -19,11 +19,13 @@ import 'dart:async';
import 'package:wyatt_architecture/wyatt_architecture.dart'; import 'package:wyatt_architecture/wyatt_architecture.dart';
import 'package:wyatt_cloud_messaging_bloc_base/src/domain/repositories/cloud_messaging_repository.dart'; import 'package:wyatt_cloud_messaging_bloc_base/src/domain/repositories/cloud_messaging_repository.dart';
class Unsubscribe extends AsyncUseCase<String, void> { class UnsubscribeFromNotificationTopicUseCase
extends AsyncUseCase<String, void> {
final CloudMessagingRepository _notificationRepository; final CloudMessagingRepository _notificationRepository;
Unsubscribe({required CloudMessagingRepository notificationRepository}) UnsubscribeFromNotificationTopicUseCase({
: _notificationRepository = notificationRepository; required CloudMessagingRepository notificationRepository,
}) : _notificationRepository = notificationRepository;
@override @override
FutureOr<void> onStart(String? params) { FutureOr<void> onStart(String? params) {

View File

@ -18,5 +18,5 @@ export './get_cloud_messaging_token_use_case.dart';
export './init_cloud_messaging_use_case.dart'; export './init_cloud_messaging_use_case.dart';
export './listen_notification_use_case.dart'; export './listen_notification_use_case.dart';
export './request_cloud_messaging_permission_use_case.dart'; export './request_cloud_messaging_permission_use_case.dart';
export './subscribe.dart'; export 'subscribe_to_notification_topic_use_case.dart';
export './unsubscribe.dart'; export 'unsubscribe_from_notification_topic_use_case.dart';

View File

@ -0,0 +1,2 @@
export './notifications/bloc/cloud_messaging_cubit.dart';
export './notifications/screens/cloud_messaging_screen.dart';

View File

@ -1,11 +1,3 @@
import 'dart:async';
import 'package:equatable/equatable.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:wyatt_architecture/wyatt_architecture.dart';
import 'package:wyatt_cloud_messaging_bloc_base/src/domain/entities/remote_notifications.dart';
import 'package:wyatt_cloud_messaging_bloc_base/src/domain/usecases/listen_notification_use_case.dart';
import 'package:wyatt_cloud_messaging_bloc_base/src/domain/usecases/subscribe.dart';
// Copyright (C) 2023 WYATT GROUP // Copyright (C) 2023 WYATT GROUP
// Please see the AUTHORS file for details. // Please see the AUTHORS file for details.
// //
@ -22,22 +14,31 @@ import 'package:wyatt_cloud_messaging_bloc_base/src/domain/usecases/subscribe.da
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>. // along with this program. If not, see <https://www.gnu.org/licenses/>.
import 'package:wyatt_cloud_messaging_bloc_base/src/domain/usecases/unsubscribe.dart'; import 'dart:async';
import 'package:equatable/equatable.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:wyatt_architecture/wyatt_architecture.dart';
import 'package:wyatt_cloud_messaging_bloc_base/src/domain/entities/remote_notifications.dart';
import 'package:wyatt_cloud_messaging_bloc_base/src/domain/usecases/listen_notification_use_case.dart';
import 'package:wyatt_cloud_messaging_bloc_base/src/domain/usecases/subscribe_to_notification_topic_use_case.dart';
import 'package:wyatt_cloud_messaging_bloc_base/src/domain/usecases/unsubscribe_from_notification_topic_use_case.dart';
part 'cloud_messaging_state.dart'; part 'cloud_messaging_state.dart';
typedef OnNotification = void Function(RemoteNotification); typedef OnNotification = void Function(RemoteNotification);
class CloudmessagingCubit extends Cubit<CloudmessagingState> { class CloudMessagingCubit extends Cubit<CloudmessagingState> {
final ListenNotification _listenNotification; final ListenNotificationUseCase _listenNotification;
final Subscribe _subscribe; final SubscribeToNotificationTopicUseCase? _subscribe;
final Unsubscribe _unsubscribe; final UnsubscribeFromNotificationTopicUseCase? _unsubscribe;
final OnNotification? handleNotification; final OnNotification? handleNotification;
CloudmessagingCubit({ CloudMessagingCubit({
required ListenNotification listenNotification, required ListenNotificationUseCase listenNotification,
required Subscribe subscribe, SubscribeToNotificationTopicUseCase? subscribe,
required Unsubscribe unsubscribe, UnsubscribeFromNotificationTopicUseCase? unsubscribe,
this.handleNotification, this.handleNotification,
}) : _listenNotification = listenNotification, }) : _listenNotification = listenNotification,
_subscribe = subscribe, _subscribe = subscribe,
@ -53,7 +54,7 @@ class CloudmessagingCubit extends Cubit<CloudmessagingState> {
} }
} }
FutureOr<void> subscribe(String topic) => _subscribe.execute(topic); FutureOr<void> subscribe(String topic) => _subscribe?.execute(topic);
FutureOr<void> unsubscribe(String topic) => _unsubscribe.execute(topic); FutureOr<void> unsubscribe(String topic) => _unsubscribe?.execute(topic);
} }

View File

@ -0,0 +1,42 @@
import 'package:flutter/material.dart';
import 'package:wyatt_bloc_helper/wyatt_bloc_helper.dart';
import 'package:wyatt_cloud_messaging_bloc_base/src/src.dart';
class CloudMessagingWrapperScreen
extends CubitScreen<CloudMessagingCubit, CloudmessagingState> {
const CloudMessagingWrapperScreen({
required this.child,
required this.onNotification,
required this.listenNotificationUseCase,
this.subscribeToNotificationTopicUseCase,
this.unsubscribeFromNotificationTopicUseCase,
super.key,
});
final ListenNotificationUseCase listenNotificationUseCase;
final SubscribeToNotificationTopicUseCase?
subscribeToNotificationTopicUseCase;
final UnsubscribeFromNotificationTopicUseCase?
unsubscribeFromNotificationTopicUseCase;
final OnNotification onNotification;
final Widget child;
@override
CloudMessagingCubit create(BuildContext context) => CloudMessagingCubit(
listenNotification: listenNotificationUseCase,
subscribe: subscribeToNotificationTopicUseCase,
unsubscribe: unsubscribeFromNotificationTopicUseCase,
)..listenNotification();
@override
void onListen(BuildContext context, CloudmessagingState state) {
if (state.remoteNotification != null) {
onNotification.call(state.remoteNotification!);
}
}
@override
Widget onBuild(BuildContext context, CloudmessagingState state) => child;
}

View File

@ -16,4 +16,5 @@
export 'data/data.dart'; export 'data/data.dart';
export 'domain/domain.dart'; export 'domain/domain.dart';
export 'features/features.dart';
export 'features/notifications/bloc/cloud_messaging_cubit.dart'; export 'features/notifications/bloc/cloud_messaging_cubit.dart';

View File

@ -25,6 +25,9 @@ dependencies:
url: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ url: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/
name: wyatt_type_utils name: wyatt_type_utils
version: ^0.0.5 version: ^0.0.5
wyatt_bloc_helper:
hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/
version: 2.0.1

View File

@ -102,6 +102,7 @@ class CloudMessagingFirebaseDataSource extends CloudMessagingRemoteDataSource {
final notification = RemoteNotification( final notification = RemoteNotification(
title: message.notification?.title, title: message.notification?.title,
body: message.notification?.body, body: message.notification?.body,
data: message.data,
); );
final android = message.notification?.android; final android = message.notification?.android;

View File

@ -0,0 +1 @@
export './data/data_sources/cloud_messaging_firebase_data_source.dart';

View File

@ -20,3 +20,4 @@ library wyatt_cloud_messaging_bloc_firebase;
export 'package:wyatt_cloud_messaging_bloc_base/wyatt_cloud_messaging_bloc.dart'; export 'package:wyatt_cloud_messaging_bloc_base/wyatt_cloud_messaging_bloc.dart';
export 'src/cloud_messaging_bloc_firebase.dart'; export 'src/cloud_messaging_bloc_firebase.dart';
export 'src/src.dart';