Calibration Tool & PM Kit Design DONE

main_design2.0
zaid_daoud 2 years ago
parent 3464666485
commit 2ebf36ca2f

@ -20,7 +20,7 @@ import 'package:test_sa/views/widgets/pentry/pentry_calibration_tool_form.dart';
import 'package:test_sa/views/widgets/pentry/pentry_pm_kit_form.dart'; import 'package:test_sa/views/widgets/pentry/pentry_pm_kit_form.dart';
import 'package:test_sa/views/widgets/pentry/pentry_ppm_check_list_form.dart'; import 'package:test_sa/views/widgets/pentry/pentry_ppm_check_list_form.dart';
import '../../../../widgets/pentry/pentry_info_form.dart'; import '../../../../widgets/pentry/pentry_tbs_form.dart';
class EditPentry extends StatefulWidget { class EditPentry extends StatefulWidget {
final Pentry pentry; final Pentry pentry;

@ -1,11 +1,13 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_typeahead/flutter_typeahead.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/parts_provider.dart'; import 'package:test_sa/controllers/providers/api/parts_provider.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/views/app_style/colors.dart'; import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/app_style/sizing.dart';
import '../../../extensions/text_extensions.dart';
import '../../../models/service_request/spare_parts.dart'; import '../../../models/service_request/spare_parts.dart';
class AutoCompletePartsField extends StatefulWidget { class AutoCompletePartsField extends StatefulWidget {
@ -48,16 +50,16 @@ class _AutoCompletePartsFieldState extends State<AutoCompletePartsField> {
padding: const EdgeInsets.symmetric(horizontal: 16), padding: const EdgeInsets.symmetric(horizontal: 16),
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: Colors.white,
border: Border.all(color: AColors.black),
borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)), borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)),
boxShadow: const [AppStyle.boxShadow]), boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)],
child: ),
Container() /*TypeAheadField<SparePartsWorkOrders>( child: TypeAheadField<SparePartsWorkOrders>(
textFieldConfiguration: TextFieldConfiguration( textFieldConfiguration: TextFieldConfiguration(
style: Theme.of(context).textTheme.subtitle1, style: AppTextStyles.bodyText,
controller: _controller, controller: _controller,
textAlign: TextAlign.center, textAlign: TextAlign.start,
decoration: const InputDecoration( decoration: InputDecoration(
label: context.translation.partNumberName.tinyFont(context),
border: InputBorder.none, border: InputBorder.none,
disabledBorder: InputBorder.none, disabledBorder: InputBorder.none,
focusedBorder: InputBorder.none, focusedBorder: InputBorder.none,
@ -66,14 +68,14 @@ class _AutoCompletePartsFieldState extends State<AutoCompletePartsField> {
textInputAction: TextInputAction.search, textInputAction: TextInputAction.search,
), ),
suggestionsCallback: (vale) async { suggestionsCallback: (vale) async {
return await _partsProvider.getPartsList(title: vale, assetId: widget.assetId); return (await _partsProvider.getPartsList(title: vale, assetId: widget.assetId)).map((e) => SparePartsWorkOrders(sparePart: e)).toList();
}, },
itemBuilder: (context, part) { itemBuilder: (context, part) {
return ListTile( return ListTile(
title: Text(part?.sparePart?.partNo ?? ""), title: Text(part?.sparePart?.partNo ?? ""),
subtitle: Text( subtitle: Text(
part?.sparePart?.partName ?? "", part?.sparePart?.partName ?? "",
style: Theme.of(context).textTheme.caption, style: Theme.of(context).textTheme.bodySmall,
), ),
); );
}, },
@ -85,8 +87,7 @@ class _AutoCompletePartsFieldState extends State<AutoCompletePartsField> {
} }
widget.onPick(part); widget.onPick(part);
}, },
)*/ ),
,
); );
} }
} }

@ -4,8 +4,10 @@ import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/devices_provider.dart'; import 'package:test_sa/controllers/providers/api/devices_provider.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/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.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 '../../../../models/device/asset.dart'; import '../../../../models/device/asset.dart';
@ -49,15 +51,16 @@ class _AutoCompleteDeviceNumberFieldState extends State<AutoCompleteDeviceNumber
padding: const EdgeInsets.symmetric(horizontal: 16), padding: const EdgeInsets.symmetric(horizontal: 16),
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: Colors.white,
border: Border.all(color: AColors.black),
borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)), borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)),
boxShadow: const [AppStyle.boxShadow]), boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)],
),
child: TypeAheadField<Asset>( child: TypeAheadField<Asset>(
textFieldConfiguration: TextFieldConfiguration( textFieldConfiguration: TextFieldConfiguration(
style: Theme.of(context).textTheme.headline6, style: AppTextStyles.bodyText,
controller: _controller, controller: _controller,
textAlign: TextAlign.center, textAlign: TextAlign.start,
decoration: const InputDecoration( decoration: InputDecoration(
label: context.translation.assetNumber.tinyFont(context),
border: InputBorder.none, border: InputBorder.none,
disabledBorder: InputBorder.none, disabledBorder: InputBorder.none,
focusedBorder: InputBorder.none, focusedBorder: InputBorder.none,
@ -74,10 +77,7 @@ class _AutoCompleteDeviceNumberFieldState extends State<AutoCompleteDeviceNumber
); );
}, },
itemBuilder: (context, device) { itemBuilder: (context, device) {
return ListTile( return device.assetNumber.bodyText(context).paddingOnly(bottom: 16, start: 16);
title: Text(device.assetNumber),
subtitle: Text("${device.modelDefinition.modelName}/${device.modelDefinition.manufacturerName}"),
);
}, },
onSuggestionSelected: (device) { onSuggestionSelected: (device) {
_controller.text = device.assetNumber; _controller.text = device.assetNumber;

@ -2,13 +2,15 @@ import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.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/extensions/context_extension.dart'; import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/pantry/calibration_tools.dart'; import 'package:test_sa/models/pantry/calibration_tools.dart';
import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/views/widgets/buttons/app_button.dart';
import 'package:test_sa/views/widgets/buttons/app_small_button.dart';
import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart';
import 'package:test_sa/views/widgets/pentry/auto_complete_fields/auto_complete_devices_field.dart'; import 'package:test_sa/views/widgets/pentry/auto_complete_fields/auto_complete_devices_field.dart';
import 'package:test_sa/views/widgets/titles/app_sub_title.dart';
import '../../../new_views/app_style/app_color.dart';
class PentryCalibrationToolForm extends StatefulWidget { class PentryCalibrationToolForm extends StatefulWidget {
final List<CalibrationTool> models; final List<CalibrationTool> models;
@ -24,13 +26,15 @@ class _PentryCalibrationToolFormState extends State<PentryCalibrationToolForm> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
final userProvider = Provider.of<UserProvider>(context); final userProvider = Provider.of<UserProvider>(context);
return ListView.builder( return ListView.builder(
padding: EdgeInsets.only(
top: 12 * AppStyle.getScaleFactor(context), left: 12 * AppStyle.getScaleFactor(context), right: 12 * AppStyle.getScaleFactor(context), bottom: 80 * AppStyle.getScaleFactor(context)),
itemCount: widget.models.length + 1, itemCount: widget.models.length + 1,
padding: EdgeInsets.only(top: 16.toScreenHeight),
itemBuilder: (context, index) { itemBuilder: (context, index) {
if (index == widget.models.length) { if (index == widget.models.length) {
return AButton( return AppFilledButton(
text: context.translation.add, label: "Add Asset",
maxWidth: true,
textColor: Colors.white,
buttonColor: context.isDark ? AppColor.neutral60 : AppColor.neutral50,
onPressed: () { onPressed: () {
widget.models.add(CalibrationTool()); widget.models.add(CalibrationTool());
setState(() {}); setState(() {});
@ -38,31 +42,28 @@ class _PentryCalibrationToolFormState extends State<PentryCalibrationToolForm> {
); );
} }
final model = widget.models[index]; final model = widget.models[index];
return Column( return Container(
padding: const EdgeInsets.all(16),
margin: EdgeInsets.only(bottom: 16.toScreenHeight),
decoration: BoxDecoration(
color: Theme.of(context).cardColor,
borderRadius: BorderRadius.circular(20),
boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.03), blurRadius: 14)],
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Row( Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
ASubTitle("#${index + 1}"), "Asset ${index + 1}".heading5(context),
if (index != 0) "trash".toSvgAsset(height: 20, width: 15).onPress(() {
ASmallButton(
color: Theme.of(context).colorScheme.error,
text: context.translation.delete,
onPressed: () {
widget.models.remove(model); widget.models.remove(model);
setState(() {}); setState(() {});
}, }),
),
], ],
), ),
const SizedBox( 16.height,
height: 8,
),
const ASubTitle("Asset Number"),
const SizedBox(
height: 4,
),
AutoCompleteDeviceNumberField( AutoCompleteDeviceNumberField(
initialValue: model.assetsNumber, initialValue: model.assetsNumber,
hospitalId: userProvider.user.clientId, hospitalId: userProvider.user.clientId,
@ -70,28 +71,19 @@ class _PentryCalibrationToolFormState extends State<PentryCalibrationToolForm> {
model.assetsNumber = number; model.assetsNumber = number;
}, },
), ),
const SizedBox( 8.height,
height: 8,
),
const ASubTitle("Date of Testing"),
const SizedBox(
height: 4,
),
ADatePicker( ADatePicker(
label: "Calibration Date",
date: model.dataOfTesting, date: model.dataOfTesting,
onDatePicker: (date) { onDatePicker: (date) {
model.dataOfTesting = date; model.dataOfTesting = date;
setState(() {}); setState(() {});
}, },
), ),
const SizedBox(
height: 8,
),
Divider(
color: Theme.of(context).textTheme.titleMedium.color,
),
], ],
),
);
},
); );
});
} }
} }

@ -1,12 +1,15 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/pantry/pm_kit.dart'; import 'package:test_sa/models/pantry/pm_kit.dart';
import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart';
import 'package:test_sa/views/widgets/buttons/app_button.dart';
import 'package:test_sa/views/widgets/buttons/app_small_button.dart';
import 'package:test_sa/views/widgets/parts/auto_complete_parts_field.dart'; import 'package:test_sa/views/widgets/parts/auto_complete_parts_field.dart';
import 'package:test_sa/views/widgets/titles/app_sub_title.dart';
import '../../../new_views/app_style/app_color.dart';
import '../../../new_views/common_widgets/app_filled_button.dart';
class PentryPMKitForm extends StatefulWidget { class PentryPMKitForm extends StatefulWidget {
final List<PMKit> models; final List<PMKit> models;
@ -27,18 +30,16 @@ class _PentryPMKitFormState extends State<PentryPMKitForm> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return ListView.builder( return ListView.builder(
padding: EdgeInsets.only(
top: 12 * AppStyle.getScaleFactor(context),
left: 12 * AppStyle.getScaleFactor(context),
right: 12 * AppStyle.getScaleFactor(context),
bottom: 100 * AppStyle.getScaleFactor(context) + MediaQuery.of(context).padding.bottom,
),
itemCount: widget.models.length + 1, itemCount: widget.models.length + 1,
shrinkWrap: true, shrinkWrap: true,
padding: EdgeInsets.only(top: 16.toScreenHeight),
itemBuilder: (context, index) { itemBuilder: (context, index) {
if (index == widget.models.length) { if (index == widget.models.length) {
return AButton( return AppFilledButton(
text: context.translation.add, label: "Add Item",
maxWidth: true,
textColor: Colors.white,
buttonColor: context.isDark ? AppColor.neutral60 : AppColor.neutral50,
onPressed: () { onPressed: () {
widget.models.add(PMKit()); widget.models.add(PMKit());
setState(() {}); setState(() {});
@ -46,31 +47,28 @@ class _PentryPMKitFormState extends State<PentryPMKitForm> {
); );
} }
final model = widget.models[index]; final model = widget.models[index];
return Column( return Container(
padding: const EdgeInsets.all(16),
margin: EdgeInsets.only(bottom: 16.toScreenHeight),
decoration: BoxDecoration(
color: Theme.of(context).cardColor,
borderRadius: BorderRadius.circular(20),
boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.03), blurRadius: 14)],
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Row( Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
ASubTitle("#${index + 1}"), "Item ${index + 1}".heading5(context),
if (index != 0) "trash".toSvgAsset(width: 15, height: 20).onPress(() {
ASmallButton(
color: Theme.of(context).colorScheme.error,
text: context.translation.delete,
onPressed: () {
widget.models.remove(model); widget.models.remove(model);
setState(() {}); setState(() {});
}, }),
),
], ],
), ),
const SizedBox( 8.height,
height: 8,
),
const ASubTitle("Item Code"),
const SizedBox(
height: 4,
),
AutoCompletePartsField( AutoCompletePartsField(
assetId: widget.assetId, assetId: widget.assetId,
clearAfterPick: false, clearAfterPick: false,
@ -79,13 +77,17 @@ class _PentryPMKitFormState extends State<PentryPMKitForm> {
model.itemCode = Lookup(id: part.id, name: part?.sparePart?.partNo); model.itemCode = Lookup(id: part.id, name: part?.sparePart?.partNo);
}, },
), ),
const SizedBox( 8.height,
height: 8, AppTextFormField(
), initialValue: model.quantityNeeded,
Divider( labelText: context.translation.quantity,
color: Theme.of(context).textTheme.titleMedium.color, textInputType: TextInputType.number,
onChange: (text) {
model.quantityNeeded = num.tryParse(text ?? "")?.toString();
},
), ),
], ],
),
); );
}, },
); );

@ -107,6 +107,7 @@ class _AppTimerState extends State<AppTimer> {
decoration: BoxDecoration( decoration: BoxDecoration(
color: Theme.of(context).cardColor, color: Theme.of(context).cardColor,
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)],
), ),
child: _loading child: _loading
? const SizedBox.square(dimension: 18, child: CircularProgressIndicator(color: Colors.white)) ? const SizedBox.square(dimension: 18, child: CircularProgressIndicator(color: Colors.white))

Loading…
Cancel
Save