gas refill cont.

merge-requests/32/merge
Sikander Saleem 2 years ago
parent f118bb4276
commit 8e2b21bd9d

@ -1,5 +1,6 @@
class URLs {
URLs._();
static const host2 = "http://194.163.164.213/atoms/api";
static const host1 = "https://atomsuat.hmg.com"; // uat url
@ -18,6 +19,8 @@ class URLs {
static get register => "$_baseUrl/handle/create/user"; // post
static get updateProfile => "$_baseUrl/update/user/profile"; // post
static get getHospitals => "$_baseUrl/Customer/GetCustomers"; // get
static get getHospitalsAutoComplete => "$_baseUrl/Customer/GetCustomersAutoComplete"; // get
static get getDepartments => "$_baseUrl/Customer/GetDepartmentLookup"; // get
static get getEquipment => "$_baseUrl/Asset/GetAssets"; // get ?client=208051
static get getModels => "$_baseUrl/ModelDefinition/GetModelDefinitionAsset"; // get ?client=2
@ -29,7 +32,9 @@ class URLs {
static get getServiceFirstAction => "$_baseUrl/Lookups/GetLookup?lookupEnum=700"; // get
static get getServiceRequestTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=604"; // get
static get getServiceRequestStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=503";
static get getRepairLocation => "$_baseUrl/Lookups/GetLookup?lookupEnum=504";
static get equipmentStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=601";
static get getPreventiveMaintenanceVisits => "$_baseUrl/return/user/calibrations"; // get

@ -5,6 +5,7 @@ import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/gas_refill/gas_refill_model.dart';
import 'package:test_sa/models/hospital.dart';
import 'package:test_sa/models/user.dart';
class GasRefillProvider extends ChangeNotifier {
@ -16,6 +17,10 @@ class GasRefillProvider extends ChangeNotifier {
items = null;
nextPage = true;
stateCode = null;
hospital = null;
building = null;
floor = null;
department = null;
}
// state code of current request to defied error message
@ -50,7 +55,7 @@ class GasRefillProvider extends ChangeNotifier {
Map<String, dynamic> body = {};
body["pageNumber"] = (items?.length ?? 0) ~/ pageItemNumber + 1;
body["pageSize"] = pageItemNumber;
print("url:${ URLs.getGasRefill}:body:$body");
print("url:${URLs.getGasRefill}:body:$body");
response = await ApiManager.instance.post(
URLs.getGasRefill,
@ -89,6 +94,11 @@ class GasRefillProvider extends ChangeNotifier {
Map<String, dynamic> body = {
"uid": user.id.toString(),
"token": user.token ?? "",
"building": {"id": building?.id, "name": building?.name, "value": building?.value},
"floor": {"id": floor.id, "name": floor.name, "value": floor.value},
"expectedDate": "2023-06-08T07:03:07.866Z",
"expectedTime": "2023-06-08T07:03:07.866Z",
"department": {"id": department.id, "departmentName": department.name, "departmentCode": "", "ntCode": ""},
"GazRefillNo": "GR-${DateTime.now().toString().split(" ").first}",
"status": model.status.toMap(),
};
@ -158,4 +168,10 @@ class GasRefillProvider extends ChangeNotifier {
return -1;
}
}
Hospital hospital;
Buildings building;
Floors floor;
Departments department;
DateTime expectedDateTime;
}

@ -114,4 +114,35 @@ class HospitalsProvider extends ChangeNotifier {
return [];
}
}
Future<List<Hospital>> getHospitalsListByVal({String searchVal=""}) async {
Response response;
try {
if(searchVal.isNotEmpty) {
searchVal = "?searchText=$searchVal";
}
response = await ApiManager.instance.get(URLs.getHospitalsAutoComplete+searchVal);
// response = await get(
// Uri.parse(host + URLs.getHospitals
// + ( title == null || title.isEmpty ? "" : "?name=$title" )),
// headers: {
// "Content-Type":"application/json; charset=utf-8"
// }
// );
_stateCode = response.statusCode;
List<Hospital> _page = [];
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List categoriesListJson = json.decode(response.body)["data"];
_page = categoriesListJson.map((category) => Hospital.fromJson(category)).toList();
}
return _page;
} catch (error) {
_loading = false;
_stateCode = -1;
notifyListeners();
return [];
}
}
}

@ -0,0 +1,149 @@
class Customer {
List<Data> data;
String message;
String innerMessage;
int responseCode;
bool isSuccess;
Customer({this.data, this.message, this.innerMessage, this.responseCode, this.isSuccess});
Customer.fromJson(Map<String, dynamic> json) {
if (json['data'] != null) {
data = [];
json['data'].forEach((v) {
data.add(new Data.fromJson(v));
});
}
message = json['message'];
innerMessage = json['innerMessage'];
responseCode = json['responseCode'];
isSuccess = json['isSuccess'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
if (this.data != null) {
data['data'] = this.data.map((v) => v.toJson()).toList();
}
data['message'] = this.message;
data['innerMessage'] = this.innerMessage;
data['responseCode'] = this.responseCode;
data['isSuccess'] = this.isSuccess;
return data;
}
}
class Data {
int id;
int customerCode;
String custName;
List<Buildings> buildings;
Data({this.id, this.customerCode, this.custName, this.buildings});
Data.fromJson(Map<String, dynamic> json) {
id = json['id'];
customerCode = json['customerCode'];
custName = json['custName'];
if (json['buildings'] != null) {
buildings = new List<Buildings>();
json['buildings'].forEach((v) {
buildings.add(new Buildings.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['customerCode'] = this.customerCode;
data['custName'] = this.custName;
if (this.buildings != null) {
data['buildings'] = this.buildings.map((v) => v.toJson()).toList();
}
return data;
}
}
class Buildings {
int id;
String name;
int value;
List<Floors> floors;
Buildings({this.id, this.name, this.value, this.floors});
Buildings.fromJson(Map<String, dynamic> json) {
id = json['id'];
name = json['name'];
value = json['value'];
if (json['floors'] != null) {
floors = new List<Floors>();
json['floors'].forEach((v) {
floors.add(new Floors.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['name'] = this.name;
data['value'] = this.value;
if (this.floors != null) {
data['floors'] = this.floors.map((v) => v.toJson()).toList();
}
return data;
}
}
class Floors {
int id;
String name;
int value;
List<Departments> departments;
Floors({this.id, this.name, this.value, this.departments});
Floors.fromJson(Map<String, dynamic> json) {
id = json['id'];
name = json['name'];
value = json['value'];
if (json['departments'] != null) {
departments = new List<Departments>();
json['departments'].forEach((v) {
departments.add(new Departments.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['name'] = this.name;
data['value'] = this.value;
if (this.departments != null) {
data['departments'] = this.departments.map((v) => v.toJson()).toList();
}
return data;
}
}
class Departments {
int id;
String name;
Departments({this.id, this.name});
Departments.fromJson(Map<String, dynamic> json) {
id = json['id'];
name = json['name'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['name'] = this.name;
return data;
}
}

@ -7,6 +7,8 @@ class GasRefillModel {
String clientName;
String title;
Lookup status;
Lookup building;
Lookup floor;
List<GasRefillDetails> details;
GasRefillModel({
@ -21,6 +23,8 @@ class GasRefillModel {
bool validate() {
if (title == null) return false;
if (status == null) return false;
if (building == null) return false;
if (floor == null) return false;
if (details == null && details.isEmpty) return false;
return true;
}

@ -2,7 +2,7 @@ class Hospital {
int id;
int customerCode;
String name;
List buildings;
List<Buildings> buildings;
Hospital({
this.id,
@ -12,7 +12,16 @@ class Hospital {
});
factory Hospital.fromJson(Map<String, dynamic> parsedJson) {
return Hospital(id: parsedJson["id"], name: parsedJson["custName"], customerCode: parsedJson["customerCode"], buildings: parsedJson["buildings"]);
List<Buildings> buildings = [];
if (parsedJson['buildings'] != null) {
buildings = [];
parsedJson['buildings'].forEach((v) {
buildings.add(new Buildings.fromJson(v));
});
}
return Hospital(id: parsedJson["id"], name: parsedJson["custName"], customerCode: parsedJson["customerCode"], buildings: buildings);
}
factory Hospital.fromHospital(Hospital hospital) {
@ -23,3 +32,118 @@ class Hospital {
return {'id': id, 'customerCode': customerCode, 'custName': name, "buildings": buildings};
}
}
// class Data {
// int id;
// int customerCode;
// String custName;
// List<Buildings> buildings;
//
// Data({this.id, this.customerCode, this.custName, this.buildings});
//
// Data.fromJson(Map<String, dynamic> json) {
// id = json['id'];
// customerCode = json['customerCode'];
// custName = json['custName'];
// if (json['buildings'] != null) {
// buildings = new List<Buildings>();
// json['buildings'].forEach((v) {
// buildings.add(new Buildings.fromJson(v));
// });
// }
// }
//
// Map<String, dynamic> toJson() {
// final Map<String, dynamic> data = new Map<String, dynamic>();
// data['id'] = this.id;
// data['customerCode'] = this.customerCode;
// data['custName'] = this.custName;
// if (this.buildings != null) {
// data['buildings'] = this.buildings.map((v) => v.toJson()).toList();
// }
// return data;
// }
// }
class Buildings {
int id;
String name;
int value;
List<Floors> floors;
Buildings({this.id, this.name, this.value, this.floors});
Buildings.fromJson(Map<String, dynamic> json) {
id = json['id'];
name = json['name'];
value = json['value'];
if (json['floors'] != null) {
floors = new List<Floors>();
json['floors'].forEach((v) {
floors.add(new Floors.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['name'] = this.name;
data['value'] = this.value;
if (this.floors != null) {
data['floors'] = this.floors.map((v) => v.toJson()).toList();
}
return data;
}
}
class Floors {
int id;
String name;
int value;
List<Departments> departments;
Floors({this.id, this.name, this.value, this.departments});
Floors.fromJson(Map<String, dynamic> json) {
id = json['id'];
name = json['name'];
value = json['value'];
if (json['departments'] != null) {
departments = new List<Departments>();
json['departments'].forEach((v) {
departments.add(new Departments.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['name'] = this.name;
data['value'] = this.value;
if (this.departments != null) {
data['departments'] = this.departments.map((v) => v.toJson()).toList();
}
return data;
}
}
class Departments {
int id;
String name;
Departments({this.id, this.name});
Departments.fromJson(Map<String, dynamic> json) {
id = json['id'];
name = json['name'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['name'] = this.name;
return data;
}
}

@ -13,7 +13,12 @@ import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/widgets/app_text_form_field.dart';
import 'package:test_sa/views/widgets/buttons/app_button.dart';
import 'package:test_sa/views/widgets/date_and_time/time_picker.dart';
import 'package:test_sa/views/widgets/gas_refill/building_type_menu.dart';
import 'package:test_sa/views/widgets/gas_refill/department_type_menu.dart';
import 'package:test_sa/views/widgets/gas_refill/floor_type_menu.dart';
import 'package:test_sa/views/widgets/gas_refill/gas_refill_create_details_item.dart';
import 'package:test_sa/views/widgets/hospitals/hospital_auto_complete_field_new.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/status/gas_refill/gas_cylinder_size.dart';
import 'package:test_sa/views/widgets/status/gas_refill/gas_cylinder_type.dart';
@ -25,6 +30,7 @@ import '../../../../controllers/localization/localization.dart';
class RequestGasRefill extends StatefulWidget {
static const String id = "/request-gas-refill";
const RequestGasRefill({Key key}) : super(key: key);
@override
@ -110,7 +116,11 @@ class _RequestGasRefillState extends State<RequestGasRefill> {
_subtitle = AppLocalization.of(context).subtitle;
_userProvider = Provider.of<UserProvider>(context);
_settingProvider = Provider.of<SettingProvider>(context);
_gasRefillProvider = Provider.of<GasRefillProvider>(context, listen: false);
if (_gasRefillProvider == null) {
_gasRefillProvider = Provider.of<GasRefillProvider>(context, listen: false);
_gasRefillProvider.reset();
}
return Scaffold(
key: _scaffoldKey,
body: Form(
@ -174,25 +184,80 @@ class _RequestGasRefillState extends State<RequestGasRefill> {
const SizedBox(
height: 4,
),
const ASubTitle("Type"),
if (_validate && _currentDetails.type == null)
ASubTitle(
_subtitle.requiredWord,
color: Colors.red,
),
HospitalAutoCompleteField(
initialValue: _gasRefillProvider.hospital?.name,
// onSave: (value){
// _search.hospital = value;
// },
onSearch: (value) {
_gasRefillProvider.hospital = value;
_gasRefillProvider.building = null;
_gasRefillProvider.floor = null;
_gasRefillProvider.department = null;
setState(() {});
},
),
const SizedBox(
height: 4,
height: 8,
),
BuildingTypeMenu(
initialValue: _gasRefillProvider?.building,
building: _gasRefillProvider?.hospital?.buildings,
onSelect: (status) {
_gasRefillProvider.building = status;
setState(() {});
},
),
const SizedBox(height: 8),
FloorTypeMenu(
initialValue: _gasRefillProvider?.floor,
floors: _gasRefillProvider?.building?.floors,
onSelect: (status) {
_gasRefillProvider.floor = status;
setState(() {});
},
),
const SizedBox(height: 8),
DepartmentTypeMenu(
initialValue: _gasRefillProvider?.department,
departments: _gasRefillProvider?.floor?.departments,
onSelect: (status) {
_gasRefillProvider.department = status;
setState(() {});
},
),
const SizedBox(height: 8),
Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
const ASubTitle("Expected Date Time"),
SizedBox(
height: 8 * AppStyle.getScaleFactor(context),
),
ADateTimePicker(
date: _gasRefillProvider.expectedDateTime,
from: DateTime.now().subtract(const Duration(days: 365)),
to: DateTime.now().add(const Duration(days: 365)),
onDateTimePicker: (date) {
_gasRefillProvider.expectedDateTime = date;
setState(() {});
},
),
],
),
const SizedBox(height: 8),
Divider(color: Theme.of(context).colorScheme.primary),
const SizedBox(height: 4),
const ASubTitle("Type"),
if (_validate && _currentDetails.type == null) ASubTitle(_subtitle.requiredWord, color: Colors.red),
const SizedBox(height: 4),
GasTypeMenu(
initialValue: _currentDetails.type,
onSelect: (status) {
_currentDetails.type = status;
},
),
const SizedBox(
height: 8,
),
const SizedBox(height: 8),
const ASubTitle("Cylinder Size"),
if (_validate && _currentDetails.cylinderSize == null)
ASubTitle(
@ -208,6 +273,10 @@ class _RequestGasRefillState extends State<RequestGasRefill> {
_currentDetails.cylinderSize = status;
},
),
const SizedBox(
height: 8,
),
const SizedBox(
height: 8,
),
@ -254,6 +323,7 @@ class _RequestGasRefillState extends State<RequestGasRefill> {
text: _subtitle.add,
onPressed: _addNewModel,
),
if (_formModel.details.isNotEmpty) const ASubTitle("Gas Requests"),
ListView.builder(
key: _DetailsKey,

@ -23,6 +23,7 @@ class _TrackGasRefillPageState extends State<TrackGasRefillPage> with TickerProv
GasRefillProvider _gasRefillProvider;
UserProvider _userProvider;
SettingProvider _settingProvider;
@override
Widget build(BuildContext context) {
_gasRefillProvider = Provider.of<GasRefillProvider>(context);

@ -0,0 +1,101 @@
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/gas_types_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/models/hospital.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/status/single_status_menu.dart';
class BuildingTypeMenu extends StatefulWidget {
final Function(Buildings) onSelect;
Buildings initialValue;
List<Buildings> building;
BuildingTypeMenu({Key key, this.onSelect, this.initialValue, this.building = const []}) : super(key: key);
@override
_BuildingTypeMenuState createState() {
return _BuildingTypeMenuState();
}
}
class _BuildingTypeMenuState extends State<BuildingTypeMenu> {
Buildings _selectedBuilding;
List<Buildings> _building;
@override
void initState() {
super.initState();
_selectedBuilding = widget.initialValue;
_building = widget.building;
}
@override
void didUpdateWidget(covariant BuildingTypeMenu oldWidget) {
if (oldWidget.building != widget.building) {
_building = widget.building;
_selectedBuilding = null;
}
super.didUpdateWidget(oldWidget);
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
return Container(
padding: const EdgeInsets.symmetric(horizontal: 16),
decoration: BoxDecoration(
color: AColors.inputFieldBackgroundColor,
border: Border.all(
color: Color(0xffefefef),
),
borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)),
// boxShadow: const [
// AppStyle.boxShadow
// ]
),
child: DropdownButton<Buildings>(
value: _selectedBuilding,
iconSize: 24,
icon: const Icon(Icons.keyboard_arrow_down_rounded),
elevation: 0,
isExpanded: true,
hint: Text(
"Select Building",
style: Theme.of(context).textTheme.subtitle1,
),
style: TextStyle(color: Theme.of(context).primaryColor),
underline: SizedBox.shrink(),
onChanged: (Buildings newValue) {
setState(() {
_selectedBuilding = newValue;
});
widget.onSelect(newValue);
},
items: _building?.map<DropdownMenuItem<Buildings>>((Buildings value) {
return DropdownMenuItem<Buildings>(
value: value,
child: Text(
value.name,
style: Theme.of(context).textTheme.subtitle1.copyWith(
color: Theme.of(context).primaryColor,
fontSize: 11,
//fontWeight: FontWeight.bold
),
),
);
})?.toList() ??
[],
),
);
}
}

@ -0,0 +1,101 @@
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/gas_types_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/models/hospital.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/status/single_status_menu.dart';
class DepartmentTypeMenu extends StatefulWidget {
final Function(Departments) onSelect;
Departments initialValue;
List<Departments> departments;
DepartmentTypeMenu({Key key, this.onSelect, this.initialValue, this.departments = const []}) : super(key: key);
@override
_DepartmentTypeMenuState createState() {
return _DepartmentTypeMenuState();
}
}
class _DepartmentTypeMenuState extends State<DepartmentTypeMenu> {
Departments _selected;
List<Departments> _departments;
@override
void initState() {
super.initState();
_selected = widget.initialValue;
_departments = widget.departments;
}
@override
void didUpdateWidget(covariant DepartmentTypeMenu oldWidget) {
if (oldWidget.departments != widget.departments) {
_departments = widget.departments;
_selected = null;
}
super.didUpdateWidget(oldWidget);
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
return Container(
padding: const EdgeInsets.symmetric(horizontal: 16),
decoration: BoxDecoration(
color: AColors.inputFieldBackgroundColor,
border: Border.all(
color: Color(0xffefefef),
),
borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)),
// boxShadow: const [
// AppStyle.boxShadow
// ]
),
child: DropdownButton<Departments>(
value: _selected,
iconSize: 24,
icon: const Icon(Icons.keyboard_arrow_down_rounded),
elevation: 0,
isExpanded: true,
hint: Text(
"Select Department",
style: Theme.of(context).textTheme.subtitle1,
),
style: TextStyle(color: Theme.of(context).primaryColor),
underline: SizedBox.shrink(),
onChanged: (Departments newValue) {
setState(() {
_selected = newValue;
});
widget.onSelect(newValue);
},
items: widget?.departments?.map<DropdownMenuItem<Departments>>((Departments value) {
return DropdownMenuItem<Departments>(
value: value,
child: Text(
value.name,
style: Theme.of(context).textTheme.subtitle1.copyWith(
color: Theme.of(context).primaryColor,
fontSize: 11,
//fontWeight: FontWeight.bold
),
),
);
})?.toList() ??
[],
),
);
}
}

@ -0,0 +1,101 @@
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/gas_types_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/models/hospital.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/status/single_status_menu.dart';
class FloorTypeMenu extends StatefulWidget {
final Function(Floors) onSelect;
Floors initialValue;
List<Floors> floors;
FloorTypeMenu({Key key, this.onSelect, this.initialValue, this.floors = const []}) : super(key: key);
@override
_FloorTypeMenuState createState() {
return _FloorTypeMenuState();
}
}
class _FloorTypeMenuState extends State<FloorTypeMenu> {
Floors _selected;
List<Floors> _floors;
@override
void initState() {
super.initState();
_selected = widget.initialValue;
_floors = widget.floors;
}
@override
void didUpdateWidget(covariant FloorTypeMenu oldWidget) {
if (oldWidget.floors != widget.floors) {
_floors = widget.floors;
_selected = null;
}
super.didUpdateWidget(oldWidget);
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
return Container(
padding: const EdgeInsets.symmetric(horizontal: 16),
decoration: BoxDecoration(
color: AColors.inputFieldBackgroundColor,
border: Border.all(
color: Color(0xffefefef),
),
borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)),
// boxShadow: const [
// AppStyle.boxShadow
// ]
),
child: DropdownButton<Floors>(
value: _selected,
iconSize: 24,
icon: const Icon(Icons.keyboard_arrow_down_rounded),
elevation: 0,
isExpanded: true,
hint: Text(
"Select Floor",
style: Theme.of(context).textTheme.subtitle1,
),
style: TextStyle(color: Theme.of(context).primaryColor),
underline: SizedBox.shrink(),
onChanged: (Floors newValue) {
setState(() {
_selected = newValue;
});
widget.onSelect(newValue);
},
items: _floors?.map<DropdownMenuItem<Floors>>((Floors value) {
return DropdownMenuItem<Floors>(
value: value,
child: Text(
value.name,
style: Theme.of(context).textTheme.subtitle1.copyWith(
color: Theme.of(context).primaryColor,
fontSize: 11,
//fontWeight: FontWeight.bold
),
),
);
})?.toList() ??
[],
),
);
}
}

@ -34,6 +34,15 @@ class _HospitalAutoCompleteFieldState extends State<HospitalAutoCompleteField> {
super.initState();
}
@override
void didUpdateWidget(covariant HospitalAutoCompleteField oldWidget) {
super.didUpdateWidget(oldWidget);
if (oldWidget.initialValue != widget.initialValue) {
_controller = TextEditingController(text: widget.initialValue);
}
}
@override
void dispose() {
_controller.dispose();

@ -0,0 +1,97 @@
import 'package:flutter/material.dart';
import 'package:flutter_typeahead/flutter_typeahead.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/controllers/providers/api/hospitals_provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
import 'package:test_sa/models/hospital.dart';
import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart';
class HospitalAutoCompleteField extends StatefulWidget {
final String initialValue;
final Function(Hospital) onSearch;
//final Function(Hospital) onSave;
const HospitalAutoCompleteField({
Key key,
this.onSearch,
this.initialValue,
}) : super(key: key);
@override
_HospitalAutoCompleteFieldState createState() => _HospitalAutoCompleteFieldState();
}
class _HospitalAutoCompleteFieldState extends State<HospitalAutoCompleteField> {
SettingProvider _settingProvider;
TextEditingController _controller;
@override
void initState() {
_controller = TextEditingController(text: widget.initialValue);
super.initState();
}
@override
void didUpdateWidget(covariant HospitalAutoCompleteField oldWidget) {
super.didUpdateWidget(oldWidget);
if (oldWidget.initialValue != widget.initialValue) {
_controller = TextEditingController(text: widget.initialValue);
}
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
_settingProvider = Provider.of<SettingProvider>(context);
Subtitle _subtitle = AppLocalization.of(context).subtitle;
return Container(
padding: EdgeInsets.symmetric(horizontal: 16),
decoration: BoxDecoration(
color: AColors.inputFieldBackgroundColor,
border: Border.all(
color: Color(0xffefefef),
),
borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)),
// boxShadow: [
// AppStyle.boxShadow
// ]
),
child: TypeAheadField<Hospital>(
textFieldConfiguration: TextFieldConfiguration(
style: Theme.of(context).textTheme.headline6,
controller: _controller,
textAlign: TextAlign.center,
decoration: InputDecoration(
hintText: _subtitle.hospital,
border: InputBorder.none,
disabledBorder: InputBorder.none,
focusedBorder: InputBorder.none,
enabledBorder: InputBorder.none,
),
textInputAction: TextInputAction.search,
),
suggestionsCallback: (vale) async {
return await HospitalsProvider().getHospitalsListByVal(searchVal: _controller.text);
},
itemBuilder: (context, hospital) {
return ListTile(
title: Text(hospital.name),
);
},
onSuggestionSelected: (hospital) {
widget.onSearch(hospital);
},
),
);
}
}
Loading…
Cancel
Save