import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/providers/api/devices_provider.dart'; import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart'; import '../../../models/device/asset_search.dart'; import '../../../new_views/common_widgets/app_lazy_loading.dart'; import '../../../new_views/common_widgets/default_app_bar.dart'; class AssetSearchScreen extends StatefulWidget { static const String id = "asset_search_screen"; final AssetSearch? data; const AssetSearchScreen({Key? key, this.data}) : super(key: key); @override State createState() => _AssetSearchScreenState(); } class _AssetSearchScreenState extends State { late AssetSearch search; final GlobalKey _formKey = GlobalKey(); late TextEditingController _assetNameController, _assetNumberController, _snController, _modelController, _supplierController, _siteController, _manufactureController, _mdController; @override void initState() { search = widget.data ?? AssetSearch(); _assetNameController = TextEditingController(text: search.assetName); _assetNumberController = TextEditingController(text: search.assetNo); _snController = TextEditingController(text: search.assetSerialNumber); _modelController = TextEditingController(text: search.model); _supplierController = TextEditingController(text: search.supplier); _siteController = TextEditingController(text: search.site); _manufactureController = TextEditingController(text: search.manufacturer); _mdController = TextEditingController(text: search.modelDefinition); super.initState(); } @override void dispose() { _assetNameController.dispose(); _assetNumberController.dispose(); _snController.dispose(); _modelController.dispose(); _supplierController.dispose(); _siteController.dispose(); _siteController.dispose(); _manufactureController.dispose(); _mdController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( appBar: DefaultAppBar( title: context.translation.search, actions: [ if (_showResetButton()) Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ Text( context.translation.reset, style: AppTextStyles.bodyText2.copyWith(color: const Color(0xFF4A8DB7)), ).paddingAll(8).onPress(() { setState(() { _assetNameController.text = ""; _assetNumberController.text = ""; _snController.text = ""; _modelController.text = ""; _supplierController.text = ""; _siteController.text = ""; _manufactureController.text = ""; _mdController.text = ""; }); }), ], ) ], ), body: Form( key: _formKey, child: Column( children: [ SingleChildScrollView( child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ context.translation.searchBy.heading5(context), 8.height, context.translation.searchByDesc.bodyText(context), 16.height, AppTextFormField( controller: _assetNameController, labelText: context.translation.assetName, onChange: (text) { _assetNameController.text = text; _assetNameController.selection = TextSelection.fromPosition(TextPosition(offset: _assetNameController.text.length)); setState(() {}); }, onSaved: (value) { search.assetName = value; }, ), 8.height, AppTextFormField( controller: _assetNumberController, labelText: context.translation.assetNumber, onChange: (text) { _assetNumberController.text = text; _assetNumberController.selection = TextSelection.fromPosition(TextPosition(offset: _assetNumberController.text.length)); setState(() {}); }, onSaved: (value) { search.assetNo = value; }, ), 8.height, /// todo : TBD (no matched parameter) AppTextFormField( labelText: context.translation.oracleCode, onSaved: (value) {}, ), 8.height, AppTextFormField( controller: _snController, labelText: context.translation.snNumber, onChange: (text) { _snController.text = text; _snController.selection = TextSelection.fromPosition(TextPosition(offset: _snController.text.length)); setState(() {}); }, onSaved: (value) { search.assetSerialNumber = value; }, ), 8.height, AppTextFormField( controller: _modelController, labelText: context.translation.model, onChange: (text) { _modelController.text = text; _modelController.selection = TextSelection.fromPosition(TextPosition(offset: _modelController.text.length)); setState(() {}); }, onSaved: (value) { search.model = value; }, ), 8.height, AppTextFormField( controller: _supplierController, labelText: context.translation.supplier, onChange: (text) { _supplierController.text = text; _supplierController.selection = TextSelection.fromPosition(TextPosition(offset: _supplierController.text.length)); setState(() {}); }, onSaved: (value) { search.supplier = value; }, ), 8.height, AppTextFormField( controller: _siteController, labelText: context.translation.site, onChange: (text) { _siteController.text = text; _siteController.selection = TextSelection.fromPosition(TextPosition(offset: _siteController.text.length)); setState(() {}); }, onSaved: (value) { search.site = value; }, ), 8.height, AppTextFormField( controller: _manufactureController, labelText: context.translation.manufacture, onChange: (text) { _manufactureController.text = text; _manufactureController.selection = TextSelection.fromPosition(TextPosition(offset: _manufactureController.text.length)); setState(() {}); }, onSaved: (value) { search.manufacturer = value; }, ), 8.height, AppTextFormField( controller: _mdController, labelText: context.translation.md, onChange: (text) { _mdController.text = text; _mdController.selection = TextSelection.fromPosition(TextPosition(offset: _mdController.text.length)); setState(() {}); }, onSaved: (value) { search.modelDefinition = value; }, ), 8.height, /// todo : TBD (no matched parameter) AppTextFormField( labelText: context.translation.location, onSaved: (value) {}, ), 8.height, ], ), ).expanded, AppFilledButton(onPressed: _search, label: context.translation.search), ], ).paddingAll(16), ), ); } void _search() async { if (_formKey.currentState!.validate()) { _formKey.currentState!.save(); final deviceProvider = Provider.of(context, listen: false); deviceProvider.reset(); showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); await deviceProvider.getAssets(search: search); Navigator.pop(context); Navigator.of(context).pop(search); } } bool _showResetButton() { return (_assetNameController.text.isNotEmpty ?? false) || (_assetNumberController.text.isNotEmpty ?? false) || (_snController.text.isNotEmpty ?? false) || (_modelController.text.isNotEmpty ?? false) || (_supplierController.text.isNotEmpty ?? false) || (_siteController.text.isNotEmpty ?? false) || (_manufactureController.text.isNotEmpty ?? false) || (_mdController.text.isNotEmpty ?? false); } }