From 67a7fcfe54c569bfd92b013aec514110fe58ca47 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Wed, 8 Nov 2023 14:05:14 +0300 Subject: [PATCH] improvements. --- .../providers/api/all_requests_provider.dart | 47 ++++++++ lib/main.dart | 2 + .../pages/land_page/calendar_page.dart | 7 +- .../calender_fragments/monthly_fragment.dart | 113 ++++++++++-------- .../land_page/contact_us_bottom_sheet.dart | 80 +++++-------- 5 files changed, 143 insertions(+), 106 deletions(-) create mode 100644 lib/controllers/providers/api/all_requests_provider.dart diff --git a/lib/controllers/providers/api/all_requests_provider.dart b/lib/controllers/providers/api/all_requests_provider.dart new file mode 100644 index 00000000..20bf362e --- /dev/null +++ b/lib/controllers/providers/api/all_requests_provider.dart @@ -0,0 +1,47 @@ +import 'package:flutter/widgets.dart'; +import 'package:http/http.dart'; + +class AllRequestsProvider extends ChangeNotifier { + bool isLoading; + +// Future getAllRequests() async { +// if (isLoading == true) return -2; +// isLoading = true; +// if (serviceRequests?.isEmpty ?? false) notifyListeners(); +// Response response; +// try { +// Map body = {}; +// body.addAll(search.toMap()); +// body["pageNumber"] = (serviceRequests?.length ?? 0) ~/ pageItemNumber + 1; +// body["pageSize"] = pageItemNumber; +// +// response = await ApiManager.instance.post( +// URLs.getServiceRequests, +// body: body, +// ); +// +// stateCode = response.statusCode; +// if (response.statusCode >= 200 && response.statusCode < 300) { +// // client's request was successfully received +// List requestsListJson = json.decode(response.body)["data"]; +// List serviceRequestsPage = requestsListJson.map((request) => ServiceRequest.fromJson(request)).toList(); +// serviceRequests ??= []; +// serviceRequests.addAll(serviceRequestsPage); +// notifyListeners(); +// if (serviceRequestsPage.length == pageItemNumber) { +// nextPage = true; +// } else { +// nextPage = false; +// } +// } +// isLoading = false; +// notifyListeners(); +// return response.statusCode; +// } catch (error) { +// isLoading = false; +// stateCode = -1; +// notifyListeners(); +// return -1; +// } +// } +} diff --git a/lib/main.dart b/lib/main.dart index 2eaafa3c..060cdb56 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -6,6 +6,7 @@ import 'package:flutter/services.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:localization/localization.dart'; import 'package:provider/provider.dart'; +import 'package:test_sa/controllers/providers/api/all_requests_provider.dart'; import 'package:test_sa/controllers/providers/api/asset_transfer_provider.dart'; import 'package:test_sa/controllers/providers/api/comments_provider.dart'; import 'package:test_sa/controllers/providers/api/departments_provider.dart'; @@ -139,6 +140,7 @@ class MyApp extends StatelessWidget { ChangeNotifierProvider(create: (_) => SiteProvider()), ChangeNotifierProvider(create: (_) => HospitalsProvider()), ChangeNotifierProvider(create: (_) => AssetProvider()), + ChangeNotifierProvider(create: (_) => AllRequestsProvider()), ChangeNotifierProvider(create: (_) => ServiceRequestsProvider()), ChangeNotifierProvider(create: (_) => DepartmentsProvider()), ChangeNotifierProvider(create: (_) => NotificationsProvider()), diff --git a/lib/new_views/pages/land_page/calendar_page.dart b/lib/new_views/pages/land_page/calendar_page.dart index 22fd80e9..677815b9 100644 --- a/lib/new_views/pages/land_page/calendar_page.dart +++ b/lib/new_views/pages/land_page/calendar_page.dart @@ -44,9 +44,10 @@ class _CalendarPageState extends State with SingleTickerProviderSt "09:00 to 18:00".bodyText(context).custom(color: AppColor.neutral50), ], ).toShadowContainer, - ), + ).paddingOnly(start: 16, end: 16), 16.height, Container( + margin: const EdgeInsets.only(left: 16, right: 16), decoration: BoxDecoration(color: AppColor.neutral30, borderRadius: BorderRadius.circular(16)), child: TabBar( controller: _tabController, @@ -67,7 +68,7 @@ class _CalendarPageState extends State with SingleTickerProviderSt ), 8.height, TabBarView( - physics: const NeverScrollableScrollPhysics(), + //physics: const NeverScrollableScrollPhysics(), controller: _tabController, children: const [ MonthlyFragment(), @@ -76,7 +77,7 @@ class _CalendarPageState extends State with SingleTickerProviderSt ], ).expanded, ], - ).paddingAll(16), + ), ), ); } diff --git a/lib/new_views/pages/land_page/calender_fragments/monthly_fragment.dart b/lib/new_views/pages/land_page/calender_fragments/monthly_fragment.dart index 10152d24..3928e598 100644 --- a/lib/new_views/pages/land_page/calender_fragments/monthly_fragment.dart +++ b/lib/new_views/pages/land_page/calender_fragments/monthly_fragment.dart @@ -18,64 +18,71 @@ class MonthlyFragment extends StatefulWidget { class _MonthlyFragmentState extends State { PageController _controller; + @override Widget build(BuildContext context) { - return Card( - child: SingleChildScrollView( - child: Column( - children: [ - TableCalendar( - firstDay: DateTime.utc(2010, 10, 16), - lastDay: DateTime.utc(2030, 3, 14), - focusedDay: DateTime.now(), - calendarFormat: CalendarFormat.month, - weekendDays: const [], - onCalendarCreated: (controller) { - _controller = controller; + return SingleChildScrollView( + //physics: BouncingScrollPhysics(), + padding: const EdgeInsets.all(16), + child: Column( + children: [ + TableCalendar( + firstDay: DateTime.utc(2010, 10, 16), + lastDay: DateTime.utc(2030, 3, 14), + focusedDay: DateTime.now(), + calendarFormat: CalendarFormat.month, + weekendDays: const [], + availableGestures: AvailableGestures.none, + onCalendarCreated: (controller) { + _controller = controller; + }, + calendarBuilders: CalendarBuilders( + headerTitleBuilder: (context, dateTime) => CalendarHeader(dateFormat: DateFormat("MMMM, yyyy"), dateTime: dateTime), + dowBuilder: (context, dateTime) { + final day = DateFormat("EE").format(dateTime).toUpperCase(); + return Align(alignment: Alignment.center, child: day.bodyText(context).custom(color: AppColor.neutral50)); + }, + defaultBuilder: (context, dateTime, _) { + final day = DateFormat("d").format(dateTime); + return CalendarDaysCard(day: day); }, - calendarBuilders: CalendarBuilders( - headerTitleBuilder: (context, dateTime) => CalendarHeader(dateFormat: DateFormat("MMMM, yyyy"), dateTime: dateTime), - dowBuilder: (context, dateTime) { - final day = DateFormat("EE").format(dateTime).toUpperCase(); - return Align(alignment: Alignment.center, child: day.bodyText(context).custom(color: AppColor.neutral50)); - }, - defaultBuilder: (context, dateTime, _) { - final day = DateFormat("d").format(dateTime); - return CalendarDaysCard(day: day); - }, - ), - daysOfWeekHeight: 35.toScreenHeight, - headerStyle: const HeaderStyle(leftChevronVisible: false, rightChevronVisible: false, formatButtonVisible: false), - calendarStyle: CalendarStyle( - isTodayHighlighted: false, - defaultTextStyle: AppTextStyles.bodyText, - defaultDecoration: const BoxDecoration(shape: BoxShape.circle, color: AppColor.neutral30), - ), ), - Column( - mainAxisSize: MainAxisSize.min, - children: [ - 16.height, - Row( - children: [ - const CircleAvatar(backgroundColor: AppColor.primary40, radius: 8), - 8.width, - "My Requests".heading6(context), - ], - ), - 16.height, - Row( - children: [ - const CircleAvatar(backgroundColor: AppColor.green50, radius: 8), - 8.width, - "My Team Requests".heading6(context), - ], - ), - ], + daysOfWeekHeight: 35.toScreenHeight, + headerStyle: const HeaderStyle( + leftChevronVisible: false, + rightChevronVisible: false, + formatButtonVisible: false, + headerPadding: EdgeInsets.all(0), ), - ], - ).paddingOnly(start: 16, end: 16, top: 8, bottom: 8), - ), + calendarStyle: CalendarStyle( + isTodayHighlighted: false, + defaultTextStyle: AppTextStyles.bodyText, + defaultDecoration: const BoxDecoration(shape: BoxShape.circle, color: AppColor.neutral30), + ), + ), + Column( + mainAxisSize: MainAxisSize.min, + children: [ + 16.height, + Row( + children: [ + const CircleAvatar(backgroundColor: AppColor.primary40, radius: 8), + 8.width, + "My Requests".heading6(context), + ], + ), + 16.height, + Row( + children: [ + const CircleAvatar(backgroundColor: AppColor.green50, radius: 8), + 8.width, + "My Team Requests".heading6(context), + ], + ), + ], + ), + ], + ).toShadowContainer, ); } } diff --git a/lib/new_views/pages/land_page/contact_us_bottom_sheet.dart b/lib/new_views/pages/land_page/contact_us_bottom_sheet.dart index 1cf153fa..1bb9ce2b 100644 --- a/lib/new_views/pages/land_page/contact_us_bottom_sheet.dart +++ b/lib/new_views/pages/land_page/contact_us_bottom_sheet.dart @@ -2,6 +2,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.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/enums/translation_keys.dart'; import '../../app_style/app_color.dart'; @@ -12,7 +14,6 @@ class ContactUsBottomSheet extends StatelessWidget { @override Widget build(BuildContext context) { return Container( - height: 300.toScreenHeight, clipBehavior: Clip.antiAlias, decoration: BoxDecoration( color: Theme.of(context).scaffoldBackgroundColor, @@ -23,75 +24,54 @@ class ContactUsBottomSheet extends StatelessWidget { ), padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 8.toScreenHeight), child: Column( + mainAxisSize: MainAxisSize.min, children: [ Container( width: 40.toScreenWidth, height: 5.toScreenHeight, decoration: BoxDecoration(color: AppColor.neutral40, borderRadius: BorderRadius.circular(30)), ), + 16.height, Align( alignment: AlignmentDirectional.centerStart, - child: Padding( - padding: EdgeInsets.symmetric(vertical: 16.toScreenHeight), - child: Text( - context.translation.contactUs, - style: Theme.of(context).textTheme.titleLarge?.copyWith(fontWeight: FontWeight.w600), - ), + child: Text( + context.translation.contactUs, + style: AppTextStyles.heading3.copyWith(fontWeight: FontWeight.w600, color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), ), ), + 16.height, Row( children: [ - Expanded(child: _ContactCard(iconName: "phone", title: context.translation.callUs, subtitle: "+966 546345567")), + contactItem(context.isDark, "phone", context.translation.callUs, "+966 546345567").onPress(() { }).expanded, 16.width, - Expanded( - child: _ContactCard( - iconName: "whatsapp", - title: context.translation.liveChat, - subtitle: context.translation.openWhatsapp, - ), - ), + contactItem(context.isDark, "whatsapp", context.translation.liveChat, context.translation.openWhatsapp).onPress(() {}).expanded, ], ), + 32.height, ], ), ); } -} - -class _ContactCard extends StatelessWidget { - final String iconName, title, subtitle; - const _ContactCard({ - Key key, - @required this.iconName, - @required this.title, - @required this.subtitle, - }) : super(key: key); - @override - Widget build(BuildContext context) { - return Card( - child: Padding( - padding: EdgeInsets.all(16.toScreenWidth), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SvgPicture.asset( - "assets/images/$iconName.svg", - width: 32.toScreenWidth, - color: context.isDark ? AppColor.primary40 : AppColor.primary70, - ), - 30.height, - Text( - title, - style: Theme.of(context).textTheme.titleLarge?.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), - ), - Text( - subtitle, - style: Theme.of(context).textTheme.bodyMedium?.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20), - ), - ], + Widget contactItem(bool isDark, String iconName, String title, String subtitle) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SvgPicture.asset( + "assets/images/$iconName.svg", + width: 32.toScreenWidth, + color: isDark ? AppColor.primary40 : AppColor.primary70, ), - ), - ); + 30.height, + Text( + title, + style: AppTextStyles.heading6.copyWith(color: isDark ? AppColor.neutral30 : AppColor.neutral50), + ), + Text( + subtitle, + style: AppTextStyles.bodyText.copyWith(color: isDark ? AppColor.neutral10 : AppColor.neutral20), + ), + ], + ).toShadowContainer; } }