receiver name added on new transfer request & improvements

main_design2.0
Sikander Saleem 2 years ago
parent 5d706d89b4
commit a6dd802321

@ -111,7 +111,8 @@ class URLs {
// employee
static get getEmployees => "$_baseUrl/Lookups/GetLookup?lookupEnum=33"; // get
static get getEngineers => "$_baseUrl/Account/GetUserByRoleValue?value=R-6"; // get /// TODO : we also need to send the asset id
static get getEngineers => "$_baseUrl/Account/GetUserByRoleValue?value=R-6"; // get
static get getNurses => "$_baseUrl/Account/GetUserByRoleValue?value=R-7"; // get
// pentry
static get getPentry => "$_baseUrl/return/pentry/details"; // get

@ -5,7 +5,7 @@ import 'package:flutter/material.dart';
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/engineer.dart';
import 'package:test_sa/models/employee.dart';
import 'package:test_sa/models/user.dart';
class EngineersProvider extends ChangeNotifier {
@ -24,9 +24,9 @@ class EngineersProvider extends ChangeNotifier {
// contain user data
// when user not login or register _user = null
List<Engineer> _items;
List<Employee> _items;
List<Engineer> get items => _items;
List<Employee> get items => _items;
// when categories in-process _loading = true
// done _loading = true
@ -58,7 +58,7 @@ class EngineersProvider extends ChangeNotifier {
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List categoriesListJson = json.decode(response.body);
_items = categoriesListJson.map((type) => Engineer.fromJson(type)).toList();
_items = categoriesListJson.map((type) => Employee.fromJson(type)).toList();
}
_loading = false;
notifyListeners();

@ -0,0 +1,57 @@
import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
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/employee.dart';
import 'package:test_sa/models/user.dart';
class NurseProvider extends ChangeNotifier {
//reset provider data
void reset() {
_items = null;
_stateCode = null;
}
int _stateCode;
int get stateCode => _stateCode;
List<Employee> _items;
List<Employee> get nursesList => _items;
bool _loading;
bool get isLoading => _loading;
set isLoading(bool isLoading) {
_loading = isLoading;
notifyListeners();
}
Future<int> getData() async {
if (_loading == true) return -2;
_loading = true;
notifyListeners();
Response response;
try {
response = await ApiManager.instance.get(URLs.getNurses);
_stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List categoriesListJson = json.decode(response.body);
_items = categoriesListJson.map((type) => Employee.fromJson(type)).toList();
_items.sort((a, b) => a.name.compareTo(b.name));
}
_loading = false;
notifyListeners();
return response.statusCode;
} catch (error) {
_loading = false;
_stateCode = -1;
notifyListeners();
return -1;
}
}
}

@ -5,7 +5,7 @@ import 'package:flutter/material.dart';
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/engineer.dart';
import 'package:test_sa/models/employee.dart';
import '../../../../../models/new_models/assigned_employee.dart';
import '../../../../../models/new_models/assistant_employee.dart';
@ -68,7 +68,7 @@ class ServiceReportAssistantsEmployeeProvider extends ChangeNotifier {
// client's request was successfully received
List usersListJson = json.decode(response.body);
_assistantEmployees = [];
_assistantEmployees = usersListJson.map((type) => Engineer.fromJson(type ?? {})).map((e) => AssistantEmployees(user: AssignedEmployee(id: e.id, name: e.name))).toList();
_assistantEmployees = usersListJson.map((type) => Employee.fromJson(type ?? {})).map((e) => AssistantEmployees(user: AssignedEmployee(id: e.id, name: e.name))).toList();
_assistantEmployees.insert(0, AssistantEmployees(id: -1, user: AssignedEmployee(id: "-1", name: "-- Select --")));
}
_loading = false;

@ -5,7 +5,7 @@ import 'package:flutter/material.dart';
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/engineer.dart';
import 'package:test_sa/models/employee.dart';
class ServiceReportUsersProvider extends ChangeNotifier {
//reset provider data
@ -24,9 +24,9 @@ class ServiceReportUsersProvider extends ChangeNotifier {
// contain user data
// when user not login or register _user = null
List<Engineer> _engineers;
List<Employee> _engineers;
List<Engineer> get engineers => _engineers;
List<Employee> get engineers => _engineers;
// when categories in-process _loading = true
// done _loading = true
@ -62,7 +62,7 @@ class ServiceReportUsersProvider extends ChangeNotifier {
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List usersListJson = json.decode(response.body);
_engineers = usersListJson.map((type) => Engineer.fromJson(type)).toList();
_engineers = usersListJson.map((type) => Employee.fromJson(type)).toList();
}
_loading = false;
notifyListeners();

@ -19,6 +19,7 @@ import 'package:test_sa/controllers/providers/api/ppm_provider.dart';
import 'package:test_sa/controllers/providers/api/service_requests_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/employee/assigned_to_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/employee/engineers_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/employee/nurse_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_size_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_type_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/pentry/pentry_status_provider.dart';
@ -141,6 +142,7 @@ class MyApp extends StatelessWidget {
ChangeNotifierProvider(create: (_) => CylinderSizeProvider()),
ChangeNotifierProvider(create: (_) => DepartmentProvider()),
ChangeNotifierProvider(create: (_) => SiteProvider()),
ChangeNotifierProvider(create: (_) => NurseProvider()),
ChangeNotifierProvider(create: (_) => HospitalsProvider()),
ChangeNotifierProvider(create: (_) => AssetProvider()),
ChangeNotifierProvider(create: (_) => AllRequestsProvider()),

@ -26,6 +26,7 @@ class AssetTransfer {
this.senderMachineStatusId,
this.senderComment,
this.comment,
this.receiverEndUserId,
this.senderStartDate,
this.senderEndDate,
this.senderWorkingHours,
@ -90,6 +91,7 @@ class AssetTransfer {
senderMachineStatusId = json['senderMachineStatusId'];
senderComment = json['senderComment'];
comment = json['comment'];
receiverEndUserId = json['receiverEndUserId'];
senderStartDate = json['senderStartDate'];
senderEndDate = json['senderEndDate'];
senderWorkingHours = json['senderWorkingHours'];
@ -182,6 +184,7 @@ class AssetTransfer {
num senderMachineStatusId;
String senderComment;
String comment;
String receiverEndUserId;
String senderStartDate;
String senderEndDate;
String senderWorkingHours;
@ -238,6 +241,7 @@ class AssetTransfer {
num senderMachineStatusId,
String senderComment,
String comment,
String receiverEndUserId,
String senderStartDate,
String senderEndDate,
String senderWorkingHours,
@ -302,6 +306,7 @@ class AssetTransfer {
senderMachineStatusId: senderMachineStatusId ?? this.senderMachineStatusId,
senderComment: senderComment ?? this.senderComment,
comment: comment ?? this.comment,
receiverEndUserId: receiverEndUserId ?? this.receiverEndUserId,
senderStartDate: senderStartDate ?? this.senderStartDate,
senderEndDate: senderEndDate ?? this.senderEndDate,
senderWorkingHours: senderWorkingHours ?? this.senderWorkingHours,
@ -366,6 +371,7 @@ class AssetTransfer {
map['senderMachineStatusId'] = senderMachineStatusId;
map['senderComment'] = senderComment;
map['comment'] = comment;
map['receiverEndUserId'] = receiverEndUserId;
map['senderStartDate'] = senderStartDate;
map['senderEndDate'] = senderEndDate;
map['senderWorkingHours'] = senderWorkingHours;
@ -434,6 +440,7 @@ class AssetTransfer {
map['senderMachineStatusId'] = senderMachineStatusId;
map['senderComment'] = senderComment;
map['comment'] = comment;
map['receiverEndUserId'] = receiverEndUserId;
map['senderStartDate'] = senderStartDate;
map['senderEndDate'] = senderEndDate;
map['senderWorkingHours'] = senderWorkingHours;
@ -476,6 +483,7 @@ class AssetTransfer {
senderMachineStatusId = assetTransfer.senderMachineStatusId;
senderComment = assetTransfer.senderComment;
comment = assetTransfer.comment;
receiverEndUserId = assetTransfer.receiverEndUserId;
senderStartDate = assetTransfer.senderStartDate;
senderEndDate = assetTransfer.senderEndDate;
senderWorkingHours = assetTransfer.senderWorkingHours;

@ -1,29 +1,29 @@
class Engineer {
class Employee {
String id;
String name;
Engineer({
Employee({
this.id,
this.name,
});
factory Engineer.fromJson(Map<String, dynamic> parsedJson) {
if (parsedJson == null) return Engineer();
return Engineer(
factory Employee.fromJson(Map<String, dynamic> parsedJson) {
if (parsedJson == null) return Employee();
return Employee(
id: parsedJson["userId"] ?? parsedJson["id"],
name: parsedJson["userName"] ?? parsedJson["name"],
);
}
factory Engineer.fromEngineer(Engineer department) {
return Engineer(
factory Employee.fromEngineer(Employee department) {
return Employee(
id: department?.id,
name: department?.name,
);
}
@override
bool operator ==(Object other) => identical(this, other) || other is Engineer && id == other.id;
bool operator ==(Object other) => identical(this, other) || other is Employee && id == other.id;
@override
int get hashCode => id.hashCode;

@ -10,10 +10,13 @@ import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/device/asset.dart';
import 'package:test_sa/models/device/asset_transfer.dart';
import 'package:test_sa/models/employee.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/room_model.dart';
import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart';
import 'package:test_sa/views/widgets/status/employee/nurse_menu.dart';
import 'package:test_sa/views/widgets/status/nurse_employee_menu.dart';
import '../../../models/new_models/building.dart';
import '../../../models/new_models/site.dart';
@ -44,6 +47,7 @@ class _RequestDeviceTransferState extends State<RequestDeviceTransfer> {
final TextEditingController _receiverNameController = TextEditingController(), _commentsController = TextEditingController();
final Asset _assetDestination = Asset();
Asset _pickedAsset;
Employee receiverEndUser;
@override
void setState(VoidCallback fn) {
@ -57,6 +61,7 @@ class _RequestDeviceTransferState extends State<RequestDeviceTransfer> {
_transferModel.destFloorId = _assetDestination.floor?.id;
_transferModel.destDepartmentId = _assetDestination.department?.id;
_transferModel.destRoomId = _assetDestination.room?.id;
_transferModel.receiverEndUserId = _selectedNurse.id;
if (!_formKey.currentState.validate() || !(await _transferModel.validate(context))) {
return;
}
@ -73,11 +78,16 @@ class _RequestDeviceTransferState extends State<RequestDeviceTransfer> {
super.dispose();
}
Employee _selectedNurse;
@override
Widget build(BuildContext context) {
_userProvider = Provider.of<UserProvider>(context, listen: false);
_settingProvider = Provider.of<SettingProvider>(context, listen: false);
_deviceTransferProvider = Provider.of<AssetTransferProvider>(context, listen: false);
_selectedNurse ??= Employee(id: _userProvider.user.userID, name: _userProvider.user.username);
return Scaffold(
key: _scaffoldKey,
appBar: DefaultAppBar(title: context.translation.newTransferRequest),
@ -101,13 +111,15 @@ class _RequestDeviceTransferState extends State<RequestDeviceTransfer> {
16.height,
context.translation.receiverDetails.heading5(context),
8.height,
/// todo [TBD] : receiverName
AppTextFormField(
controller: _receiverNameController,
labelText: context.translation.receiverName,
//validator: (text) => Validator.hasValue(text) ? null : context.translation.requiredField,
onSaved: (text) {},
NurseMenu(
title: context.translation.receiverName,
initialValue: _selectedNurse,
onSelect: (employee) {
if (employee != null) {
_selectedNurse = employee;
setState(() {});
}
},
),
8.height,
SingleItemDropDownMenu<Site, SiteProvider>(

@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/service_requests_provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/models/engineer.dart';
import 'package:test_sa/models/employee.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/service_request/search_work_order.dart';
import 'package:test_sa/views/pages/sub_workorder/workorder_list.dart';
@ -111,7 +111,7 @@ class _SearchSubWorkOrderPageState extends State<SearchSubWorkOrderPage> {
ASubTitle(context.translation.assignedEmployee),
const SizedBox(height: 4),
ServiceReportAllUsers(
initialValue: _searchWorkOrders.assignedEmployee == null ? null : Engineer(id: _searchWorkOrders.assignedEmployee.id, name: _searchWorkOrders.assignedEmployee.name),
initialValue: _searchWorkOrders.assignedEmployee == null ? null : Employee(id: _searchWorkOrders.assignedEmployee.id, name: _searchWorkOrders.assignedEmployee.name),
onSelect: (engineer) {
_searchWorkOrders.assignedEmployee = AssignedEmployee(id: engineer.id, name: engineer.name);
},

@ -12,7 +12,7 @@ import 'package:test_sa/models/service_request/service_request.dart';
import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/widgets/buttons/app_small_button.dart';
import 'package:test_sa/views/widgets/date_and_time/date_picker.dart';
import 'package:test_sa/views/widgets/status/employee/assigned_to_mune.dart';
import 'package:test_sa/views/widgets/status/employee/assigned_to_menu.dart';
class ServiceRequestsUpdateDialog extends StatefulWidget {
final ServiceRequest request;

@ -10,7 +10,7 @@ import 'package:test_sa/views/widgets/status/service_request/service_request_sta
import 'package:test_sa/views/widgets/switch_button.dart';
import 'package:test_sa/views/widgets/titles/app_sub_title.dart';
import '../../../models/engineer.dart';
import '../../../models/employee.dart';
import '../../../models/new_models/assigned_employee.dart';
import '../app_text_form_field.dart';
import '../date_and_time/date_picker.dart';
@ -220,7 +220,7 @@ class _ServiceRequestsSearchDialogState extends State<ServiceRequestsSearchDialo
ASubTitle(context.translation.assignedEmployee),
const SizedBox(height: 4),
ServiceReportAllUsers(
initialValue: _search.assignedEmployee == null ? null : Engineer(id: _search.assignedEmployee.id, name: _search.assignedEmployee.name),
initialValue: _search.assignedEmployee == null ? null : Employee(id: _search.assignedEmployee.id, name: _search.assignedEmployee.name),
onSelect: (engineer) {
_search.assignedEmployee = AssignedEmployee(id: engineer.id, name: engineer.name);
},

@ -0,0 +1,35 @@
// import 'package:flutter/material.dart';
// import 'package:provider/provider.dart';
// import 'package:test_sa/controllers/providers/api/status_drop_down/employee/engineers_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/employee.dart';
// import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
// import 'package:test_sa/views/widgets/status/employee/single_type_menu.dart';
//
// class EngineersMenu extends StatelessWidget {
// final Function(Employee) onSelect;
// final Employee initialValue;
//
// const EngineersMenu({Key key, this.onSelect, this.initialValue}) : super(key: key);
//
// @override
// Widget build(BuildContext context) {
// final settingProvider = Provider.of<SettingProvider>(context);
// final userProvider = Provider.of<UserProvider>(context);
// final menuProvider = Provider.of<EngineersProvider>(context);
// return LoadingManager(
// isLoading: menuProvider.isLoading,
// isFailedLoading: menuProvider.items == null,
// stateCode: menuProvider.stateCode,
// onRefresh: () async {
// menuProvider.reset();
// await menuProvider.getData(user: userProvider.user, host: settingProvider.host);
// },
// child: SingleEngineerMenu(
// initialStatus: initialValue,
// engineers: menuProvider.items,
// onSelect: onSelect,
// ));
// }
// }

@ -1,35 +0,0 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/employee/engineers_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/engineer.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/status/employee/single_type_menu.dart';
class EngineersMenu extends StatelessWidget {
final Function(Engineer) onSelect;
final Engineer initialValue;
const EngineersMenu({Key key, this.onSelect, this.initialValue}) : super(key: key);
@override
Widget build(BuildContext context) {
final settingProvider = Provider.of<SettingProvider>(context);
final userProvider = Provider.of<UserProvider>(context);
final menuProvider = Provider.of<EngineersProvider>(context);
return LoadingManager(
isLoading: menuProvider.isLoading,
isFailedLoading: menuProvider.items == null,
stateCode: menuProvider.stateCode,
onRefresh: () async {
menuProvider.reset();
await menuProvider.getData(user: userProvider.user, host: settingProvider.host);
},
child: SingleEngineerMenu(
initialStatus: initialValue,
engineers: menuProvider.items,
onSelect: onSelect,
));
}
}

@ -0,0 +1,44 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/employee/nurse_provider.dart';
import 'package:test_sa/models/employee.dart';
import 'package:test_sa/models/new_models/assistant_employee.dart';
import 'package:test_sa/models/service_request/search_work_order.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/status/assistant_employee_menu.dart';
import 'package:test_sa/views/widgets/status/nurse_employee_menu.dart';
import '../../../../controllers/providers/api/status_drop_down/report/service_report_assistants_employee_provider.dart';
class NurseMenu extends StatelessWidget {
final Function(Employee) onSelect;
final Employee initialValue;
final String title;
final bool enable;
const NurseMenu({Key key, @required this.onSelect, this.title, this.initialValue, this.enable = true}) : super(key: key);
@override
Widget build(BuildContext context) {
NurseProvider menuProvider = Provider.of<NurseProvider>(context);
return LoadingManager(
isLoading: menuProvider.isLoading,
isFailedLoading: menuProvider.nursesList == null,
stateCode: menuProvider.stateCode,
onRefresh: () async {
await menuProvider.getData();
// menuProvider.setStateCode = null;
},
child: NurseEmployeeMenu(
initialValue: initialValue,
title: title,
list: menuProvider.nursesList,
onSelect: (employee) {
onSelect(employee);
},
enable: enable,
),
);
}
}

@ -1,86 +1,86 @@
import 'package:flutter/material.dart';
import 'package:test_sa/models/engineer.dart';
import 'package:test_sa/views/app_style/sizing.dart';
class SingleEngineerMenu extends StatefulWidget {
final List<Engineer> engineers;
final Engineer initialStatus;
final Function(Engineer) onSelect;
const SingleEngineerMenu({Key key, this.engineers, this.onSelect, this.initialStatus}) : super(key: key);
@override
_SingleEngineerMenuState createState() => _SingleEngineerMenuState();
}
class _SingleEngineerMenuState extends State<SingleEngineerMenu> {
Engineer _selectedStatus;
@override
void didUpdateWidget(covariant SingleEngineerMenu oldWidget) {
if (widget.initialStatus != null && widget.initialStatus.id != null) {
_selectedStatus = widget.engineers?.firstWhere((element) {
return element == widget.initialStatus;
});
widget.onSelect(_selectedStatus);
} else {
_selectedStatus = null;
}
super.didUpdateWidget(oldWidget);
}
@override
void initState() {
if (widget.initialStatus != null && widget.initialStatus.id != null) {
_selectedStatus = widget.engineers?.firstWhere((element) {
return element == widget.initialStatus;
});
widget.onSelect(_selectedStatus);
}
super.initState();
}
@override
Widget build(BuildContext context) {
return Container(
padding: const EdgeInsets.symmetric(horizontal: 16),
decoration: BoxDecoration(
color: Colors.white,
// border: Border.all(color: AColors.black),
borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)),
boxShadow: const [AppStyle.boxShadow]),
child: DropdownButton<Engineer>(
value: _selectedStatus,
iconSize: 24,
elevation: 16,
isExpanded: true,
hint: Text(
"Select",
style: Theme.of(context).textTheme.subtitle1,
),
style: TextStyle(color: Theme.of(context).primaryColor),
underline: SizedBox.shrink(),
onChanged: (Engineer newValue) {
setState(() {
_selectedStatus = newValue;
});
widget.onSelect(newValue);
},
items: widget.engineers.map<DropdownMenuItem<Engineer>>((Engineer value) {
return DropdownMenuItem<Engineer>(
value: value,
child: Text(
value.name,
style: Theme.of(context).textTheme.subtitle1.copyWith(
color: Theme.of(context).primaryColor,
fontSize: 11,
//fontWeight: FontWeight.bold
),
),
);
}).toList(),
),
);
}
}
// import 'package:flutter/material.dart';
// import 'package:test_sa/models/employee.dart';
// import 'package:test_sa/views/app_style/sizing.dart';
//
// class SingleEngineerMenu extends StatefulWidget {
// final List<Employee> engineers;
// final Employee initialStatus;
// final Function(Employee) onSelect;
//
// const SingleEngineerMenu({Key key, this.engineers, this.onSelect, this.initialStatus}) : super(key: key);
//
// @override
// _SingleEngineerMenuState createState() => _SingleEngineerMenuState();
// }
//
// class _SingleEngineerMenuState extends State<SingleEngineerMenu> {
// Employee _selectedStatus;
//
// @override
// void didUpdateWidget(covariant SingleEngineerMenu oldWidget) {
// if (widget.initialStatus != null && widget.initialStatus.id != null) {
// _selectedStatus = widget.engineers?.firstWhere((element) {
// return element == widget.initialStatus;
// });
// widget.onSelect(_selectedStatus);
// } else {
// _selectedStatus = null;
// }
// super.didUpdateWidget(oldWidget);
// }
//
// @override
// void initState() {
// if (widget.initialStatus != null && widget.initialStatus.id != null) {
// _selectedStatus = widget.engineers?.firstWhere((element) {
// return element == widget.initialStatus;
// });
// widget.onSelect(_selectedStatus);
// }
//
// super.initState();
// }
//
// @override
// Widget build(BuildContext context) {
// return Container(
// padding: const EdgeInsets.symmetric(horizontal: 16),
// decoration: BoxDecoration(
// color: Colors.white,
// // border: Border.all(color: AColors.black),
// borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)),
// boxShadow: const [AppStyle.boxShadow]),
// child: DropdownButton<Employee>(
// value: _selectedStatus,
// iconSize: 24,
// elevation: 16,
// isExpanded: true,
// hint: Text(
// "Select",
// style: Theme.of(context).textTheme.subtitle1,
// ),
// style: TextStyle(color: Theme.of(context).primaryColor),
// underline: SizedBox.shrink(),
// onChanged: (Employee newValue) {
// setState(() {
// _selectedStatus = newValue;
// });
// widget.onSelect(newValue);
// },
// items: widget.engineers.map<DropdownMenuItem<Employee>>((Employee value) {
// return DropdownMenuItem<Employee>(
// 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,130 @@
import 'package:flutter/material.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/models/employee.dart';
import '../../../models/new_models/assistant_employee.dart';
import '../../../new_views/app_style/app_color.dart';
class NurseEmployeeMenu extends StatefulWidget {
final List<Employee> list;
final Employee initialValue;
final Function(Employee) onSelect;
final String title;
final bool enable;
const NurseEmployeeMenu({Key key, this.list, this.title, this.onSelect, this.initialValue, this.enable = true}) : super(key: key);
@override
_SingleNurseEmployeeMenuState createState() => _SingleNurseEmployeeMenuState();
}
class _SingleNurseEmployeeMenuState extends State<NurseEmployeeMenu> {
Employee _selectedStatus;
@override
void setState(VoidCallback fn) {
if (mounted) super.setState(fn);
}
@override
void didUpdateWidget(covariant NurseEmployeeMenu oldWidget) {
if (widget.initialValue != null) {
final result = widget.list?.where((element) {
return element?.id == widget.initialValue?.id;
});
if (result.isNotEmpty) {
_selectedStatus = result.first;
} else {
_selectedStatus = null;
}
if ((widget.initialValue?.id ?? "") != (_selectedStatus?.id ?? "")) {
widget.onSelect(_selectedStatus);
}
} else {
_selectedStatus = null;
}
super.didUpdateWidget(oldWidget);
}
@override
void initState() {
if (widget.initialValue != null) {
final result = widget.list?.where((element) {
return element?.id == widget.initialValue?.id;
});
if (result.isNotEmpty) _selectedStatus = result.first;
if (widget.initialValue?.id != _selectedStatus?.id) {
widget.onSelect(_selectedStatus);
}
}
super.initState();
}
@override
Widget build(BuildContext context) {
return Container(
height: 60.toScreenHeight,
padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth),
decoration: BoxDecoration(
color: context.isDark ? AppColor.neutral50 : Colors.white,
borderRadius: BorderRadius.circular(10),
boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)],
),
child: Stack(
alignment: Alignment.center,
children: [
PositionedDirectional(
end: 0,
child: Icon(
Icons.keyboard_arrow_down_rounded,
color: widget.enable ? null : Colors.grey,
)),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
if (widget.title != null)
Text(
widget.title,
style: Theme.of(context).textTheme.bodySmall?.copyWith(color: context.isDark ? null : AppColor.neutral20, fontWeight: FontWeight.w500),
),
DropdownButton<Employee>(
value: _selectedStatus,
iconSize: 24,
isDense: true,
icon: const SizedBox.shrink(),
elevation: 0,
isExpanded: true,
hint: Text(
context.translation.select,
style: Theme.of(context).textTheme.bodyLarge,
),
style: TextStyle(color: Theme.of(context).primaryColor),
underline: const SizedBox.shrink(),
onChanged: widget.enable
? (Employee newValue) {
setState(() {
_selectedStatus = newValue;
});
widget.onSelect(newValue);
}
: null,
items: widget.list.map<DropdownMenuItem<Employee>>((Employee value) {
return DropdownMenuItem<Employee>(
value: value,
child: Text(
value.name ?? "NULL",
style: Theme.of(context).textTheme.bodyLarge,
),
);
}).toList(),
),
],
),
],
),
);
}
}

@ -1,13 +1,13 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_users_provider.dart';
import 'package:test_sa/models/engineer.dart';
import 'package:test_sa/models/employee.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/status/users_menu.dart';
class ServiceReportAllUsers extends StatelessWidget {
final Function(Engineer) onSelect;
final Engineer initialValue;
final Function(Employee) onSelect;
final Employee initialValue;
const ServiceReportAllUsers({Key key, @required this.onSelect, this.initialValue}) : super(key: key);

@ -1,12 +1,12 @@
import 'package:flutter/material.dart';
import 'package:test_sa/views/app_style/sizing.dart';
import '../../../models/engineer.dart';
import '../../../models/employee.dart';
class UsersMenu extends StatefulWidget {
final List<Engineer> statuses;
final Engineer initialStatus;
final Function(Engineer) onSelect;
final List<Employee> statuses;
final Employee initialStatus;
final Function(Employee) onSelect;
const UsersMenu({Key key, this.statuses, this.onSelect, this.initialStatus}) : super(key: key);
@ -15,7 +15,7 @@ class UsersMenu extends StatefulWidget {
}
class _SingleUsersMenuState extends State<UsersMenu> {
Engineer _selectedStatus;
Employee _selectedStatus;
@override
void setState(VoidCallback fn) {
@ -71,7 +71,7 @@ class _SingleUsersMenuState extends State<UsersMenu> {
// AppStyle.boxShadow
// ]
),
child: DropdownButton<Engineer>(
child: DropdownButton<Employee>(
value: _selectedStatus,
iconSize: 24,
icon: const Icon(Icons.keyboard_arrow_down_rounded),
@ -83,14 +83,14 @@ class _SingleUsersMenuState extends State<UsersMenu> {
),
style: TextStyle(color: Theme.of(context).primaryColor),
underline: SizedBox.shrink(),
onChanged: (Engineer newValue) {
onChanged: (Employee newValue) {
setState(() {
_selectedStatus = newValue;
});
widget.onSelect(newValue);
},
items: widget.statuses.map<DropdownMenuItem<Engineer>>((Engineer value) {
return DropdownMenuItem<Engineer>(
items: widget.statuses.map<DropdownMenuItem<Employee>>((Employee value) {
return DropdownMenuItem<Employee>(
value: value,
child: Text(
value.name,

Loading…
Cancel
Save