diff --git a/assets/translations/ar.json b/assets/translations/ar.json index 9830d14d..ae6efa25 100644 --- a/assets/translations/ar.json +++ b/assets/translations/ar.json @@ -33,5 +33,7 @@ "add": "أضف", "site" : "الموقع", "onlyNumbers": "يسمح بإدخال الأرقام فقط", - "youHaveToSelect" : "يجب عليك إختيار" + "youHaveToSelect" : "يجب عليك إختيار", + "building" : "المبنى", + "floor" : "الطابق" } \ No newline at end of file diff --git a/assets/translations/en.json b/assets/translations/en.json index 738c8772..c0632955 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -33,5 +33,7 @@ "add": "Add", "site" : "Site", "onlyNumbers": "Only Numbers Allowed", - "youHaveToSelect" : "You have to select" + "youHaveToSelect" : "You have to select", + "building" : "Building", + "floor" : "Floor" } \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index 30e6a0a6..8892d5ec 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -17,6 +17,7 @@ import 'package:test_sa/providers/gas_request_providers/cylinder_size_provider.d import 'package:test_sa/providers/gas_request_providers/cylinder_type_provider.dart'; import 'package:test_sa/providers/gas_request_providers/gas_types_provider.dart'; import 'package:test_sa/providers/gas_request_providers/site_provider.dart'; +import 'package:test_sa/providers/loading_list_notifier.dart'; import 'package:test_sa/views/pages/user/land_page.dart' as old; import 'controllers/providers/api/user_provider.dart'; @@ -59,6 +60,7 @@ class MyApp extends StatelessWidget { providers: [ ChangeNotifierProvider(create: (_) => UserProvider()), ChangeNotifierProvider(create: (_) => GasTypesProvider()), + ChangeNotifierProvider(create: (_) => NullableLoadingProvider()), ChangeNotifierProvider(create: (_) => CylinderTypesProvider()), ChangeNotifierProvider(create: (_) => CylinderSizeProvider()), ChangeNotifierProvider(create: (_) => DepartmentProvider()), diff --git a/lib/models/base.dart b/lib/models/base.dart index 7a12740f..02b2cea5 100644 --- a/lib/models/base.dart +++ b/lib/models/base.dart @@ -1,5 +1,5 @@ class Base { - final String name, identifier; + String name, identifier; - const Base({this.name, this.identifier}); + Base({this.name, this.identifier}); } diff --git a/lib/models/call_request_for_work_order_model.dart b/lib/models/call_request_for_work_order_model.dart index 60e78eeb..35b34551 100644 --- a/lib/models/call_request_for_work_order_model.dart +++ b/lib/models/call_request_for_work_order_model.dart @@ -1,4 +1,3 @@ -import 'package:test_sa/models/base.dart'; import 'package:test_sa/models/lookup.dart'; class CallRequestForWorkOrder { @@ -414,13 +413,13 @@ class Site { } } -class Department extends Base { +class Department { int id; String departmentName; String departmentCode; String ntCode; - Department({this.id, this.departmentName, this.departmentCode, this.ntCode}) : super(identifier: id.toString(), name: departmentName); + Department({this.id, this.departmentName, this.departmentCode, this.ntCode}); Department.fromJson(Map json) { id = json['id']; diff --git a/lib/models/enums/translation_keys.dart b/lib/models/enums/translation_keys.dart index b3b4a30f..d002ab82 100644 --- a/lib/models/enums/translation_keys.dart +++ b/lib/models/enums/translation_keys.dart @@ -34,4 +34,6 @@ enum TranslationKeys { site, onlyNumbers, youHaveToSelect, + building, + floor, } diff --git a/lib/models/new_models/building.dart b/lib/models/new_models/building.dart index 00b1b1a9..cce59efa 100644 --- a/lib/models/new_models/building.dart +++ b/lib/models/new_models/building.dart @@ -1,15 +1,17 @@ +import 'package:test_sa/models/base.dart'; import 'package:test_sa/models/new_models/floor.dart'; -class Building { +class Building extends Base { Building({ this.id, - this.name, this.value, this.floors, - }); + String name, + }) : super(identifier: id.toString(), name: name); Building.fromJson(dynamic json) { id = json['id']; + identifier = id.toString(); name = json['name']; value = json['value']; if (json['floors'] != null) { @@ -20,7 +22,6 @@ class Building { } } num id; - String name; num value; List floors; Building copyWith({ diff --git a/lib/models/new_models/department.dart b/lib/models/new_models/department.dart index 49037d45..1a9158e1 100644 --- a/lib/models/new_models/department.dart +++ b/lib/models/new_models/department.dart @@ -1,14 +1,18 @@ -class Department { +import '../base.dart'; + +class Department extends Base { Department({ this.id, this.departmentName, this.departmentCode, this.ntCode, - }); + }) : super(identifier: id.toString(), name: departmentName); Department.fromJson(dynamic json) { id = json['id']; + identifier = id.toString(); departmentName = json['departmentName']; + name = departmentName; departmentCode = json['departmentCode']; ntCode = json['ntCode']; } diff --git a/lib/models/new_models/floor.dart b/lib/models/new_models/floor.dart index 56280ae6..a7bd28c9 100644 --- a/lib/models/new_models/floor.dart +++ b/lib/models/new_models/floor.dart @@ -1,15 +1,17 @@ +import 'package:test_sa/models/base.dart'; import 'package:test_sa/models/new_models/department.dart'; -class Floor { +class Floor extends Base { Floor({ this.id, - this.name, + String name, this.value, this.departments, - }); + }) : super(identifier: id.toString(), name: name); Floor.fromJson(dynamic json) { id = json['id']; + identifier = id.toString(); name = json['name']; value = json['value']; if (json['departments'] != null) { @@ -20,7 +22,6 @@ class Floor { } } num id; - String name; num value; List departments; Floor copyWith({ diff --git a/lib/models/new_models/site.dart b/lib/models/new_models/site.dart index 849b458c..a591cc7e 100644 --- a/lib/models/new_models/site.dart +++ b/lib/models/new_models/site.dart @@ -10,7 +10,9 @@ class Site extends Base { Site.fromJson(dynamic json) { id = json['id']; + identifier = id.toString(); custName = json['custName']; + name = custName; if (json['buildings'] != null) { buildings = []; json['buildings'].forEach((v) { diff --git a/lib/new_views/common_widgets/single_item_drop_down_menu.dart b/lib/new_views/common_widgets/single_item_drop_down_menu.dart index 1860191b..b0e25aba 100644 --- a/lib/new_views/common_widgets/single_item_drop_down_menu.dart +++ b/lib/new_views/common_widgets/single_item_drop_down_menu.dart @@ -14,8 +14,20 @@ class SingleItemDropDownMenu exte final Function(T) onSelect; final T initialValue; final bool enabled; + final List staticData; final TranslationKeys title; - const SingleItemDropDownMenu({Key key, @required this.context, @required this.title, this.onSelect, this.initialValue, this.enabled = true}) : super(key: key); + + /// If you want to use a static data (without calling API) + /// just use [NullableLoadingProvider] as generic data type and fill the [staticData] + const SingleItemDropDownMenu({ + Key key, + @required this.context, + @required this.title, + this.onSelect, + this.initialValue, + this.enabled = true, + this.staticData, + }) : super(key: key); @override State> createState() => _SingleItemDropDownMenuState(); @@ -27,9 +39,11 @@ class _SingleItemDropDownMenuState(widget.context); + if (widget.staticData != null) { + provider = Provider.of(widget.context); + } if (widget.initialValue != null) { - final result = provider.items?.where((element) { + final result = (widget.staticData ?? provider?.items)?.where((element) { return element == widget.initialValue; }); if (result.isNotEmpty) _selectedItem = result.first; @@ -49,7 +63,7 @@ class _SingleItemDropDownMenuState oldWidget) { if (widget.initialValue != null) { - final result = provider.items?.where((element) { + final result = (widget.staticData ?? provider?.items)?.where((element) { return element == widget.initialValue; }); if (result.isNotEmpty) { @@ -69,12 +83,12 @@ class _SingleItemDropDownMenuState>((value) { + items: (widget.staticData ?? provider?.items)?.map>((value) { return DropdownMenuItem( value: value, child: Text( diff --git a/lib/new_views/pages/new_gas_refill_request_page.dart b/lib/new_views/pages/new_gas_refill_request_page.dart index deff5cfb..49023986 100644 --- a/lib/new_views/pages/new_gas_refill_request_page.dart +++ b/lib/new_views/pages/new_gas_refill_request_page.dart @@ -5,6 +5,9 @@ import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/enums/translation_keys.dart'; import 'package:test_sa/models/lookup.dart'; +import 'package:test_sa/models/new_models/building.dart'; +import 'package:test_sa/models/new_models/department.dart'; +import 'package:test_sa/models/new_models/floor.dart'; import 'package:test_sa/models/new_models/gas_refill_model.dart'; import 'package:test_sa/models/new_models/site.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; @@ -15,6 +18,7 @@ import 'package:test_sa/providers/gas_request_providers/cylinder_size_provider.d import 'package:test_sa/providers/gas_request_providers/cylinder_type_provider.dart'; import 'package:test_sa/providers/gas_request_providers/gas_types_provider.dart'; import 'package:test_sa/providers/gas_request_providers/site_provider.dart'; +import 'package:test_sa/providers/loading_list_notifier.dart'; import '../../controllers/validator/validator.dart'; import '../common_widgets/default_app_bar.dart'; @@ -105,6 +109,36 @@ class _NewGasRefillRequestPageState extends State { _gasModel.site = value; }, ), + 8.height, + SingleItemDropDownMenu( + context: context, + title: TranslationKeys.building, + enabled: _gasModel.site?.buildings?.isNotEmpty ?? false, + staticData: _gasModel.site?.buildings ?? [], + onSelect: (value) { + _gasModel.building = value; + }, + ), + 8.height, + SingleItemDropDownMenu( + context: context, + title: TranslationKeys.floor, + enabled: _gasModel.building?.floors?.isNotEmpty ?? false, + staticData: _gasModel.building?.floors ?? [], + onSelect: (value) { + _gasModel.floor = value; + }, + ), + 8.height, + SingleItemDropDownMenu( + context: context, + title: TranslationKeys.department, + enabled: _gasModel.floor?.departments?.isNotEmpty ?? false, + staticData: _gasModel.floor?.departments ?? [], + onSelect: (value) { + _gasModel.department = value; + }, + ), // 8.height, // SingleItemDropDownMenu( // context: context, diff --git a/lib/providers/loading_list_notifier.dart b/lib/providers/loading_list_notifier.dart index 8698287d..ed04be27 100644 --- a/lib/providers/loading_list_notifier.dart +++ b/lib/providers/loading_list_notifier.dart @@ -1,5 +1,13 @@ import 'package:flutter/material.dart'; import 'package:test_sa/models/base.dart'; +import 'package:test_sa/models/lookup.dart'; + +class NullableLoadingProvider extends LoadingListNotifier { + @override + Future getDate() { + return Future.value(); + } +} abstract class LoadingListNotifier extends ChangeNotifier { int stateCode;