Added notification logic and view api

This commit is contained in:
llsajjad
2025-09-22 16:05:08 +03:30
parent 2e2718a92e
commit cfc61daf71
23 changed files with 1944 additions and 152 deletions
@@ -1,6 +1,8 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:tm_app/core/theme/colors.dart';
import 'package:tm_app/core/utils/size_config.dart';
import 'package:tm_app/view_models/notification_view_model.dart';
import 'package:tm_app/views/notification/strings/notification_strings.dart';
import 'package:tm_app/views/shared/tender_app_bar.dart';
@@ -19,21 +21,38 @@ class MobileNotificationPage extends StatefulWidget {
class _MobileNotificationPageState extends State<MobileNotificationPage>
with SingleTickerProviderStateMixin {
late TabController controller;
final ScrollController _scrollController = ScrollController();
@override
void initState() {
super.initState();
controller = TabController(length: 3, vsync: this);
_scrollController.addListener(() {
final viewModel = context.read<NotificationViewModel>();
if (_scrollController.position.pixels >=
_scrollController.position.maxScrollExtent - 100 &&
!viewModel.isLoading &&
viewModel.hasMoreData) {
viewModel.getNotifications(
page: viewModel.currentPage + 1,
isMobile: true,
);
}
});
}
@override
void dispose() {
controller.dispose();
_scrollController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
final viewModel = context.watch<NotificationViewModel>(); // ✅ وصل به ویومدل
return Scaffold(
backgroundColor: AppColors.backgroundColor,
appBar: tenderMobileAppBar(title: NotificationStrings.notificationTitle),
@@ -53,7 +72,7 @@ class _MobileNotificationPageState extends State<MobileNotificationPage>
child: Align(
alignment: Alignment.centerRight,
child: InkWell(
onTap: () {},
onTap: viewModel.markAllAsRead, // ✅ مثل دسکتاپ/تبلت
borderRadius: BorderRadius.circular(99),
child: Container(
width: 132.0.w(),
@@ -80,13 +99,18 @@ class _MobileNotificationPageState extends State<MobileNotificationPage>
Expanded(
child: TabBarView(
controller: controller,
children: const [
NotificationAllTab(),
NotificationUnreadTab(),
NotificationImportantTab(),
children: [
NotificationAllTab(scrollController: _scrollController),
NotificationUnreadTab(scrollController: _scrollController),
NotificationImportantTab(scrollController: _scrollController),
],
),
),
if (viewModel.isLoading) ...[
SizedBox(height: 10.0.h()),
const Center(child: CircularProgressIndicator()),
SizedBox(height: 10.0.h()),
],
],
),
);