Refactor loading and error handling in DesktopHomePage; improve notification click handling in service worker
This commit is contained in:
@@ -21,26 +21,32 @@ class DesktopHomePage extends StatelessWidget {
|
||||
const DesktopNavigationWidget(
|
||||
currentIndex: 0, // Home index
|
||||
),
|
||||
Expanded(
|
||||
child: Consumer<HomeViewModel>(
|
||||
Consumer<HomeViewModel>(
|
||||
builder: (context, homeViewModel, child) {
|
||||
if (homeViewModel.isLoading) {
|
||||
return const Center(
|
||||
return const Expanded(
|
||||
child: Center(
|
||||
child: CircularProgressIndicator(
|
||||
color: AppColors.secondary50,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
if (homeViewModel.errorMessage != null) {
|
||||
return Center(child: Text(homeViewModel.errorMessage!));
|
||||
return Expanded(
|
||||
child: Center(child: Text(homeViewModel.errorMessage!)),
|
||||
);
|
||||
}
|
||||
|
||||
if (homeViewModel.tenderApprovalsStateResponse != null &&
|
||||
homeViewModel.data != null &&
|
||||
homeViewModel.feedbackStats != null) {
|
||||
return SafeArea(
|
||||
return Expanded(
|
||||
child: SingleChildScrollView(
|
||||
child: SizedBox(
|
||||
width: double.infinity,
|
||||
child: Center(
|
||||
child: SizedBox(
|
||||
width: 780,
|
||||
child: Column(
|
||||
@@ -68,16 +74,15 @@ class DesktopHomePage extends StatelessWidget {
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
return const Center(
|
||||
child: CircularProgressIndicator(
|
||||
color: AppColors.secondary50,
|
||||
),
|
||||
child: CircularProgressIndicator(color: AppColors.secondary50),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
|
||||
@@ -97,6 +97,36 @@ class _MobileNotificationPageState extends State<MobileNotificationPage>
|
||||
],
|
||||
),
|
||||
SizedBox(height: 12.0.h()),
|
||||
Padding(
|
||||
padding: EdgeInsetsDirectional.only(end: 24.0.w()),
|
||||
child: Align(
|
||||
alignment: Alignment.centerRight,
|
||||
child: InkWell(
|
||||
onTap: () {
|
||||
viewModel.markAllAsRead(context);
|
||||
},
|
||||
borderRadius: BorderRadius.circular(99),
|
||||
child: Container(
|
||||
width: 132.0.w(),
|
||||
height: 32.0.h(),
|
||||
decoration: BoxDecoration(
|
||||
color: AppColors.primary20,
|
||||
borderRadius: BorderRadius.circular(99),
|
||||
),
|
||||
child: Center(
|
||||
child: Text(
|
||||
NotificationStrings.markAllAsReadButton,
|
||||
style: TextStyle(
|
||||
fontSize: 14.0.sp(),
|
||||
fontWeight: FontWeight.w500,
|
||||
color: AppColors.mainBlue,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: TabBarView(
|
||||
controller: controller,
|
||||
|
||||
@@ -14,25 +14,49 @@ firebase.initializeApp({
|
||||
const messaging = firebase.messaging();
|
||||
|
||||
// Handle background messages
|
||||
messaging.onBackgroundMessage(async (payload) => {
|
||||
// messaging.onBackgroundMessage(async (payload) => {
|
||||
|
||||
const notificationTitle = payload.notification.title;
|
||||
const notificationOptions = {
|
||||
body: payload.notification.body,
|
||||
badge: '/icons/Icon-192.svg',
|
||||
icon: '/icons/notification.svg',
|
||||
data: payload.data,
|
||||
click_action: payload.notification.click_action,
|
||||
};
|
||||
// const notificationTitle = payload.notification.title;
|
||||
// const notificationOptions = {
|
||||
// body: payload.notification.body,
|
||||
// badge: '/icons/Icon-192.svg',
|
||||
// icon: '/icons/notification.svg',
|
||||
// data: payload.data,
|
||||
// click_action: payload.notification.click_action,
|
||||
// };
|
||||
|
||||
self.registration.showNotification(notificationTitle, notificationOptions);
|
||||
});
|
||||
// self.registration.showNotification(notificationTitle, notificationOptions);
|
||||
// });
|
||||
|
||||
// Open or focus the app when a notification is clicked
|
||||
self.addEventListener('notificationclick', (event) => {
|
||||
event.notification.close();
|
||||
const targetUrl = 'https://app.opplens.com/notification';
|
||||
|
||||
// Get the URL from the data payload, defaulting to the notification page
|
||||
const urlToOpen = event.notification.data?.url || '/notification';
|
||||
const baseUrl = 'https://app.opplens.com';
|
||||
const targetUrl = urlToOpen.startsWith('http') ? urlToOpen : `${baseUrl}${urlToOpen}`;
|
||||
|
||||
console.log('Opening URL:', targetUrl);
|
||||
|
||||
event.waitUntil(
|
||||
self.clients.openWindow(targetUrl)
|
||||
clients.matchAll({
|
||||
type: 'window',
|
||||
includeUncontrolled: true,
|
||||
}).then((clientList) => {
|
||||
// Find an open client (any tab/window belonging to your site)
|
||||
const focusedClient = clientList.find(client => {
|
||||
return new URL(client.url).origin === location.origin;
|
||||
});
|
||||
|
||||
if (focusedClient) {
|
||||
// If a client is open, navigate it to the new URL and focus it
|
||||
focusedClient.navigate(urlToOpen);
|
||||
return focusedClient.focus();
|
||||
} else {
|
||||
// Otherwise, open a new window
|
||||
return clients.openWindow(targetUrl);
|
||||
}
|
||||
})
|
||||
);
|
||||
});
|
||||
Reference in New Issue
Block a user