import 'dart:async'; import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/notification/firebase_notification_manger.dart'; import 'package:test_sa/controllers/notification/notification_manger.dart'; import 'package:test_sa/controllers/providers/api/all_requests_provider.dart'; import 'package:test_sa/controllers/providers/api/notifications_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/dashboard_latest/dashboard_provider.dart'; import 'package:test_sa/dashboard_latest/widgets/app_bar_widget.dart'; import 'package:test_sa/dashboard_latest/widgets/progress_fragment.dart'; import 'package:test_sa/dashboard_latest/widgets/requests_fragment.dart'; import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/models/enums/user_types.dart'; import 'package:test_sa/models/user.dart'; import 'package:test_sa/service_request_latest/request_detail_provider.dart'; import 'widgets/request_category_fragment.dart'; class DashboardView extends StatefulWidget { final VoidCallback onDrawerPress; const DashboardView({Key? key, required this.onDrawerPress}) : super(key: key); @override State createState() => _DashboardViewState(); } class _DashboardViewState extends State { int _currentPage = 0; bool isFCM = true; late User user; late SettingProvider settingProvider; late UserProvider userProvider; late AllRequestsProvider allRequestsProvider; late DashBoardProvider dashBoardProvider; late NotificationsProvider notificationsProvider; late ScrollController _scrollController; late DashBoardProvider _dashBoardProvider; @override void initState() { super.initState(); handleScroll(); getInitialData(); } void getRequests() { _dashBoardProvider.getDashBoardCount(usersType: userProvider.user!.type!); _dashBoardProvider.getRequestDetail(usersType: userProvider.user!.type!, status: _dashBoardProvider.tabs[_dashBoardProvider.currentListIndex].tag); } void getInitialData() { scheduleMicrotask(() async { userProvider = Provider.of(context, listen: false); settingProvider = Provider.of(context, listen: false); RequestDetailProvider requestDetailProvider = Provider.of(context, listen: false); allRequestsProvider = Provider.of(context, listen: false); _dashBoardProvider = Provider.of(context, listen: false); _dashBoardProvider.setTabs(userProvider.user!.type!, context); notificationsProvider = Provider.of(context, listen: false); user = userProvider.user!; getRequests(); // await requestDetailProvider.engineerRejectWorkOrder(id: '3', feedBack: 'Abcdef'); // await dashBoardProvider.getDashBoardCount(usersType: user.type!); // await getAllRequests(); if (isFCM) { FirebaseNotificationManger.initialized(context); NotificationManger.initialisation((notificationDetails) { FirebaseNotificationManger.handleMessage(context, json.decode(notificationDetails.payload!)); }, (id, title, body, payload) async {}); isFCM = false; } }); } // Future getAllRequests() async { // allRequestsProvider.isAllLoading = true; // allRequestsProvider.isFilterRequestLoading = true; // allRequestsProvider.currentListIndex = 0; // allRequestsProvider.filterRequest = null; // var tabs = RequestUtils.getTabs(userType: userProvider.user!.type!, context: context); // allRequestsProvider.status = tabs[0]['status']; // allRequestsProvider.getRequests(); // allRequestsProvider.pageNum = 1; // dashBoardProvider.getRequestDetail(usersType: userProvider.user!.type!, status: tabs[0]['status']); // allRequestsProvider.getFilterRequests(showLoader: true, status: tabs[0]['status']).whenComplete(() { // allRequestsProvider.requestDetailList = allRequestsProvider.filterRequest; // }); // allRequestsProvider.isAllLoading = false; // notificationsProvider.getSystemNotifications(user: userProvider.user!, resetProvider: true); // } void handleScroll() async { _scrollController = ScrollController(); _scrollController.addListener(() async { if (_scrollController.position.pixels == _scrollController.position.maxScrollExtent && !allRequestsProvider.isFilterRequestLoading) { allRequestsProvider.pageNum = allRequestsProvider.pageNum + 1; await allRequestsProvider.getFilterRequests(showLoader: false, status: allRequestsProvider.status); } }); } @override void dispose() { _scrollController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { bool isNurse = (Provider.of(context, listen: false).user!.type) == UsersTypes.normal_user; return Scaffold( // backgroundColor: AppColor.background(context), appBar: PreferredSize( preferredSize: const Size.fromHeight(kToolbarHeight), child: AppBarWidget( onDrawerPress: widget.onDrawerPress, )), body: RefreshIndicator( onRefresh: () async { getRequests(); return Future.delayed(const Duration(milliseconds: 250)); }, child: Scrollbar( controller: _scrollController, child: SingleChildScrollView( // physics: AlwaysScrollableScrollPhysics(), controller: _scrollController, child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [16.height, ProgressFragment(), 16.height, if (!isNurse) const RequestsFragment(), const RequestCategoryFragment()], ), ), ), ), ); } }