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; @override void initState() { super.initState(); getInitialData(); } void getInitialData() { scheduleMicrotask(() async { userProvider = Provider.of(context, listen: false); settingProvider = Provider.of(context, listen: false); allRequestsProvider = 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); Future.wait([ allRequestsProvider.getRequests(), allRequestsProvider.getFilterRequests(pagination: false, status: tabs[0]['status']), ]).whenComplete(() { allRequestsProvider.isAllLoading = false; }); print('user provider user data is ${userProvider.user.type}'); await notificationsProvider.getSystemNotifications(user: userProvider.user, resetProvider: true); } @override void 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 { await getInitialData(); return Future.delayed(const Duration(milliseconds: 250)); }, child: SingleChildScrollView( child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ Text( context.translation.welcome, style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20), ), Text( user == null ? "" : (user?.username ?? ""), style: AppTextStyles.heading2.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50, fontWeight: FontWeight.w600), ), // 24.height, ProgressFragment(), 35.height, SizedBox(height: 105.toScreenHeight, child: const RequestsFragment()), const RequestCategoryFragment() ], ).paddingOnly(start: 16, end: 16, top: 0, bottom: 8), ], ), ), ), ); } }