snag issues resolve

main_design2.0
Sikander Saleem 2 years ago
parent b6c08450fe
commit 60639620c6

@ -1,12 +1,9 @@
class URLs {
URLs._();
//static const host1 = "https://atomsuat.hmg.com"; // old uat url
static const host1 = "https://atomsm.hmg.com"; // production url
// static const host1 = "https://atomsm.hmg.com"; // production url
static const host1 = "https://atomsmdev.hmg.com"; // local UAT url
// static const host1 = "https://atomsmdev.hmg.com"; // local UAT url
// static const host1 = "http://109.123.243.118:9000";
static String _baseUrl = "$_host/mobile";
@ -112,6 +109,7 @@ class URLs {
static get getEmployees => "$_baseUrl/Lookups/GetLookup?lookupEnum=33"; // get
static get getEngineers => "$_baseUrl/Account/GetUserByRoleValue?value=R-6"; // get
static get getNurses => "$_baseUrl/Account/GetUserByRoleValue?value=R-7"; // get
static get getNursesBySiteId => "$_baseUrl/Account/GetUserByRoleValueSiteAndAssetGroupBySiteId?value=R-7"; // get
// pentry
static get getPentry => "$_baseUrl/return/pentry/details"; // get

@ -39,12 +39,12 @@ class NotificationsProvider extends ChangeNotifier {
/// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getSystemNotifications({
String host,
User user,
int hospitalId,
}) async {
Future<int> getSystemNotifications({User user, bool resetProvider = false}) async {
if (isLoading == true) return -2;
if (resetProvider) {
reset();
}
isLoading = true;
notifyListeners();
Response response;

@ -25,6 +25,8 @@ class NurseProvider extends ChangeNotifier {
bool get isLoading => _loading;
int siteId;
set isLoading(bool isLoading) {
_loading = isLoading;
notifyListeners();
@ -36,7 +38,15 @@ class NurseProvider extends ChangeNotifier {
notifyListeners();
Response response;
try {
response = await ApiManager.instance.get(URLs.getNurses);
if (siteId == null) {
await Future.delayed(const Duration(seconds: 1));
_items = [];
_loading = false;
notifyListeners();
_stateCode = 200;
return _stateCode;
}
response = await ApiManager.instance.get(URLs.getNursesBySiteId + "&siteId=$siteId");
_stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received

@ -22,7 +22,7 @@ class RecentActivitiesFragment extends StatelessWidget {
return RefreshIndicator(
onRefresh: () {
Provider.of<AllRequestsProvider>(context, listen: false).getRequests();
_notificationsProvider.getSystemNotifications(user: Provider.of<UserProvider>(context, listen: false).user);
_notificationsProvider.getSystemNotifications(user: Provider.of<UserProvider>(context, listen: false).user,resetProvider: true);
return Future.delayed(const Duration(microseconds: 250));
},
child: SingleChildScrollView(

@ -25,7 +25,7 @@ class RequestsFragment extends StatelessWidget {
builder: (context, snapshot, _) => RefreshIndicator(
onRefresh: () {
snapshot.getRequests();
Provider.of<NotificationsProvider>(context, listen: false).getSystemNotifications(user: Provider.of<UserProvider>(context, listen: false).user);
Provider.of<NotificationsProvider>(context, listen: false).getSystemNotifications(user: Provider.of<UserProvider>(context, listen: false).user,resetProvider: true);
return Future.delayed(const Duration(microseconds: 250));
},
child: GridView(

@ -38,7 +38,7 @@ class _DashboardPageState extends State<DashboardPage> {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
Provider.of<AllRequestsProvider>(context, listen: false).getRequests();
Provider.of<NotificationsProvider>(context, listen: false).getSystemNotifications(user: Provider.of<UserProvider>(context, listen: false).user);
Provider.of<NotificationsProvider>(context, listen: false).getSystemNotifications(user: Provider.of<UserProvider>(context, listen: false).user,resetProvider: true);
});
}

@ -216,7 +216,7 @@ class _DeviceTransferDetailsState extends State<DeviceTransferDetails> {
],
),
_buildTextWidget('${context.translation.site} : $site'),
_buildTextWidget('${context.translation.unite} : $unit'),
_buildTextWidget('${context.translation.department} : $unit'),
if (comment != null && comment.isNotEmpty) ...[
8.height,
const Divider().defaultStyle(context),

@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/asset_transfer_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/employee/nurse_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/controllers/validator/validator.dart';
@ -85,8 +86,7 @@ class _RequestDeviceTransferState extends State<RequestDeviceTransfer> {
_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);
// _selectedNurse ??= Employee(id: _userProvider.user.userID, name: _userProvider.user.username);
return Scaffold(
key: _scaffoldKey,
@ -111,17 +111,6 @@ class _RequestDeviceTransferState extends State<RequestDeviceTransfer> {
16.height,
context.translation.receiverDetails.heading5(context),
8.height,
NurseMenu(
title: context.translation.receiverName,
initialValue: _selectedNurse,
onSelect: (employee) {
if (employee != null) {
_selectedNurse = employee;
setState(() {});
}
},
),
8.height,
SingleItemDropDownMenu<Site, SiteProvider>(
context: context,
title: context.translation.destinationSite,
@ -131,6 +120,9 @@ class _RequestDeviceTransferState extends State<RequestDeviceTransfer> {
_assetDestination.building = null;
_assetDestination.floor = null;
_assetDestination.department = null;
_selectedNurse = null;
Provider.of<NurseProvider>(context,listen: false).siteId = value.id;
Provider.of<NurseProvider>(context,listen: false).getData();
setState(() {});
},
),
@ -187,12 +179,17 @@ class _RequestDeviceTransferState extends State<RequestDeviceTransfer> {
},
),
8.height,
// AppTextFormField(
// labelText: context.translation.room,
// onSaved: (text) {
// _transferModel.destRoom = text;
// },
// ),
NurseMenu(
title: context.translation.receiverName,
initialValue: _selectedNurse,
enable: _assetDestination?.site != null,
onSelect: (employee) {
if (employee != null) {
_selectedNurse = employee;
setState(() {});
}
},
),
16.height,
context.translation.comments.heading5(context),
8.height,

@ -36,9 +36,10 @@ class _NotificationsPageState extends State<NotificationsPage> with TickerProvid
onRefresh: () async {
_notificationsProvider.reset();
await _notificationsProvider.getSystemNotifications(
user: _userProvider.user,
host: _settingProvider.host,
hospitalId: _userProvider.user.clientId,
user: _userProvider.user,resetProvider: true
// host: _settingProvider.host,
// hospitalId: _userProvider.user.clientId,
);
},
child: NotificationsList(
@ -46,8 +47,8 @@ class _NotificationsPageState extends State<NotificationsPage> with TickerProvid
onLazyLoad: () async {
await _notificationsProvider.getSystemNotifications(
user: _userProvider.user,
host: _settingProvider.host,
hospitalId: _userProvider.user.clientId,
// host: _settingProvider.host,
// hospitalId: _userProvider.user.clientId,
);
},
notifications: _notificationsProvider.notifications,

@ -253,7 +253,7 @@ class _CreateServiceReportState extends State<CreateServiceReport> with TickerPr
ServiceReportLastCallsMenu(
report: _serviceReport,
title: context.translation.callLastSituation,
parentId: widget.request.id,
parentId: "0",//widget.request.id,
onSelect: (status) {
_serviceReport.calllastSituation = status;
},

@ -0,0 +1,109 @@
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/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
typedef SelectionBuilderString = String Function(dynamic);
class SelectionBottomSheet<T> extends StatefulWidget {
List<T> items;
T selectedItem;
String title;
final SelectionBuilderString builderString;
SelectionBottomSheet({Key key, this.items = const [], this.selectedItem, this.title = "", @required this.builderString}) : super(key: key);
@override
_SelectionBottomSheetState createState() {
return _SelectionBottomSheetState();
}
}
class _SelectionBottomSheetState<T> extends State<SelectionBottomSheet> {
T _selectedValue;
String query = "";
List<T> get filteredList => widget.items.where((element) => element.name.toString().toLowerCase().contains(query.toLowerCase())).toList();
@override
void initState() {
_selectedValue = widget.selectedItem;
super.initState();
}
FocusNode searchFocusNode = FocusNode();
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
return Container(
height: MediaQuery.of(context).size.height * .7,
padding: const EdgeInsets.all(21),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
widget.title.heading5(context),
16.height,
TextField(
onChanged: (queryString) {
query = queryString;
setState(() {});
},
style: TextStyle(fontSize: 14),
focusNode: searchFocusNode,
decoration: InputDecoration(
hintText: 'Search by name',
labelText: 'Search',
hintStyle: TextStyle(fontSize: 14),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(color: AppColor.blueStatus(context), width: 2.0),
borderRadius: BorderRadius.all(Radius.circular(12.0)),
),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(color: AppColor.blueStatus(context), width: 1.0),
borderRadius: BorderRadius.all(Radius.circular(12.0)),
),
contentPadding: EdgeInsets.symmetric(vertical: 8.0, horizontal: 16.0),
),
),
8.height,
ListView.builder(
itemCount: filteredList.length,
padding: EdgeInsets.only(top: 8),
itemBuilder: (cxt, index) => RadioListTile(
value: filteredList[index],
dense: true,
contentPadding: EdgeInsets.zero,
groupValue: _selectedValue,
activeColor: Colors.black87,
onChanged: (value) {
_selectedValue = value;
searchFocusNode.unfocus();
setState(() {});
},
title: Text(
widget.builderString(filteredList[index]).cleanupWhitespace?.capitalizeFirstOfEach ?? "",
style: Theme.of(context).textTheme.bodyLarge,
))).expanded,
8.height,
if (_selectedValue != null)
AppFilledButton(
label: context.translation.select,
maxWidth: true,
onPressed: () {
Navigator.pop(context, _selectedValue);
}),
],
),
);
}
}

@ -38,8 +38,9 @@ class AssetItemGridView extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
device.modelDefinition.assetName,
device.modelDefinition.assetName.cleanupWhitespace.capitalizeFirstOfEach,
maxLines: 2,
overflow: TextOverflow.ellipsis,
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
),
Column(
@ -47,15 +48,15 @@ class AssetItemGridView extends StatelessWidget {
mainAxisSize: MainAxisSize.min,
children: [
"${context.translation.assetNumber} : ${device.assetNumber}".bodyText2(context),
"${context.translation.model} : ${device.modelDefinition.modelDefCode}".bodyText2(context),
"${context.translation.modelName} : ${device.modelDefinition.modelName}".cleanupWhitespace.capitalizeFirstOfEach.bodyText2(context),
Text(
"${context.translation.serialNo} : ${device.assetSerialNo}",
maxLines: 2,
overflow: TextOverflow.fade,
overflow: TextOverflow.ellipsis,
style: AppTextStyles.bodyText2.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
),
).expanded,
],
),
).expanded,
Row(
mainAxisSize: MainAxisSize.min,
children: [
@ -70,6 +71,6 @@ class AssetItemGridView extends StatelessWidget {
],
).expanded
],
).onPress(() => onPressed(device)).toShadowContainer(context);
).onPress(() => onPressed(device)).toShadowContainer(context,padding: 12);
}
}

@ -69,6 +69,6 @@ class AssetItemListView extends StatelessWidget {
],
).expanded
],
).toShadowContainer(context).onPress(() => onPressed(device));
).toShadowContainer(context,padding: 12).onPress(() => onPressed(device));
}
}

@ -54,7 +54,7 @@ class _CommissioningStatusButtonsState extends State<CommissioningStatusButtons>
return Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
context.translation.jopStatus.heading5(context).paddingOnly(start: 16, end: 16),
context.translation.equipmentStatus.heading5(context).paddingOnly(start: 16, end: 16),
8.height,
Consumer<CommissioningStatusProvider>(
builder: (context, snapshot, _) {

@ -13,8 +13,10 @@ class PickAsset extends StatelessWidget {
final Function(Asset) onPickAsset;
final Asset device;
final bool editable;
final bool showAssetInfo;
final bool forPPM;
const PickAsset({Key key, this.editable = true, this.device, this.onPickAsset}) : super(key: key);
const PickAsset({Key key, this.editable = true, this.device, this.onPickAsset, this.showAssetInfo = true, this.forPPM = false}) : super(key: key);
@override
Widget build(BuildContext context) {
@ -34,17 +36,25 @@ class PickAsset extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
context.translation.device.tinyFont(context).custom(color: context.isDark ? AppColor.neutral40 : AppColor.neutral50),
context.translation.pickAsset.bodyText(context).custom(color: context.isDark ? AppColor.neutral40 : AppColor.neutral50),
if (device != null)
device.assetNumber.bodyText(context).custom(color: context.isDark ? AppColor.neutral40 : AppColor.neutral50)
else
context.translation.pickAsset.bodyText(context).custom(color: context.isDark ? AppColor.neutral40 : AppColor.neutral50),
],
).onPress(() async {
Asset device = await Navigator.of(context).pushNamed(MyAssetsPage.id) as Asset;
onPickAsset(device);
if (device != null) {
onPickAsset(device);
}
}).expanded,
"qr".toSvgAsset(height: 24, fit: BoxFit.fitHeight, color: context.isDark ? AppColor.primary40 : AppColor.primary70),
if (forPPM)
Icon(Icons.change_circle_rounded, size: 22, color: context.isDark ? AppColor.primary40 : AppColor.primary70)
else
"qr".toSvgAsset(height: 24, fit: BoxFit.fitHeight, color: context.isDark ? AppColor.primary40 : AppColor.primary70),
],
),
),
if (device != null) AssetInfoCard(asset: device).paddingOnly(top: 8),
if (device != null && showAssetInfo) AssetInfoCard(asset: device).paddingOnly(top: 8),
],
);
}

@ -89,6 +89,10 @@ class _MyAssetsPageState extends State<MyAssetsPage> {
title: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
if (!widget.fromBottomBar)
const Icon(Icons.arrow_back_ios).onPress(() {
Navigator.of(context).pop();
}),
Container(
height: 40,
padding: const EdgeInsets.only(left: 16, right: 8),
@ -183,7 +187,7 @@ class _MyAssetsPageState extends State<MyAssetsPage> {
},
)
: GridView.builder(
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, childAspectRatio: 191 / 261, crossAxisSpacing: 16, mainAxisSpacing: 16),
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, childAspectRatio: 188 / 261, crossAxisSpacing: 12, mainAxisSpacing: 12),
itemCount: _searchableList.length,
padding: const EdgeInsets.all(16),
itemBuilder: (context, index) {
@ -201,18 +205,16 @@ class _MyAssetsPageState extends State<MyAssetsPage> {
),
),
),
floatingActionButton: widget.fromBottomBar
? null
: FloatingActionButton(
heroTag: "some tag 2",
child: "qr".toSvgAsset(height: 32, fit: BoxFit.fitHeight, color: Theme.of(context).scaffoldBackgroundColor),
onPressed: () async {
String result = await Navigator.of(context).push(
MaterialPageRoute(builder: (_) => const ScanQr()),
) as String;
_getDevice(result, isQr: true);
},
),
floatingActionButton: FloatingActionButton(
heroTag: "some tag 2",
child: "qr".toSvgAsset(height: 32, fit: BoxFit.fitHeight, color: Theme.of(context).scaffoldBackgroundColor),
onPressed: () async {
String result = await Navigator.of(context).push(
MaterialPageRoute(builder: (_) => const ScanQr()),
) as String;
_getDevice(result, isQr: true);
},
),
);
}
}

@ -0,0 +1,88 @@
import 'package:flutter/material.dart';
import 'package:flutter_typeahead/flutter_typeahead.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/devices_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/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/widgets/equipment/pick_asset.dart';
import '../../../../extensions/text_extensions.dart';
import '../../../../models/device/asset.dart';
import '../../../../models/device/asset_search.dart';
import '../../../../new_views/app_style/app_color.dart';
import '../../../../new_views/app_style/app_text_style.dart';
class CalibrationToolAssetPicker extends StatefulWidget {
final Lookup initialValue;
final int hospitalId;
final Function(Lookup) onPick;
const CalibrationToolAssetPicker({Key key, this.initialValue, this.onPick, this.hospitalId}) : super(key: key);
@override
State<CalibrationToolAssetPicker> createState() => _CalibrationToolAssetPickerState();
}
class _CalibrationToolAssetPickerState extends State<CalibrationToolAssetPicker> {
SettingProvider _settingProvider;
AssetProvider _devicesProvider;
UserProvider _userProvider;
TextEditingController _controller;
@override
void initState() {
_controller = TextEditingController(text: widget.initialValue?.name);
super.initState();
}
@override
void didUpdateWidget(covariant CalibrationToolAssetPicker oldWidget) {
if (widget.initialValue != oldWidget.initialValue) {
_controller = TextEditingController(text: widget.initialValue?.name);
}
super.didUpdateWidget(oldWidget);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
_settingProvider = Provider.of<SettingProvider>(context);
_userProvider = Provider.of<UserProvider>(context);
_devicesProvider = Provider.of<AssetProvider>(context);
final border = UnderlineInputBorder(borderSide: BorderSide.none, borderRadius: BorderRadius.circular(10));
return Container(
decoration: BoxDecoration(
color: AppColor.background(context),
borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)),
boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)],
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
PickAsset(
showAssetInfo: false,
forPPM: true,
device: widget.initialValue == null
? null
: Asset(
id: widget.initialValue.id,
assetNumber: widget.initialValue.name,
),
onPickAsset: (device) {
widget.onPick(Lookup(id: device.id, name: device.assetNumber));
},
),
],
));
}
}

@ -9,6 +9,8 @@ import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/ppm/ppm_calibration_tools.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/views/widgets/equipment/pick_asset.dart';
import 'package:test_sa/views/widgets/pentry/calibration_tool_asset_picker.dart';
import '../../../new_views/app_style/app_color.dart';
import '../date_and_time/date_picker.dart';
@ -76,7 +78,7 @@ class _PentryCalibrationToolFormState extends State<PentryCalibrationToolForm> {
],
),
16.height,
AutoCompleteDeviceNumberField(
CalibrationToolAssetPicker(
initialValue: model.assetId == null ? null : Lookup(id: model.assetId, name: model.assetNumber ?? ""),
hospitalId: userProvider.user.clientId,
onPick: (number) {

@ -16,12 +16,14 @@ class NurseMenu extends StatelessWidget {
final String title;
final bool enable;
final int siteId;
const NurseMenu({Key key, @required this.onSelect, this.title, this.initialValue, this.enable = true}) : super(key: key);
const NurseMenu({Key key, @required this.onSelect, this.title, this.initialValue, this.enable = true, this.siteId}) : super(key: key);
@override
Widget build(BuildContext context) {
NurseProvider menuProvider = Provider.of<NurseProvider>(context);
menuProvider.siteId = siteId;
return LoadingManager(
isLoading: menuProvider.isLoading,
isFailedLoading: menuProvider.nursesList == null,

@ -1,7 +1,10 @@
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/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/employee.dart';
import 'package:test_sa/views/widgets/bottom_sheets/selection_bottom_sheet.dart';
import '../../../models/new_models/assistant_employee.dart';
import '../../../new_views/app_style/app_color.dart';
@ -66,14 +69,19 @@ class _SingleNurseEmployeeMenuState extends State<NurseEmployeeMenu> {
Widget build(BuildContext context) {
return Container(
height: 60.toScreenHeight,
width: double.infinity,
padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth),
decoration: BoxDecoration(
color: context.isDark ? AppColor.neutral50 : Colors.white,
color: context.isDark && (widget.enable == false)
? AppColor.neutral50
: (widget.enable == false)
? AppColor.neutral40
: AppColor.background(context),
borderRadius: BorderRadius.circular(10),
boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)],
),
child: Stack(
alignment: Alignment.center,
alignment: Alignment.centerLeft,
children: [
PositionedDirectional(
end: 0,
@ -90,41 +98,35 @@ class _SingleNurseEmployeeMenuState extends State<NurseEmployeeMenu> {
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(),
Text(
_selectedStatus?.name?.cleanupWhitespace?.capitalizeFirstOfEach ?? context.translation.select,
style: Theme.of(context).textTheme.bodyLarge,
),
],
),
],
),
);
).onPress(widget.enable
? () async {
_selectedStatus = (await showModalBottomSheet(
context: context,
isScrollControlled: true,
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(
top: Radius.circular(20),
),
),
clipBehavior: Clip.antiAliasWithSaveLayer,
builder: (BuildContext context) => SelectionBottomSheet(
items: widget.list,
selectedItem: _selectedStatus,
title: widget.title,
builderString: (emp) => emp?.name ?? "",
),
)) as Employee;
if (_selectedStatus != null) setState(() {});
widget.onSelect(_selectedStatus);
}
: null);
}
}

Loading…
Cancel
Save