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/widgets/app_bar_widget.dart'; import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/user.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/pages/land_page/dashboard_fragments/progress_fragment.dart'; import 'package:test_sa/new_views/pages/land_page/dashboard_fragments/requests_fragment.dart'; import 'package:test_sa/utilities/request_utils.dart'; import '../new_views/pages/land_page/dashboard_fragments/request_category_fragment.dart'; class DashboardView extends StatefulWidget { final VoidCallback onDrawerPress; const DashboardView({Key key, this.onDrawerPress}) : super(key: key); @override State createState() => _DashboardViewState(); } class _DashboardViewState extends State { int _currentPage = 0; bool isFCM = true; User user; SettingProvider settingProvider; UserProvider userProvider; AllRequestsProvider allRequestsProvider; NotificationsProvider notificationsProvider; ScrollController _scrollController; @override void initState() { super.initState(); handleScroll(); getInitialData(); } void getInitialData() { scheduleMicrotask(() async { userProvider = Provider.of(context, listen: false); settingProvider = Provider.of(context, listen: false); allRequestsProvider = Provider.of(context, listen: false); notificationsProvider = Provider.of(context, listen: false); user = userProvider.user; 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; 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) { return Scaffold( // backgroundColor: AppColor.background(context), appBar: PreferredSize( preferredSize: const Size.fromHeight(kToolbarHeight), child: AppBarWidget( onDrawerPress: widget.onDrawerPress, )), body: RefreshIndicator( onRefresh: () async { getInitialData(); 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: [ 14.height, ProgressFragment(), 25.height, SizedBox( height: 110.toScreenHeight, child: const RequestsFragment()), 16.height, const RequestCategoryFragment() ], ).paddingOnly(start: 16, end: 16, top: 0, bottom: 8), ), ), ), ); } }