You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			146 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Dart
		
	
			
		
		
	
	
			146 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Dart
		
	
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/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<DashboardView> createState() => _DashboardViewState();
 | 
						|
}
 | 
						|
 | 
						|
class _DashboardViewState extends State<DashboardView> {
 | 
						|
  int _currentPage = 0;
 | 
						|
  bool isFCM = true;
 | 
						|
  late User user;
 | 
						|
 | 
						|
  late SettingProvider settingProvider;
 | 
						|
  late UserProvider userProvider;
 | 
						|
 | 
						|
  // late AllRequestsProvider allRequestsProvider;
 | 
						|
  late NotificationsProvider notificationsProvider;
 | 
						|
  late ScrollController _scrollController;
 | 
						|
  late DashBoardProvider _dashBoardProvider;
 | 
						|
 | 
						|
  @override
 | 
						|
  void initState() {
 | 
						|
    super.initState();
 | 
						|
    handleScroll();
 | 
						|
    getInitialData();
 | 
						|
  }
 | 
						|
 | 
						|
  void getRequests() {
 | 
						|
    _dashBoardProvider.setTabs(userType:userProvider.user!.type!,context: context);
 | 
						|
    _dashBoardProvider.getDashBoardCount(usersType: userProvider.user!.type!);
 | 
						|
    _dashBoardProvider.resetRequestDataList();
 | 
						|
    _dashBoardProvider.getRequestDetail(usersType: userProvider.user!.type!, status: _dashBoardProvider.tabs[_dashBoardProvider.currentListIndex].tag);
 | 
						|
  }
 | 
						|
 | 
						|
  void getInitialData() {
 | 
						|
    scheduleMicrotask(() async {
 | 
						|
      userProvider = Provider.of<UserProvider>(context, listen: false);
 | 
						|
      settingProvider = Provider.of<SettingProvider>(context, listen: false);
 | 
						|
      _dashBoardProvider = Provider.of<DashBoardProvider>(context, listen: false);
 | 
						|
 | 
						|
      notificationsProvider = Provider.of<NotificationsProvider>(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<void> 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 && !_dashBoardProvider.isDetailLoading) {
 | 
						|
        _dashBoardProvider.pageNum = _dashBoardProvider.pageNum + 1;
 | 
						|
        _dashBoardProvider.getRequestDetail(usersType: user.type!, showLoader: false, status: _dashBoardProvider.tabs[_dashBoardProvider.currentListIndex].tag);
 | 
						|
      }
 | 
						|
    });
 | 
						|
  }
 | 
						|
 | 
						|
  @override
 | 
						|
  void dispose() {
 | 
						|
    _scrollController.dispose();
 | 
						|
    super.dispose();
 | 
						|
  }
 | 
						|
 | 
						|
  @override
 | 
						|
  Widget build(BuildContext context) {
 | 
						|
    bool isNurse = (Provider.of<UserProvider>(context, listen: false).user!.type) == UsersTypes.normal_user;
 | 
						|
    print('user data is ${Provider.of<UserProvider>(context, listen: false).user?.toJson()}');
 | 
						|
    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()],
 | 
						|
            ),
 | 
						|
          ),
 | 
						|
        ),
 | 
						|
      ),
 | 
						|
    );
 | 
						|
  }
 | 
						|
}
 |