diff --git a/assets/images/calendar2.svg b/assets/images/calendar2.svg
new file mode 100644
index 00000000..c12d08b4
--- /dev/null
+++ b/assets/images/calendar2.svg
@@ -0,0 +1,11 @@
+
diff --git a/lib/l10n/app_ar.arb b/lib/l10n/app_ar.arb
index 9523a7d9..187e9b99 100644
--- a/lib/l10n/app_ar.arb
+++ b/lib/l10n/app_ar.arb
@@ -306,5 +306,6 @@
"requesterName" : "اسم الطالب",
"updateWorkOrder" : "تعديل طلب العمل",
"createPreventiveMaintenanceRequest" : "إنشاء طلب صيانة وقائية",
- "createNewRequest" : "إنشاء طلب جديد"
+ "createNewRequest" : "إنشاء طلب جديد",
+ "calendar" : "التقويم"
}
\ No newline at end of file
diff --git a/lib/new_views/common_widgets/app_bottom_nav_bar.dart b/lib/new_views/common_widgets/app_bottom_nav_bar.dart
index 612eb60b..ab00a2fa 100644
--- a/lib/new_views/common_widgets/app_bottom_nav_bar.dart
+++ b/lib/new_views/common_widgets/app_bottom_nav_bar.dart
@@ -8,8 +8,6 @@ import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/models/enums/user_types.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
-import '../../models/enums/translation_keys.dart';
-
class AppBottomNavigationBar extends StatelessWidget {
final Function(int index) onPressed;
final int selectedIndex;
@@ -22,7 +20,7 @@ class AppBottomNavigationBar extends StatelessWidget {
@override
Widget build(BuildContext context) {
- bool isEngineer = (Provider.of(context).user.type) == UsersTypes.engineer;
+ bool isEngineer = (Provider.of(context, listen: false).user.type) == UsersTypes.engineer;
return ClipRRect(
borderRadius: const BorderRadius.only(topLeft: Radius.circular(20.0), topRight: Radius.circular(20.0)),
child: Container(
diff --git a/lib/new_views/pages/land_page/calendar_page.dart b/lib/new_views/pages/land_page/calendar_page.dart
new file mode 100644
index 00000000..3c254387
--- /dev/null
+++ b/lib/new_views/pages/land_page/calendar_page.dart
@@ -0,0 +1,150 @@
+import 'package:flutter/material.dart';
+import 'package:table_calendar/table_calendar.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/new_views/app_style/app_color.dart';
+
+import '../../common_widgets/default_app_bar.dart';
+
+class CalendarPage extends StatefulWidget {
+ const CalendarPage({Key key}) : super(key: key);
+
+ @override
+ State createState() => _CalendarPageState();
+}
+
+class _CalendarPageState extends State with SingleTickerProviderStateMixin {
+ TabController _tabController;
+
+ @override
+ void initState() {
+ super.initState();
+ _tabController = TabController(length: 3, vsync: this);
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ appBar: const DefaultAppBar(title: ""),
+ body: Column(
+ mainAxisSize: MainAxisSize.min,
+ children: [
+ Card(
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.stretch,
+ children: [
+ "My Shift".heading5(context),
+ 8.height,
+ "Sunday to Thursday".bodyText(context),
+ "09:00 to 18:00".bodyText(context).custom(color: AppColor.neutral50),
+ ],
+ ).paddingAll(16),
+ ),
+ 16.height,
+ Container(
+ decoration: BoxDecoration(color: AppColor.neutral30, borderRadius: BorderRadius.circular(16)),
+ child: TabBar(
+ controller: _tabController,
+ padding: EdgeInsets.zero,
+ labelColor: AppColor.neutral60,
+ unselectedLabelColor: AppColor.neutral20,
+ indicatorPadding: const EdgeInsets.all(4),
+ indicator: BoxDecoration(color: Theme.of(context).cardColor, borderRadius: BorderRadius.circular(13)),
+ onTap: (index) {
+ setState(() {});
+ },
+ tabs: [
+ Tab(text: "Monthly", height: 57.toScreenHeight),
+ Tab(text: "Weekly", height: 57.toScreenHeight),
+ Tab(text: "Daily", height: 57.toScreenHeight),
+ ],
+ ),
+ ),
+ 8.height,
+ TabBarView(
+ physics: const NeverScrollableScrollPhysics(),
+ controller: _tabController,
+ children: [
+ CalendarCard(
+ calendarFormat: CalendarFormat.month,
+ child: Column(
+ 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),
+ ],
+ ),
+ ],
+ ),
+ ),
+ CalendarCard(
+ calendarFormat: CalendarFormat.week,
+ child: Column(
+ children: [
+ const Divider().defaultStyle(context),
+ ],
+ ),
+ ),
+ Container(),
+ ],
+ ).expanded,
+ ],
+ ).paddingAll(16),
+ );
+ }
+}
+
+class CalendarCard extends StatelessWidget {
+ final CalendarFormat calendarFormat;
+ final Widget child;
+ const CalendarCard({this.calendarFormat, this.child, Key key}) : super(key: key);
+
+ @override
+ Widget build(BuildContext context) {
+ return Card(
+ child: Column(
+ children: [
+ SingleChildScrollView(
+ child: TableCalendar(
+ firstDay: DateTime.utc(2010, 10, 16),
+ lastDay: DateTime.utc(2030, 3, 14),
+ focusedDay: DateTime.now(),
+ calendarFormat: calendarFormat,
+ weekendDays: const [],
+ calendarStyle: CalendarStyle(
+ isTodayHighlighted: false,
+ cellMargin: const EdgeInsets.all(8),
+ cellPadding: EdgeInsets.zero,
+ defaultTextStyle: AppTextStyles.bodyText,
+ defaultDecoration: const BoxDecoration(shape: BoxShape.circle, color: AppColor.neutral30),
+ ),
+ headerStyle: HeaderStyle(
+ leftChevronIcon: null,
+ leftChevronMargin: EdgeInsets.zero,
+ leftChevronPadding: EdgeInsets.zero,
+ rightChevronMargin: EdgeInsets.zero,
+ formatButtonVisible: false,
+ rightChevronPadding: EdgeInsets.only(bottom: 16.toScreenHeight),
+ rightChevronIcon: const Icon(Icons.calendar_today, color: AppColor.neutral60, size: 18),
+ titleTextStyle: AppTextStyles.heading5,
+ ),
+ ),
+ ).expanded,
+ child,
+ ],
+ ).paddingOnly(start: 16, end: 16, top: 8, bottom: 8),
+ );
+ }
+}
diff --git a/lib/new_views/pages/land_page/dashboard_fragments/progress_fragment.dart b/lib/new_views/pages/land_page/dashboard_fragments/progress_fragment.dart
index 89de3701..3b037be6 100644
--- a/lib/new_views/pages/land_page/dashboard_fragments/progress_fragment.dart
+++ b/lib/new_views/pages/land_page/dashboard_fragments/progress_fragment.dart
@@ -1,11 +1,54 @@
import 'package:flutter/material.dart';
+import 'package:pie_chart/pie_chart.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/new_views/app_style/app_color.dart';
+import 'package:test_sa/views/app_style/colors.dart';
class ProgressFragment extends StatelessWidget {
- ProgressFragment({Key key}) : super(key: key);
+ const ProgressFragment({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
- // TODO: implement build
- return Container();
+ const Map statuses = {
+ "Completed": 12,
+ "In Progress": 12,
+ "Open": 12,
+ };
+ return Column(
+ children: [
+ Card(
+ child: Stack(
+ alignment: Alignment.center,
+ children: [
+ PieChart(
+ dataMap: statuses,
+ animationDuration: const Duration(milliseconds: 800),
+ chartRadius: 190.toScreenWidth,
+ colorList: [AColors.statusGreen, AColors.statusBlue, AColors.statusYellowLight],
+ initialAngleInDegree: 270,
+ chartType: ChartType.ring,
+ ringStrokeWidth: 40.toScreenWidth,
+ legendOptions: const LegendOptions(showLegends: false),
+ chartValuesOptions: ChartValuesOptions(
+ chartValueBackgroundColor: Colors.transparent,
+ chartValueStyle: AppTextStyles.heading6.copyWith(color: AppColor.neutral20),
+ showChartValuesOutside: true,
+ ),
+ ),
+ Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ mainAxisSize: MainAxisSize.min,
+ children: [
+ "Total".heading5(context),
+ "20".heading6(context).custom(color: AppColor.neutral20),
+ ],
+ )
+ ],
+ ).paddingAll(23),
+ ),
+ ],
+ ).paddingOnly(start: 16, end: 16);
}
}
diff --git a/lib/new_views/pages/land_page/dashboard_page.dart b/lib/new_views/pages/land_page/dashboard_page.dart
index d359cd1c..c952968a 100644
--- a/lib/new_views/pages/land_page/dashboard_page.dart
+++ b/lib/new_views/pages/land_page/dashboard_page.dart
@@ -3,10 +3,7 @@ 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 'package:test_sa/new_views/app_style/app_color.dart';
-import 'package:test_sa/new_views/common_widgets/app_drawer.dart';
-import 'package:test_sa/new_views/common_widgets/app_floating_action_button.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/recent_activites_fragment.dart';
import 'package:test_sa/new_views/pages/land_page/dashboard_fragments/requests_fragment.dart';
@@ -122,7 +119,7 @@ class _DashboardPageState extends State {
onPageChanged: (index) => setState(() => _currentPage = index),
children: [
RequestsFragment(),
- ProgressFragment(),
+ const ProgressFragment(),
RecentActivitiesFragment(),
],
).expanded,
diff --git a/lib/new_views/pages/land_page/land_page.dart b/lib/new_views/pages/land_page/land_page.dart
index ef9bbc24..acac87d3 100644
--- a/lib/new_views/pages/land_page/land_page.dart
+++ b/lib/new_views/pages/land_page/land_page.dart
@@ -45,7 +45,7 @@ class _LandPageState extends State {
@override
Widget build(BuildContext context) {
if (_userProvider == null) {
- _userProvider = Provider.of(context);
+ _userProvider = Provider.of(context, listen: false);
_pages = [
DashboardPage(onDrawerPress: (() {
_scaffoldKey.currentState.isDrawerOpen ? _scaffoldKey.currentState.closeDrawer() : _scaffoldKey.currentState.openDrawer();
@@ -78,7 +78,7 @@ class _LandPageState extends State {
},
child: Scaffold(
key: _scaffoldKey,
- drawer: AppDrawer(),
+ drawer: const AppDrawer(),
body: _pages[currentPageIndex],
bottomNavigationBar: AppBottomNavigationBar(
selectedIndex: currentPageIndex,
diff --git a/lib/new_views/pages/land_page/my_request/my_requests_page.dart b/lib/new_views/pages/land_page/my_request/my_requests_page.dart
index c40406d5..7c9b8179 100644
--- a/lib/new_views/pages/land_page/my_request/my_requests_page.dart
+++ b/lib/new_views/pages/land_page/my_request/my_requests_page.dart
@@ -1,41 +1,36 @@
import 'package:flutter/material.dart';
import 'package:test_sa/extensions/context_extension.dart';
-import 'package:test_sa/models/enums/translation_keys.dart';
import '../../../app_style/app_color.dart';
import '../../../common_widgets/app_search_field.dart';
class MyRequestsPage extends StatelessWidget {
- const MyRequestsPage({Key key}) : super(key: key);
-
+ const MyRequestsPage({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
- return Scaffold(
+ return Scaffold(
appBar: AppBar(
-
leadingWidth: 0,
title: Padding(
padding: const EdgeInsets.only(bottom: 10),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
- Expanded(child: SizedBox(
- height: 50,
- child: AppSearchField())),
- SizedBox(width: 20,),
- Text(context.translation.filter, style: TextStyle(
- color: AppColor.primary50,
- fontSize: Theme.of(context).textTheme.bodySmall.fontSize,
- fontWeight: FontWeight.w500
- ),)
+ const Expanded(child: SizedBox(height: 50, child: AppSearchField())),
+ const SizedBox(
+ width: 20,
+ ),
+ Text(
+ context.translation.filter,
+ style: TextStyle(color: AppColor.primary50, fontSize: Theme.of(context).textTheme.bodySmall.fontSize, fontWeight: FontWeight.w500),
+ )
],
),
),
),
-
- body: TabBarView(
- children: const [
+ body: const TabBarView(
+ children: [
Center(
child: Text(""),
),
diff --git a/pubspec.lock b/pubspec.lock
index 22d8f886..591827a5 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -877,6 +877,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "5.1.0"
+ pie_chart:
+ dependency: "direct main"
+ description:
+ name: pie_chart
+ sha256: "5dba6d0eb4718e8ed00a9079361cd8947c3f84ac5a5d76f05a27f4ec5e27589e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "5.3.2"
platform:
dependency: transitive
description:
diff --git a/pubspec.yaml b/pubspec.yaml
index bfb88adc..aa94560a 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -72,6 +72,7 @@ dependencies:
lottie: ^2.3.0
shimmer: ^2.0.0
flutter_advanced_switch: ^3.0.1
+ pie_chart: ^5.3.2
table_calendar: ^3.0.8
dev_dependencies: