code improvements

design_3.0_asset_inventory_module
Sikander Saleem 3 weeks ago
parent 8578319cc3
commit d3c000004e

@ -4,6 +4,7 @@ import 'package:flutter/widgets.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/models/all_requests_and_count_model.dart';
import 'package:test_sa/models/enums/user_types.dart';
import 'package:test_sa/models/ppm/recurrent_wo.dart';
@ -130,6 +131,24 @@ class AllRequestsProvider extends ChangeNotifier {
SearchAllRequestsModel? searchedModel;
List<int> getStatues(BuildContext context) {
List<int> list = [1, 2, 3, 4];
if (context.userProvider.user!.type != UsersTypes.normal_user) {
list.add(5);
}
list.add(6); // task module
if (context.settingProvider.isUserFlowMedical && context.userProvider.user!.type != UsersTypes.normal_user) {
list.add(7); // task mod
}
if (context.userProvider.user!.type != UsersTypes.normal_user) {
list.add(8); //
}
return list;
}
Future<int> getAllRequests(BuildContext context, {int? typeTransaction, SearchAllRequestsModel? search}) async {
if (isAllLoading == true) return -2;
isAllLoading = true;
@ -143,7 +162,7 @@ class AllRequestsProvider extends ChangeNotifier {
}
final type = typeTransaction == null
? search?.typeTransaction == null || (search?.typeTransaction?.isEmpty ?? false)
? [1, 2, 3, 4, 5, 6,7,8]
? getStatues(context)
: search!.typeTransaction
: [typeTransaction];
List<int> status = (search?.statuses == null || (search?.statuses?.isEmpty ?? false)) ? (((search?.isArchived ?? false) ? [3] : [1, 2, 4])) : search!.statuses!;

@ -23,71 +23,73 @@ class AssetDetailCardView extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Row(
crossAxisAlignment: CrossAxisAlignment.start,
return Column(
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
Row(
children: [
Text(
context.translation.assetInformation,
style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
),
// 8.height,
Text(
'${context.translation.assetNumber}: ${assetInventoryModel.assetNumber ?? '-'}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
Text(
'${context.translation.serialNo}: ${assetInventoryModel.serialNo ?? '-'}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
Text(
'${context.translation.manufacture}: ${assetInventoryModel.manufacturer ?? ''}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
Text(
'${context.translation.model}: ${assetInventoryModel.model ?? ''}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
Text(
'${context.translation.site}: ${assetInventoryModel.siteName ?? ''}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
Text(
'${context.translation.building}: ${assetInventoryModel.buildingName ?? ''}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
Text(
'${context.translation.floor}: ${assetInventoryModel.floorName ?? ''}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
Text(
'${context.translation.department}: ${assetInventoryModel.departmentName ?? ''}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
Text(
'${context.translation.supplier}: ${assetInventoryModel.supplierName ?? ''}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
Text(
'${'Remarks'.addTranslation}: ${assetInventoryModel.remarks ?? ''}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
],
).expanded,
Column(
crossAxisAlignment: CrossAxisAlignment.end,
mainAxisAlignment: MainAxisAlignment.start,
children: [
).expanded,
'delete_icon'.toSvgAsset().onPress(() {
onDeletePress();
}),
20.height,
],
),
8.height,
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'${context.translation.assetNumber}: ${assetInventoryModel.assetNumber ?? '-'}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
Text(
'${context.translation.serialNo}: ${assetInventoryModel.serialNo ?? '-'}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
Text(
'${context.translation.manufacture}: ${assetInventoryModel.manufacturer ?? ''}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
Text(
'${context.translation.model}: ${assetInventoryModel.model ?? ''}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
Text(
'${context.translation.site}: ${assetInventoryModel.siteName ?? ''}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
Text(
'${context.translation.building}: ${assetInventoryModel.buildingName ?? ''}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
Text(
'${context.translation.floor}: ${assetInventoryModel.floorName ?? ''}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
Text(
'${context.translation.department}: ${assetInventoryModel.departmentName ?? ''}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
Text(
'${context.translation.supplier}: ${assetInventoryModel.supplierName ?? ''}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
Text(
'${'Remarks'.addTranslation}: ${assetInventoryModel.remarks ?? ''}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
],
).expanded,
Container(
decoration: BoxDecoration(color: AppColor.neutral100, borderRadius: BorderRadius.circular(15)),
height: 115.toScreenHeight,
width: 115.toScreenWidth,
margin: const EdgeInsets.only(top: 8),
child: assetInventoryModel.photo != null && assetInventoryModel.photo!.isNotEmpty
? ClipRRect(
borderRadius: BorderRadius.circular(8),
@ -100,8 +102,8 @@ class AssetDetailCardView extends StatelessWidget {
: 'image_placeholder'.toSvgAsset().center,
)
],
)
),
],
).toShadowContainer(context);
).toShadowContainer(context, borderRadius: 20, padding: 12);
}
}

@ -87,7 +87,7 @@ class _AssetInventoryDetailViewState extends State<AssetInventoryDetailView> {
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
],
).paddingOnly(start: 16, end: 16, top: 16, bottom: 8).toShadowContainer(context, padding: 0);
).toShadowContainer(context, padding: 12, borderRadius: 20);
}
Widget siteListCard(BuildContext context, SessionModel sessionModel) {
@ -155,6 +155,6 @@ class _AssetInventoryDetailViewState extends State<AssetInventoryDetailView> {
separatorBuilder: (cxt, index) => const Divider().defaultStyle(context),
),
],
).toShadowContainer(context, padding: 12);
).toShadowContainer(context, padding: 12, borderRadius: 20);
}
}

@ -29,7 +29,7 @@ import 'package:test_sa/views/widgets/images/multi_image_picker_item.dart';
import 'package:test_sa/views/widgets/requests/request_status.dart';
import '../../../new_views/common_widgets/app_filled_button.dart';
import '../../../new_views/common_widgets/default_app_bar.dart';
import 'asset_inventory_site_information_view.dart';
import 'asset_inventory_site_information_page.dart';
class AssetInventoryFormView extends StatefulWidget {
static const String id = "/asset-inventory-form";
@ -92,254 +92,255 @@ class _AssetInventoryFormViewState extends State<AssetInventoryFormView> {
child: Column(
children: [
SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
if (widget.sessionTypeValue == 1 || widget.sessionTypeValue == 2) ...[
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
'Not Registered'.addTranslation.heading5(context),
AdvancedSwitch(
controller: registeredController,
activeColor: AppColor.green50.withOpacity(0.5),
inactiveColor: AppColor.neutral10,
thumb: CircleAvatar(backgroundColor: isRegistered == true ? AppColor.green50 : AppColor.neutral20),
borderRadius: const BorderRadius.all(Radius.circular(30)),
width: 42.toScreenWidth,
height: 24.toScreenHeight,
onChanged: (value) {
isRegistered = value;
resetData();
setState(() {});
},
disabledOpacity: 1,
),
],
),
16.height,
],
if ((!isRegistered && widget.sessionTypeValue == 1) || (widget.sessionTypeValue == 3) || (!isRegistered && widget.sessionTypeValue == 2)) ...[
AssetPicker(
showLoading: false,
labelColor: AppColor.white936,
iconColor: AppColor.neutral120,
label: 'Scan Asset'.addTranslation,
borderColor: AppColor.white936,
buttonColor: Colors.white,
enablePickManually: false,
showAssetInfo: false,
showBorder: true,
onPick: (asset) async {
resetData();
setState(() {});
if (asset.assetNumber != null) {
searchAsset(assetNo: asset.assetNumber!);
}
}),
12.height,
AppTextFormField(
labelText: context.translation.assetNo,
backgroundColor: AppColor.fieldBgColor(context),
textAlign: TextAlign.center,
controller: _assetNoController,
showShadow: false,
enable: false,
labelStyle: AppTextStyles.textFieldLabelStyle,
style: Theme.of(context).textTheme.titleMedium,
),
12.height,
],
if (widget.sessionTypeValue == 1 || widget.sessionTypeValue == 2) ...[
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
'Not Registered'.addTranslation.heading5(context),
AdvancedSwitch(
controller: registeredController,
activeColor: AppColor.green50.withOpacity(0.5),
inactiveColor: AppColor.neutral10,
thumb: CircleAvatar(backgroundColor: isRegistered == true ? AppColor.green50 : AppColor.neutral20),
borderRadius: const BorderRadius.all(Radius.circular(30)),
width: 42.toScreenWidth,
height: 24.toScreenHeight,
onChanged: (value) {
isRegistered = value;
resetData();
setState(() {});
},
disabledOpacity: 1,
),
],
),
12.height,
],
if (((!isRegistered && widget.sessionTypeValue == 2)))
AppFilledButton(
label: 'Search Asset'.addTranslation,
onPressed: () async {
resetData(isScanned: false);
setState(() {});
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) => SearchAssetView(
sessionId: widget.assetInventoryModel?.sessionId ?? 0,
))).then((value) {
if (value != null) {
_pickedAssetModel = value;
// _pickedAssetModel?.assetNumber = _scannedAssetModel?.assetNumber;
// _pickedAssetModel?.assetId = _scannedAssetModel?.assetId;
// _pickedAssetModel?.status = _scannedAssetModel?.status;
if ((!isRegistered && widget.sessionTypeValue == 1) || (widget.sessionTypeValue == 3) || (!isRegistered && widget.sessionTypeValue == 2)) ...[
AssetPicker(
showLoading: false,
labelColor: AppColor.white936,
iconColor: AppColor.neutral120,
label: 'Scan Asset'.addTranslation,
borderColor: AppColor.white936,
buttonColor: Colors.white,
enablePickManually: false,
showAssetInfo: false,
showBorder: true,
onPick: (asset) async {
resetData();
setState(() {});
if (asset.assetNumber != null) {
searchAsset(assetNo: asset.assetNumber!);
}
}),
12.height,
AppTextFormField(
labelText: context.translation.assetNo,
backgroundColor: AppColor.fieldBgColor(context),
textAlign: TextAlign.center,
controller: _assetNoController,
showShadow: false,
enable: false,
labelStyle: AppTextStyles.textFieldLabelStyle,
style: Theme.of(context).textTheme.titleMedium,
),
12.height,
],
_scannedAssetModel = _scannedAssetModel?.mergeWith(_pickedAssetModel) ?? _pickedAssetModel;
if (((!isRegistered && widget.sessionTypeValue == 2))) ...[
AppFilledButton(
label: 'Search Asset'.addTranslation,
onPressed: () async {
resetData(isScanned: false);
setState(() {});
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) => SearchAssetView(
sessionId: widget.assetInventoryModel?.sessionId ?? 0,
))).then((value) {
if (value != null) {
_pickedAssetModel = value;
// _pickedAssetModel?.assetNumber = _scannedAssetModel?.assetNumber;
// _pickedAssetModel?.assetId = _scannedAssetModel?.assetId;
// _pickedAssetModel?.status = _scannedAssetModel?.status;
populateFormValues();
setState(() {});
}
_scannedAssetModel = _scannedAssetModel?.mergeWith(_pickedAssetModel) ?? _pickedAssetModel;
///Need to assign the values
});
},
).paddingOnly(bottom: 12),
populateFormValues();
setState(() {});
}
AppTextFormField(
labelText: context.translation.serialNo,
backgroundColor: AppColor.fieldBgColor(context),
controller: _serialNoController,
textAlign: TextAlign.center,
showShadow: false,
labelStyle: AppTextStyles.textFieldLabelStyle,
onChange: (value) {
if (value != _scannedAssetModel?.serialNo) {
_scannedAssetModel?.newSerialNo = value;
// setState(() {});
}
},
style: Theme.of(context).textTheme.titleMedium,
),
12.height,
LookUpAutoCompleteField(
clearAfterPick: false,
forAssetName: true,
onChanged: (value) {
_scannedAssetModel?.newAssetNameId = null;
_scannedAssetModel?.newAssetNameText = value;
},
initialValue: _scannedAssetModel?.assetName ?? "",
label: 'Asset Name'.addTranslation,
onPick: (value) {
_scannedAssetModel?.newAssetNameText = null;
_scannedAssetModel?.assetName = value.name;
_scannedAssetModel?.newAssetNameId = value.id;
setState(() {});
},
),
12.height,
//Asset Name..
LookUpAutoCompleteField(
clearAfterPick: false,
isManufacturer: true,
initialValue: _scannedAssetModel?.manufacturer ?? "",
label: 'Manufacturer'.addTranslation,
onChanged: (value) {
_scannedAssetModel?.newManufacturerId = null;
_scannedAssetModel?.newManufacturerName = value;
},
onPick: (value) {
_scannedAssetModel?.newManufacturerName = null;
_scannedAssetModel?.manufacturer = value.name;
_scannedAssetModel?.newManufacturerId = value.id;
///Need to assign the values
});
},
),
12.height,
],
AppTextFormField(
labelText: context.translation.serialNo,
backgroundColor: AppColor.fieldBgColor(context),
controller: _serialNoController,
textAlign: TextAlign.center,
showShadow: false,
labelStyle: AppTextStyles.textFieldLabelStyle,
onChange: (value) {
if (value != _scannedAssetModel?.serialNo) {
_scannedAssetModel?.newSerialNo = value;
// setState(() {});
}
},
style: Theme.of(context).textTheme.titleMedium,
),
12.height,
LookUpAutoCompleteField(
clearAfterPick: false,
forAssetName: true,
onChanged: (value) {
_scannedAssetModel?.newAssetNameId = null;
_scannedAssetModel?.newAssetNameText = value;
},
initialValue: _scannedAssetModel?.assetName ?? "",
label: 'Asset Name'.addTranslation,
onPick: (value) {
_scannedAssetModel?.newAssetNameText = null;
_scannedAssetModel?.assetName = value.name;
_scannedAssetModel?.newAssetNameId = value.id;
setState(() {});
},
),
12.height,
//Asset Name..
LookUpAutoCompleteField(
clearAfterPick: false,
isManufacturer: true,
initialValue: _scannedAssetModel?.manufacturer ?? "",
label: 'Manufacturer'.addTranslation,
onChanged: (value) {
_scannedAssetModel?.newManufacturerId = null;
_scannedAssetModel?.newManufacturerName = value;
},
onPick: (value) {
_scannedAssetModel?.newManufacturerName = null;
_scannedAssetModel?.manufacturer = value.name;
_scannedAssetModel?.newManufacturerId = value.id;
setState(() {});
},
),
12.height,
LookUpAutoCompleteField(
clearAfterPick: false,
isManufacturer: false,
initialValue: _scannedAssetModel?.model ?? "",
label: 'Model'.addTranslation,
onChanged: (value) {
_scannedAssetModel?.newModelId = null;
_scannedAssetModel?.newModelName = value;
},
onPick: (value) {
_scannedAssetModel?.newModelName = null;
_scannedAssetModel?.model = value.name;
_scannedAssetModel?.newModelId = value.id;
setState(() {});
},
),
setState(() {});
},
),
12.height,
LookUpAutoCompleteField(
clearAfterPick: false,
isManufacturer: false,
initialValue: _scannedAssetModel?.model ?? "",
label: 'Model'.addTranslation,
onChanged: (value) {
_scannedAssetModel?.newModelId = null;
_scannedAssetModel?.newModelName = value;
},
onPick: (value) {
_scannedAssetModel?.newModelName = null;
_scannedAssetModel?.model = value.name;
_scannedAssetModel?.newModelId = value.id;
setState(() {});
},
),
12.height,
12.height,
LookUpAutoCompleteField(
clearAfterPick: false,
forSupplier: true,
initialValue: _scannedAssetModel?.supplierName ?? "",
label: context.translation.supplier,
onChanged: (value) {
_scannedAssetModel?.newSupplierId = null;
_scannedAssetModel?.newSupplierName = value;
},
onPick: (value) {
_scannedAssetModel?.newSupplierName = null;
_scannedAssetModel?.supplierName = value.name;
_scannedAssetModel?.newSupplierId = value.id;
setState(() {});
},
),
// SingleItemDropDownMenu<SupplierDetails, VendorProvider>(
// context: context,
// title: context.translation.supplier,
// backgroundColor: AppColor.fieldBgColor(context),
// initialValue: _scannedAssetModel?.supplier,
// showAsBottomSheet: true,
// showShadow: false,
// showCancel: true,
// onSelect: (supplier) {
// _scannedAssetModel?.supplier = supplier;
// _scannedAssetModel?.newSupplierId = supplier?.id;
// _scannedAssetModel?.newSupplierName = supplier?.name;
// setState(() {});
// },
// ),
12.height,
siteInfoContainer(label: context.translation.site, value: _scannedAssetModel?.siteName ?? '-'),
12.height,
siteInfoContainer(label: context.translation.building, value: _scannedAssetModel?.buildingName ?? '-'),
12.height,
siteInfoContainer(label: context.translation.floor, value: _scannedAssetModel?.floorName ?? '-'),
12.height,
siteInfoContainer(label: context.translation.department, value: _scannedAssetModel?.departmentName ?? '-'),
12.height,
siteInfoContainer(label: context.translation.room, value: _scannedAssetModel?.roomName ?? '-'),
12.height,
if (_scannedAssetModel?.status != null && _scannedAssetModel!.status!.isNotEmpty) classificationWidget(label: _scannedAssetModel?.status),
12.height,
Text(
'Asset Photo'.addTranslation,
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.white936),
),
12.height,
attachments.isEmpty
? AttachmentPicker(
label: context.translation.attachImage,
attachment: attachments,
buttonColor: AppColor.black10,
onlyImages: true,
onChange: (value) {
LookUpAutoCompleteField(
clearAfterPick: false,
forSupplier: true,
initialValue: _scannedAssetModel?.supplierName ?? "",
label: context.translation.supplier,
onChanged: (value) {
_scannedAssetModel?.newSupplierId = null;
_scannedAssetModel?.newSupplierName = value;
},
onPick: (value) {
_scannedAssetModel?.newSupplierName = null;
_scannedAssetModel?.supplierName = value.name;
_scannedAssetModel?.newSupplierId = value.id;
setState(() {});
},
buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.neutral120),
)
: MultiFilesPickerItem(
file: File(attachments.first.name ?? ''),
enabled: true,
onRemoveTap: (file) {
setState(() {
attachments.clear();
});
),
// SingleItemDropDownMenu<SupplierDetails, VendorProvider>(
// context: context,
// title: context.translation.supplier,
// backgroundColor: AppColor.fieldBgColor(context),
// initialValue: _scannedAssetModel?.supplier,
// showAsBottomSheet: true,
// showShadow: false,
// showCancel: true,
// onSelect: (supplier) {
// _scannedAssetModel?.supplier = supplier;
// _scannedAssetModel?.newSupplierId = supplier?.id;
// _scannedAssetModel?.newSupplierName = supplier?.name;
// setState(() {});
// },
// ),
12.height,
siteInfoContainer(label: context.translation.site, value: _scannedAssetModel?.siteName ?? '-'),
12.height,
siteInfoContainer(label: context.translation.building, value: _scannedAssetModel?.buildingName ?? '-'),
12.height,
siteInfoContainer(label: context.translation.floor, value: _scannedAssetModel?.floorName ?? '-'),
12.height,
siteInfoContainer(label: context.translation.department, value: _scannedAssetModel?.departmentName ?? '-'),
12.height,
siteInfoContainer(label: context.translation.room, value: _scannedAssetModel?.roomName ?? '-'),
12.height,
if (_scannedAssetModel?.status != null && _scannedAssetModel!.status!.isNotEmpty) classificationWidget(label: _scannedAssetModel?.status),
12.height,
Text(
'Asset Photo'.addTranslation,
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.white936),
),
12.height,
attachments.isEmpty
? AttachmentPicker(
label: context.translation.attachImage,
attachment: attachments,
buttonColor: AppColor.black10,
onlyImages: true,
onChange: (value) {
setState(() {});
},
buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.neutral120),
)
: MultiFilesPickerItem(
file: File(attachments.first.name ?? ''),
enabled: true,
onRemoveTap: (file) {
setState(() {
attachments.clear();
});
},
),
12.height,
AppTextFormField(
backgroundColor: AppColor.fieldBgColor(context),
labelText: 'Remarks'.addTranslation,
labelStyle: AppTextStyles.textFieldLabelStyle.copyWith(color: AppColor.textColor(context)),
alignLabelWithHint: true,
textInputType: TextInputType.multiline,
showShadow: false,
controller: _remarksController,
onSaved: (text) {
_scannedAssetModel?.remarks = text;
setState(() {});
},
),
12.height,
AppTextFormField(
backgroundColor: AppColor.fieldBgColor(context),
labelText: 'Remarks'.addTranslation,
labelStyle: AppTextStyles.textFieldLabelStyle.copyWith(color: AppColor.textColor(context)),
alignLabelWithHint: true,
textInputType: TextInputType.multiline,
showShadow: false,
controller: _remarksController,
onSaved: (text) {
_scannedAssetModel?.remarks = text;
setState(() {});
},
),
// 100.height,
],
).toShadowContainer(context).paddingOnly(top: 20, start: 16, end: 16),
).expanded,
10.height,
// 100.height,
],
).toShadowContainer(context, borderRadius: 20, padding: 12))
.expanded,
FooterActionButton.footerContainer(
context: context,
child: AppFilledButton(buttonColor: AppColor.primary10, label: context.translation.submitRequest, maxWidth: true, onPressed: _onSubmit),
@ -438,7 +439,7 @@ class _AssetInventoryFormViewState extends State<AssetInventoryFormView> {
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (contxt) => SiteInformationView(
builder: (contxt) => SiteInformationPage(
sessionModel: SessionModel(id: int.tryParse(widget.assetInventoryModel?.sessionId?.toString() ?? '') ?? 0),
)));
} else {

@ -10,7 +10,7 @@ import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/modules/asset_inventory_module/models/session_model.dart';
import 'package:test_sa/modules/asset_inventory_module/pages/asset_inventory_detail_view.dart';
import 'package:test_sa/modules/asset_inventory_module/pages/asset_inventory_scan_assets_view.dart';
import 'package:test_sa/modules/asset_inventory_module/pages/asset_inventory_site_information_view.dart';
import 'package:test_sa/modules/asset_inventory_module/pages/asset_inventory_site_information_page.dart';
import 'package:test_sa/modules/cm_module/views/components/action_button/footer_action_button.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
@ -66,62 +66,57 @@ class _AssetInventoryPageState extends State<AssetInventoryPage> {
body: Consumer<AssetInventoryProvider>(builder: (context, provider, child) {
return DefaultTabController(
length: 2,
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Container(
margin: EdgeInsets.only(left: 16.toScreenWidth, right: 16.toScreenWidth, top: 12.toScreenHeight),
decoration: BoxDecoration(color: context.isDark ? AppColor.neutral50 : AppColor.white10, borderRadius: BorderRadius.circular(10)),
child: TabBar(
padding: EdgeInsets.symmetric(vertical: 4.toScreenHeight, horizontal: 4.toScreenWidth),
labelColor: context.isDark ? AppColor.neutral30 : AppColor.black20,
unselectedLabelColor: context.isDark ? AppColor.neutral30 : AppColor.black20,
unselectedLabelStyle: AppTextStyles.bodyText,
labelStyle: AppTextStyles.bodyText,
indicatorPadding: EdgeInsets.zero,
indicatorSize: TabBarIndicatorSize.tab,
dividerColor: Colors.transparent,
indicator: BoxDecoration(color: context.isDark ? AppColor.neutral60 : AppColor.neutral110, borderRadius: BorderRadius.circular(7)),
onTap: (index) {},
tabs: [
Tab(text: 'Request Details'.addTranslation, height: 57.toScreenHeight),
Tab(
text:
'${'Scan Assets'.addTranslation} ${provider.assetInventoryResponse?.totalRows != null && provider.assetInventoryResponse!.totalRows! > 0 ? '(${provider.assetInventoryResponse?.totalRows})' : ''}',
height: 57.toScreenHeight),
child: provider.isLoading
? const CircularProgressIndicator(color: AppColor.primary10).center
: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Container(
margin: EdgeInsets.only(left: 16.toScreenWidth, right: 16.toScreenWidth, top: 12.toScreenHeight),
decoration: BoxDecoration(color: context.isDark ? AppColor.neutral50 : AppColor.white10, borderRadius: BorderRadius.circular(10)),
child: TabBar(
padding: EdgeInsets.symmetric(vertical: 4.toScreenHeight, horizontal: 4.toScreenWidth),
labelColor: context.isDark ? AppColor.neutral30 : AppColor.black20,
unselectedLabelColor: context.isDark ? AppColor.neutral30 : AppColor.black20,
unselectedLabelStyle: AppTextStyles.bodyText,
labelStyle: AppTextStyles.bodyText,
indicatorPadding: EdgeInsets.zero,
indicatorSize: TabBarIndicatorSize.tab,
dividerColor: Colors.transparent,
indicator: BoxDecoration(color: context.isDark ? AppColor.neutral60 : AppColor.neutral110, borderRadius: BorderRadius.circular(7)),
onTap: (index) {},
tabs: [
Tab(text: 'Request Details'.addTranslation, height: 57.toScreenHeight),
Tab(
text:
'${'Scan Assets'.addTranslation} ${provider.assetInventoryResponse?.totalRows != null && provider.assetInventoryResponse!.totalRows! > 0 ? '(${provider.assetInventoryResponse?.totalRows})' : ''}',
height: 57.toScreenHeight),
],
),
),
TabBarView(
children: [
AssetInventoryDetailView(sessionModel: provider.sessionModel ?? SessionModel()),
AssetInventoryScanAssetView(sessionId: provider.sessionModel?.id ?? 0),
],
).expanded,
FooterActionButton.footerContainer(
context: context,
child: AppFilledButton(
buttonColor: AppColor.primary10,
label: 'Scan Assets'.addTranslation,
onPressed: () => _scanAsset(provider: provider),
// buttonColor: AppColor.primary10,
),
)
],
),
),
12.height,
TabBarView(
children: [
provider.isLoading
? const CircularProgressIndicator(color: AppColor.primary10).center
: AssetInventoryDetailView(
sessionModel: provider.sessionModel ?? SessionModel(),
),
AssetInventoryScanAssetView(
sessionId: provider.sessionModel?.id ?? 0,
),
],
).expanded,
FooterActionButton.footerContainer(
context: context,
child: AppFilledButton(
buttonColor: AppColor.primary10,
label: 'Scan Assets'.addTranslation,
onPressed: () => _scanAsset(provider: provider),
// buttonColor: AppColor.primary10,
),
).toShadowContainer(context, padding: 0, showShadow: false, borderRadius: 0),
],
),
);
}));
}
Future<void> _scanAsset({required AssetInventoryProvider provider}) async {
provider.siteFilterAssetList.clear();
Navigator.push(context, MaterialPageRoute(builder: (contxt) => SiteInformationView(sessionModel: provider.sessionModel ?? SessionModel())));
Navigator.push(context, MaterialPageRoute(builder: (contxt) => SiteInformationPage(sessionModel: provider.sessionModel ?? SessionModel())));
}
}

@ -48,9 +48,7 @@ class _AssetInventoryScanAssetViewState extends State<AssetInventoryScanAssetVie
}
return NotificationListener<ScrollNotification>(
onNotification: (scrollInfo) {
if (!provider.isNextPageLoading &&
provider.nextPage &&
scrollInfo.metrics.pixels == scrollInfo.metrics.maxScrollExtent) {
if (!provider.isNextPageLoading && provider.nextPage && scrollInfo.metrics.pixels == scrollInfo.metrics.maxScrollExtent) {
getAssetList(loadMore: true);
}
return false;
@ -84,48 +82,48 @@ class _AssetInventoryScanAssetViewState extends State<AssetInventoryScanAssetVie
}
// Widget build(BuildContext context) {
// return Consumer<AssetInventoryProvider>(
// builder: (context, provider, _) {
// if (provider.isLoading && provider.assetInventoryResponse == null) {
// //TODO need use existing loader if found..
// return const Center(child: CircularProgressIndicator());
// }
// final assets = provider.assetInventoryResponse?.assetList ?? [];
// if (assets.isEmpty) {
// return const Center(child: NoDataFound());
// }
// return LazyLoading(
// nextPage: provider.nextPage,
// onLazyLoad: () async {
// log('Loading next page...');
// await getAssetList(loadMore: true);
// },
// child: ListView.separated(
// padding: const EdgeInsets.all(16),
// itemBuilder: (context, index) {
// if (index == assets.length) {
// // bottom loader
// return const Padding(
// padding: EdgeInsets.symmetric(vertical: 16),
// child: Center(child: CircularProgressIndicator()),
// );
// }
// return AssetDetailCardView(
// assetInventoryModel: assets[index],
// onDeletePress: () async {
// await provider.deleteAssetISession(id: assets[index].id ?? 0).then((success) async {
// if (success) {
// await provider.getAssetsInSession(sessionId: widget.sessionId);
// }
// });
// },
// );
// },
// separatorBuilder: (context, index) => 12.height,
// itemCount: assets.length + (provider.nextPage ? 1 : 0),
// ),
// );
// },
// );
// }
// return Consumer<AssetInventoryProvider>(
// builder: (context, provider, _) {
// if (provider.isLoading && provider.assetInventoryResponse == null) {
// //TODO need use existing loader if found..
// return const Center(child: CircularProgressIndicator());
// }
// final assets = provider.assetInventoryResponse?.assetList ?? [];
// if (assets.isEmpty) {
// return const Center(child: NoDataFound());
// }
// return LazyLoading(
// nextPage: provider.nextPage,
// onLazyLoad: () async {
// log('Loading next page...');
// await getAssetList(loadMore: true);
// },
// child: ListView.separated(
// padding: const EdgeInsets.all(16),
// itemBuilder: (context, index) {
// if (index == assets.length) {
// // bottom loader
// return const Padding(
// padding: EdgeInsets.symmetric(vertical: 16),
// child: Center(child: CircularProgressIndicator()),
// );
// }
// return AssetDetailCardView(
// assetInventoryModel: assets[index],
// onDeletePress: () async {
// await provider.deleteAssetISession(id: assets[index].id ?? 0).then((success) async {
// if (success) {
// await provider.getAssetsInSession(sessionId: widget.sessionId);
// }
// });
// },
// );
// },
// separatorBuilder: (context, index) => 12.height,
// itemCount: assets.length + (provider.nextPage ? 1 : 0),
// ),
// );
// },
// );
// }
}

@ -28,16 +28,16 @@ import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart
import 'package:test_sa/providers/loading_list_notifier.dart';
import 'package:test_sa/views/widgets/loaders/lazy_loading.dart';
class SiteInformationView extends StatefulWidget {
class SiteInformationPage extends StatefulWidget {
SessionModel sessionModel;
SiteInformationView({Key? key, required this.sessionModel}) : super(key: key);
SiteInformationPage({Key? key, required this.sessionModel}) : super(key: key);
@override
State<SiteInformationView> createState() => _SiteInformationViewState();
State<SiteInformationPage> createState() => _SiteInformationPageState();
}
class _SiteInformationViewState extends State<SiteInformationView> {
class _SiteInformationPageState extends State<SiteInformationPage> {
AssetInventoryModel assetInventoryModel = AssetInventoryModel();
bool showMarkAsComplete = false;
@ -56,45 +56,49 @@ class _SiteInformationViewState extends State<SiteInformationView> {
title: 'Inventory Session Request'.addTranslation,
titleStyle: AppTextStyles.heading3.copyWith(fontWeight: FontWeight.w500, color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
),
body: SafeArea(
child: Column(
children: [
ListView(
padding: const EdgeInsets.only(left: 16, right: 16, top: 16),
body: Column(
children: [
ListView(
padding: const EdgeInsets.only(left: 16, right: 16, top: 16),
children: [
siteInfoCard(context, widget.sessionModel),
12.height,
assetDetailList(),
8.height,
],
).expanded,
FooterActionButton.footerContainer(
context: context,
child: Column(
children: [
siteInfoCard(context, widget.sessionModel),
12.height,
assetDetailList(),
8.height,
AppFilledButton(
buttonColor: AppColor.primary10,
label: 'Add Asset'.addTranslation,
onPressed: () => _addAsset(),
// buttonColor: AppColor.primary10,
),
if (showMarkAsComplete) ...[
12.height,
AppFilledButton(
buttonColor: AppColor.green70,
label: 'Mark as completed'.addTranslation,
onPressed: () => _markAsCompleted(),
// buttonColor: AppColor.primary10,
)
]
],
).expanded,
FooterActionButton.footerContainer(
context: context,
child: AppFilledButton(
buttonColor: AppColor.primary10,
label: 'Add Asset'.addTranslation,
onPressed: () => _addAsset(),
// buttonColor: AppColor.primary10,
),
),
if (showMarkAsComplete)
AppFilledButton(
buttonColor: AppColor.green70,
label: 'Mark as completed'.addTranslation,
onPressed: () => _markAsCompleted(),
// buttonColor: AppColor.primary10,
).paddingOnly(start: 16, end: 16),
// FooterActionButton.footerContainer(
// context: context,
// child: AppFilledButton(
// buttonColor: AppColor.green70,
// label: 'Mark as completed'.addTranslation,
// onPressed: () => _markAsCompleted(),
// // buttonColor: AppColor.primary10,
// ),
// ),
],
),
),
// FooterActionButton.footerContainer(
// context: context,
// child: AppFilledButton(
// buttonColor: AppColor.green70,
// label: 'Mark as completed'.addTranslation,
// onPressed: () => _markAsCompleted(),
// // buttonColor: AppColor.primary10,
// ),
// ),
],
));
}
@ -185,7 +189,6 @@ class _SiteInformationViewState extends State<SiteInformationView> {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
12.height,
SingleItemDropDownMenu<Site, NullableLoadingProvider>(
context: context,
title: context.translation.site,
@ -202,7 +205,7 @@ class _SiteInformationViewState extends State<SiteInformationView> {
setState(() {});
},
),
8.height,
12.height,
SingleItemDropDownMenu<Building, NullableLoadingProvider>(
context: context,
title: context.translation.building,
@ -219,7 +222,7 @@ class _SiteInformationViewState extends State<SiteInformationView> {
setState(() {});
},
),
8.height,
12.height,
SingleItemDropDownMenu<Floor, NullableLoadingProvider>(
context: context,
title: context.translation.floor,
@ -235,7 +238,7 @@ class _SiteInformationViewState extends State<SiteInformationView> {
setState(() {});
},
),
8.height,
12.height,
SingleItemDropDownMenu<Department, NullableLoadingProvider>(
context: context,
title: context.translation.department,
@ -253,7 +256,7 @@ class _SiteInformationViewState extends State<SiteInformationView> {
getAssetFilteredList();
},
),
8.height,
12.height,
SingleItemDropDownMenu<Rooms, NullableLoadingProvider>(
context: context,
title: context.translation.room,
@ -271,9 +274,8 @@ class _SiteInformationViewState extends State<SiteInformationView> {
}
},
),
8.height,
],
).toShadowContainer(context);
).toShadowContainer(context, borderRadius: 20, padding: 12);
}
Future<bool> validateRequest() async {

@ -52,7 +52,9 @@ class _MyRequestsPageState extends State<MyRequestsPage> {
if (context.settingProvider.isUserFlowMedical) {
requestsList.add(Request(7, 'Recall and Alert'));
}
requestsList.add(Request(8, 'Inventory Session'.addTranslation));
if (Provider.of<UserProvider>(context, listen: false).user!.type != UsersTypes.normal_user) {
requestsList.add(Request(8, 'Inventory Session'.addTranslation));
}
_provider = Provider.of<AllRequestsProvider>(context, listen: false);
_provider!.reset();
WidgetsBinding.instance.addPostFrameCallback((_) {

@ -87,9 +87,7 @@ class _SelectionBottomSheetState<T extends Base> extends State<SelectionFullScre
SearchBar(
focusNode: searchFocusNode,
elevation: WidgetStateProperty.all<double>(0),
backgroundColor: WidgetStateProperty.all<Color>(
AppColor.fieldBgColor(context), // Your custom background color
),
backgroundColor: WidgetStateProperty.all<Color?>(context.isDark ? AppColor.neutral120 : null),
leading: Icon(Icons.search, color: AppColor.iconColor(context)),
textStyle: WidgetStateProperty.all<TextStyle>(
TextStyle(color: AppColor.textColor(context), fontSize: 16.0),

Loading…
Cancel
Save