Merge remote-tracking branch 'origin/main_design2.0' into main_design2.0

# Conflicts:
#	lib/l10n/app_en.arb
#	lib/new_views/pages/land_page/dashboard_fragments/requests_fragment.dart
main_design2.0
Sikander Saleem 2 years ago
commit 3725adb0aa

@ -13,6 +13,7 @@ class AllRequestsProvider extends ChangeNotifier {
bool isCloseLoading = false;
bool isOverdueLoading = false;
bool isHighPriorityLoading = false;
bool isCalendarLoading = false;
int stateCode;
@ -22,6 +23,7 @@ class AllRequestsProvider extends ChangeNotifier {
AllRequestsAndCount closeRequests;
AllRequestsAndCount overdueRequests;
AllRequestsAndCount highPriorityRequests;
AllRequestsAndCount calendarRequests;
void getRequests() {
getHighPriorityRequests();
@ -61,6 +63,38 @@ class AllRequestsProvider extends ChangeNotifier {
}
}
Future<int> getCalenderRequests({@required DateTime from, DateTime to}) async {
if (isCalendarLoading == true) return -2;
isCalendarLoading = true;
if (isCalendarLoading == null) notifyListeners();
Response response;
try {
Map<String, dynamic> body = {
"typeTransaction": [1, 2, 3, 4],
"statusTransaction": [1, 2, 3],
"priority": [0, 1],
"displayData": [],
"from": from.toIso8601String(),
"to": to?.toIso8601String() ?? from.toIso8601String(),
};
response = await ApiManager.instance.post(URLs.getAllRequestsAndCount, body: body);
stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
calendarRequests = AllRequestsAndCount.fromJson(json.decode(response.body)["data"]);
notifyListeners();
}
isCalendarLoading = false;
notifyListeners();
return response.statusCode;
} catch (error) {
isCalendarLoading = false;
stateCode = -1;
notifyListeners();
return -1;
}
}
Future<int> getHighPriorityRequests() async {
if (isHighPriorityLoading == true) return -2;
isHighPriorityLoading = true;

@ -68,5 +68,5 @@ extension WidgetExtensions on Widget {
}
extension DividerExtension on Divider {
Divider defaultStyle(BuildContext context) => Divider(thickness: 1, color: context.isDark ? AppColor.neutral50 : AppColor.neutral30);
Divider defaultStyle(BuildContext context) => Divider(thickness: 1, color: context.isDark ? AppColor.neutral20 : AppColor.neutral30);
}

@ -307,7 +307,7 @@
"updateWorkOrder" : "تعديل طلب العمل",
"createPreventiveMaintenanceRequest" : "إنشاء طلب صيانة وقائية",
"createNewRequest" : "إنشاء طلب جديد",
"calendar" : "التقويم",
"calender" : "التقويم",
"helpCenter" : "مركز المساعدة",
"rateUs": "قيمنا",
"settings" : " الاعدادات",
@ -349,7 +349,17 @@
"addItem" : "اضافة عنصر",
"item" : "عنصر",
"serialNo" : "رقم التسلسلي",
"measuredValue": "القيمة المقاسه"
"measuredValue": "القيمة المقاسه",
"sureExit" : " هل انت متاكد من الخروج؟",
"daily" : "يومي",
"weekly" : "اسبوعي",
"monthly" : "شهري",
"myShift" : "ورديتي",
"myTeamRequest" : "طلب فريقي",
"sunToThurs": "الاحد الى الخميس",
"requestGasRefill" : "طلب اعادة تعبئة غاز",
"trackGasRefill" : "تتبع طلبات اعادة تعبئة غاز",
"trackAssetTransfer" : "تتبع نقل اجهزة",
"total" : "مجموع"
}

@ -349,5 +349,16 @@
"addItem" : "Add Item",
"item" : "Item",
"measuredValue": "Measured Value",
"overdue": "Overdue"
"overdue": "Overdue",
"sureExit" : "Are you sure ypu want to Exit? ",
"daily" : "Daily",
"weekly" : "Weekly",
"monthly" : "Monthly",
"myShift" : "My Shift",
"myTeamRequest" : "My Team Request",
"sunToThurs": "Sunday to Thursday",
"requestGasRefill" : "Request Gas Refill",
"trackGasRefill" : "Track Gas Refill",
"trackAssetTransfer" : "Track Asset Transfer",
"total" : "Total"
}

@ -10,44 +10,44 @@ class AllRequestsAndCount {
AllRequestsAndCount({this.countServiceRequest, this.countGasRefill, this.countAssetTransfer, this.countPPM, this.detailsStatusTotal, this.total, this.requestsDetails});
AllRequestsAndCount.fromJson(Map<String, dynamic> json) {
countServiceRequest = json['countServiceRequest'] != null ? new CountServiceRequest.fromJson(json['countServiceRequest']) : null;
countGasRefill = json['countGasRefill'] != null ? new CountServiceRequest.fromJson(json['countGasRefill']) : null;
countAssetTransfer = json['countAssetTransfer'] != null ? new CountServiceRequest.fromJson(json['countAssetTransfer']) : null;
countPPM = json['countPPM'] != null ? new CountServiceRequest.fromJson(json['countPPM']) : null;
detailsStatusTotal = json['detailsStatusTotal'] != null ? new DetailsStatusTotal.fromJson(json['detailsStatusTotal']) : null;
total = json['total'] != null ? new CountServiceRequest.fromJson(json['total']) : null;
countServiceRequest = json['countServiceRequest'] != null ? CountServiceRequest.fromJson(json['countServiceRequest']) : null;
countGasRefill = json['countGasRefill'] != null ? CountServiceRequest.fromJson(json['countGasRefill']) : null;
countAssetTransfer = json['countAssetTransfer'] != null ? CountServiceRequest.fromJson(json['countAssetTransfer']) : null;
countPPM = json['countPPM'] != null ? CountServiceRequest.fromJson(json['countPPM']) : null;
detailsStatusTotal = json['detailsStatusTotal'] != null ? DetailsStatusTotal.fromJson(json['detailsStatusTotal']) : null;
total = json['total'] != null ? CountServiceRequest.fromJson(json['total']) : null;
if (json['requestsDetails'] != null) {
requestsDetails = <RequestsDetails>[];
json['requestsDetails'].forEach((v) {
requestsDetails.add(new RequestsDetails.fromJson(v));
requestsDetails.add(RequestsDetails.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
if (this.countServiceRequest != null) {
data['countServiceRequest'] = this.countServiceRequest.toJson();
final Map<String, dynamic> data = <String, dynamic>{};
if (countServiceRequest != null) {
data['countServiceRequest'] = countServiceRequest.toJson();
}
if (this.countGasRefill != null) {
data['countGasRefill'] = this.countGasRefill.toJson();
if (countGasRefill != null) {
data['countGasRefill'] = countGasRefill.toJson();
}
if (this.countAssetTransfer != null) {
data['countAssetTransfer'] = this.countAssetTransfer.toJson();
if (countAssetTransfer != null) {
data['countAssetTransfer'] = countAssetTransfer.toJson();
}
if (this.countPPM != null) {
data['countPPM'] = this.countPPM.toJson();
if (countPPM != null) {
data['countPPM'] = countPPM.toJson();
}
if (this.detailsStatusTotal != null) {
data['detailsStatusTotal'] = this.detailsStatusTotal.toJson();
if (detailsStatusTotal != null) {
data['detailsStatusTotal'] = detailsStatusTotal.toJson();
}
if (this.total != null) {
data['total'] = this.total.toJson();
if (total != null) {
data['total'] = total.toJson();
}
if (this.requestsDetails != null) {
data['requestsDetails'] = this.requestsDetails.map((v) => v.toJson()).toList();
if (requestsDetails != null) {
data['requestsDetails'] = requestsDetails.map((v) => v.toJson()).toList();
}
return data;
}
@ -63,8 +63,8 @@ class CountServiceRequest {
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['count'] = this.count;
final Map<String, dynamic> data = <String, dynamic>{};
data['count'] = count;
return data;
}
}
@ -83,10 +83,10 @@ class DetailsStatusTotal {
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['open'] = this.open;
data['inProgress'] = this.inProgress;
data['closed'] = this.closed;
final Map<String, dynamic> data = <String, dynamic>{};
data['open'] = open;
data['inProgress'] = inProgress;
data['closed'] = closed;
return data;
}
}
@ -156,26 +156,26 @@ class RequestsDetails {
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['nameOfType'] = this.nameOfType;
data['priority'] = this.priority;
data['status'] = this.status;
data['assetName'] = this.assetName;
data['assetNo'] = this.assetNo;
data['assetSN'] = this.assetSN;
data['model'] = this.model;
data['supplier'] = this.supplier;
data['manufacturer'] = this.manufacturer;
data['requestType'] = this.requestType;
data['requestNo'] = this.requestNo;
data['gasType'] = this.gasType;
data['site'] = this.site;
data['statusReceiver'] = this.statusReceiver;
data['assetTransferFrom'] = this.assetTransferFrom;
data['assetTransferTo'] = this.assetTransferTo;
data['code'] = this.code;
data['date'] = this.date;
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['nameOfType'] = nameOfType;
data['priority'] = priority;
data['status'] = status;
data['assetName'] = assetName;
data['assetNo'] = assetNo;
data['assetSN'] = assetSN;
data['model'] = model;
data['supplier'] = supplier;
data['manufacturer'] = manufacturer;
data['requestType'] = requestType;
data['requestNo'] = requestNo;
data['gasType'] = gasType;
data['site'] = site;
data['statusReceiver'] = statusReceiver;
data['assetTransferFrom'] = assetTransferFrom;
data['assetTransferTo'] = assetTransferTo;
data['code'] = code;
data['date'] = date;
return data;
}
}

@ -68,20 +68,20 @@ class AppDrawer extends StatelessWidget {
// "logout" : "خروج"
padding: const EdgeInsets.only(top: 24),
children: [
drawerItem("drawer_notification", context.translation.notifications).onPress(() => Navigator.of(context).pushNamed(NotificationsPage.id)),
drawerItem("drawer_notification", context.translation.notifications, context).onPress(() => Navigator.of(context).pushNamed(NotificationsPage.id)),
18.height,
drawerItem("help_center", context.translation.helpCenter) /*.onPress(() => Navigator.of(context).pushNamed(HelpCenterPage.id))*/,
drawerItem("help_center", context.translation.helpCenter, context) /*.onPress(() => Navigator.of(context).pushNamed(HelpCenterPage.id))*/,
18.height,
drawerItem("rate_us", context.translation.rateUs),
drawerItem("rate_us", context.translation.rateUs, context),
18.height,
drawerItem("setting", context.translation.settings).onPress(() => Navigator.of(context).pushNamed(SettingsPage.id)),
drawerItem("setting", context.translation.settings, context).onPress(() => Navigator.of(context).pushNamed(SettingsPage.id)),
18.height,
drawerItem("report", context.translation.reportBg) /*.onPress(() => Navigator.of(context).pushNamed(ReportBugPage.id))*/,
drawerItem("report", context.translation.reportBg, context) /*.onPress(() => Navigator.of(context).pushNamed(ReportBugPage.id))*/,
18.height,
drawerItem("whats_new", context.translation.whatsNew),
drawerItem("whats_new", context.translation.whatsNew, context),
],
).expanded,
drawerItem("logout", context.translation.logout, color: AppColor.red50).onPress(() async {
drawerItem("logout", context.translation.logout, context, color: AppColor.red50).onPress(() async {
bool result = await showDialog(
context: context,
builder: (_) => AAlertDialog(title: context.translation.signOut, content: context.translation.logoutAlert),
@ -101,7 +101,7 @@ class AppDrawer extends StatelessWidget {
children: [
Text(
"Powered By Cloud Solutions",
style: Theme.of(context).textTheme.headline6.copyWith(fontWeight: FontWeight.w500, color: AColors.grey3A, fontSize: 12),
style: Theme.of(context).textTheme.headline6.copyWith(fontWeight: FontWeight.w500, color: context.isDark ? AppColor.neutral10 : AppColor.neutral50, fontSize: 12),
textScaleFactor: AppStyle.getScaleFactor(context),
),
6.width,
@ -113,7 +113,7 @@ class AppDrawer extends StatelessWidget {
);
}
Widget drawerItem(String icon, String title, {Color color}) {
Widget drawerItem(String icon, String title, BuildContext context,{Color color}) {
return Row(
children: [
SvgPicture.asset(
@ -125,7 +125,7 @@ class AppDrawer extends StatelessWidget {
16.width,
Text(
title,
style: AppTextStyles.heading6.copyWith(color: color ?? const Color(0xFF3B3D4A)),
style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50,),
),
],
);

@ -1,4 +1,5 @@
import 'package:flutter/material.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';
@ -38,31 +39,31 @@ class _CalendarPageState extends State<CalendarPage> with SingleTickerProviderSt
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
"My Shift".heading5(context),
context.translation.myShift.heading5(context),
8.height,
"Sunday to Thursday".bodyText(context),
"09:00 to 18:00".bodyText(context).custom(color: AppColor.neutral50),
context.translation.sunToThurs.bodyText(context),
"09:00 to 18:00".bodyText(context).custom(color: context.isDark? AppColor.neutral10: AppColor.neutral50),
],
).toShadowContainer(context),
).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)),
decoration: BoxDecoration(color: context.isDark? AppColor.neutral10: 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)),
indicator: BoxDecoration(color: context.isDark? AppColor.neutral20: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),
Tab(text: context.translation.monthly, height: 57.toScreenHeight),
Tab(text: context.translation.weekly, height: 57.toScreenHeight),
Tab(text: context.translation.daily, height: 57.toScreenHeight),
],
),
),

@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import 'package:intl/intl.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';
@ -19,9 +20,9 @@ class CalendarHeader extends StatelessWidget {
children: [
dateFormat.format(dateTime).heading5(context),
6.width,
const Align(alignment: AlignmentDirectional.centerEnd, child: Icon(Icons.keyboard_arrow_down_sharp, color: AppColor.neutral60, size: 24)),
Align(alignment: AlignmentDirectional.centerEnd, child: Icon(Icons.keyboard_arrow_down_sharp, color: context.isDark? AppColor.neutral10:AppColor.neutral60, size: 24)),
const Spacer(),
const Align(alignment: AlignmentDirectional.centerEnd, child: Icon(Icons.calendar_today, color: AppColor.neutral60, size: 18)),
Align(alignment: AlignmentDirectional.centerEnd, child: Icon(Icons.calendar_today, color: context.isDark? AppColor.neutral10:AppColor.neutral60, size: 18)),
],
),
8.height,

@ -6,16 +6,13 @@ import '../../../app_style/app_color.dart';
class CalendarDaysCard extends StatelessWidget {
final String day;
const CalendarDaysCard({Key key, @required this.day}) : super(key: key);
final bool fill;
const CalendarDaysCard({Key key, @required this.day, this.fill = false}) : super(key: key);
@override
Widget build(BuildContext context) {
final bgColor = day == "1" ? AppColor.neutral30 : (day == "2" ? AppColor.primary40 : AppColor.green50).withOpacity(0.3);
final dotColor = (day == "1"
? Colors.transparent
: day == "2"
? AppColor.primary40
: AppColor.green50);
final bgColor = fill ? AppColor.primary40.withOpacity(0.3) : AppColor.neutral30;
final dotColor = fill ? AppColor.primary40 : AppColor.green50;
return SizedBox(
height: 45.toScreenWidth,
width: 45.toScreenWidth,
@ -28,11 +25,12 @@ class CalendarDaysCard extends StatelessWidget {
decoration: BoxDecoration(shape: BoxShape.circle, color: bgColor),
child: day.bodyText(context).custom(color: AppColor.neutral50),
),
PositionedDirectional(
bottom: 16.toScreenHeight,
end: 16.toScreenWidth,
child: CircleAvatar(backgroundColor: dotColor, radius: 2.5),
),
if (fill)
PositionedDirectional(
bottom: 16.toScreenHeight,
end: 16.toScreenWidth,
child: CircleAvatar(backgroundColor: dotColor, radius: 2.5),
),
],
),
);

@ -1,5 +1,16 @@
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:provider/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/extensions/widget_extensions.dart';
import '../../../../controllers/providers/api/all_requests_provider.dart';
import '../requests/asset_item_view.dart';
import '../requests/gas_refill_item_view.dart';
import '../requests/ppm_item_view.dart';
import '../requests/service_request_item_view.dart';
class DailyFragment extends StatefulWidget {
const DailyFragment({Key key}) : super(key: key);
@ -11,11 +22,10 @@ class DailyFragment extends StatefulWidget {
}
class _DailyFragmentState extends State<DailyFragment> {
DateTime currentDateTime = DateTime.now();
@override
void initState() {
super.initState();
Provider.of<AllRequestsProvider>(context, listen: false).getCalenderRequests(from: DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day));
}
@override
@ -26,9 +36,46 @@ class _DailyFragmentState extends State<DailyFragment> {
@override
Widget build(BuildContext context) {
return SingleChildScrollView(
child: Column(
children: ["Daily".heading5(context)],
),
);
child: Consumer<AllRequestsProvider>(builder: (context, snapshot, _) {
return Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
snapshot.isCalendarLoading ? const Center(child: CircularProgressIndicator()) : DateFormat("EEEE, d MMMM, yyyy", context.isAr? "ar" : "en").format(DateTime.now()).heading5(context),
if (snapshot.calendarRequests?.requestsDetails?.isNotEmpty ?? false) const Divider().defaultStyle(context),
ListView.separated(
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
itemBuilder: (cxt, index) {
final list = snapshot.calendarRequests.requestsDetails;
if (snapshot.isCalendarLoading) return const SizedBox().toRequestShimmer(cxt, snapshot.isCalendarLoading);
bool isServiceRequest = list[index].nameOfType == "ServiceRequest";
bool isGasRefill = list[index].nameOfType == "GasRefill";
bool isAssetTransfer = list[index].nameOfType == "AssetTransfer";
bool isPPMs = list[index].nameOfType == "PPMs";
return isServiceRequest
? ServiceRequestItemView(list[index])
: isGasRefill
? GasRefillItemView(list[index])
: isPPMs
? PpmItemView(list[index])
: isAssetTransfer
? AssetItemView(list[index])
: Container(
height: 100,
width: double.infinity,
color: Colors.grey,
);
},
separatorBuilder: (cxt, index) => 8.height,
itemCount: snapshot.isCalendarLoading ? 6 : snapshot.calendarRequests.requestsDetails.length,
),
],
).toShadowContainer(context);
}),
).paddingOnly(start: 16, end: 16);
}
BoxDecoration cellDecoration({Color color}) => BoxDecoration(color: color ?? Colors.transparent, shape: BoxShape.circle);
}

@ -1,9 +1,12 @@
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
import 'package:table_calendar/table_calendar.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import '../../../../controllers/providers/api/all_requests_provider.dart';
import '../../../../extensions/text_extensions.dart';
import '../../../app_style/app_color.dart';
import 'calendar_header.dart';
@ -17,49 +20,81 @@ class MonthlyFragment extends StatefulWidget {
}
class _MonthlyFragmentState extends State<MonthlyFragment> {
PageController _controller;
DateTime _initialDate, _firstDate, _lastDate;
@override
void initState() {
super.initState();
_initialDate = DateTime.now();
_firstDate = DateTime.utc(2010, 10, 16);
_lastDate = DateTime.utc(2030, 3, 14);
Provider.of<AllRequestsProvider>(context, listen: false).getCalenderRequests(
from: DateTime.now().subtract(const Duration(days: 31)),
to: DateTime.now(),
);
}
@override
Widget build(BuildContext context) {
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 [],
rowHeight: 45,
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);
},
),
daysOfWeekHeight: 35.toScreenHeight,
headerStyle: const HeaderStyle(
leftChevronVisible: false,
rightChevronVisible: false,
formatButtonVisible: false,
headerPadding: EdgeInsets.all(0),
),
calendarStyle: CalendarStyle(
isTodayHighlighted: false,
defaultTextStyle: AppTextStyles.bodyText,
defaultDecoration: const BoxDecoration(shape: BoxShape.circle, color: AppColor.neutral30),
),
Consumer<AllRequestsProvider>(
builder: (context, snapshot, _) => snapshot.isCalendarLoading
? const Center(child: CircularProgressIndicator())
: TableCalendar(
firstDay: _firstDate,
lastDay: _lastDate,
focusedDay: _initialDate,
calendarFormat: CalendarFormat.month,
weekendDays: const [],
rowHeight: 45,
availableGestures: AvailableGestures.none,
calendarBuilders: CalendarBuilders(
headerTitleBuilder: (context, dateTime) => CalendarHeader(dateFormat: DateFormat("MMMM, yyyy", context.isAr? "ar" : "en"), dateTime: dateTime).onPress(() async {
final result = await showDatePicker(
context: context,
initialDate: _initialDate,
firstDate: _firstDate,
lastDate: _lastDate,
initialDatePickerMode: DatePickerMode.year,
);
await snapshot.getCalenderRequests(from: DateTime(result.year, result.month), to: DateTime.now());
if (result != null) {
_initialDate = result;
setState(() {});
}
}),
dowBuilder: (context, dateTime) {
final day = DateFormat("EE", context.isAr? "ar" : "en").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,
fill: snapshot.calendarRequests.requestsDetails?.firstWhere(
(element) => (element.date != null) && (DateTime.tryParse(element.date)?.difference(dateTime)?.inDays == 0),
orElse: () => null,
) !=
null,
);
},
),
daysOfWeekHeight: 35.toScreenHeight,
headerStyle: const HeaderStyle(
leftChevronVisible: false,
rightChevronVisible: false,
formatButtonVisible: false,
headerPadding: EdgeInsets.all(0),
),
calendarStyle: CalendarStyle(
isTodayHighlighted: false,
defaultTextStyle: AppTextStyles.bodyText,
defaultDecoration: const BoxDecoration(shape: BoxShape.circle, color: AppColor.neutral30),
),
),
),
Column(
mainAxisSize: MainAxisSize.min,
@ -69,17 +104,19 @@ class _MonthlyFragmentState extends State<MonthlyFragment> {
children: [
const CircleAvatar(backgroundColor: AppColor.primary40, radius: 8),
8.width,
"My Requests".heading6(context),
context.translation.myRequests.heading6(context),
],
),
16.height,
Row(
children: [
const CircleAvatar(backgroundColor: AppColor.green50, radius: 8),
8.width,
"My Team Requests".heading6(context),
],
),
/// TODO : TBD
// Row(
// children: [
// const CircleAvatar(backgroundColor: AppColor.green50, radius: 8),
// 8.width,
// "My Team Requests".heading6(context),
// ],
// ),
],
),
],

@ -1,11 +1,18 @@
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
import 'package:table_calendar/table_calendar.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/new_views/app_style/app_color.dart';
import '../../../../controllers/providers/api/all_requests_provider.dart';
import '../requests/asset_item_view.dart';
import '../requests/gas_refill_item_view.dart';
import '../requests/ppm_item_view.dart';
import '../requests/service_request_item_view.dart';
import 'calender_days_card.dart';
class WeeklyFragment extends StatefulWidget {
@ -18,12 +25,15 @@ class WeeklyFragment extends StatefulWidget {
}
class _WeeklyFragmentState extends State<WeeklyFragment> {
DateTime currentDateTime = DateTime.now();
PageController _controller;
DateTime _initialDate, _firstDate, _lastDate;
@override
void initState() {
super.initState();
_initialDate = DateTime.now();
_firstDate = DateTime.utc(2010, 10, 16);
_lastDate = DateTime.utc(2030, 3, 14);
Provider.of<AllRequestsProvider>(context, listen: false).getCalenderRequests(from: DateTime.now().subtract(const Duration(days: 7)), to: DateTime.now());
}
@override
@ -34,68 +44,106 @@ class _WeeklyFragmentState extends State<WeeklyFragment> {
@override
Widget build(BuildContext context) {
return SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
TableCalendar(
firstDay: DateTime.utc(2010, 10, 16),
lastDay: DateTime.utc(2030, 3, 14),
focusedDay: DateTime.now(),
calendarFormat: CalendarFormat.week,
weekendDays: const [],
onCalendarCreated: (controller) {
_controller = controller;
},
calendarBuilders: CalendarBuilders(
headerTitleBuilder: (context, dateTime) => Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
DateFormat("EEEE, d MMMM, yyyy").format(dateTime).heading5(context),
8.height,
const Divider().defaultStyle(context),
],
),
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);
child: Consumer<AllRequestsProvider>(builder: (context, snapshot, _) {
return Column(
mainAxisSize: MainAxisSize.min,
children: [
snapshot.isCalendarLoading
? const Center(child: CircularProgressIndicator())
: TableCalendar(
firstDay: _firstDate,
lastDay: _lastDate,
focusedDay: _initialDate,
calendarFormat: CalendarFormat.week,
weekendDays: const [],
onCalendarCreated: (controller) {},
calendarBuilders: CalendarBuilders(
headerTitleBuilder: (context, dateTime) => Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
DateFormat("EEEE, d MMMM, yyyy", context.isAr? "ar" : "en").format(dateTime).heading5(context),
8.height,
const Divider().defaultStyle(context),
],
),
dowBuilder: (context, dateTime) {
final day = DateFormat("EE", context.isAr? "ar" : "en").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,
fill: snapshot.calendarRequests.requestsDetails?.firstWhere(
(element) => (element.date != null) && (DateTime.tryParse(element.date)?.difference(dateTime)?.inDays == 0),
orElse: () => null,
) !=
null,
);
},
),
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),
),
),
if (snapshot.calendarRequests?.requestsDetails?.isNotEmpty ?? false) const Divider().defaultStyle(context),
ListView.separated(
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
itemBuilder: (cxt, index) {
final list = snapshot.calendarRequests.requestsDetails;
if (snapshot.isCalendarLoading) return const SizedBox().toRequestShimmer(cxt, snapshot.isCalendarLoading);
bool isServiceRequest = list[index].nameOfType == "ServiceRequest";
bool isGasRefill = list[index].nameOfType == "GasRefill";
bool isAssetTransfer = list[index].nameOfType == "AssetTransfer";
bool isPPMs = list[index].nameOfType == "PPMs";
return isServiceRequest
? ServiceRequestItemView(list[index])
: isGasRefill
? GasRefillItemView(list[index])
: isPPMs
? PpmItemView(list[index])
: isAssetTransfer
? AssetItemView(list[index])
: Container(
height: 100,
width: double.infinity,
color: Colors.grey,
);
},
separatorBuilder: (cxt, index) => 8.height,
itemCount: snapshot.isCalendarLoading ? 6 : snapshot.calendarRequests.requestsDetails.length,
),
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),
),
),
// TableCalendar(
// headerVisible: false,
// calendarFormat: CalendarFormat.week,
// firstDay: DateTime.utc(2010, 10, 16),
// lastDay: DateTime.utc(2030, 3, 14),
// focusedDay: currentDateTime,
// currentDay: currentDateTime,
// rowHeight: 37,
// calendarStyle: CalendarStyle(
// todayDecoration: cellDecoration(),
// todayTextStyle: AppTextStyles.bodyText.copyWith(color: const Color(0xFF2B353E)),
// selectedTextStyle: AppTextStyles.bodyText.copyWith(color: const Color(0xFF2B353E)),
// rangeStartTextStyle: AppTextStyles.bodyText.copyWith(color: const Color(0xFF2B353E)),
// rangeEndTextStyle: AppTextStyles.bodyText.copyWith(color: const Color(0xFF2B353E)),
// ),
// daysOfWeekStyle: DaysOfWeekStyle(
// weekdayStyle: AppTextStyles.bodyText.copyWith(color: AppColor.neutral50),
// weekendStyle: AppTextStyles.bodyText.copyWith(color: AppColor.neutral50),
// ),
// availableGestures: AvailableGestures.none,
// ),
],
).toShadowContainer(context),
);
// TableCalendar(
// headerVisible: false,
// calendarFormat: CalendarFormat.week,
// firstDay: DateTime.utc(2010, 10, 16),
// lastDay: DateTime.utc(2030, 3, 14),
// focusedDay: currentDateTime,
// currentDay: currentDateTime,
// rowHeight: 37,
// calendarStyle: CalendarStyle(
// todayDecoration: cellDecoration(),
// todayTextStyle: AppTextStyles.bodyText.copyWith(color: const Color(0xFF2B353E)),
// selectedTextStyle: AppTextStyles.bodyText.copyWith(color: const Color(0xFF2B353E)),
// rangeStartTextStyle: AppTextStyles.bodyText.copyWith(color: const Color(0xFF2B353E)),
// rangeEndTextStyle: AppTextStyles.bodyText.copyWith(color: const Color(0xFF2B353E)),
// ),
// daysOfWeekStyle: DaysOfWeekStyle(
// weekdayStyle: AppTextStyles.bodyText.copyWith(color: AppColor.neutral50),
// weekendStyle: AppTextStyles.bodyText.copyWith(color: AppColor.neutral50),
// ),
// availableGestures: AvailableGestures.none,
// ),
],
).toShadowContainer(context);
}),
).paddingOnly(start: 16, end: 16);
}
BoxDecoration cellDecoration({Color color}) => BoxDecoration(color: color ?? Colors.transparent, shape: BoxShape.circle);

@ -39,7 +39,7 @@ class ProgressFragment extends StatelessWidget {
initialAngleInDegree: 270,
chartType: ChartType.ring,
ringStrokeWidth: 40.toScreenWidth,
centerText: "Total\n20",
centerText: "${context.translation.total}\n20",
centerTextStyle: AppTextStyles.heading5.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
legendOptions: const LegendOptions(showLegends: false),
chartValuesOptions: ChartValuesOptions(
@ -69,9 +69,9 @@ class ProgressFragment extends StatelessWidget {
// setState(() {});
},
tabs: [
Tab(text: "Open", height: 57.toScreenHeight),
Tab(text: "In Progress", height: 57.toScreenHeight),
Tab(text: "Completed", height: 57.toScreenHeight),
Tab(text: context.translation.open, height: 57.toScreenHeight),
Tab(text: context.translation.inProgress, height: 57.toScreenHeight),
Tab(text: context.translation.completed, height: 57.toScreenHeight),
],
),
),

@ -42,7 +42,7 @@ class RequestsFragment extends StatelessWidget {
children: [
Text(
value,
style: AppTextStyles.heading1.copyWith(color: AppColor.neutral70, height: 1),
style: AppTextStyles.heading1.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50, height: 1),
).toShimmer(isShow: isLoading).expanded,
8.width,
SvgPicture.asset('assets/images/$icon.svg', height: 35, width: 35).toShimmer(isShow: isLoading),
@ -50,7 +50,7 @@ class RequestsFragment extends StatelessWidget {
).expanded,
Text(
"$title\n${context.translation.requests}",
style: AppTextStyles.heading5.copyWith(color: AppColor.neutral50),
style: AppTextStyles.heading5.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50,),
).toShimmer(isShow: isLoading),
8.height,
Row(

@ -39,7 +39,7 @@ class _DashboardPageState extends State<DashboardPage> {
return Scaffold(
appBar: AppBar(
automaticallyImplyLeading: false,
backgroundColor: const Color(0xffF8F9FB),
backgroundColor: context.isDark ? AppColor.neutral70 : Color(0xffF8F9FB),
titleSpacing: 0,
title: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,

@ -75,7 +75,7 @@ class _DeviceTransferDetailsState extends State<DeviceTransferDetails> {
Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Text(context.translation.transferDetails, style: AppTextStyles.heading5.copyWith(color: const Color(0xFF3B3D4A))),
context.translation.transferDetails.heading5(context),
8.height,
Column(
crossAxisAlignment: CrossAxisAlignment.start,
@ -109,7 +109,7 @@ class _DeviceTransferDetailsState extends State<DeviceTransferDetails> {
// ),
1.width,
Text(widget.model.createdOn != null ? widget.model.createdOn.toServiceRequestCardFormat : "",
textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: const Color(0xFF3B3D4A))),
textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color:context.isDark? AppColor.neutral10: Color(0xFF3B3D4A))),
],
),
],
@ -163,78 +163,63 @@ class _DeviceTransferDetailsState extends State<DeviceTransferDetails> {
}
_buildDetailsCard(Widget widget) {
return Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(AppStyle.getBorderRadius(context)),
),
child: widget,
).paddingOnly(top: 14, start: 14, end: 14);
return widget.toShadowContainer(context).paddingOnly(top: 14, start: 14, end: 14);
}
_buildTextWidget(String text) {
return Text(
text,
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
);
return text.bodyText(context);
}
_buildCard({@required String site, @required String unit, @required String comment, @required bool isSender, StatusLabel statusLabel}) {
return Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(AppStyle.getBorderRadius(context)),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
statusLabel ?? Container(),
8.height,
Text(isSender ? context.translation.senderDetails : context.translation.receiverDetails, style: AppTextStyles.heading5.copyWith(color: const Color(0xFF3B3D4A))),
],
),
if ((_userProvider.user?.type == UsersTypes.engineer) && (isSender ? _model.senderMachineStatusName != "Closed" : _model.receiverMachineStatusName != "Closed"))
CircleAvatar(
radius: 25,
backgroundColor: AppColor.neutral30,
child: CircleAvatar(
radius: 24,
backgroundColor: Colors.white,
child: Padding(
padding: const EdgeInsets.only(left: 3.0),
child: SvgPicture.asset('assets/images/update.svg'),
),
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
statusLabel ?? Container(),
8.height,
isSender ? context.translation.senderDetails.heading5(context) : context.translation.receiverDetails.heading5(context),
],
),
if ((_userProvider.user?.type == UsersTypes.engineer) && (isSender ? _model.senderMachineStatusName != "Closed" : _model.receiverMachineStatusName != "Closed"))
CircleAvatar(
radius: 25,
backgroundColor: AppColor.neutral30,
child: CircleAvatar(
radius: 24,
backgroundColor: Colors.white,
child: Padding(
padding: const EdgeInsets.only(left: 3.0),
child: SvgPicture.asset('assets/images/update.svg'),
),
).onPress(isSender
? () {
Navigator.of(context).push(MaterialPageRoute(builder: (_) => UpdateDeviceTransfer(model: _model, isSender: isSender)));
}
: () {
Navigator.of(context).push(MaterialPageRoute(builder: (_) => UpdateDeviceTransfer(model: _model, isSender: isSender)));
}),
],
),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_buildTextWidget('${context.translation.site} : $site'),
_buildTextWidget('${context.translation.unite} : $unit'),
8.height,
const Divider(color: Color(0xFFEAF1F4), height: 1, thickness: 1),
8.height,
_buildTextWidget(comment),
],
),
8.height,
],
).paddingAll(14),
).paddingOnly(top: 14, start: 14, end: 14);
),
).onPress(isSender
? () {
Navigator.of(context).push(MaterialPageRoute(builder: (_) => UpdateDeviceTransfer(model: _model, isSender: isSender)));
}
: () {
Navigator.of(context).push(MaterialPageRoute(builder: (_) => UpdateDeviceTransfer(model: _model, isSender: isSender)));
}),
],
),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_buildTextWidget('${context.translation.site} : $site'),
_buildTextWidget('${context.translation.unite} : $unit'),
8.height,
const Divider(color: Color(0xFFEAF1F4), height: 1, thickness: 1),
8.height,
_buildTextWidget(comment),
],
),
8.height,
],
).toShadowContainer(context).paddingOnly(top: 14, start: 14, end: 14);
}
int getIdstatus(String status) {

@ -206,32 +206,15 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
}
_buildCard() {
return Container(
width: MediaQuery.of(context).size.width,
decoration: ShapeDecoration(
color: Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(15),
),
shadows: const [BoxShadow(color: Color(0x07000000), blurRadius: 14, offset: Offset(0, 0), spreadRadius: 0)],
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(context.translation.transferDetails, style: AppTextStyles.heading5.copyWith(color: const Color(0xFF3B3D4A))),
8.height,
Text(
'${context.translation.assetName}: ${_formModel.assetName}',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
///TBD
Text(
'${context.translation.requesterName}: ',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
],
).paddingAll(16),
);
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
context.translation.transferDetails.heading5(context),
8.height,
'${context.translation.assetName}: ${_formModel.assetName}'.bodyText(context),
///TBDZ
'${context.translation.requesterName}: '.bodyText(context),
],
).toShadowContainer(context);
}
}

@ -66,166 +66,142 @@ class _GasRefillDetailsPageState extends State<GasRefillDetailsPage> {
}
Widget informationCard() {
return Container(
decoration: ShapeDecoration(
color: Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20),
),
shadows: const [BoxShadow(color: Color(0x07000000), blurRadius: 14, offset: Offset(0, 0), spreadRadius: 0)],
),
child: Column(
children: [
Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
/// TBD
//StatusLabel(
//label: item.priority.name,
//id: serviceRequest.priority.id,
//textColor: AColors.getPriorityStatusTextColor(serviceRequest.priority.id),
//backgroundColor: AColors.getPriorityStatusColor(serviceRequest.priority.id)
//),
// 8.width,
StatusLabel(
label: widget.model.status?.name ?? "",
textColor: AColors.getRequestStatusTextColor(widget.model.status?.value ?? 0),
backgroundColor: AColors.getRequestStatusColor(widget.model.status?.value ?? 0)),
8.height,
Text(context.translation.gasRefillRequest, style: AppTextStyles.heading5.copyWith(color: const Color(0xFF3B3D4A))),
8.height,
return Column(
children: [
Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
/// TBD
//StatusLabel(
//label: item.priority.name,
//id: serviceRequest.priority.id,
//textColor: AColors.getPriorityStatusTextColor(serviceRequest.priority.id),
//backgroundColor: AColors.getPriorityStatusColor(serviceRequest.priority.id)
//),
// 8.width,
StatusLabel(
label: widget.model.status?.name ?? "",
textColor: AColors.getRequestStatusTextColor(widget.model.status?.value ?? 0),
backgroundColor: AColors.getRequestStatusColor(widget.model.status?.value ?? 0)),
8.height,
context.translation.gasRefillRequest.heading5(context),
8.height,
///TBD
Text(
context.translation.gasRequest,
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
Text(
'${context.translation.cylinderSize}: ${widget.model.gazRefillDetails[0].cylinderSize.value}',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
Text(
'${context.translation.site}: ${widget.model.site.name}',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
],
),
1.width.expanded,
Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
if (_userProvider.user.type == UsersTypes.engineer && (widget.model.status?.value ?? 0) != 2)
CircleAvatar(
radius: 25,
backgroundColor: AppColor.neutral30,
child: CircleAvatar(
radius: 24,
backgroundColor: Colors.white,
child: Padding(
padding: const EdgeInsets.only(left: 3.0),
child: SvgPicture.asset('assets/images/update.svg'),
),
///TBD
context.translation.gasRequest.bodyText(context),
'${context.translation.cylinderSize}: ${widget.model.gazRefillDetails[0].cylinderSize.value}'.bodyText(context),
'${context.translation.site}: ${widget.model.site.name}'.bodyText(context),
],
),
1.width.expanded,
Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
if (_userProvider.user.type == UsersTypes.engineer && (widget.model.status?.value ?? 0) != 2)
CircleAvatar(
radius: 25,
backgroundColor: AppColor.neutral30,
child: CircleAvatar(
radius: 24,
backgroundColor: Colors.white,
child: Padding(
padding: const EdgeInsets.only(left: 3.0),
child: SvgPicture.asset('assets/images/update.svg'),
),
).onPress(
() async {
_model?.fromGasRefillModel(widget.model);
// setState(() {});
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => RequestGasRefill(
gasRefillModel: widget.model,
),
),
).then((value) {
if (value != null) {
_model = value;
}
});
setState(() {});
},
),
Text(widget.model.startDate?.toServiceRequestCardFormat ?? "", textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: const Color(0xFF3B3D4A))),
],
)
],
),
8.height,
const Divider(color: Color(0xFFEAF1F4), height: 1, thickness: 1),
8.height,
Text(
'${context.translation.requestedQuantity}: ${widget.model.gazRefillDetails[0].requestedQty}',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
Text(
'${context.translation.deliveredQuantity}: ${widget.model.gazRefillDetails[0].deliverdQty}',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
8.height,
],
).paddingAll(16),
).onPress(
() async {
_model?.fromGasRefillModel(widget.model);
// setState(() {});
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => RequestGasRefill(
gasRefillModel: widget.model,
),
),
).then((value) {
if (value != null) {
_model = value;
}
});
setState(() {});
},
),
Text(widget.model.startDate?.toServiceRequestCardFormat ?? "", textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: const Color(0xFF3B3D4A))),
],
)
],
),
8.height,
const Divider(color: Color(0xFFEAF1F4), height: 1, thickness: 1),
8.height,
'${context.translation.requestedQuantity}: ${widget.model.gazRefillDetails[0].requestedQty}'.bodyText(context),
'${context.translation.deliveredQuantity}: ${widget.model.gazRefillDetails[0].deliverdQty}'.bodyText(context),
8.height,
],
).paddingAll(16),
/// TBD
(_userProvider.user.type == UsersTypes.normal_user
? Container(
height: 50,
padding: const EdgeInsets.only(left: 16, right: 16),
alignment: Alignment.center,
width: double.infinity,
decoration: const ShapeDecoration(
color: Color(0xFFEAF1F4),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(20),
bottomRight: Radius.circular(20),
),
/// TBD
(_userProvider.user.type == UsersTypes.normal_user
? Container(
height: 50,
padding: const EdgeInsets.only(left: 16, right: 16),
alignment: Alignment.center,
width: double.infinity,
decoration: const ShapeDecoration(
color: Color(0xFFEAF1F4),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(20),
bottomRight: Radius.circular(20),
),
),
child: Row(
),
child: Row(
children: [
Text(
'${context.translation.commentHere}...',
style: AppTextStyles.heading6.copyWith(
color: AppColor.neutral50.withOpacity(.6),
),
).expanded,
SvgPicture.asset("assets/images/comment_send.svg", width: 24 * AppStyle.getScaleFactor(context), height: 24 * AppStyle.getScaleFactor(context), color: AppColor.primary70),
],
),
)
: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Divider(color: Color(0xFFEAF1F4), height: 1, thickness: 1),
16.height,
Row(
mainAxisSize: MainAxisSize.min,
children: [
Text(
'${context.translation.commentHere}...',
style: AppTextStyles.heading6.copyWith(
color: AppColor.neutral50.withOpacity(.6),
),
).expanded,
SvgPicture.asset("assets/images/comment_send.svg", width: 24 * AppStyle.getScaleFactor(context), height: 24 * AppStyle.getScaleFactor(context), color: AppColor.primary70),
'${context.translation.viewComments}',
style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF4A8DB7)),
),
4.width,
const Icon(
Icons.arrow_forward,
color: Color(0xFF4A8DB7),
size: 14,
)
],
),
)
: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Divider(color: Color(0xFFEAF1F4), height: 1, thickness: 1),
16.height,
Row(
mainAxisSize: MainAxisSize.min,
children: [
Text(
'${context.translation.viewComments}',
style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF4A8DB7)),
),
4.width,
const Icon(
Icons.arrow_forward,
color: Color(0xFF4A8DB7),
size: 14,
)
],
),
],
).paddingOnly(bottom: 16, start: 16, end: 16))
.onPress(() {}),
],
),
).paddingAll(16);
],
).paddingOnly(bottom: 16, start: 16, end: 16))
.onPress(() {}),
],
).toShadowContainer(context).paddingAll(16);
}
}

@ -184,41 +184,18 @@ class _RequestGasRefillState extends State<RequestGasRefill> {
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Container(
width: MediaQuery.of(context).size.width,
decoration: ShapeDecoration(
color: Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20),
),
shadows: const [BoxShadow(color: Color(0x07000000), blurRadius: 14, offset: Offset(0, 0), spreadRadius: 0)],
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(context.translation.gasRefill, style: AppTextStyles.heading5.copyWith(color: const Color(0xFF3B3D4A))),
8.height,
/// TBD
Text(
'Gas Request:',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
Text(
'Cylinder Size: ${widget.gasRefillModel.gazRefillDetails[0].cylinderSize.value}',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
Text(
'Request Quantity: ${widget.gasRefillModel.gazRefillDetails[0].requestedQty}',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
Text(
'Site: ${widget.gasRefillModel.site.name}',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
],
).paddingAll(16),
),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
context.translation.gasRefill.heading5(context),
8.height,
/// TBD
'${context.translation.gasRequest}:'.bodyText(context),
'${context.translation.cylinderSize}: ${widget.gasRefillModel.gazRefillDetails[0].cylinderSize.value}'.bodyText(context),
'${context.translation.quantity}: ${widget.gasRefillModel.gazRefillDetails[0].requestedQty}'.bodyText(context),
'${context.translation.site}: ${widget.gasRefillModel.site.name}'.bodyText(context),
],
).paddingAll(16),
12.height,
AppTimer(
label: context.translation.workingHours,
@ -259,7 +236,7 @@ class _RequestGasRefillState extends State<RequestGasRefill> {
onSaved: (value) {},
),
],
).paddingAll(16),
).toShadowContainer(context).paddingAll(16),
).expanded,
AppFilledButton(
label: widget.gasRefillModel == null ? context.translation.submit : context.translation.update,

@ -9,6 +9,7 @@ import 'package:share/share.dart';
import 'package:test_sa/controllers/notification/firebase_notification_manger.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/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/new_views/pages/new_gas_refill_request_page.dart';
@ -87,11 +88,11 @@ class _LandPageState extends State<LandPage> {
onWillPop: () async {
bool result = await showDialog(
context: context,
builder: (_) => const AAlertDialog(
builder: (_) => AAlertDialog(
// title: _subtitle.exit,
title: "Exit",
title: context.translation.exit,
// content: _subtitle.exitAlert,
content: "Are you sure you want to exit?",
content: context.translation.sureExit,
));
if (result == true) {
if (Platform.isAndroid) {
@ -129,9 +130,9 @@ class _LandPageState extends State<LandPage> {
// )
// ),
// ),
SizedBox(
height: 48 * AppStyle.getScaleFactor(context),
),
// SizedBox(
// height: 48 * AppStyle.getScaleFactor(context),
// ),
// Hero(
// tag: "logo",
// child: Image(
@ -150,7 +151,7 @@ class _LandPageState extends State<LandPage> {
if (_userProvider.user != null && _userProvider.user.type == UsersTypes.normal_user)
LandPageItem(
// text: _subtitle.newServiceRequest,
text: "New Service Request",
text: context.translation.newServiceRequest,
icon: FontAwesomeIcons.screwdriverWrench,
onPressed: () {
Navigator.of(context).pushNamed(CreateServiceRequestPage.id);
@ -158,7 +159,7 @@ class _LandPageState extends State<LandPage> {
),
LandPageItem(
// text: _subtitle.trackServiceRequest,
text: "Track Service Request",
text: context.translation.trackServiceRequest,
icon: FontAwesomeIcons.listCheck,
onPressed: () {
Navigator.of(context).pushNamed(ServiceRequestsPage.id);
@ -167,7 +168,7 @@ class _LandPageState extends State<LandPage> {
//if (_userProvider.user.type == UsersTypes.engineer)
LandPageItem(
// text: _subtitle.preventiveMaintenance,
text: "Preventive Maintenance",
text: context.translation.preventiveMaintenance,
icon: FontAwesomeIcons.personWalking,
onPressed: () {
Navigator.of(context).pushNamed(RegularVisitsPage.id);
@ -183,7 +184,7 @@ class _LandPageState extends State<LandPage> {
// ),
if (_userProvider?.user != null && _userProvider?.user?.type != UsersTypes.engineer)
LandPageItem(
text: "Request Gas Refill",
text: context.translation.requestGasRefill,
icon: FontAwesomeIcons.truckFast,
onPressed: () {
// Navigator.of(context).pushNamed(RequestGasRefill.id);
@ -191,21 +192,21 @@ class _LandPageState extends State<LandPage> {
},
),
LandPageItem(
text: "Track Gas Refill",
text: context.translation.trackGasRefill,
icon: Icons.content_paste_search,
onPressed: () {
Navigator.of(context).pushNamed(TrackGasRefillPage.id);
},
),
LandPageItem(
text: "Transfer Asset",
text: context.translation.deviceTransfer,
icon: FontAwesomeIcons.rightLeft,
onPressed: () {
Navigator.of(context).pushNamed(RequestDeviceTransfer.id);
},
),
LandPageItem(
text: "Track Asset Transfer",
text: context.translation.trackAssetTransfer,
icon: FontAwesomeIcons.peopleCarryBox,
onPressed: () {
Navigator.of(context).pushNamed(TrackDeviceTransferPage.id);
@ -223,219 +224,219 @@ class _LandPageState extends State<LandPage> {
),
],
),
Align(
alignment: Alignment.topLeft,
child: ABackButton(
icon: Icons.power_settings_new_rounded,
onPressed: () async {
bool result = await showDialog(
context: context,
builder: (_) => const AAlertDialog(
// title: _subtitle.signOut,
title: "Sign Out",
// content: _subtitle.signOutAlert,
content: "Are you sure you want to exit?",
));
if (result) {
// _devicesProvider.reset();
// _departmentsProvider.reset();
// _serviceRequestsProvider.reset();
// _regularVisitsProvider.reset();
// _preventiveMaintenanceVisitsProvider.reset();
_settingProvider.resetSettings();
_userProvider.reset();
Navigator.of(context).pop();
}
},
),
),
Align(
alignment: Alignment.topRight,
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4),
child: AIconButton(
iconData: Icons.menu,
color: AColors.primaryColor,
buttonSize: 42,
backgroundColor: AColors.white,
onPressed: () {
_scaffoldKey.currentState.openEndDrawer();
},
),
),
),
],
),
),
endDrawer: Drawer(
backgroundColor: Colors.white,
child: Column(
children: [
40.height,
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
const Icon(Icons.clear).onPress(() => Navigator.pop(context)),
],
).paddingOnly(start: 4, end: 14),
Row(
children: [
Container(
height: 50 * AppStyle.getScaleFactor(context),
width: 50 * AppStyle.getScaleFactor(context),
padding: EdgeInsets.all(4),
decoration: BoxDecoration(border: Border.all(color: Theme.of(context).primaryColor, width: 2), shape: BoxShape.circle),
child: ClipOval(
child: ClipOval(
child: Icon(
Icons.person,
size: 36,
color: Theme.of(context).colorScheme.primary,
),
),
),
),
12.width,
Text(
_userProvider.user?.userName ?? "??",
style: Theme.of(context).textTheme.headline6.copyWith(
fontWeight: FontWeight.w600,
),
textScaleFactor: AppStyle.getScaleFactor(context),
).expanded
],
).paddingOnly(start: 14, end: 14, top: 21, bottom: 21),
Divider(
height: 1,
thickness: 1,
color: AColors.greyEF,
),
ListView(
children: [
Row(
children: [
Radio(
value: "en",
activeColor: AColors.grey3A,
focusColor: AColors.grey3A,
groupValue: _settingProvider.language,
onChanged: (value) {
_settingProvider.setLanguage(value);
}),
Text(
"English",
style: Theme.of(context).textTheme.bodyText1.copyWith(color: AColors.grey3A),
textScaleFactor: AppStyle.getScaleFactor(context),
),
Radio(
value: "ar",
activeColor: AColors.grey3A,
focusColor: AColors.grey3A,
groupValue: _settingProvider.language,
onChanged: (value) {
_settingProvider.setLanguage(value);
}),
Text(
"عربي",
style: Theme.of(context).textTheme.bodyText1.copyWith(color: AColors.grey3A),
textScaleFactor: AppStyle.getScaleFactor(context),
),
],
),
Row(
children: [
Radio(
value: true,
activeColor: AColors.grey3A,
focusColor: AColors.grey3A,
groupValue: _settingProvider.language,
onChanged: (value) {
_settingProvider.setDarkTheme(value);
}),
Text(
"Dark",
style: Theme.of(context).textTheme.bodyText1.copyWith(color: AColors.grey3A),
textScaleFactor: AppStyle.getScaleFactor(context),
),
Radio(
value: false,
activeColor: AColors.grey3A,
focusColor: AColors.grey3A,
groupValue: _settingProvider.language,
onChanged: (value) {
_settingProvider.setDarkTheme(value);
}),
Text(
"Light",
style: Theme.of(context).textTheme.bodyText1.copyWith(color: AColors.grey3A),
textScaleFactor: AppStyle.getScaleFactor(context),
),
],
),
// DrawerItem(
// icon: Icons.notifications,
// title: _subtitle.notifications,
// onPressed: () {
// Navigator.of(context).pushNamed(NotificationsPage.id);
// },
// ),
DrawerItem(
icon: Icons.mail,
// title: _subtitle.email,
title: "Email",
onPressed: () {
launch("mailto:customerservice@Test SA.com");
},
),
// DrawerItem(
// icon: Icons.phone_in_talk,
// title: "${_subtitle.hotLine} 15564",
// onPressed: () {
// launch("tel:15564");
// },
// ),
// DrawerItem(
// icon: FontAwesomeIcons.linkedinIn,
// title: _subtitle.linkedIn,
// onPressed: () {
// launch("https://www.linkedin.com/company/Test SA/");
// },
// ),
// DrawerItem(
// icon: FontAwesomeIcons.globe,
// title: _subtitle.ourWebsite,
// onPressed: () {
// launch("https://www.Test SA.com/");
// },
// ),
DrawerItem(
icon: Icons.share,
// title: _subtitle.shareApp,
title: "Share App",
onPressed: () async {
PackageInfo packageInfo = await PackageInfo.fromPlatform();
String shareLink = "\n https://play.google.com/store/apps/details?id=" + packageInfo.packageName + "\n https://apps.apple.com/us/app/";
Share.share(shareLink);
},
),
],
).expanded,
Divider(height: 1, thickness: 1, color: AColors.greyEF),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
"Powered By Cloud Solutions",
style: Theme.of(context).textTheme.headline6.copyWith(fontWeight: FontWeight.w500, color: AColors.grey3A, fontSize: 12),
textScaleFactor: AppStyle.getScaleFactor(context),
),
6.width,
Image.asset("assets/images/cloud_logo.png", width: 32, height: 32)
],
).paddingOnly(start: 20, end: 20, top: 8, bottom: 8),
// Align(
// alignment: Alignment.topLeft,
// child: ABackButton(
// icon: Icons.power_settings_new_rounded,
// onPressed: () async {
// bool result = await showDialog(
// context: context,
// builder: (_) => const AAlertDialog(
// // title: _subtitle.signOut,
// title: "Sign Out",
// // content: _subtitle.signOutAlert,
// content: "Are you sure you want to exit?",
// ));
// if (result) {
// // _devicesProvider.reset();
// // _departmentsProvider.reset();
// // _serviceRequestsProvider.reset();
// // _regularVisitsProvider.reset();
// // _preventiveMaintenanceVisitsProvider.reset();
// _settingProvider.resetSettings();
// _userProvider.reset();
// Navigator.of(context).pop();
// }
// },
// ),
// ),
// Align(
// alignment: Alignment.topRight,
// child: Padding(
// padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4),
// child: AIconButton(
// iconData: Icons.menu,
// color: AColors.primaryColor,
// buttonSize: 42,
// backgroundColor: AColors.white,
// onPressed: () {
// _scaffoldKey.currentState.openEndDrawer();
// },
// ),
// ),
// ),
],
),
),
// endDrawer: Drawer(
// backgroundColor: Colors.white,
// child: Column(
// children: [
// 40.height,
// Row(
// mainAxisAlignment: MainAxisAlignment.end,
// children: [
// const Icon(Icons.clear).onPress(() => Navigator.pop(context)),
// ],
// ).paddingOnly(start: 4, end: 14),
// Row(
// children: [
// Container(
// height: 50 * AppStyle.getScaleFactor(context),
// width: 50 * AppStyle.getScaleFactor(context),
// padding: EdgeInsets.all(4),
// decoration: BoxDecoration(border: Border.all(color: Theme.of(context).primaryColor, width: 2), shape: BoxShape.circle),
// child: ClipOval(
// child: ClipOval(
// child: Icon(
// Icons.person,
// size: 36,
// color: Theme.of(context).colorScheme.primary,
// ),
// ),
// ),
// ),
// 12.width,
// Text(
// _userProvider.user?.userName ?? "??",
// style: Theme.of(context).textTheme.headline6.copyWith(
// fontWeight: FontWeight.w600,
// ),
// textScaleFactor: AppStyle.getScaleFactor(context),
// ).expanded
// ],
// ).paddingOnly(start: 14, end: 14, top: 21, bottom: 21),
// Divider(
// height: 1,
// thickness: 1,
// color: AColors.greyEF,
// ),
// ListView(
// children: [
// Row(
// children: [
// Radio(
// value: "en",
// activeColor: AColors.grey3A,
// focusColor: AColors.grey3A,
// groupValue: _settingProvider.language,
// onChanged: (value) {
// _settingProvider.setLanguage(value);
// }),
// Text(
// "English",
// style: Theme.of(context).textTheme.bodyText1.copyWith(color: AColors.grey3A),
// textScaleFactor: AppStyle.getScaleFactor(context),
// ),
// Radio(
// value: "ar",
// activeColor: AColors.grey3A,
// focusColor: AColors.grey3A,
// groupValue: _settingProvider.language,
// onChanged: (value) {
// _settingProvider.setLanguage(value);
// }),
// Text(
// "عربي",
// style: Theme.of(context).textTheme.bodyText1.copyWith(color: AColors.grey3A),
// textScaleFactor: AppStyle.getScaleFactor(context),
// ),
// ],
// ),
// Row(
// children: [
// Radio(
// value: true,
// activeColor: AColors.grey3A,
// focusColor: AColors.grey3A,
// groupValue: _settingProvider.language,
// onChanged: (value) {
// _settingProvider.setDarkTheme(value);
// }),
// Text(
// "Dark",
// style: Theme.of(context).textTheme.bodyText1.copyWith(color: AColors.grey3A),
// textScaleFactor: AppStyle.getScaleFactor(context),
// ),
// Radio(
// value: false,
// activeColor: AColors.grey3A,
// focusColor: AColors.grey3A,
// groupValue: _settingProvider.language,
// onChanged: (value) {
// _settingProvider.setDarkTheme(value);
// }),
// Text(
// "Light",
// style: Theme.of(context).textTheme.bodyText1.copyWith(color: AColors.grey3A),
// textScaleFactor: AppStyle.getScaleFactor(context),
// ),
// ],
// ),
// // DrawerItem(
// // icon: Icons.notifications,
// // title: _subtitle.notifications,
// // onPressed: () {
// // Navigator.of(context).pushNamed(NotificationsPage.id);
// // },
// // ),
// DrawerItem(
// icon: Icons.mail,
// // title: _subtitle.email,
// title: "Email",
// onPressed: () {
// launch("mailto:customerservice@Test SA.com");
// },
// ),
// // DrawerItem(
// // icon: Icons.phone_in_talk,
// // title: "${_subtitle.hotLine} 15564",
// // onPressed: () {
// // launch("tel:15564");
// // },
// // ),
// // DrawerItem(
// // icon: FontAwesomeIcons.linkedinIn,
// // title: _subtitle.linkedIn,
// // onPressed: () {
// // launch("https://www.linkedin.com/company/Test SA/");
// // },
// // ),
// // DrawerItem(
// // icon: FontAwesomeIcons.globe,
// // title: _subtitle.ourWebsite,
// // onPressed: () {
// // launch("https://www.Test SA.com/");
// // },
// // ),
// DrawerItem(
// icon: Icons.share,
// // title: _subtitle.shareApp,
// title: "Share App",
// onPressed: () async {
// PackageInfo packageInfo = await PackageInfo.fromPlatform();
// String shareLink = "\n https://play.google.com/store/apps/details?id=" + packageInfo.packageName + "\n https://apps.apple.com/us/app/";
// Share.share(shareLink);
// },
// ),
// ],
// ).expanded,
// Divider(height: 1, thickness: 1, color: AColors.greyEF),
// Row(
// mainAxisAlignment: MainAxisAlignment.center,
// children: [
// Text(
// "Powered By Cloud Solutions",
// style: Theme.of(context).textTheme.headline6.copyWith(fontWeight: FontWeight.w500, color: AColors.grey3A, fontSize: 12),
// textScaleFactor: AppStyle.getScaleFactor(context),
// ),
// 6.width,
// Image.asset("assets/images/cloud_logo.png", width: 32, height: 32)
// ],
// ).paddingOnly(start: 20, end: 20, top: 8, bottom: 8),
// ],
// ),
// ),
),
);
}

@ -54,7 +54,7 @@ class NotificationsList extends StatelessWidget {
},
);
},
),
).toShadowContainer(context),
),
),
);

@ -43,7 +43,7 @@ class _ServiceRequestsPageState extends State<ServiceRequestsPage> with TickerPr
return Scaffold(
appBar: DefaultAppBar(title: context.translation.serviceRequest),
backgroundColor: const Color(0xfff8f9fb),
//backgroundColor: context.isDark? :const Color(0xfff8f9fb),
body: SafeArea(
child: LoadingManager(
isLoading: _serviceRequestsProvider.isLoading,

@ -50,171 +50,162 @@ class _ServiceRequestDetailsPageState extends State<ServiceRequestDetailsPage> {
// _serviceRequestsProvider.getServiceRequestObjectById(requestId: serviceRequest.id);
Widget informationCard() {
return Container(
decoration: ShapeDecoration(
color: Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20),
),
shadows: const [BoxShadow(color: Color(0x07000000), blurRadius: 14, offset: Offset(0, 0), spreadRadius: 0)],
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
StatusLabel(
label: widget.serviceRequest.priority.name,
id: widget.serviceRequest.priority.id,
textColor: AColors.getPriorityStatusTextColor(widget.serviceRequest.priority.id),
backgroundColor: AColors.getPriorityStatusColor(widget.serviceRequest.priority.id)),
8.width,
StatusLabel(
label: widget.serviceRequest.statusLabel,
textColor: AColors.getRequestStatusTextColor(widget.serviceRequest.statusValue),
backgroundColor: AColors.getRequestStatusColor(widget.serviceRequest.statusValue)),
1.width.expanded,
],
),
8.height,
Text(widget.serviceRequest.deviceEnName, style: AppTextStyles.heading5.copyWith(color: const Color(0xFF3B3D4A))),
8.height,
Text(
'${context.translation.assetNumber}: ${widget.serviceRequest.device.assetNumber}',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
Text(
'${context.translation.requestType}: ${widget.serviceRequest.type.name}',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
Text(
'${context.translation.requestNo}: ${widget.serviceRequest.requestCode}',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
],
).expanded,
Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
if (_userProvider.user.type == UsersTypes.normal_user)
context.translation.code.toSvgAsset(width: 48).onPress(() {
Navigator.push(context, MaterialPageRoute(builder: (context) => UpdateServiceRequestPage(serviceRequest: widget.serviceRequest)));
}),
if (_userProvider.user.type == UsersTypes.engineer) 16.height,
Text(widget.serviceRequest.date.toServiceRequestCardFormat, textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: const Color(0xFF3B3D4A))),
],
)
],
),
8.height,
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
StatusLabel(
label: widget.serviceRequest.priority.name,
id: widget.serviceRequest.priority.id,
textColor: AColors.getPriorityStatusTextColor(widget.serviceRequest.priority.id),
backgroundColor: AColors.getPriorityStatusColor(widget.serviceRequest.priority.id)),
8.width,
StatusLabel(
label: widget.serviceRequest.statusLabel,
textColor: AColors.getRequestStatusTextColor(widget.serviceRequest.statusValue),
backgroundColor: AColors.getRequestStatusColor(widget.serviceRequest.statusValue)),
1.width.expanded,
],
),
8.height,
Text(widget.serviceRequest.deviceEnName, style: AppTextStyles.heading5.copyWith(color: context.isDark?AppColor.neutral30: const Color(0xFF3B3D4A))),
8.height,
Text(
'${context.translation.assetNumber}: ${widget.serviceRequest.device.assetNumber}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:Color(0xFF757575)),
),
Text(
'${context.translation.requestType}: ${widget.serviceRequest.type.name}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:Color(0xFF757575)),
),
Text(
'${context.translation.requestNo}: ${widget.serviceRequest.requestCode}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:Color(0xFF757575)),
),
],
).expanded,
Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
if (_userProvider.user.type == UsersTypes.normal_user)
context.translation.code.toSvgAsset(width: 48).onPress(() {
Navigator.push(context, MaterialPageRoute(builder: (context) => UpdateServiceRequestPage(serviceRequest: widget.serviceRequest)));
}),
if (_userProvider.user.type == UsersTypes.engineer) 16.height,
Text(widget.serviceRequest.date.toServiceRequestCardFormat, textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark?AppColor.neutral30:const Color(0xFF3B3D4A))),
],
)
],
),
8.height,
const Divider(color: Color(0xFFEAF1F4), height: 1, thickness: 1),
8.height,
Text(
'${context.translation.manufacture}: ${widget.serviceRequest.device.modelDefinition.manufacturerName}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:Color(0xFF757575)),
),
Text(
'${context.translation.model}: ${widget.serviceRequest.device.modelDefinition.modelName}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:Color(0xFF757575)),
),
8.height,
if ((widget.serviceRequest.callComments ?? "").isNotEmpty) ...[
const Divider(color: Color(0xFFEAF1F4), height: 1, thickness: 1),
8.height,
Text(
'${context.translation.manufacture}: ${widget.serviceRequest.device.modelDefinition.manufacturerName}',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
Text(
'${context.translation.model}: ${widget.serviceRequest.device.modelDefinition.modelName}',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
widget.serviceRequest.callComments,
style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:Color(0xFF757575)),
),
],
if (widget.serviceRequest.devicePhotos.isNotEmpty) ...[
8.height,
if ((widget.serviceRequest.callComments ?? "").isNotEmpty) ...[
const Divider(color: Color(0xFFEAF1F4), height: 1, thickness: 1),
8.height,
Text(
widget.serviceRequest.callComments,
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
],
if (widget.serviceRequest.devicePhotos.isNotEmpty) ...[
8.height,
const Divider(color: Color(0xFFEAF1F4), height: 1, thickness: 1),
FilesList(images: widget.serviceRequest.devicePhotos),
],
if (widget.serviceRequest.audio?.isNotEmpty ?? false) ...[
const Divider(color: Color(0xFFEAF1F4), height: 1, thickness: 1),
16.height,
ASoundPlayer(audio: widget.serviceRequest.audio),
],
const Divider(color: Color(0xFFEAF1F4), height: 1, thickness: 1),
FilesList(images: widget.serviceRequest.devicePhotos),
],
).paddingAll(16),
(_userProvider.user.type == UsersTypes.normal_user
? Container(
height: 50,
padding: const EdgeInsets.only(left: 16, right: 16),
alignment: Alignment.center,
width: double.infinity,
decoration: const ShapeDecoration(
color: Color(0xFFEAF1F4),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(20),
bottomRight: Radius.circular(20),
),
if (widget.serviceRequest.audio?.isNotEmpty ?? false) ...[
const Divider(color: Color(0xFFEAF1F4), height: 1, thickness: 1),
16.height,
ASoundPlayer(audio: widget.serviceRequest.audio),
],
],
).paddingAll(16),
(_userProvider.user.type == UsersTypes.normal_user
? Container(
height: 50,
padding: const EdgeInsets.only(left: 16, right: 16),
alignment: Alignment.center,
width: double.infinity,
decoration: const ShapeDecoration(
color: Color(0xFFEAF1F4),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(20),
bottomRight: Radius.circular(20),
),
),
child: Row(
),
child: Row(
children: [
Text(
'${context.translation.viewComments}...',
style: AppTextStyles.heading6.copyWith(
color: AppColor.neutral50.withOpacity(.6),
),
).expanded,
SvgPicture.asset("assets/images/comment_send.svg", width: 24 * AppStyle.getScaleFactor(context), height: 24 * AppStyle.getScaleFactor(context), color: AppColor.primary70),
],
),
)
: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Divider(color: Color(0xFFEAF1F4), height: 1, thickness: 1),
16.height,
Row(
mainAxisSize: MainAxisSize.min,
children: [
Text(
'${context.translation.viewComments}...',
style: AppTextStyles.heading6.copyWith(
color: AppColor.neutral50.withOpacity(.6),
),
).expanded,
SvgPicture.asset("assets/images/comment_send.svg", width: 24 * AppStyle.getScaleFactor(context), height: 24 * AppStyle.getScaleFactor(context), color: AppColor.primary70),
context.translation.viewComments,
style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF4A8DB7)),
),
4.width,
const Icon(
Icons.arrow_forward,
color: Color(0xFF4A8DB7),
size: 14,
)
],
),
)
: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Divider(color: Color(0xFFEAF1F4), height: 1, thickness: 1),
16.height,
Row(
mainAxisSize: MainAxisSize.min,
children: [
Text(
context.translation.viewComments,
style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF4A8DB7)),
),
4.width,
const Icon(
Icons.arrow_forward,
color: Color(0xFF4A8DB7),
size: 14,
)
],
),
],
).paddingOnly(bottom: 16, start: 16, end: 16))
.onPress(() async {
await showModalBottomSheet(
context: context,
useSafeArea: true,
isScrollControlled: true,
backgroundColor: Colors.transparent,
builder: (context) => CommentsBottomSheet(requestId: widget.serviceRequest.id),
);
}),
],
),
);
],
).paddingOnly(bottom: 16, start: 16, end: 16))
.onPress(() async {
await showModalBottomSheet(
context: context,
useSafeArea: true,
isScrollControlled: true,
backgroundColor: Colors.transparent,
builder: (context) => CommentsBottomSheet(requestId: widget.serviceRequest.id),
);
}),
],
).toShadowContainer(context);
}
return Scaffold(
appBar: DefaultAppBar(title: context.translation.serviceDetails),
backgroundColor: const Color(0xfff8f9fb),
//backgroundColor: const Color(0xfff8f9fb),
body: SafeArea(
child: FutureBuilder(
future: _serviceRequestsProvider.getServiceRequestObjectById(requestId: widget.serviceRequest.id),

@ -34,7 +34,7 @@ class WorkOrderDetailsPage extends StatelessWidget {
margin: const EdgeInsets.all(16),
width: double.infinity,
decoration: ShapeDecoration(
color: Colors.white,
color: context.isDark?Theme.of(context).cardColor:Colors.white,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)),
shadows: const [BoxShadow(color: Color(0x07000000), blurRadius: 14, offset: Offset(0, 0), spreadRadius: 0)],
),
@ -44,31 +44,31 @@ class WorkOrderDetailsPage extends StatelessWidget {
children: [
StatusLabel(label: workOrder.currentSituation.name, textColor: AppColor.orange60, backgroundColor: AppColor.orange40),
8.height,
Text(serviceRequest.requestCode, style: AppTextStyles.heading5.copyWith(color: const Color(0xFF3B3D4A))),
Text(serviceRequest.requestCode, style: AppTextStyles.heading5.copyWith(color: context.isDark?AppColor.neutral30:const Color(0xFF3B3D4A))),
8.height,
Text(
'${context.translation.assetName}: ${workOrder.callRequest.asset.modelDefinition.assetName}',
style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575)),
style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:const Color(0xFF757575)),
),
Text(
'${context.translation.status}: ${workOrder.currentSituation.name}',
style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575)),
style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:const Color(0xFF757575)),
),
Text(
'${context.translation.orderWorkNumber}: ${workOrder.workOrderNo}',
style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575)),
style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:const Color(0xFF757575)),
),
Text(
'${context.translation.assignedEmployee}: ${workOrder.assignedEmployee?.name ?? ""}',
style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575)),
style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:const Color(0xFF757575)),
),
Text('${context.translation.visitDate}: ${workOrder.visitDate?.toServiceRequestDetailsFormat ?? ""}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))),
Text('${context.translation.assetSN}: ${workOrder.callRequest.asset.assetSerialNo ?? ""}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))),
Text('${context.translation.assetName}: ${workOrder.callRequest.asset.modelDefinition.assetName ?? ""}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))),
Text('${context.translation.assetNumber}: ${workOrder.callRequest.asset.assetNumber ?? ""}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))),
Text('${context.translation.model}: ${workOrder.callRequest.asset.modelDefinition.modelName ?? ""}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))),
Text('${context.translation.site}: ${workOrder.callRequest.asset.site.custName ?? ""}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))),
Text('${context.translation.callLastSituation}: ${workOrder.calllastSituation.name ?? '' ?? ""}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))),
Text('${context.translation.visitDate}: ${workOrder.visitDate?.toServiceRequestDetailsFormat ?? ""}', style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:const Color(0xFF757575))),
Text('${context.translation.assetSN}: ${workOrder.callRequest.asset.assetSerialNo ?? ""}', style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:const Color(0xFF757575))),
Text('${context.translation.assetName}: ${workOrder.callRequest.asset.modelDefinition.assetName ?? ""}', style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:const Color(0xFF757575))),
Text('${context.translation.assetNumber}: ${workOrder.callRequest.asset.assetNumber ?? ""}', style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:const Color(0xFF757575))),
Text('${context.translation.model}: ${workOrder.callRequest.asset.modelDefinition.modelName ?? ""}', style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:const Color(0xFF757575))),
Text('${context.translation.site}: ${workOrder.callRequest.asset.site.custName ?? ""}', style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:const Color(0xFF757575))),
Text('${context.translation.callLastSituation}: ${workOrder.calllastSituation.name ?? '' ?? ""}', style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:const Color(0xFF757575))),
],
).paddingAll(16),
),

@ -38,7 +38,7 @@ class WorkOrderListPage extends StatelessWidget {
print("serviceRequest.statusValue:${serviceRequest.statusValue}");
return Scaffold(
appBar: DefaultAppBar(title: context.translation.workOrders),
backgroundColor: const Color(0xfff8f9fb),
//backgroundColor: const Color(0xfff8f9fb),
body: SafeArea(
child: FutureBuilder(
future: serviceRequestsProvider.searchWorkOrders(callId: serviceRequest.requestCode),
@ -56,86 +56,77 @@ class WorkOrderListPage extends StatelessWidget {
Color itemColor = index % 2 == 0 ? Theme.of(context).colorScheme.primary : Theme.of(context).colorScheme.onPrimary;
Color onItemColor = index % 2 != 0 ? Theme.of(context).colorScheme.primary : Theme.of(context).colorScheme.onPrimary;
return Container(
decoration: ShapeDecoration(
color: Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20),
),
shadows: const [BoxShadow(color: Color(0x07000000), blurRadius: 14, offset: Offset(0, 0), spreadRadius: 0)],
),
child: Column(
children: [
Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
StatusLabel(label: workOrders[index].currentSituation.name, textColor: AppColor.orange60, backgroundColor: AppColor.orange40),
8.height,
Text(serviceRequest.requestCode, style: AppTextStyles.heading5.copyWith(color: const Color(0xFF3B3D4A))),
],
).expanded,
if (_userProvider.user.type == UsersTypes.engineer && serviceRequest.statusValue != 5 && serviceRequest.statusValue != 3)
context.translation.edit.toSvgAsset(height: 48, width: 48).onPress(() {
Navigator.of(context).push(
MaterialPageRoute(builder: (_) => UpdateServiceReport(request: serviceRequest, workOrder: workOrders[index])),
);
})
],
),
8.height,
Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'${context.translation.assetName}: ${workOrders[index].callRequest.asset.modelDefinition.assetName}',
style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575)),
),
Text(
'${context.translation.status}: ${workOrders[index].currentSituation.name}',
style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575)),
),
],
).expanded,
Text(workOrders[index].visitDate?.toServiceRequestCardFormat ?? "", textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: const Color(0xFF3B3D4A))),
],
),
16.height,
Row(
mainAxisSize: MainAxisSize.min,
children: [
Text(
context.translation.viewDetails,
style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF4A8DB7)),
),
4.width,
const Icon(Icons.arrow_forward, color: Color(0xFF4A8DB7), size: 14)
],
).onPress(() {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => WorkOrderDetailsPage(workOrder: workOrders[index], serviceRequest: serviceRequest)),
);
}),
],
).paddingAll(16).onPress(() {
// onPressed(request);
}),
],
),
);
return Column(
children: [
Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
StatusLabel(label: workOrders[index].currentSituation.name, textColor: AppColor.orange60, backgroundColor: AppColor.orange40),
8.height,
Text(serviceRequest.requestCode, style: AppTextStyles.heading5.copyWith(color: context.isDark?AppColor.neutral30:const Color(0xFF3B3D4A))),
],
).expanded,
if (_userProvider.user.type == UsersTypes.engineer && serviceRequest.statusValue != 5 && serviceRequest.statusValue != 3)
context.translation.edit.toSvgAsset(height: 48, width: 48).onPress(() {
Navigator.of(context).push(
MaterialPageRoute(builder: (_) => UpdateServiceReport(request: serviceRequest, workOrder: workOrders[index])),
);
})
],
),
8.height,
Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'${context.translation.assetName}: ${workOrders[index].callRequest.asset.modelDefinition.assetName}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:const Color(0xFF757575)),
),
Text(
'${context.translation.status}: ${workOrders[index].currentSituation.name}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:const Color(0xFF757575)),
),
],
).expanded,
Text(workOrders[index].visitDate?.toServiceRequestCardFormat ?? "", textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark?AppColor.neutral30:const Color(0xFF3B3D4A))),
],
),
16.height,
Row(
mainAxisSize: MainAxisSize.min,
children: [
Text(
context.translation.viewDetails,
style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF4A8DB7)),
),
4.width,
const Icon(Icons.arrow_forward, color: Color(0xFF4A8DB7), size: 14)
],
).onPress(() {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => WorkOrderDetailsPage(workOrder: workOrders[index], serviceRequest: serviceRequest)),
);
}),
],
).paddingAll(16).onPress(() {
// onPressed(request);
}),
],
).toShadowContainer(context);
},
).expanded,
if (_userProvider.user.type == UsersTypes.engineer && (serviceRequest.statusValue != 5 && serviceRequest.statusValue != 3))

@ -87,12 +87,12 @@ class _EditPentryState extends State<EditPentry> with SingleTickerProviderStateM
child: Column(
children: [
Container(
decoration: BoxDecoration(color: AppColor.neutral30, borderRadius: BorderRadius.circular(16)),
decoration: BoxDecoration(color: context.isDark?AppColor.neutral10 : AppColor.neutral30, borderRadius: BorderRadius.circular(16)),
child: TabBar(
controller: _tabController,
isScrollable: true,
padding: EdgeInsets.zero,
labelColor: AppColor.neutral60,
labelColor: context.isDark? AppColor.neutral10 :AppColor.neutral60,
unselectedLabelColor: AppColor.neutral20,
indicatorPadding: const EdgeInsets.all(4),
indicator: BoxDecoration(color: Theme.of(context).cardColor, borderRadius: BorderRadius.circular(13)),

@ -31,51 +31,42 @@ class VisitDetailsPage extends StatelessWidget {
child: Column(
children: [
SingleChildScrollView(
child: Container(
margin: const EdgeInsets.all(16),
width: double.infinity,
decoration: ShapeDecoration(
color: Colors.white,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)),
shadows: const [BoxShadow(color: Color(0x07000000), blurRadius: 14, offset: Offset(0, 0), spreadRadius: 0)],
),
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
// StatusLabel(
// label: visit.priority.name,
// id: visit.priority.id,
// textColor: AColors.getPriorityStatusTextColor(visit.priority.id),
// backgroundColor: AColors.getPriorityStatusColor(visit.priority.id)),
// 8.width,
StatusLabel(
label: visit.status.name,
id: visit.status.id,
textColor: AColors.getRequestStatusTextColorByName(visit.status.name),
backgroundColor: AColors.getRequestStatusColorByName(visit.status.name),
),
1.width.expanded,
],
),
8.height,
Text(visit.deviceEnglishName, style: AppTextStyles.heading5.copyWith(color: const Color(0xFF3B3D4A))),
8.height,
Text('${context.translation.assetNumber}: ${visit.deviceNumber}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))),
Text('${context.translation.assetSN}: ${visit.deviceSerialNumber}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))),
Text('${context.translation.code}: ${visit.serialNumber}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))),
const Divider().defaultStyle(context),
Text('${context.translation.expectDate}: ${visit.expectDate?.toServiceRequestDetailsFormat}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))),
Text('${context.translation.actualDate}: ${visit.actualDate?.toServiceRequestDetailsFormat}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))),
const Divider().defaultStyle(context),
Text('${context.translation.assignedTo}: ${visit.assignTo}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))),
Text('${context.translation.engineerName}: ${visit.employName}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))),
Text('${context.translation.site}: ${visit.hospitalName}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))),
],
).paddingAll(16),
),
child: Column(
//mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
// StatusLabel(
// label: visit.priority.name,
// id: visit.priority.id,
// textColor: AColors.getPriorityStatusTextColor(visit.priority.id),
// backgroundColor: AColors.getPriorityStatusColor(visit.priority.id)),
// 8.width,
StatusLabel(
label: visit.status.name,
id: visit.status.id,
textColor: AColors.getRequestStatusTextColorByName(visit.status.name),
backgroundColor: AColors.getRequestStatusColorByName(visit.status.name),
),
1.width.expanded,
],
),
8.height,
visit.deviceEnglishName.heading5(context),
8.height,
'${context.translation.assetNumber}: ${visit.deviceNumber}'.bodyText(context),
'${context.translation.assetSN}: ${visit.deviceSerialNumber}'.bodyText(context),
'${context.translation.code}: ${visit.serialNumber}'.bodyText(context),
const Divider().defaultStyle(context),
'${context.translation.expectDate}: ${visit.expectDate?.toServiceRequestDetailsFormat}'.bodyText(context),
'${context.translation.actualDate}: ${visit.actualDate?.toServiceRequestDetailsFormat}'.bodyText(context),
const Divider().defaultStyle(context),
'${context.translation.assignedTo}: ${visit.assignTo}'.bodyText(context),
'${context.translation.engineerName}: ${visit.employName}'.bodyText(context),
'${context.translation.site}: ${visit.hospitalName}'.bodyText(context),
],
).toShadowContainer(context).paddingAll(16),
).expanded,
if (userProvider.user.type == UsersTypes.engineer && visit.status.id != 270)
AppFilledButton(

@ -19,7 +19,7 @@ class ADatePicker extends StatelessWidget {
Widget build(BuildContext context) {
return Container(
decoration: BoxDecoration(
color: Colors.white,
color: context.isDark?AppColor.neutral50:Colors.white,
borderRadius: BorderRadius.circular(10),
border: Border.all(width: 1, color: Theme.of(context).scaffoldBackgroundColor),
boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)],

@ -4,6 +4,7 @@ import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/device/asset_transfer.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import '../../../extensions/text_extensions.dart';
@ -22,15 +23,10 @@ class DeviceTransferItem extends StatelessWidget {
Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Text(context.translation.deviceTransferRequest, style: AppTextStyles.heading5.copyWith(color: const Color(0xFF3B3D4A))),
Text(
'${context.translation.from} : ${item.senderAssignedEmployeeName}',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
Text(
'${context.translation.to} : ${item.receiverAssignedEmployeeName}',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
context.translation.deviceTransferRequest.heading5(context),
'${context.translation.from} : ${item.senderAssignedEmployeeName}'.bodyText(context),
'${context.translation.to} : ${item.receiverAssignedEmployeeName}'.bodyText(context),
8.height,
Row(
mainAxisSize: MainAxisSize.min,
@ -63,7 +59,7 @@ class DeviceTransferItem extends StatelessWidget {
/// TBD
//StatusLabel(label: '', textColor: AColors.getRequestStatusTextColor(0), backgroundColor: AColors.getRequestStatusColor(0)),
1.width,
Text(item.createdOn != null ? item.createdOn.toServiceRequestCardFormat : "", textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: const Color(0xFF3B3D4A))),
Text(item.createdOn != null ? item.createdOn.toServiceRequestCardFormat : "", textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark? AppColor.neutral10 : const Color(0xFF3B3D4A))),
],
),
],

@ -1,6 +1,7 @@
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:signature/signature.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';
@ -57,7 +58,7 @@ class _ESignatureState extends State<ESignature> {
width: MediaQuery.of(context).size.width,
padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 8.toScreenHeight),
decoration: BoxDecoration(
color: Colors.white,
color: context.isDark?Theme.of(context).cardColor:Colors.white,
borderRadius: _editable ? const BorderRadius.only(topLeft: Radius.circular(10), topRight: Radius.circular(10)) : BorderRadius.circular(10),
boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)],
),

@ -13,6 +13,8 @@ import 'package:test_sa/views/widgets/loaders/failed_loading.dart';
import 'package:test_sa/views/widgets/loaders/lazy_loading.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import '../../../new_views/app_style/app_color.dart';
class AssetDetailPage extends StatefulWidget {
static const String id = "/asset-details";
@ -62,111 +64,94 @@ class _AssetDetailPageState extends State<AssetDetailPage> {
if (snapshot.hasData) {
return SingleChildScrollView(
padding: const EdgeInsets.all(16),
child: Container(
padding: const EdgeInsets.all(16),
decoration: ShapeDecoration(
color: Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
AspectRatio(
aspectRatio: 159 / 94,
child: Container(
width: 95,
height: 95,
decoration: ShapeDecoration(
color: const Color(0xFFEAF1F4),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
image: DecorationImage(
fit: BoxFit.cover,
image: NetworkImage(
_assetProvider.assetById?.assetPhoto != null ? URLs.getFileUrl(_assetProvider.assetById.assetPhoto) : "https://www.lasteelcraft.com/images/no-image-available.png"),
)),
),
),
shadows: const [BoxShadow(color: Color(0x07000000), blurRadius: 14, offset: Offset(0, 0), spreadRadius: 0)],
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
AspectRatio(
aspectRatio: 159 / 94,
child: Container(
width: 95,
height: 95,
decoration: ShapeDecoration(
color: const Color(0xFFEAF1F4),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
image: DecorationImage(
fit: BoxFit.cover,
image: NetworkImage(
_assetProvider.assetById?.assetPhoto != null ? URLs.getFileUrl(_assetProvider.assetById.assetPhoto) : "https://www.lasteelcraft.com/images/no-image-available.png"),
)),
6.height,
Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
_assetProvider.assetById?.modelDefinition?.assetName ?? "-".heading5(context),
),
),
6.height,
Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
_assetProvider.assetById?.modelDefinition?.assetName ?? "-",
style: AppTextStyles.heading5.copyWith(color: Color(0xFF3B3D4A)),
),
8.height,
Text(
"${context.translation.assetNumber}: ${_assetProvider.assetById.multiAssets.first.assetNumber}",
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
Text(
"${context.translation.model}: ${_assetProvider.assetById.modelDefinition.modelDefCode}",
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
Text(
"${context.translation.serialNo}: ${_assetProvider.assetById.multiAssets.first.assetSerialNo}",
maxLines: 2,
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
Text(
"MD: ${_assetProvider.assetById.department.departmentName ?? "-"}",
maxLines: 2,
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
Text(
"Supplier: ${_assetProvider.assetById.supplier?.suppliername ?? "-"}",
maxLines: 2,
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
Text(
"Manufacturer: ${_assetProvider.assetById.modelDefinition.manufacturerName}",
maxLines: 2,
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
Text(
"Location: ${_assetProvider.assetById.site.custName}",
maxLines: 2,
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
8.height,
"${context.translation.assetNumber}: ${_assetProvider.assetById.multiAssets.first.assetNumber}".bodyText(context),
"${context.translation.model}: ${_assetProvider.assetById.modelDefinition.modelDefCode}".bodyText(context),
Text(
"${context.translation.serialNo}: ${_assetProvider.assetById.multiAssets.first.assetSerialNo}",
maxLines: 2,
style: AppTextStyles.bodyText.copyWith(color: context.isDark? AppColor.neutral10:Color(0xFF757575)),
),
Text(
"MD: ${_assetProvider.assetById.department.departmentName ?? "-"}",
maxLines: 2,
style: AppTextStyles.bodyText.copyWith(color: context.isDark? AppColor.neutral10: Color(0xFF757575)),
),
Text(
"Supplier: ${_assetProvider.assetById.supplier?.suppliername ?? "-"}",
maxLines: 2,
style: AppTextStyles.bodyText.copyWith(color: context.isDark? AppColor.neutral10: Color(0xFF757575)),
),
Text(
"Manufacturer: ${_assetProvider.assetById.modelDefinition.manufacturerName}",
maxLines: 2,
style: AppTextStyles.bodyText.copyWith(color: context.isDark? AppColor.neutral10: Color(0xFF757575)),
),
Text(
"Location: ${_assetProvider.assetById.site.custName}",
maxLines: 2,
style: AppTextStyles.bodyText.copyWith(color: context.isDark? AppColor.neutral10: Color(0xFF757575)),
),
8.height,
const Divider(color: Color(0xFFEAF1F4), height: 1, thickness: 1),
8.height,
Text(
"Installation Date: ${_assetProvider.assetById.installationDate ?? "-"}",
maxLines: 2,
style: AppTextStyles.bodyText.copyWith(color: context.isDark? AppColor.neutral10: Color(0xFF757575)),
),
Text(
"Next PM Date: ${_assetProvider.assetById.installationDate ?? "-"}",
maxLines: 2,
style: AppTextStyles.bodyText.copyWith(color: context.isDark? AppColor.neutral10: Color(0xFF757575)),
),
Text(
"Last PM Date: ${_assetProvider.assetById.installationDate ?? "-"}",
maxLines: 2,
style: AppTextStyles.bodyText.copyWith(color: context.isDark? AppColor.neutral10: Color(0xFF757575)),
),
if ((_assetProvider.assetById.modelDefinition.assetDescription ?? "").isNotEmpty) ...[
8.height,
const Divider(color: Color(0xFFEAF1F4), height: 1, thickness: 1),
8.height,
Text(
"Installation Date: ${_assetProvider.assetById.installationDate ?? "-"}",
maxLines: 2,
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
Text(
"Next PM Date: ${_assetProvider.assetById.installationDate ?? "-"}",
_assetProvider.assetById.modelDefinition.assetDescription ?? "-",
maxLines: 2,
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
style: AppTextStyles.bodyText.copyWith(color: context.isDark? AppColor.neutral10: Color(0xFF757575)),
),
Text(
"Last PM Date: ${_assetProvider.assetById.installationDate ?? "-"}",
maxLines: 2,
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
if ((_assetProvider.assetById.modelDefinition.assetDescription ?? "").isNotEmpty) ...[
8.height,
const Divider(color: Color(0xFFEAF1F4), height: 1, thickness: 1),
8.height,
Text(
_assetProvider.assetById.modelDefinition.assetDescription ?? "-",
maxLines: 2,
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
]
],
)
],
),
),
]
],
)
],
).toShadowContainer(context),
);
}
return Center(child: ALoading());

@ -5,6 +5,7 @@ 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/device/asset.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
class AssetItemGridView extends StatelessWidget {
final Asset device;
@ -14,84 +15,68 @@ class AssetItemGridView extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
padding: const EdgeInsets.all(16),
decoration: ShapeDecoration(
color: Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20),
return Column(
children: [
AspectRatio(
aspectRatio: 159 / 94,
child: Container(
width: 95,
height: 95,
decoration: ShapeDecoration(
color: const Color(0xFFEAF1F4),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
image: DecorationImage(
fit: BoxFit.cover,
image: NetworkImage(device.assetPhoto != null ? URLs.getFileUrl(device.assetPhoto) : "https://www.lasteelcraft.com/images/no-image-available.png"),
)),
),
),
shadows: const [BoxShadow(color: Color(0x07000000), blurRadius: 14, offset: Offset(0, 0), spreadRadius: 0)],
),
child: Column(
children: [
AspectRatio(
aspectRatio: 159 / 94,
child: Container(
width: 95,
height: 95,
decoration: ShapeDecoration(
color: const Color(0xFFEAF1F4),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
image: DecorationImage(
fit: BoxFit.cover,
image: NetworkImage(device.assetPhoto != null ? URLs.getFileUrl(device.assetPhoto) : "https://www.lasteelcraft.com/images/no-image-available.png"),
)),
6.height,
Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
device.modelDefinition.assetName,
maxLines: 2,
style: AppTextStyles.bodyText.copyWith(color: context.isDark? AppColor.neutral30: Color(0xFF3B3D4A)),
),
),
6.height,
Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
device.modelDefinition.assetName,
maxLines: 2,
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF3B3D4A)),
),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Text(
"${context.translation.assetNumber} : ${device.assetNumber}",
style: AppTextStyles.bodyText2.copyWith(color: Color(0xFF757575)),
),
Text(
"${context.translation.model} : ${device.modelDefinition.modelDefCode}",
style: AppTextStyles.bodyText2.copyWith(color: Color(0xFF757575)),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
"${context.translation.assetNumber} : ${device.assetNumber}".bodyText2(context),
"${context.translation.model} : ${device.modelDefinition.modelDefCode}".bodyText2(context),
Text(
"${context.translation.serialNo} : ${device.assetSerialNo}",
maxLines: 2,
overflow: TextOverflow.fade,
style: AppTextStyles.bodyText2.copyWith(
color: context.isDark? AppColor.neutral10: Color(0xFF757575),
),
Text(
"${context.translation.serialNo} : ${device.assetSerialNo}",
maxLines: 2,
overflow: TextOverflow.fade,
style: AppTextStyles.bodyText2.copyWith(
color: Color(0xFF757575),
),
),
],
),
Row(
mainAxisSize: MainAxisSize.min,
children: [
Text(
'View Details',
style: AppTextStyles.bodyText2.copyWith(color: const Color(0xFF4A8DB7)),
),
4.width,
const Icon(
Icons.arrow_forward,
color: Color(0xFF4A8DB7),
size: 14,
)
],
),
],
).expanded
],
),
).onPress(() => onPressed(device));
),
],
),
Row(
mainAxisSize: MainAxisSize.min,
children: [
Text(
'View Details',
style: AppTextStyles.bodyText2.copyWith(color: const Color(0xFF4A8DB7)),
),
4.width,
const Icon(
Icons.arrow_forward,
color: Color(0xFF4A8DB7),
size: 14,
)
],
),
],
).expanded
],
).onPress(() => onPressed(device)).toShadowContainer(context);
}
}

@ -38,29 +38,15 @@ class AssetItemListView extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Text(
device.modelDefinition.assetName,
maxLines: 2,
style: AppTextStyles.heading5.copyWith(color: Color(0xFF3B3D4A)),
),
Text(
"${context.translation.assetNumber} : ${device.assetNumber}",
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
Text(
"${context.translation.model} : ${device.modelDefinition.modelDefCode}",
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
device.modelDefinition.assetName.heading5(context),
"${context.translation.assetNumber} : ${device.assetNumber}".bodyText(context),
"${context.translation.model} : ${device.modelDefinition.modelDefCode}".bodyText(context),
],
),
Row(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Text(
"${context.translation.serialNo} : ${device.assetSerialNo}",
maxLines: 2,
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
).expanded,
"${context.translation.serialNo} : ${device.assetSerialNo}".bodyText(context).expanded,
Row(
mainAxisSize: MainAxisSize.min,
children: [

@ -91,7 +91,7 @@ class _SingleDevicePickerState extends State<SingleDevicePicker> {
padding: const EdgeInsets.only(left: 16, right: 8),
alignment: Alignment.center,
decoration: ShapeDecoration(
color: Color(0xFFEAF1F4),
color: context.isDark?Color(0xFF3B3D4A): Color(0xFFEAF1F4),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),

@ -6,6 +6,7 @@ import 'package:test_sa/extensions/widget_extensions.dart';
import '../../../extensions/text_extensions.dart';
import '../../../models/new_models/gas_refill_model.dart';
import '../../../new_views/app_style/app_color.dart';
import '../../app_style/colors.dart';
import '../requests/request_status.dart';
@ -33,19 +34,13 @@ class GasRefillItem extends StatelessWidget {
// 8.width,
StatusLabel(label: item.status.name, textColor: AColors.getRequestStatusTextColor(item.status.value), backgroundColor: AColors.getRequestStatusColor(item.status.value)),
1.width.expanded,
Text(item.startDate != null ? item.startDate.toServiceRequestCardFormat : "", textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: const Color(0xFF3B3D4A))),
Text(item.startDate != null ? item.startDate.toServiceRequestCardFormat : "", textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark?AppColor.neutral10 :const Color(0xFF3B3D4A))),
],
),
8.height,
Text(context.translation.gasRefillRequest, style: AppTextStyles.heading5.copyWith(color: const Color(0xFF3B3D4A))),
Text(
'${context.translation.gasType}: ${item.gazRefillDetails[0].gasType.name}',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
Text(
'${context.translation.site}: ${item.site.name}',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
context.translation.gasRefillRequest.heading5(context),
'${context.translation.gasType}: ${item.gazRefillDetails[0].gasType.name}'.bodyText(context),
'${context.translation.site}: ${item.site.name}'.bodyText(context),
8.height,
Row(
mainAxisSize: MainAxisSize.min,

@ -1,8 +1,12 @@
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart';
import '../../../new_views/app_style/app_color.dart';
class LandPageItem extends StatelessWidget {
final String text;
final IconData icon;
@ -14,40 +18,26 @@ class LandPageItem extends StatelessWidget {
Widget build(BuildContext context) {
return InkWell(
onTap: onPressed,
child: Container(
padding: const EdgeInsets.only(left: 20, right: 20, bottom: 15, top: 28),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(15),
boxShadow: [
BoxShadow(
color: const Color(0xff000000).withOpacity(.15),
blurRadius: 26,
offset: const Offset(0, -3),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
if (icon != null)
Icon(
icon,
color: AColors.primaryColor,
size: 42 * AppStyle.getScaleFactor(context),
),
if (svgPath != null)
SvgPicture.asset(
svgPath,
width: 42 * AppStyle.getScaleFactor(context),
height: 42 * AppStyle.getScaleFactor(context),
color: AColors.primaryColor,
),
],
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
if (icon != null)
Icon(
icon,
color: AColors.primaryColor,
size: 42 * AppStyle.getScaleFactor(context),
),
if (svgPath != null)
SvgPicture.asset(
svgPath,
width: 42 * AppStyle.getScaleFactor(context),
height: 42 * AppStyle.getScaleFactor(context),
color: AColors.primaryColor,
),
Text(text, style: const TextStyle(color: AColors.grey3A)),
],
),
),
Text(text, style: TextStyle(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50,)),
],
).toShadowContainer(context),
);
}
}

@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
@ -22,19 +23,19 @@ class NotificationItem extends StatelessWidget {
children: [
Text(
notification.title ?? "",
style: AppTextStyles.heading6.copyWith(color: AppColor.neutral50),
style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50,),
).expanded,
8.width,
Text(
notification.createdOn.toServiceRequestCardFormat ?? "",
textAlign: TextAlign.right,
style: AppTextStyles.tinyFont.copyWith(color: AppColor.neutral50),
style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral20 : AppColor.neutral50,),
),
],
),
Text(
notification.text ?? "",
style: AppTextStyles.bodyText2.copyWith(color: Color(0xFF757575)),
style: AppTextStyles.bodyText2.copyWith(color: context.isDark ? AppColor.neutral10 : Color(0xFF757575),),
),
],
).onPress(() {
@ -42,3 +43,4 @@ class NotificationItem extends StatelessWidget {
});
}
}

@ -16,6 +16,8 @@ import 'package:test_sa/models/user.dart';
import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/widgets/requests/request_status.dart';
import '../../../new_views/app_style/app_color.dart';
class ServiceRequestItem extends StatelessWidget {
final int index;
final ServiceRequest request;
@ -31,74 +33,65 @@ class ServiceRequestItem extends StatelessWidget {
Color itemColor = index % 2 == 0 ? Theme.of(context).colorScheme.primary : Theme.of(context).colorScheme.onPrimary;
Color onItemColor = index % 2 != 0 ? Theme.of(context).colorScheme.primary : Theme.of(context).colorScheme.onPrimary;
return Container(
decoration: ShapeDecoration(
color: Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20),
),
shadows: const [BoxShadow(color: Color(0x07000000), blurRadius: 14, offset: Offset(0, 0), spreadRadius: 0)],
),
child: Column(
children: [
Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
StatusLabel(
label: request.priority.name,
id: request.priority.id,
textColor: AColors.getPriorityStatusTextColor(request.priority.id),
backgroundColor: AColors.getPriorityStatusColor(request.priority.id)),
8.width,
StatusLabel(label: request.statusLabel, textColor: AColors.getRequestStatusTextColor(request.statusValue), backgroundColor: AColors.getRequestStatusColor(request.statusValue)),
1.width.expanded,
Text(request.date.toServiceRequestCardFormat, textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: const Color(0xFF3B3D4A))),
],
),
8.height,
Text(context.translation.serviceRequest, style: AppTextStyles.heading5.copyWith(color: const Color(0xFF3B3D4A))),
Text(
'${context.translation.assetName}: ${request.deviceEnName}',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
Text(
'${context.translation.assetNumber}: ${request.device.assetNumber}',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
Text(
'${context.translation.requestType}: ${request.type.name}',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
Text(
'${context.translation.requestNo}: ${request.requestCode}',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
8.height,
Row(
mainAxisSize: MainAxisSize.min,
children: [
Text(
context.translation.viewDetails,
style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF4A8DB7)),
),
4.width,
const Icon(
Icons.arrow_forward,
color: Color(0xFF4A8DB7),
size: 14,
)
],
),
],
).paddingAll(16).onPress(() {
onPressed(request);
}),
],
),
return Column(
children: [
Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
StatusLabel(
label: request.priority.name,
id: request.priority.id,
textColor: AColors.getPriorityStatusTextColor(request.priority.id),
backgroundColor: AColors.getPriorityStatusColor(request.priority.id)),
8.width,
StatusLabel(label: request.statusLabel, textColor: AColors.getRequestStatusTextColor(request.statusValue), backgroundColor: AColors.getRequestStatusColor(request.statusValue)),
1.width.expanded,
Text(request.date.toServiceRequestCardFormat, textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark? AppColor.neutral30:const Color(0xFF3B3D4A))),
],
),
8.height,
Text(context.translation.serviceRequest, style: AppTextStyles.heading5.copyWith(color: context.isDark? AppColor.neutral30:const Color(0xFF3B3D4A))),
Text(
'${context.translation.assetName}: ${request.deviceEnName}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:Color(0xFF757575)),
),
Text(
'${context.translation.assetNumber}: ${request.device.assetNumber}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:Color(0xFF757575)),
),
Text(
'${context.translation.requestType}: ${request.type.name}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:Color(0xFF757575)),
),
Text(
'${context.translation.requestNo}: ${request.requestCode}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:Color(0xFF757575)),
),
8.height,
Row(
mainAxisSize: MainAxisSize.min,
children: [
Text(
context.translation.viewDetails,
style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF4A8DB7)),
),
4.width,
const Icon(
Icons.arrow_forward,
color: Color(0xFF4A8DB7),
size: 14,
)
],
),
],
).paddingAll(16).onPress(() {
onPressed(request);
}).toShadowContainer(context),
],
);
}
}

@ -1,6 +1,7 @@
import 'dart:async';
import 'package:flutter/material.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';
@ -107,7 +108,7 @@ class _AppTimerState extends State<AppTimer> {
height: 56.toScreenHeight,
padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth),
decoration: BoxDecoration(
color: Theme.of(context).cardColor,
color: context.isDark?AppColor.neutral50:Theme.of(context).cardColor,
borderRadius: BorderRadius.circular(10),
boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)],
),

@ -46,20 +46,11 @@ class VisitItem extends StatelessWidget {
],
),
8.height,
Text(visit.deviceEnglishName, style: AppTextStyles.heading5.copyWith(color: const Color(0xFF3B3D4A))),
visit.deviceEnglishName.heading5(context),
8.height,
Text(
'${context.translation.assetNumber}: ${visit.deviceNumber}',
style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575)),
),
Text(
'${context.translation.assetSN}: ${visit.deviceSerialNumber}',
style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575)),
),
Text(
'${context.translation.code}: ${visit.serialNumber}',
style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575)),
),
'${context.translation.assetNumber}: ${visit.deviceNumber}'.bodyText(context),
'${context.translation.assetSN}: ${visit.deviceSerialNumber}'.bodyText(context),
'${context.translation.code}: ${visit.serialNumber}'.bodyText(context),
16.height,
Row(
mainAxisSize: MainAxisSize.min,

@ -42,11 +42,14 @@ class _VisitsListState extends State<VisitsList> {
onLazyLoad: widget.onLazyLoad,
child: ListView.builder(
itemCount: widget.visits.length,
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 16),
itemBuilder: (context, itemIndex) {
Visit visit = widget.visits[itemIndex];
// bool isSelected = _selectedVisits.contains(visit);
return VisitItem(visit: visit);
return Padding(
padding: const EdgeInsets.only(bottom: 8.0),
child: VisitItem(visit: visit),
);
},
),
),

Loading…
Cancel
Save