Gas refill design without submit button

main_design2.0
zaid_daoud 2 years ago
parent ed759f5dcf
commit b1e93abf4d

@ -33,5 +33,7 @@
"add": "أضف",
"site" : "الموقع",
"onlyNumbers": "يسمح بإدخال الأرقام فقط",
"youHaveToSelect" : "يجب عليك إختيار"
"youHaveToSelect" : "يجب عليك إختيار",
"building" : "المبنى",
"floor" : "الطابق"
}

@ -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"
}

@ -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()),

@ -1,5 +1,5 @@
class Base {
final String name, identifier;
String name, identifier;
const Base({this.name, this.identifier});
Base({this.name, this.identifier});
}

@ -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<String, dynamic> json) {
id = json['id'];

@ -34,4 +34,6 @@ enum TranslationKeys {
site,
onlyNumbers,
youHaveToSelect,
building,
floor,
}

@ -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<Floor> floors;
Building copyWith({

@ -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'];
}

@ -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<Department> departments;
Floor copyWith({

@ -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) {

@ -14,8 +14,20 @@ class SingleItemDropDownMenu<T extends Base, X extends LoadingListNotifier> exte
final Function(T) onSelect;
final T initialValue;
final bool enabled;
final List<T> 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<SingleItemDropDownMenu<T, X>> createState() => _SingleItemDropDownMenuState<T, X>();
@ -27,9 +39,11 @@ class _SingleItemDropDownMenuState<T extends Base, X extends LoadingListNotifier
@override
void initState() {
provider = Provider.of<X>(widget.context);
if (widget.staticData != null) {
provider = Provider.of<X>(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<T extends Base, X extends LoadingListNotifier
@override
void didUpdateWidget(covariant SingleItemDropDownMenu<T, X> 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<T extends Base, X extends LoadingListNotifier
@override
Widget build(BuildContext context) {
return AppLoadingManager(
isLoading: provider.loading,
isFailedLoading: provider.items == null,
stateCode: provider.stateCode,
isLoading: provider?.loading ?? false,
isFailedLoading: provider?.items == null && widget.staticData == null,
stateCode: widget.staticData == null ? provider?.stateCode : 200,
onRefresh: () async {
provider.reset();
await provider.getDate();
provider?.reset();
await provider?.getDate();
},
child: Container(
height: 60.toScreenHeight,
@ -87,7 +101,7 @@ class _SingleItemDropDownMenuState<T extends Base, X extends LoadingListNotifier
child: Stack(
alignment: Alignment.center,
children: [
const PositionedDirectional(end: 0, child: Icon(Icons.keyboard_arrow_down_rounded)),
if (widget.enabled) const PositionedDirectional(end: 0, child: Icon(Icons.keyboard_arrow_down_rounded)),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
@ -117,7 +131,7 @@ class _SingleItemDropDownMenuState<T extends Base, X extends LoadingListNotifier
});
widget.onSelect(newValue);
},
items: provider.items?.map<DropdownMenuItem<T>>((value) {
items: (widget.staticData ?? provider?.items)?.map<DropdownMenuItem<T>>((value) {
return DropdownMenuItem<T>(
value: value,
child: Text(

@ -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<NewGasRefillRequestPage> {
_gasModel.site = value;
},
),
8.height,
SingleItemDropDownMenu<Building, NullableLoadingProvider>(
context: context,
title: TranslationKeys.building,
enabled: _gasModel.site?.buildings?.isNotEmpty ?? false,
staticData: _gasModel.site?.buildings ?? [],
onSelect: (value) {
_gasModel.building = value;
},
),
8.height,
SingleItemDropDownMenu<Floor, NullableLoadingProvider>(
context: context,
title: TranslationKeys.floor,
enabled: _gasModel.building?.floors?.isNotEmpty ?? false,
staticData: _gasModel.building?.floors ?? [],
onSelect: (value) {
_gasModel.floor = value;
},
),
8.height,
SingleItemDropDownMenu<Department, NullableLoadingProvider>(
context: context,
title: TranslationKeys.department,
enabled: _gasModel.floor?.departments?.isNotEmpty ?? false,
staticData: _gasModel.floor?.departments ?? [],
onSelect: (value) {
_gasModel.department = value;
},
),
// 8.height,
// SingleItemDropDownMenu<Department, DepartmentProvider>(
// context: context,

@ -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<Lookup> {
@override
Future getDate() {
return Future.value();
}
}
abstract class LoadingListNotifier<T extends Base> extends ChangeNotifier {
int stateCode;

Loading…
Cancel
Save