You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
cloudsolutions-atoms/lib/views/pages/device_transfer/asset_search_screen.dart

250 lines
10 KiB
Dart

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<AssetSearchScreen> createState() => _AssetSearchScreenState();
}
class _AssetSearchScreenState extends State<AssetSearchScreen> {
late AssetSearch search;
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
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<AssetProvider>(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);
}
}