import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/providers/api/asset_transfer_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/validator/validator.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/device/asset_transfer.dart'; import 'package:test_sa/models/device/device.dart'; import 'package:test_sa/models/new_models/department.dart'; import 'package:test_sa/models/new_models/floor.dart'; import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart'; import '../../../models/new_models/building.dart'; import '../../../models/new_models/site.dart'; import '../../../new_views/common_widgets/app_filled_button.dart'; import '../../../new_views/common_widgets/default_app_bar.dart'; import '../../../new_views/common_widgets/single_item_drop_down_menu.dart'; import '../../../providers/gas_request_providers/site_provider.dart'; import '../../../providers/loading_list_notifier.dart'; import '../../widgets/equipment/pick_asset.dart'; class RequestDeviceTransfer extends StatefulWidget { static const String id = "/request-device-transfer"; const RequestDeviceTransfer({Key key}) : super(key: key); @override State createState() => _RequestDeviceTransferState(); } class _RequestDeviceTransferState extends State { UserProvider _userProvider; SettingProvider _settingProvider; AssetTransferProvider _deviceTransferProvider; final TextEditingController _requestedQuantityController = TextEditingController(); final AssetTransfer _transferModel = AssetTransfer(); final GlobalKey _formKey = GlobalKey(); final GlobalKey _scaffoldKey = GlobalKey(); final TextEditingController _receiverNameController = TextEditingController(), _commentsController = TextEditingController(); final Device _assetDestination = Device(); Device _pickedAsset; @override void setState(VoidCallback fn) { if (mounted) super.setState(() {}); } void _onSubmit() async { _transferModel.assetId = _pickedAsset.id; _transferModel.destSiteId = _assetDestination.site?.id; _transferModel.destBuildingId = _assetDestination.building?.id; _transferModel.destFloorId = _assetDestination.floor?.id; _transferModel.destDepartmentId = _assetDestination.department?.id; if (!_formKey.currentState.validate() || !(await _transferModel.validate(context))) { return; } _formKey.currentState.save(); await _deviceTransferProvider.createRequest(context: context, assetDestination: _transferModel, asset: _pickedAsset); } @override void dispose() { _requestedQuantityController.dispose(); _deviceTransferProvider.reset(); _receiverNameController.dispose(); _commentsController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { _userProvider = Provider.of(context, listen: false); _settingProvider = Provider.of(context, listen: false); _deviceTransferProvider = Provider.of(context, listen: false); return Scaffold( key: _scaffoldKey, appBar: DefaultAppBar(title: context.translation.newTransferRequest), body: Form( key: _formKey, child: SafeArea( child: Column( children: [ SingleChildScrollView( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ 16.height, PickAsset( device: _pickedAsset, onPickAsset: (asset) { _pickedAsset = asset; setState(() {}); }, ), 16.height, context.translation.receiverDetails.heading5(context), 8.height, AppTextFormField( controller: _receiverNameController, labelText: context.translation.receiverName, validator: (text) => Validator.hasValue(text) ? null : context.translation.requiredField, onSaved: (text) {}, ), 8.height, SingleItemDropDownMenu( context: context, title: context.translation.destinationSite, initialValue: _assetDestination?.site, onSelect: (value) { _assetDestination.site = value; _assetDestination.building = null; _assetDestination.floor = null; _assetDestination.department = null; setState(() {}); }, ), 8.height, SingleItemDropDownMenu( context: context, title: context.translation.building, initialValue: _assetDestination?.building, enabled: _assetDestination?.site?.buildings?.isNotEmpty ?? false, staticData: _assetDestination?.site?.buildings ?? [], onSelect: (value) { _assetDestination?.building = value; _assetDestination?.floor = null; _assetDestination?.department = null; setState(() {}); }, ), 8.height, SingleItemDropDownMenu( context: context, title: context.translation.floor, initialValue: _assetDestination?.floor, enabled: _assetDestination?.building?.floors?.isNotEmpty ?? false, staticData: _assetDestination?.building?.floors ?? [], onSelect: (value) { _assetDestination?.floor = value; _assetDestination?.department = null; setState(() {}); }, ), 8.height, SingleItemDropDownMenu( context: context, title: context.translation.department, initialValue: _assetDestination?.department, enabled: _assetDestination?.floor?.departments?.isNotEmpty ?? false, staticData: _assetDestination?.floor?.departments ?? [], onSelect: (value) { _assetDestination?.department = value; }, ), 16.height, context.translation.comments.heading5(context), 8.height, AppTextFormField( controller: _commentsController, labelText: context.translation.comments, onSaved: (text) { _transferModel.senderComment = text; }, ), 100.height, ], ), ).expanded, AppFilledButton(label: context.translation.submitRequest, maxWidth: true, onPressed: _onSubmit) ], ).paddingOnly(start: 16, end: 16, bottom: 24), ), ), ); } }