- wyatt_architecture@0.2.0+1 - wyatt_authentication_bloc@0.5.1+2 - wyatt_bloc_layout@0.1.2 - wyatt_cloud_messaging_bloc_base@0.1.1+2 - wyatt_cloud_messaging_bloc_firebase@0.1.0+2 - wyatt_crud_bloc@0.1.1+1 - wyatt_form_bloc@0.2.0+4 - wyatt_http_client@2.0.1 - wyatt_i18n@2.0.1 - wyatt_ui_components@0.3.0 - wyatt_ui_kit@3.2.0 - wyatt_ui_layout@0.1.2
Cloud Messaging BLoC Base
This package serves as an abstraction for managing notifications within Flutter applications. It does not include a built-in data source implementation. Therefore, it is essential to provide your own implementation or utilize one of our various implementations listed below:
This package enables you to easily integrate your data source, allowing the package to handle business logic, error management, and state logic seamlessly.
Features
- 🧐 Wyatt Architecture
- 🧱 Entities
RemoteNotification-> Contains notification innformations
- 🧊 Cubits, why make it complicated when you can make it simple?
- Goes to the essential
- 📐 Consistent
- Every class have same naming convention
Getting started
Simply add wyatt_cloud_messaging_bloc_base in pubspec.yaml , then
import 'package:wyatt_cloud_messaging_bloc_base/wyatt_cloud_messaging_bloc_base.dart';
Usage
Data source
The initial step involves furnishing a data source, presenting you with two options:
- You can select from our provided implementations, which are listed above.
- Alternatively, you can craft a custom implementation by extending the
CloudMessagingRemoteDataSourceclass and implementing all of its methods.
In this example, we will use the Firebase Cloud Messaging implementation.
getIt.registerLazySingleton<CloudMessagingRemoteDataSource>(
() => CloudMessagingFirebaseDataSource())
Here we use GetIt.
Repository
Do the same for the repository. This one is already developed, you just need to inject it.
getIt.registerLazySingleton<CloudMessagingRepository>(
() => CloudMessagingRepositoryImpl(
notificationRemoteDataSource: getIt(),
),
)
Use cases
Do the same for use cases. Select an inject the ones you need in your app. Here are avalaible use cases:
GetCloudMessagingTokenUsCaseInitCloudmessagingUseCaseListenCloudMessagingUseCaseRequestCloudMessagingPermissionUseCaseSubscribeToNotificationTopicUseCaseUnsubscribeFromNotificationTopicUseCase
Here is an example with some usecase.
getIt
..registerLazySingleton<ListenNotificationUseCase>(
() => ListenNotificationUseCase(
notificationRepository: getIt(),
),
)
..registerLazySingleton<GetCloudMessagingTokenUseCase>(
() => GetCloudMessagingTokenUseCase(
notificationRepository: getIt(),
),
)
..registerLazySingleton<RequestCloudMessagingPermissionUseCase>(
() => RequestCloudMessagingPermissionUseCase(
notificationRepository: getIt(),
),
);
Widgets
From this point onward, your task simply involves enveloping your app within the CloudMessagingWrapperScreen. Subsequently, you can proceed to implement your desired actions for handling incoming notifications.
Additional information
If necessary, you can access data sources, repositories, and use cases through getIt. Here's a helpful example:
abstract class CloudMessagingHelper {
static Future<void> initMessaging() async {
await getIt<RequestCloudMessagingPermissionUseCase>().call(null);
final token = await getIt<GetCloudMessagingTokenUseCase>().call(null);
if (token.isOk) {
await notifLocalDataSource.storeToken(token: token.ok!);
}
}
static dataProcess(String? path) {
if (PageEnum.values.where((element) => (element.path == path)).isNotEmpty) {
AppRouter.goRouterNavigatorKey.currentState?.context.push(path!);
}
}
}