Added notification logic and view api
This commit is contained in:
@@ -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()),
|
||||
],
|
||||
],
|
||||
),
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user