new branch

This commit is contained in:
2025-04-14 11:26:43 +07:00
parent 30ee4540ba
commit d5b323e158
64 changed files with 1001 additions and 300 deletions

View File

@@ -6,9 +6,11 @@ import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:go_router/go_router.dart';
import 'package:badges/badges.dart' as badges;
import 'package:persistent_bottom_nav_bar/persistent_bottom_nav_bar.dart';
import 'package:sfm_app/product/utils/permission_handler.dart';
import '../../product/permission/notification_permission.dart';
import '../../product/services/notification_services.dart';
import '../settings/profile/profile_model.dart';
@@ -46,20 +48,20 @@ class MainScreen extends StatefulWidget {
PersistentTabController controller = PersistentTabController(initialIndex: 0);
@pragma('vm:entry-point')
Future<void> firebaseMessagingBackgroundHandler(RemoteMessage message) async {
log("Full background message payload: ${message.toMap()}");
await Firebase.initializeApp();
final notificationServices = NotificationServices();
await notificationServices.initLocalNotifications(controller);
await notificationServices.showNotification(message);
log("Background message handled: ${message.data['title']}");
}
// @pragma('vm:entry-point')
// Future<void> firebaseMessagingBackgroundHandler(RemoteMessage message) async {
// log("Full background message payload: ${message.toMap()}");
// await Firebase.initializeApp();
// final notificationServices = NotificationServices();
// await notificationServices.initLocalNotifications(controller);
// await notificationServices.showNotification(message);
// log("Background message handled: ${message.data['title']}");
// }
class _MainScreenState extends State<MainScreen> with WidgetsBindingObserver {
APIServices apiServices = APIServices();
final NotificationServices notificationServices = NotificationServices();
// final NotificationServices notificationServices = NotificationServices();
late MainBloc mainBloc;
bool isVN = true;
bool isLight = true;
@@ -86,7 +88,7 @@ class _MainScreenState extends State<MainScreen> with WidgetsBindingObserver {
}
mainBloc.sinkIsVNIcon.add(isVN);
mainBloc.sinkThemeMode.add(isLight);
LocationPermissionRequest.instance.checkLocationPermission(context);
checkAndRequestPermission();
NotificationPermission.instance.checkNotificationPermission(context);
}
@@ -94,13 +96,38 @@ class _MainScreenState extends State<MainScreen> with WidgetsBindingObserver {
void initState() {
super.initState();
mainBloc = BlocProvider.of(context);
mainBloc.getFCMTokenAndPresentations();
WidgetsBinding.instance.addObserver(this);
initialCheck();
getBellNotification();
mainBloc.getUserProfile();
notificationServices.initLocalNotifications(controller);
notificationServices.firebaseInit(context);
NotificationServices().setupInteractMessage(controller);
FirebaseMessaging.instance.onTokenRefresh.listen((newToken) {
log("New FCM Token: $newToken");
// Gửi token mới lên server
mainBloc.sendNotificationToken(newToken);
});
FirebaseMessaging.onMessage.listen((RemoteMessage message) {
RemoteNotification? notification = message.notification;
AndroidNotification? android = message.notification?.android;
if (notification != null && android != null ) {
const AndroidNotificationDetails androidPlatformChannelSpecifics =
AndroidNotificationDetails(
'your channel id', 'your channel name',
importance: Importance.max,
priority: Priority.high,
ticker: 'ticker');
const NotificationDetails platformChannelSpecifics =
NotificationDetails(android: androidPlatformChannelSpecifics);
flutterLocalNotificationsPlugin.show(
notification.hashCode, notification.title, notification.body, platformChannelSpecifics,
);
}
});
// notificationServices.initLocalNotifications(controller);
// notificationServices.firebaseInit(context);
// NotificationServices().setupInteractMessage(controller);
}
@override
@@ -110,7 +137,6 @@ class _MainScreenState extends State<MainScreen> with WidgetsBindingObserver {
log("App Inactive");
} else if (state == AppLifecycleState.resumed) {
log("App Resumed");
LocationPermissionRequest.instance.checkLocationPermission(context);
} else if (state == AppLifecycleState.paused) {
log("App paused");
} else if (state == AppLifecycleState.detached) {
@@ -220,7 +246,7 @@ class _MainScreenState extends State<MainScreen> with WidgetsBindingObserver {
SizedBox(
width: context.lowValue,
),
Text(userSnapshot.data?.name ?? "")
Flexible( child: Text(userSnapshot.data?.name ?? ""))
],
);
}),