dark / ligth dark

design_3.0_demo_module
nextwo 2 years ago
parent 4d07ddc7e8
commit 204305f705

@ -349,7 +349,8 @@
"addItem" : "اضافة عنصر", "addItem" : "اضافة عنصر",
"item" : "عنصر", "item" : "عنصر",
"serialNo" : "رقم التسلسلي", "serialNo" : "رقم التسلسلي",
"measuredValue": "القيمة المقاسه" "measuredValue": "القيمة المقاسه",
"sureExit" : " هل انت متاكد من الخروج؟"
} }

@ -324,7 +324,7 @@
"viewDetails" : "View Details", "viewDetails" : "View Details",
"requests" : "Requests", "requests" : "Requests",
"highPriorityRequests" : "High Priority\nRequests", "highPriorityRequests" : "High Priority\nRequests",
"newRequests" : "New Request\nRequests", "newRequests" : "New\nRequests",
"completedRequests" : "completed\nRequests", "completedRequests" : "completed\nRequests",
"overdueRequests": "overdue\nRequests", "overdueRequests": "overdue\nRequests",
"highPriority" : "High Priority", "highPriority" : "High Priority",
@ -348,8 +348,8 @@
"asset" : "Asset", "asset" : "Asset",
"addItem" : "Add Item", "addItem" : "Add Item",
"item" : "Item", "item" : "Item",
"measuredValue": "Measured Value" "measuredValue": "Measured Value",
"sureExit" : "Are you sure ypu want to Exit? "
} }

@ -68,20 +68,20 @@ class AppDrawer extends StatelessWidget {
// "logout" : "خروج" // "logout" : "خروج"
padding: const EdgeInsets.only(top: 24), padding: const EdgeInsets.only(top: 24),
children: [ 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, 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, 18.height,
drawerItem("rate_us", context.translation.rateUs), drawerItem("rate_us", context.translation.rateUs, context),
18.height, 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, 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, 18.height,
drawerItem("whats_new", context.translation.whatsNew), drawerItem("whats_new", context.translation.whatsNew, context),
], ],
).expanded, ).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( bool result = await showDialog(
context: context, context: context,
builder: (_) => AAlertDialog(title: context.translation.signOut, content: context.translation.logoutAlert), builder: (_) => AAlertDialog(title: context.translation.signOut, content: context.translation.logoutAlert),
@ -101,7 +101,7 @@ class AppDrawer extends StatelessWidget {
children: [ children: [
Text( Text(
"Powered By Cloud Solutions", "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), textScaleFactor: AppStyle.getScaleFactor(context),
), ),
6.width, 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( return Row(
children: [ children: [
SvgPicture.asset( SvgPicture.asset(
@ -125,7 +125,7 @@ class AppDrawer extends StatelessWidget {
16.width, 16.width,
Text( Text(
title, 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:flutter/material.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
@ -41,21 +42,21 @@ class _CalendarPageState extends State<CalendarPage> with SingleTickerProviderSt
"My Shift".heading5(context), "My Shift".heading5(context),
8.height, 8.height,
"Sunday to Thursday".bodyText(context), "Sunday to Thursday".bodyText(context),
"09:00 to 18:00".bodyText(context).custom(color: AppColor.neutral50), "09:00 to 18:00".bodyText(context).custom(color: context.isDark? AppColor.neutral10: AppColor.neutral50),
], ],
).toShadowContainer(context), ).toShadowContainer(context),
).paddingOnly(start: 16, end: 16), ).paddingOnly(start: 16, end: 16),
16.height, 16.height,
Container( Container(
margin: const EdgeInsets.only(left: 16, right: 16), 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( child: TabBar(
controller: _tabController, controller: _tabController,
padding: EdgeInsets.zero, padding: EdgeInsets.zero,
labelColor: AppColor.neutral60, labelColor: AppColor.neutral60,
unselectedLabelColor: AppColor.neutral20, unselectedLabelColor: AppColor.neutral20,
indicatorPadding: const EdgeInsets.all(4), 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) { onTap: (index) {
setState(() {}); setState(() {});
}, },

@ -1,5 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:intl/intl.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/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
@ -19,9 +20,9 @@ class CalendarHeader extends StatelessWidget {
children: [ children: [
dateFormat.format(dateTime).heading5(context), dateFormat.format(dateTime).heading5(context),
6.width, 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 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, 8.height,

@ -1,6 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:table_calendar/table_calendar.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/int_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
@ -41,7 +42,7 @@ class _MonthlyFragmentState extends State<MonthlyFragment> {
headerTitleBuilder: (context, dateTime) => CalendarHeader(dateFormat: DateFormat("MMMM, yyyy"), dateTime: dateTime), headerTitleBuilder: (context, dateTime) => CalendarHeader(dateFormat: DateFormat("MMMM, yyyy"), dateTime: dateTime),
dowBuilder: (context, dateTime) { dowBuilder: (context, dateTime) {
final day = DateFormat("EE").format(dateTime).toUpperCase(); final day = DateFormat("EE").format(dateTime).toUpperCase();
return Align(alignment: Alignment.center, child: day.bodyText(context).custom(color: AppColor.neutral50)); return Align(alignment: Alignment.center, child: day.bodyText(context).custom(color: context.isDark? AppColor.neutral10:AppColor.neutral50));
}, },
defaultBuilder: (context, dateTime, _) { defaultBuilder: (context, dateTime, _) {
final day = DateFormat("d").format(dateTime); final day = DateFormat("d").format(dateTime);
@ -69,7 +70,7 @@ class _MonthlyFragmentState extends State<MonthlyFragment> {
children: [ children: [
const CircleAvatar(backgroundColor: AppColor.primary40, radius: 8), const CircleAvatar(backgroundColor: AppColor.primary40, radius: 8),
8.width, 8.width,
"My Requests".heading6(context), context.translation.myRequests.heading6(context),
], ],
), ),
16.height, 16.height,

@ -1,6 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:table_calendar/table_calendar.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/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
@ -57,7 +58,7 @@ class _WeeklyFragmentState extends State<WeeklyFragment> {
), ),
dowBuilder: (context, dateTime) { dowBuilder: (context, dateTime) {
final day = DateFormat("EE").format(dateTime).toUpperCase(); final day = DateFormat("EE").format(dateTime).toUpperCase();
return Align(alignment: Alignment.center, child: day.bodyText(context).custom(color: AppColor.neutral50)); return Align(alignment: Alignment.center, child: day.bodyText(context).custom(color: context.isDark? AppColor.neutral10:AppColor.neutral50));
}, },
defaultBuilder: (context, dateTime, _) { defaultBuilder: (context, dateTime, _) {
final day = DateFormat("d").format(dateTime); final day = DateFormat("d").format(dateTime);

@ -41,7 +41,7 @@ class RequestsFragment extends StatelessWidget {
children: [ children: [
Text( Text(
value, 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, ).toShimmer(isShow: isLoading).expanded,
8.width, 8.width,
SvgPicture.asset('assets/images/$icon.svg', height: 35, width: 35).toShimmer(isShow: isLoading), SvgPicture.asset('assets/images/$icon.svg', height: 35, width: 35).toShimmer(isShow: isLoading),
@ -49,7 +49,7 @@ class RequestsFragment extends StatelessWidget {
).expanded, ).expanded,
Text( Text(
title, title,
style: AppTextStyles.heading5.copyWith(color: AppColor.neutral50), style: AppTextStyles.heading5.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50,),
).toShimmer(isShow: isLoading), ).toShimmer(isShow: isLoading),
8.height, 8.height,
Row( Row(

@ -163,13 +163,7 @@ class _DeviceTransferDetailsState extends State<DeviceTransferDetails> {
} }
_buildDetailsCard(Widget widget) { _buildDetailsCard(Widget widget) {
return Container( return widget.paddingOnly(top: 14, start: 14, end: 14);
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(AppStyle.getBorderRadius(context)),
),
child: widget,
).paddingOnly(top: 14, start: 14, end: 14);
} }
_buildTextWidget(String text) { _buildTextWidget(String text) {

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

@ -184,41 +184,18 @@ class _RequestGasRefillState extends State<RequestGasRefill> {
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch, crossAxisAlignment: CrossAxisAlignment.stretch,
children: [ children: [
Container( Column(
width: MediaQuery.of(context).size.width, crossAxisAlignment: CrossAxisAlignment.start,
decoration: ShapeDecoration( children: [
color: Colors.white, context.translation.gasRefill.heading5(context),
shape: RoundedRectangleBorder( 8.height,
borderRadius: BorderRadius.circular(20), /// TBD
), '${context.translation.gasRequest}:'.bodyText(context),
shadows: const [BoxShadow(color: Color(0x07000000), blurRadius: 14, offset: Offset(0, 0), spreadRadius: 0)], '${context.translation.cylinderSize}: ${widget.gasRefillModel.gazRefillDetails[0].cylinderSize.value}'.bodyText(context),
), '${context.translation.quantity}: ${widget.gasRefillModel.gazRefillDetails[0].requestedQty}'.bodyText(context),
child: Column( '${context.translation.site}: ${widget.gasRefillModel.site.name}'.bodyText(context),
crossAxisAlignment: CrossAxisAlignment.start, ],
children: [ ).paddingAll(16),
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),
),
12.height, 12.height,
AppTimer( AppTimer(
label: context.translation.workingHours, label: context.translation.workingHours,
@ -259,7 +236,7 @@ class _RequestGasRefillState extends State<RequestGasRefill> {
onSaved: (value) {}, onSaved: (value) {},
), ),
], ],
).paddingAll(16), ).toShadowContainer(context).paddingAll(16),
).expanded, ).expanded,
AppFilledButton( AppFilledButton(
label: widget.gasRefillModel == null ? context.translation.submit : context.translation.update, 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/notification/firebase_notification_manger.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/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/int_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/new_views/pages/new_gas_refill_request_page.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 { onWillPop: () async {
bool result = await showDialog( bool result = await showDialog(
context: context, context: context,
builder: (_) => const AAlertDialog( builder: (_) => AAlertDialog(
// title: _subtitle.exit, // title: _subtitle.exit,
title: "Exit", title: context.translation.exit,
// content: _subtitle.exitAlert, // content: _subtitle.exitAlert,
content: "Are you sure you want to exit?", content: context.translation.sureExit,
)); ));
if (result == true) { if (result == true) {
if (Platform.isAndroid) { if (Platform.isAndroid) {
@ -129,9 +130,9 @@ class _LandPageState extends State<LandPage> {
// ) // )
// ), // ),
// ), // ),
SizedBox( // SizedBox(
height: 48 * AppStyle.getScaleFactor(context), // height: 48 * AppStyle.getScaleFactor(context),
), // ),
// Hero( // Hero(
// tag: "logo", // tag: "logo",
// child: Image( // child: Image(
@ -223,219 +224,219 @@ class _LandPageState extends State<LandPage> {
), ),
], ],
), ),
Align( // Align(
alignment: Alignment.topLeft, // alignment: Alignment.topLeft,
child: ABackButton( // child: ABackButton(
icon: Icons.power_settings_new_rounded, // icon: Icons.power_settings_new_rounded,
onPressed: () async { // onPressed: () async {
bool result = await showDialog( // bool result = await showDialog(
context: context, // context: context,
builder: (_) => const AAlertDialog( // builder: (_) => const AAlertDialog(
// title: _subtitle.signOut, // // title: _subtitle.signOut,
title: "Sign Out", // title: "Sign Out",
// content: _subtitle.signOutAlert, // // content: _subtitle.signOutAlert,
content: "Are you sure you want to exit?", // content: "Are you sure you want to exit?",
)); // ));
if (result) { // if (result) {
// _devicesProvider.reset(); // // _devicesProvider.reset();
// _departmentsProvider.reset(); // // _departmentsProvider.reset();
// _serviceRequestsProvider.reset(); // // _serviceRequestsProvider.reset();
// _regularVisitsProvider.reset(); // // _regularVisitsProvider.reset();
// _preventiveMaintenanceVisitsProvider.reset(); // // _preventiveMaintenanceVisitsProvider.reset();
_settingProvider.resetSettings(); // _settingProvider.resetSettings();
_userProvider.reset(); // _userProvider.reset();
Navigator.of(context).pop(); // Navigator.of(context).pop();
} // }
}, // },
), // ),
), // ),
Align( // Align(
alignment: Alignment.topRight, // alignment: Alignment.topRight,
child: Padding( // child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), // padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4),
child: AIconButton( // child: AIconButton(
iconData: Icons.menu, // iconData: Icons.menu,
color: AColors.primaryColor, // color: AColors.primaryColor,
buttonSize: 42, // buttonSize: 42,
backgroundColor: AColors.white, // backgroundColor: AColors.white,
onPressed: () { // onPressed: () {
_scaffoldKey.currentState.openEndDrawer(); // _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),
], ],
), ),
), ),
// 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( return Scaffold(
appBar: DefaultAppBar(title: context.translation.serviceRequest), appBar: DefaultAppBar(title: context.translation.serviceRequest),
backgroundColor: const Color(0xfff8f9fb), //backgroundColor: context.isDark? :const Color(0xfff8f9fb),
body: SafeArea( body: SafeArea(
child: LoadingManager( child: LoadingManager(
isLoading: _serviceRequestsProvider.isLoading, isLoading: _serviceRequestsProvider.isLoading,

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

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

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

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

@ -19,7 +19,7 @@ class ADatePicker extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Container( return Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: context.isDark?AppColor.neutral50:Colors.white,
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
border: Border.all(width: 1, color: Theme.of(context).scaffoldBackgroundColor), border: Border.all(width: 1, color: Theme.of(context).scaffoldBackgroundColor),
boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)], 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/string_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/device/asset_transfer.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'; import '../../../extensions/text_extensions.dart';
@ -22,15 +23,10 @@ class DeviceTransferItem extends StatelessWidget {
Column( Column(
crossAxisAlignment: CrossAxisAlignment.stretch, crossAxisAlignment: CrossAxisAlignment.stretch,
children: [ children: [
Text(context.translation.deviceTransferRequest, style: AppTextStyles.heading5.copyWith(color: const Color(0xFF3B3D4A))), context.translation.deviceTransferRequest.heading5(context),
Text(
'${context.translation.from} : ${item.senderAssignedEmployeeName}', '${context.translation.from} : ${item.senderAssignedEmployeeName}'.bodyText(context),
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), '${context.translation.to} : ${item.receiverAssignedEmployeeName}'.bodyText(context),
),
Text(
'${context.translation.to} : ${item.receiverAssignedEmployeeName}',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
8.height, 8.height,
Row( Row(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
@ -63,7 +59,7 @@ class DeviceTransferItem extends StatelessWidget {
/// TBD /// TBD
//StatusLabel(label: '', textColor: AColors.getRequestStatusTextColor(0), backgroundColor: AColors.getRequestStatusColor(0)), //StatusLabel(label: '', textColor: AColors.getRequestStatusTextColor(0), backgroundColor: AColors.getRequestStatusColor(0)),
1.width, 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/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:signature/signature.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/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_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, width: MediaQuery.of(context).size.width,
padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 8.toScreenHeight), padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 8.toScreenHeight),
decoration: BoxDecoration( 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), 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)], boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)],
), ),

@ -14,84 +14,74 @@ class AssetItemGridView extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Container( return Column(
padding: const EdgeInsets.all(16), children: [
decoration: ShapeDecoration( AspectRatio(
color: Colors.white, aspectRatio: 159 / 94,
shape: RoundedRectangleBorder( child: Container(
borderRadius: BorderRadius.circular(20), 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)], 6.height,
), Column(
child: Column( mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ crossAxisAlignment: CrossAxisAlignment.start,
AspectRatio( children: [
aspectRatio: 159 / 94, Text(
child: Container( device.modelDefinition.assetName,
width: 95, maxLines: 2,
height: 95, style: AppTextStyles.bodyText.copyWith(color: Color(0xFF3B3D4A)),
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"),
)),
), ),
), Column(
6.height, crossAxisAlignment: CrossAxisAlignment.start,
Column( mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
crossAxisAlignment: CrossAxisAlignment.start, Text(
children: [ "${context.translation.assetNumber} : ${device.assetNumber}",
Text( style: AppTextStyles.bodyText2.copyWith(color: Color(0xFF757575)),
device.modelDefinition.assetName, ),
maxLines: 2, Text(
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF3B3D4A)), "${context.translation.model} : ${device.modelDefinition.modelDefCode}",
), style: AppTextStyles.bodyText2.copyWith(color: Color(0xFF757575)),
Column( ),
crossAxisAlignment: CrossAxisAlignment.start, Text(
mainAxisSize: MainAxisSize.min, "${context.translation.serialNo} : ${device.assetSerialNo}",
children: [ maxLines: 2,
Text( overflow: TextOverflow.fade,
"${context.translation.assetNumber} : ${device.assetNumber}", style: AppTextStyles.bodyText2.copyWith(
style: AppTextStyles.bodyText2.copyWith(color: Color(0xFF757575)), color: Color(0xFF757575),
),
Text(
"${context.translation.model} : ${device.modelDefinition.modelDefCode}",
style: AppTextStyles.bodyText2.copyWith(color: Color(0xFF757575)),
), ),
Text( ),
"${context.translation.serialNo} : ${device.assetSerialNo}", ],
maxLines: 2, ),
overflow: TextOverflow.fade, Row(
style: AppTextStyles.bodyText2.copyWith( mainAxisSize: MainAxisSize.min,
color: Color(0xFF757575), children: [
), Text(
), 'View Details',
], style: AppTextStyles.bodyText2.copyWith(color: const Color(0xFF4A8DB7)),
), ),
Row( 4.width,
mainAxisSize: MainAxisSize.min, const Icon(
children: [ Icons.arrow_forward,
Text( color: Color(0xFF4A8DB7),
'View Details', size: 14,
style: AppTextStyles.bodyText2.copyWith(color: const Color(0xFF4A8DB7)), )
), ],
4.width, ),
const Icon( ],
Icons.arrow_forward, ).expanded
color: Color(0xFF4A8DB7), ],
size: 14, ).onPress(() => onPressed(device)).toShadowContainer(context);
)
],
),
],
).expanded
],
),
).onPress(() => onPressed(device));
} }
} }

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

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

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

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

@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; 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/int_extensions.dart';
import 'package:test_sa/extensions/string_extensions.dart'; import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart';
@ -22,19 +23,19 @@ class NotificationItem extends StatelessWidget {
children: [ children: [
Text( Text(
notification.title ?? "", notification.title ?? "",
style: AppTextStyles.heading6.copyWith(color: AppColor.neutral50), style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50,),
).expanded, ).expanded,
8.width, 8.width,
Text( Text(
notification.createdOn.toServiceRequestCardFormat ?? "", notification.createdOn.toServiceRequestCardFormat ?? "",
textAlign: TextAlign.right, textAlign: TextAlign.right,
style: AppTextStyles.tinyFont.copyWith(color: AppColor.neutral50), style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral20 : AppColor.neutral50,),
), ),
], ],
), ),
Text( Text(
notification.text ?? "", notification.text ?? "",
style: AppTextStyles.bodyText2.copyWith(color: Color(0xFF757575)), style: AppTextStyles.bodyText2.copyWith(color: context.isDark ? AppColor.neutral10 : Color(0xFF757575),),
), ),
], ],
).onPress(() { ).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/app_style/colors.dart';
import 'package:test_sa/views/widgets/requests/request_status.dart'; import 'package:test_sa/views/widgets/requests/request_status.dart';
import '../../../new_views/app_style/app_color.dart';
class ServiceRequestItem extends StatelessWidget { class ServiceRequestItem extends StatelessWidget {
final int index; final int index;
final ServiceRequest request; 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 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; Color onItemColor = index % 2 != 0 ? Theme.of(context).colorScheme.primary : Theme.of(context).colorScheme.onPrimary;
return Container( return Column(
decoration: ShapeDecoration( children: [
color: Colors.white, Column(
shape: RoundedRectangleBorder( mainAxisSize: MainAxisSize.min,
borderRadius: BorderRadius.circular(20), crossAxisAlignment: CrossAxisAlignment.start,
), children: [
shadows: const [BoxShadow(color: Color(0x07000000), blurRadius: 14, offset: Offset(0, 0), spreadRadius: 0)], Row(
), crossAxisAlignment: CrossAxisAlignment.start,
child: Column( children: [
children: [ StatusLabel(
Column( label: request.priority.name,
mainAxisSize: MainAxisSize.min, id: request.priority.id,
crossAxisAlignment: CrossAxisAlignment.start, textColor: AColors.getPriorityStatusTextColor(request.priority.id),
children: [ backgroundColor: AColors.getPriorityStatusColor(request.priority.id)),
Row( 8.width,
crossAxisAlignment: CrossAxisAlignment.start, StatusLabel(label: request.statusLabel, textColor: AColors.getRequestStatusTextColor(request.statusValue), backgroundColor: AColors.getRequestStatusColor(request.statusValue)),
children: [ 1.width.expanded,
StatusLabel( Text(request.date.toServiceRequestCardFormat, textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark? AppColor.neutral30:const Color(0xFF3B3D4A))),
label: request.priority.name, ],
id: request.priority.id, ),
textColor: AColors.getPriorityStatusTextColor(request.priority.id), 8.height,
backgroundColor: AColors.getPriorityStatusColor(request.priority.id)), Text(context.translation.serviceRequest, style: AppTextStyles.heading5.copyWith(color: context.isDark? AppColor.neutral30:const Color(0xFF3B3D4A))),
8.width, Text(
StatusLabel(label: request.statusLabel, textColor: AColors.getRequestStatusTextColor(request.statusValue), backgroundColor: AColors.getRequestStatusColor(request.statusValue)), '${context.translation.assetName}: ${request.deviceEnName}',
1.width.expanded, style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:Color(0xFF757575)),
Text(request.date.toServiceRequestCardFormat, textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: const Color(0xFF3B3D4A))), ),
], Text(
), '${context.translation.assetNumber}: ${request.device.assetNumber}',
8.height, style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:Color(0xFF757575)),
Text(context.translation.serviceRequest, style: AppTextStyles.heading5.copyWith(color: const Color(0xFF3B3D4A))), ),
Text( Text(
'${context.translation.assetName}: ${request.deviceEnName}', '${context.translation.requestType}: ${request.type.name}',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:Color(0xFF757575)),
), ),
Text( Text(
'${context.translation.assetNumber}: ${request.device.assetNumber}', '${context.translation.requestNo}: ${request.requestCode}',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:Color(0xFF757575)),
), ),
Text( 8.height,
'${context.translation.requestType}: ${request.type.name}', Row(
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), mainAxisSize: MainAxisSize.min,
), children: [
Text( Text(
'${context.translation.requestNo}: ${request.requestCode}', context.translation.viewDetails,
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF4A8DB7)),
), ),
8.height, 4.width,
Row( const Icon(
mainAxisSize: MainAxisSize.min, Icons.arrow_forward,
children: [ color: Color(0xFF4A8DB7),
Text( size: 14,
context.translation.viewDetails, )
style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF4A8DB7)), ],
), ),
4.width, ],
const Icon( ).paddingAll(16).onPress(() {
Icons.arrow_forward, onPressed(request);
color: Color(0xFF4A8DB7), }).toShadowContainer(context),
size: 14, ],
)
],
),
],
).paddingAll(16).onPress(() {
onPressed(request);
}),
],
),
); );
} }
} }

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

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

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