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/l10n/app_en.arb b/lib/l10n/app_en.arb
index d76461ad..7b7ebad3 100644
--- a/lib/l10n/app_en.arb
+++ b/lib/l10n/app_en.arb
@@ -310,5 +310,6 @@
"requesterName" : "Requester Name",
"updateWorkOrder" : "Update Work Order",
"createPreventiveMaintenanceRequest" : "Create Preventive Maintenance Request",
- "createNewRequest" : "Create New Request"
+ "createNewRequest" : "Create New Request",
+ "calendar" : "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 ea36ea54..23978393 100644
--- a/lib/new_views/common_widgets/app_bottom_nav_bar.dart
+++ b/lib/new_views/common_widgets/app_bottom_nav_bar.dart
@@ -1,12 +1,13 @@
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
+import 'package:provider/provider.dart';
+import 'package:test_sa/controllers/providers/api/user_provider.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/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;
@@ -19,6 +20,7 @@ class AppBottomNavigationBar extends StatelessWidget {
@override
Widget build(BuildContext context) {
+ final user = Provider.of(context, listen: false).user;
return ClipRRect(
borderRadius: const BorderRadius.only(topLeft: Radius.circular(20.0), topRight: Radius.circular(20.0)),
child: Container(
@@ -39,7 +41,8 @@ class AppBottomNavigationBar extends StatelessWidget {
navBarItem(context, index: 0, iconName: "overview", label: context.translation.overview),
navBarItem(context, index: 1, iconName: "requests", label: context.translation.myRequests),
navBarItem(context, index: 2, iconName: "assets", label: context.translation.myAssets),
- navBarItem(context, index: 3, iconName: "message", label: context.translation.contactUs),
+ navBarItem(context, index: 3, iconName: "calendar2", label: context.translation.calendar),
+ if (user.type == UsersTypes.engineer) navBarItem(context, index: 4, iconName: "message", label: context.translation.contactUs),
],
currentIndex: selectedIndex,
onTap: onPressed,
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..ce98fd56
--- /dev/null
+++ b/lib/new_views/pages/land_page/calendar_page.dart
@@ -0,0 +1,140 @@
+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: [
+ TableCalendar(
+ firstDay: DateTime.utc(2010, 10, 16),
+ lastDay: DateTime.utc(2030, 3, 14),
+ focusedDay: DateTime.now(),
+ calendarFormat: calendarFormat,
+ weekendDays: const [],
+ headerStyle: HeaderStyle(
+ leftChevronIcon: null,
+ leftChevronMargin: EdgeInsets.zero,
+ leftChevronPadding: EdgeInsets.zero,
+ rightChevronMargin: EdgeInsets.zero,
+ rightChevronPadding: EdgeInsets.only(bottom: 16.toScreenHeight),
+ formatButtonVisible: false,
+ rightChevronIcon: const Icon(Icons.calendar_today, color: AppColor.neutral60, size: 18),
+ ),
+ ),
+ child,
+ ],
+ ).paddingOnly(start: 16, end: 16, top: 8, bottom: 8),
+ );
+ }
+}
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 242cc74f..3c687f09 100644
--- a/lib/new_views/pages/land_page/land_page.dart
+++ b/lib/new_views/pages/land_page/land_page.dart
@@ -2,17 +2,15 @@ import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
-import 'package:test_sa/extensions/int_extensions.dart';
-import 'package:test_sa/new_views/pages/land_page/home_app_bar.dart';
-import 'package:test_sa/new_views/pages/land_page/my_assets_page.dart';
-import 'package:test_sa/new_views/pages/land_page/my_request/my_requests_page.dart';
-import 'package:test_sa/views/pages/device_transfer/asset_search_screen.dart';
+import 'package:provider/provider.dart';
import 'package:test_sa/views/pages/user/land_page.dart' as old_page;
import 'package:test_sa/views/widgets/equipment/single_device_picker.dart';
+import '../../../controllers/providers/api/user_provider.dart';
+import '../../../models/enums/user_types.dart';
import '../../common_widgets/app_bottom_nav_bar.dart';
import '../../common_widgets/app_drawer.dart';
-import '../../common_widgets/app_floating_action_button.dart';
+import 'calendar_page.dart';
import 'contact_us_bottom_sheet.dart';
import 'dashboard_page.dart';
@@ -32,16 +30,18 @@ class _LandPageState extends State {
List _pages;
@override
- void initState() {
+ void didChangeDependencies() {
+ final user = Provider.of(context, listen: false).user;
_pages = [
DashboardPage(onDrawerPress: (() {
_scaffoldKey.currentState.isDrawerOpen ? _scaffoldKey.currentState.closeDrawer() : _scaffoldKey.currentState.openDrawer();
})),
- old_page.LandPage(),
- SingleDevicePicker(),
- MyRequestsPage(),
+ const old_page.LandPage(),
+ // const MyRequestsPage(),
+ const SingleDevicePicker(),
+ if (user.type == UsersTypes.engineer) const CalendarPage(),
];
- super.initState();
+ super.didChangeDependencies();
}
@override
@@ -67,12 +67,12 @@ class _LandPageState extends State {
},
child: Scaffold(
key: _scaffoldKey,
- drawer: AppDrawer(),
+ drawer: const AppDrawer(),
body: _pages[currentPageIndex],
bottomNavigationBar: AppBottomNavigationBar(
selectedIndex: currentPageIndex,
onPressed: (index) {
- if (index == 3) {
+ if (index == _pages.length) {
showModalBottomSheet(
context: context,
useSafeArea: true,
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 2f19d78f..591827a5 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -1053,6 +1053,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "5.3.0"
+ simple_gesture_detector:
+ dependency: transitive
+ description:
+ name: simple_gesture_detector
+ sha256: "86d08f85f1f58583b7b4b941d989f48ea6ce08c1724a1d10954a277c2ec36592"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.2.0"
sky_engine:
dependency: transitive
description: flutter
@@ -1138,6 +1146,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "3.1.0"
+ table_calendar:
+ dependency: "direct main"
+ description:
+ name: table_calendar
+ sha256: "7f1270313c0cdb245b583ed8518982c01d4a7e95869b3c30abcbae3b642c45d0"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.8"
term_glyph:
dependency: transitive
description:
diff --git a/pubspec.yaml b/pubspec.yaml
index 9379bdc4..3c61f20d 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -73,6 +73,7 @@ dependencies:
shimmer: ^2.0.0
flutter_advanced_switch: ^3.0.1
pie_chart: ^5.3.2
+ table_calendar: ^3.0.0
dev_dependencies:
flutter_test: