Engineer : Track Service Screen & Preventive Maintenance Screen & Notifications Screen

merge-requests/4/head
zaid_daoud 3 years ago
parent e88c88ef4e
commit d8252529ce

@ -13,7 +13,7 @@ class NotificationsProvider extends ChangeNotifier {
//reset provider data //reset provider data
void reset() { void reset() {
notifications = null; notifications.clear();
nextPage = true; nextPage = true;
stateCode = null; stateCode = null;
} }
@ -27,7 +27,7 @@ class NotificationsProvider extends ChangeNotifier {
bool? nextPage = true; bool? nextPage = true;
// list of user requests // list of user requests
List<AppNotification>? notifications; List<AppNotification> notifications = [];
// when requests in-process _loading = true // when requests in-process _loading = true
// done _loading = true // done _loading = true
@ -64,8 +64,7 @@ class NotificationsProvider extends ChangeNotifier {
List<AppNotification> serviceRequestsPage = requestsListJson List<AppNotification> serviceRequestsPage = requestsListJson
.map((request) => AppNotification.fromJson(request)) .map((request) => AppNotification.fromJson(request))
.toList(); .toList();
notifications ??= []; notifications.addAll(serviceRequestsPage);
notifications?.addAll(serviceRequestsPage);
if (serviceRequestsPage.length == pageItemNumber) { if (serviceRequestsPage.length == pageItemNumber) {
nextPage = true; nextPage = true;
} else { } else {

@ -16,7 +16,7 @@ class RegularVisitsProvider extends ChangeNotifier {
//reset provider data //reset provider data
void reset() { void reset() {
visits = null; visits.clear();
nextPage = true; nextPage = true;
stateCode = null; stateCode = null;
} }
@ -30,7 +30,7 @@ class RegularVisitsProvider extends ChangeNotifier {
bool nextPage = true; bool nextPage = true;
// list of user requests // list of user requests
List<Visit>? visits; List<Visit> visits = [];
// when requests in-process _loading = true // when requests in-process _loading = true
// done _loading = true // done _loading = true
@ -45,8 +45,8 @@ class RegularVisitsProvider extends ChangeNotifier {
/// for more details check http state manager /// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart /// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getVisits({ Future<int> getVisits({
required String host, required String? host,
required User user, required User? user,
// VisitsSearch visitsSearch, // VisitsSearch visitsSearch,
}) async { }) async {
if (isLoading == true) { if (isLoading == true) {
@ -58,7 +58,7 @@ class RegularVisitsProvider extends ChangeNotifier {
try { try {
response = await get( response = await get(
Uri.parse( Uri.parse(
"$host${URLs.getRegularVisits}?uid=${user.id}&token=${user.token}&page=${(visits?.length ?? 0) ~/ pageItemNumber}${visitsSearch?.toSearchString()}", "$host${URLs.getRegularVisits}?uid=${user?.id}&token=${user?.token}&page=${(visits.length) ~/ pageItemNumber}${visitsSearch?.toSearchString()}",
), ),
headers: {"Content-Type": "application/json; charset=utf-8"}, headers: {"Content-Type": "application/json; charset=utf-8"},
); );
@ -107,7 +107,7 @@ class RegularVisitsProvider extends ChangeNotifier {
Response response; Response response;
Map<String, String> body = group.toJson(); Map<String, String> body = group.toJson();
body["token"] = user.token ?? ""; body["token"] = user.token ?? "";
body["uid"] = user.id??""; body["uid"] = user.id ?? "";
//userId = 397.toString(); // testing id to view data //userId = 397.toString(); // testing id to view data
try { try {
response = await post( response = await post(
@ -157,8 +157,8 @@ class RegularVisitsProvider extends ChangeNotifier {
try { try {
Response response; Response response;
Map<String, String> body = pentry.toMap(); Map<String, String> body = pentry.toMap();
body["uid"] = user.id??""; body["uid"] = user.id ?? "";
body["token"] = user.token??""; body["token"] = user.token ?? "";
response = await post( response = await post(
Uri.parse("$host${URLs.updatePentry}/${visit.id}"), Uri.parse("$host${URLs.updatePentry}/${visit.id}"),
body: body, body: body,

@ -50,7 +50,7 @@ class ServiceRequestsProvider extends ChangeNotifier {
/// lib\controllers\http_status_manger\http_status_manger.dart /// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getRequests({ Future<int> getRequests({
required String host, required String host,
required User user, required User? user,
required String? hospitalId, required String? hospitalId,
}) async { }) async {
if (isLoading == true) { if (isLoading == true) {
@ -61,7 +61,7 @@ class ServiceRequestsProvider extends ChangeNotifier {
try { try {
response = await get( response = await get(
Uri.parse( Uri.parse(
"$host${URLs.getServiceRequests}?uid=${user.id}${hospitalId == null ? "" : "&client_nid=$hospitalId"}&token=${user.token}&page=${(serviceRequests?.length ?? 0) ~/ pageItemNumber}${search?.toSearchString()}", "$host${URLs.getServiceRequests}?uid=${user?.id}${hospitalId == null ? "" : "&client_nid=$hospitalId"}&token=${user?.token}&page=${(serviceRequests?.length ?? 0) ~/ pageItemNumber}${search?.toSearchString()}",
), ),
headers: {"Content-Type": "application/json; charset=utf-8"}, headers: {"Content-Type": "application/json; charset=utf-8"},
); );
@ -108,7 +108,9 @@ class ServiceRequestsProvider extends ChangeNotifier {
'$host${URLs.getSingleServiceRequest}?call_nid=$requestId$userData', '$host${URLs.getSingleServiceRequest}?call_nid=$requestId$userData',
)); ));
} catch (error) { } catch (error) {
throw (HttpStatusManger.getStatusMessage(status: -1, subtitle: subtitle) ?? ''); throw (HttpStatusManger.getStatusMessage(
status: -1, subtitle: subtitle) ??
'');
} }
// If the call to the server was successful, parse the JSON. // If the call to the server was successful, parse the JSON.
@ -121,7 +123,8 @@ class ServiceRequestsProvider extends ChangeNotifier {
return requests[0]; return requests[0];
} else { } else {
throw (HttpStatusManger.getStatusMessage( throw (HttpStatusManger.getStatusMessage(
status: response.statusCode, subtitle: subtitle) ?? ""); status: response.statusCode, subtitle: subtitle) ??
"");
} }
} }
@ -174,8 +177,8 @@ class ServiceRequestsProvider extends ChangeNotifier {
}) async { }) async {
Response response; Response response;
Map<String, String> body = issue.toMap(); Map<String, String> body = issue.toMap();
body["uid"] = user.id??""; body["uid"] = user.id ?? "";
body["token"] = user.token??""; body["token"] = user.token ?? "";
try { try {
response = await post( response = await post(
Uri.parse(host + URLs.createReport), Uri.parse(host + URLs.createReport),
@ -228,8 +231,8 @@ class ServiceRequestsProvider extends ChangeNotifier {
}) async { }) async {
Response response; Response response;
Map<String, String> body = report.toMap(); Map<String, String> body = report.toMap();
body["uid"] = user.id??""; body["uid"] = user.id ?? "";
body["token"] = user.token??""; body["token"] = user.token ?? "";
body["job_id"] = request.id ?? ''; body["job_id"] = request.id ?? '';
try { try {
response = await post( response = await post(
@ -285,8 +288,8 @@ class ServiceRequestsProvider extends ChangeNotifier {
}) async { }) async {
Response response; Response response;
Map<String, String> body = report.toMap(); Map<String, String> body = report.toMap();
body["uid"] = user.id??""; body["uid"] = user.id ?? "";
body["token"] = user.token??""; body["token"] = user.token ?? "";
body["job_id"] = request.id ?? ''; body["job_id"] = request.id ?? '';
body["report_id"] = request.reportID ?? ''; body["report_id"] = request.reportID ?? '';
try { try {
@ -314,8 +317,8 @@ class ServiceRequestsProvider extends ChangeNotifier {
}) async { }) async {
Response response; Response response;
Map<String, String> body = {}; Map<String, String> body = {};
body["uid"] = user.id??""; body["uid"] = user.id ?? "";
body["token"] = user.token??""; body["token"] = user.token ?? "";
body["job_id"] = request.id ?? ''; body["job_id"] = request.id ?? '';
body["start_time"] = ((timer.startAt?.millisecondsSinceEpoch ?? 0) / 1000) body["start_time"] = ((timer.startAt?.millisecondsSinceEpoch ?? 0) / 1000)
.toStringAsFixed(0); .toStringAsFixed(0);

@ -158,10 +158,10 @@ class MyApp extends StatelessWidget {
ServiceRequestsPage.id: (_) => ServiceRequestsPage(), ServiceRequestsPage.id: (_) => ServiceRequestsPage(),
NotificationsPage.id: (_) => NotificationsPage(), NotificationsPage.id: (_) => NotificationsPage(),
FutureRequestServiceDetails.id: (_) => FutureRequestServiceDetails.id: (_) =>
FutureRequestServiceDetails(), const FutureRequestServiceDetails(),
PreventiveMaintenanceVisitsPage.id: (_) => PreventiveMaintenanceVisitsPage.id: (_) =>
PreventiveMaintenanceVisitsPage(), PreventiveMaintenanceVisitsPage(),
RegularVisitsPage.id: (_) => RegularVisitsPage(), RegularVisitsPage.id: (_) => const RegularVisitsPage(),
TrackGasRefillPage.id: (_) => const TrackGasRefillPage(), TrackGasRefillPage.id: (_) => const TrackGasRefillPage(),
RequestDeviceTransfer.id: (_) => const RequestDeviceTransfer(), RequestDeviceTransfer.id: (_) => const RequestDeviceTransfer(),
TrackDeviceTransferPage.id: (_) => const TrackDeviceTransferPage(), TrackDeviceTransferPage.id: (_) => const TrackDeviceTransferPage(),

@ -34,8 +34,10 @@ class _RequestDeviceTransferState extends State<RequestDeviceTransfer> {
UserProvider? _userProvider; UserProvider? _userProvider;
SettingProvider? _settingProvider; SettingProvider? _settingProvider;
DeviceTransferProvider? _deviceTransferProvider; DeviceTransferProvider? _deviceTransferProvider;
final TextEditingController _requestedQuantityController = TextEditingController(); final TextEditingController _requestedQuantityController =
final DeviceTransfer _formModel = DeviceTransfer(receiver: DeviceTransferInfo()); TextEditingController();
final DeviceTransfer _formModel =
DeviceTransfer(receiver: DeviceTransferInfo());
final GlobalKey<FormState> _formKey = GlobalKey<FormState>(); final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>(); final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
@ -46,7 +48,7 @@ class _RequestDeviceTransferState extends State<RequestDeviceTransfer> {
_onSubmit() async { _onSubmit() async {
_validate = true; _validate = true;
if ((_formKey.currentState?.validate()??false)) { if ((_formKey.currentState?.validate() ?? false)) {
setState(() {}); setState(() {});
return false; return false;
} }
@ -62,18 +64,19 @@ class _RequestDeviceTransferState extends State<RequestDeviceTransfer> {
int? status = await _deviceTransferProvider?.createRequest( int? status = await _deviceTransferProvider?.createRequest(
user: _userProvider?.user, user: _userProvider?.user,
host: _settingProvider?.host??"", host: _settingProvider?.host ?? "",
model: _formModel, model: _formModel,
); );
_isLoading = false; _isLoading = false;
setState(() {}); setState(() {});
if (status!=null && status >= 200 && status < 300) { if (status != null && status >= 200 && status < 300) {
Fluttertoast.showToast( Fluttertoast.showToast(
msg: _subtitle?.requestCompleteSuccessfully??"", msg: _subtitle?.requestCompleteSuccessfully ?? "",
); );
Navigator.of(context).pop(); Navigator.of(context).pop();
} else { } else {
String errorMessage = HttpStatusManger.getStatusMessage(status: status, subtitle: _subtitle); String errorMessage = HttpStatusManger.getStatusMessage(
status: status, subtitle: _subtitle);
ScaffoldMessenger.of(context).showSnackBar(SnackBar( ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: Text(errorMessage), content: Text(errorMessage),
)); ));
@ -91,7 +94,8 @@ class _RequestDeviceTransferState extends State<RequestDeviceTransfer> {
_subtitle = AppLocalization.of(context)?.subtitle; _subtitle = AppLocalization.of(context)?.subtitle;
_userProvider = Provider.of<UserProvider>(context); _userProvider = Provider.of<UserProvider>(context);
_settingProvider = Provider.of<SettingProvider>(context); _settingProvider = Provider.of<SettingProvider>(context);
_deviceTransferProvider = Provider.of<DeviceTransferProvider>(context, listen: false); _deviceTransferProvider =
Provider.of<DeviceTransferProvider>(context, listen: false);
return Scaffold( return Scaffold(
key: _scaffoldKey, key: _scaffoldKey,
body: Form( body: Form(
@ -112,7 +116,10 @@ class _RequestDeviceTransferState extends State<RequestDeviceTransfer> {
padding: const EdgeInsets.all(8.0), padding: const EdgeInsets.all(8.0),
child: Text( child: Text(
"Transfer Device", "Transfer Device",
style: Theme.of(context).textTheme.headline5?.copyWith(color: Theme.of(context).primaryColor, fontSize: 28, fontWeight: FontWeight.bold), style: Theme.of(context).textTheme.headline5?.copyWith(
color: Theme.of(context).primaryColor,
fontSize: 28,
fontWeight: FontWeight.bold),
), ),
), ),
), ),
@ -134,12 +141,12 @@ class _RequestDeviceTransferState extends State<RequestDeviceTransfer> {
const ASubTitle("Device"), const ASubTitle("Device"),
if (_validate && _formModel.device == null) if (_validate && _formModel.device == null)
ASubTitle( ASubTitle(
_subtitle?.requiredWord??"", _subtitle?.requiredWord ?? "",
color: Colors.red, color: Colors.red,
), ),
6.height, 6.height,
DeviceButton( DeviceButton(
device: _formModel.device!, device: _formModel.device,
onDevicePick: (device) { onDevicePick: (device) {
_formModel.device = device; _formModel.device = device;
setState(() {}); setState(() {});
@ -161,7 +168,7 @@ class _RequestDeviceTransferState extends State<RequestDeviceTransfer> {
const ASubTitle("Destination Client"), const ASubTitle("Destination Client"),
if (_validate && _formModel.receiver?.client == null) if (_validate && _formModel.receiver?.client == null)
ASubTitle( ASubTitle(
_subtitle?.requiredWord??"", _subtitle?.requiredWord ?? "",
color: Colors.red, color: Colors.red,
), ),
6.height, 6.height,
@ -176,7 +183,7 @@ class _RequestDeviceTransferState extends State<RequestDeviceTransfer> {
const ASubTitle("Destination Department"), const ASubTitle("Destination Department"),
if (_validate && _formModel.receiver?.department == null) if (_validate && _formModel.receiver?.department == null)
ASubTitle( ASubTitle(
_subtitle?.requiredWord??"", _subtitle?.requiredWord ?? "",
color: Colors.red, color: Colors.red,
), ),
6.height, 6.height,
@ -189,7 +196,7 @@ class _RequestDeviceTransferState extends State<RequestDeviceTransfer> {
), ),
12.height, 12.height,
AButton( AButton(
text: _subtitle?.submit??"", text: _subtitle?.submit ?? "",
onPressed: _onSubmit, onPressed: _onSubmit,
), ),
const SizedBox( const SizedBox(

@ -16,24 +16,26 @@ import '../../../widgets/search/service_request_search_bar.dart';
class ServiceRequestsPage extends StatefulWidget { class ServiceRequestsPage extends StatefulWidget {
static final String id = "/service-requests"; static final String id = "/service-requests";
@override @override
_ServiceRequestsPageState createState() => _ServiceRequestsPageState(); _ServiceRequestsPageState createState() => _ServiceRequestsPageState();
} }
class _ServiceRequestsPageState extends State<ServiceRequestsPage> class _ServiceRequestsPageState extends State<ServiceRequestsPage>
with TickerProviderStateMixin{ with TickerProviderStateMixin {
late ServiceRequestsProvider _serviceRequestsProvider; late ServiceRequestsProvider _serviceRequestsProvider;
late UserProvider _userProvider; late UserProvider _userProvider;
late SettingProvider _settingProvider; late SettingProvider _settingProvider;
bool _expandedSearch = false; bool _expandedSearch = false;
bool _firstTime = true; bool _firstTime = true;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
_serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context); _serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context);
_userProvider = Provider.of<UserProvider>(context); _userProvider = Provider.of<UserProvider>(context);
_settingProvider = Provider.of<SettingProvider>(context); _settingProvider = Provider.of<SettingProvider>(context);
Subtitle _subtitle = AppLocalization.of(context)!.subtitle!; Subtitle? subtitle = AppLocalization.of(context)?.subtitle;
if(_firstTime){ if (_firstTime) {
_serviceRequestsProvider.reset(); _serviceRequestsProvider.reset();
_firstTime = false; _firstTime = false;
} }
@ -47,9 +49,9 @@ class _ServiceRequestsPageState extends State<ServiceRequestsPage>
onRefresh: () async { onRefresh: () async {
_serviceRequestsProvider.reset(); _serviceRequestsProvider.reset();
await _serviceRequestsProvider.getRequests( await _serviceRequestsProvider.getRequests(
user: _userProvider.user!, user: _userProvider.user!,
host: _settingProvider.host??"", host: _settingProvider.host ?? "",
hospitalId: _userProvider.user!.hospital!.id, hospitalId: _userProvider.user!.hospital!.id,
); );
}, },
child: Stack( child: Stack(
@ -57,20 +59,25 @@ class _ServiceRequestsPageState extends State<ServiceRequestsPage>
Column( Column(
children: [ children: [
Container( Container(
color:AColors.primaryColor, color: AColors.primaryColor,
padding: const EdgeInsets.symmetric(horizontal: 0,vertical: 4), padding:
const EdgeInsets.symmetric(horizontal: 0, vertical: 4),
child: Column( child: Column(
children: [ children: [
Row( Row(
children: [ children: [
ABackButton(), const ABackButton(),
Expanded( Expanded(
child: Center( child: Center(
child: Text( child: Text(
_subtitle.serviceRequests, subtitle?.serviceRequests ?? '',
style: Theme.of(context).textTheme.headline6?.copyWith( style: Theme.of(context)
color: AColors.white, .textTheme
fontStyle: FontStyle.italic ), .titleLarge
?.copyWith(
color: AColors.white,
fontStyle: FontStyle.italic,
),
), ),
), ),
), ),
@ -81,25 +88,27 @@ class _ServiceRequestsPageState extends State<ServiceRequestsPage>
buttonSize: 42, buttonSize: 42,
backgroundColor: AColors.white, backgroundColor: AColors.white,
onPressed: () async { onPressed: () async {
ServiceRequestSearch? _temp = await showModalBottomSheet( ServiceRequestSearch? temp =
context: context, await showModalBottomSheet(
isScrollControlled: true, context: context,
builder: (context){ isScrollControlled: true,
return ServiceRequestsSearchDialog( builder: (context) {
initialSearchValue: _serviceRequestsProvider.search!, return ServiceRequestsSearchDialog(
); initialSearchValue:
}); _serviceRequestsProvider.search!,
if(_temp != null){ );
_serviceRequestsProvider.search = _temp; },
);
if (temp != null) {
_serviceRequestsProvider.search = temp;
_serviceRequestsProvider.reset(); _serviceRequestsProvider.reset();
setState(() {}); setState(() {});
} }
}, },
), ),
SizedBox(width: 16,) const SizedBox(width: 16)
], ],
), ),
], ],
), ),
), ),
@ -108,17 +117,16 @@ class _ServiceRequestsPageState extends State<ServiceRequestsPage>
nextPage: _serviceRequestsProvider.nextPage!, nextPage: _serviceRequestsProvider.nextPage!,
onLazyLoad: () async { onLazyLoad: () async {
await _serviceRequestsProvider.getRequests( await _serviceRequestsProvider.getRequests(
user: _userProvider.user!, user: _userProvider.user,
host: _settingProvider.host??"", host: _settingProvider.host ?? "",
hospitalId: _userProvider.user!.hospital!.id, hospitalId: _userProvider.user?.hospital?.id,
); );
}, },
requests: _serviceRequestsProvider.serviceRequests!, requests: _serviceRequestsProvider.serviceRequests ?? [],
), ),
), ),
], ],
), ),
], ],
), ),
), ),

@ -21,13 +21,15 @@ import '../../../widgets/visits/visits_list.dart';
import 'update_visits_group_sheet.dart'; import 'update_visits_group_sheet.dart';
class RegularVisitsPage extends StatefulWidget { class RegularVisitsPage extends StatefulWidget {
static final String id = "/Regular-visits"; static const String id = "/Regular-visits";
const RegularVisitsPage({super.key});
@override @override
_RegularVisitsPageState createState() => _RegularVisitsPageState(); _RegularVisitsPageState createState() => _RegularVisitsPageState();
} }
class _RegularVisitsPageState extends State<RegularVisitsPage> class _RegularVisitsPageState extends State<RegularVisitsPage>
with TickerProviderStateMixin{ with TickerProviderStateMixin {
late RegularVisitsProvider _visitsProvider; late RegularVisitsProvider _visitsProvider;
late UserProvider _userProvider; late UserProvider _userProvider;
late SettingProvider _settingProvider; late SettingProvider _settingProvider;
@ -43,14 +45,13 @@ class _RegularVisitsPageState extends State<RegularVisitsPage>
body: SafeArea( body: SafeArea(
child: LoadingManager( child: LoadingManager(
isLoading: _visitsProvider.isLoading, isLoading: _visitsProvider.isLoading,
isFailedLoading: _visitsProvider.visits == null,
stateCode: _visitsProvider.stateCode, stateCode: _visitsProvider.stateCode,
onRefresh: () async { onRefresh: () async {
_visitsProvider.reset(); _visitsProvider.reset();
//_visitsProvider.visitsSearch = VisitsSearch(); //_visitsProvider.visitsSearch = VisitsSearch();
await _visitsProvider.getVisits( await _visitsProvider.getVisits(
user: _userProvider.user!, user: _userProvider.user,
host: _settingProvider.host!, host: _settingProvider.host,
); );
}, },
child: Stack( child: Stack(
@ -58,8 +59,9 @@ class _RegularVisitsPageState extends State<RegularVisitsPage>
Column( Column(
children: [ children: [
Container( Container(
color:AColors.primaryColor, color: AColors.primaryColor,
padding: const EdgeInsets.symmetric(horizontal: 0,vertical: 4), padding:
const EdgeInsets.symmetric(horizontal: 0, vertical: 4),
child: Column( child: Column(
children: [ children: [
Row( Row(
@ -69,10 +71,12 @@ class _RegularVisitsPageState extends State<RegularVisitsPage>
child: Center( child: Center(
child: Text( child: Text(
_subtitle.preventiveMaintenance, _subtitle.preventiveMaintenance,
style: Theme.of(context).textTheme.headline6?.copyWith( style: Theme.of(context)
color: AColors.white, .textTheme
fontStyle: FontStyle.italic .headline6
), ?.copyWith(
color: AColors.white,
fontStyle: FontStyle.italic),
), ),
), ),
), ),
@ -80,41 +84,49 @@ class _RegularVisitsPageState extends State<RegularVisitsPage>
duration: Duration(milliseconds: 400), duration: Duration(milliseconds: 400),
child: AIconButton( child: AIconButton(
key: ValueKey(_expandedSearch), key: ValueKey(_expandedSearch),
iconData: _expandedSearch ? Icons.keyboard_arrow_up :Icons.search, iconData: _expandedSearch
? Icons.keyboard_arrow_up
: Icons.search,
color: AColors.secondaryColor, color: AColors.secondaryColor,
buttonSize: 42, buttonSize: 42,
backgroundColor: AColors.white, backgroundColor: AColors.white,
onPressed: () async { onPressed: () async {
VisitsSearch _temp = await showModalBottomSheet( VisitsSearch _temp =
context: context, await showModalBottomSheet(
isScrollControlled: true, context: context,
builder: (context){ isScrollControlled: true,
return VisitsSearchDialog( builder: (context) {
initialSearchValue: _visitsProvider.visitsSearch!, onSearch: (VisitsSearch ) { }, return VisitsSearchDialog(
); initialSearchValue:
}); _visitsProvider.visitsSearch!,
if(_temp != null){ onSearch: (VisitsSearch) {},
_visitsProvider.visitsSearch?.fromSearch(_temp) ; );
_visitsProvider.reset(); });
setState(() {}); _visitsProvider.visitsSearch
} ?.fromSearch(_temp);
_visitsProvider.reset();
setState(() {});
}, },
), ),
), ),
SizedBox(width: 16,) SizedBox(
width: 16,
)
], ],
), ),
], ],
), ),
), ),
Visibility( Visibility(
visible: _visitsProvider.visitsSearch?.toSearchString().isNotEmpty??false, visible: _visitsProvider.visitsSearch
?.toSearchString()
.isNotEmpty ??
false,
child: Padding( child: Padding(
padding: const EdgeInsets.all(8.0), padding: const EdgeInsets.all(8.0),
child: AButton( child: AButton(
text: _subtitle.clearSearch, text: _subtitle.clearSearch,
onPressed: (){ onPressed: () {
_visitsProvider.visitsSearch = VisitsSearch(); _visitsProvider.visitsSearch = VisitsSearch();
_visitsProvider.reset(); _visitsProvider.reset();
setState(() {}); setState(() {});
@ -127,59 +139,60 @@ class _RegularVisitsPageState extends State<RegularVisitsPage>
nextPage: _visitsProvider.nextPage, nextPage: _visitsProvider.nextPage,
onLazyLoad: () async { onLazyLoad: () async {
await _visitsProvider.getVisits( await _visitsProvider.getVisits(
user: _userProvider.user!, user: _userProvider.user!,
host: _settingProvider.host??"", host: _settingProvider.host ?? "",
); );
}, },
onEditGroup: (visits) async { onEditGroup: (visits) async {
VisitsGroup _group = await showModalBottomSheet( VisitsGroup? group = await showModalBottomSheet(
isScrollControlled: true, isScrollControlled: true,
context: context, context: context,
builder: (context) { builder: (context) {
return UpdateVisitsGroupSheet(visits: visits,title: _subtitle.updateRegularVisits,); return UpdateVisitsGroupSheet(
visits: visits,
title: _subtitle.updateRegularVisits,
);
}, },
)as VisitsGroup; ) as VisitsGroup?;
if(_group != null){ if (group != null) {
showDialog<void>( showDialog<void>(
context: context, context: context,
barrierDismissible: false, barrierDismissible: false,
builder: (BuildContext context) { builder: (BuildContext context) {
return CupertinoAlertDialog( return CupertinoAlertDialog(
title: Text(_subtitle.updatingDots), title: Text(_subtitle.updatingDots),
content: Center(child: CircularProgressIndicator()), content:
Center(child: CircularProgressIndicator()),
); );
}, },
); );
int status = await _visitsProvider.updateGroupOfVisits( int status =
user: _userProvider.user!, await _visitsProvider.updateGroupOfVisits(
host: _settingProvider.host??"", user: _userProvider.user!,
group: _group host: _settingProvider.host ?? "",
); group: group);
Navigator.of(context).pop(); Navigator.of(context).pop();
if(status >= 200 && status < 300){ if (status >= 200 && status < 300) {
Fluttertoast.showToast( Fluttertoast.showToast(
msg: _subtitle.regularVisitsUpdatedSuccessfully, msg: _subtitle.regularVisitsUpdatedSuccessfully,
toastLength: Toast.LENGTH_LONG, toastLength: Toast.LENGTH_LONG,
gravity: ToastGravity.BOTTOM, gravity: ToastGravity.BOTTOM,
); );
}else{ } else {
Fluttertoast.showToast( Fluttertoast.showToast(
msg: HttpStatusManger.getStatusMessage( msg: HttpStatusManger.getStatusMessage(
status: status, status: status, subtitle: _subtitle),
subtitle: _subtitle
),
toastLength: Toast.LENGTH_LONG, toastLength: Toast.LENGTH_LONG,
gravity: ToastGravity.BOTTOM, gravity: ToastGravity.BOTTOM,
); );
} }
} }
}, },
visits: _visitsProvider.visits!, visits: _visitsProvider.visits,
), ),
), ),
], ],
), ),
], ],
), ),
), ),

@ -9,9 +9,10 @@ import 'single_device_picker.dart';
class DeviceButton extends StatelessWidget { class DeviceButton extends StatelessWidget {
final Function(Device)? onDevicePick; final Function(Device)? onDevicePick;
final Device device; final Device? device;
const DeviceButton({Key? key, required this.device, this.onDevicePick}) : super(key: key); const DeviceButton({Key? key, required this.device, this.onDevicePick})
: super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -19,9 +20,11 @@ class DeviceButton extends StatelessWidget {
return ElevatedButton( return ElevatedButton(
style: ElevatedButton.styleFrom( style: ElevatedButton.styleFrom(
elevation: 0, elevation: 0,
padding: EdgeInsets.symmetric(horizontal: 16, vertical: device == null ? 12 : 8), padding: EdgeInsets.symmetric(
horizontal: 16, vertical: device == null ? 12 : 8),
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)), borderRadius: BorderRadius.circular(
AppStyle.borderRadius * AppStyle.getScaleFactor(context)),
), ),
foregroundColor: AColors.primaryColor, foregroundColor: AColors.primaryColor,
backgroundColor: AColors.inputFieldBackgroundColor, backgroundColor: AColors.inputFieldBackgroundColor,
@ -33,7 +36,7 @@ class DeviceButton extends StatelessWidget {
child: Padding( child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 6), padding: const EdgeInsets.symmetric(horizontal: 6),
child: Text( child: Text(
_subtitle?.pickDevice??"", _subtitle?.pickDevice ?? "",
style: Theme.of(context).textTheme.subtitle1, style: Theme.of(context).textTheme.subtitle1,
textScaleFactor: AppStyle.getScaleFactor(context), textScaleFactor: AppStyle.getScaleFactor(context),
textDirection: TextDirection.rtl, textDirection: TextDirection.rtl,
@ -45,7 +48,7 @@ class DeviceButton extends StatelessWidget {
child: ListTile( child: ListTile(
contentPadding: EdgeInsets.all(0), contentPadding: EdgeInsets.all(0),
title: Text( title: Text(
"${_subtitle?.sn??""} : ${device.serialNumber??""}", "${_subtitle?.sn ?? ""} : ${device?.serialNumber ?? ""}",
style: Theme.of(context).textTheme.subtitle1, style: Theme.of(context).textTheme.subtitle1,
), ),
subtitle: Column( subtitle: Column(
@ -55,24 +58,26 @@ class DeviceButton extends StatelessWidget {
color: Theme.of(context).textTheme.subtitle1?.color, color: Theme.of(context).textTheme.subtitle1?.color,
), ),
Text( Text(
"${_subtitle?.brand} : ${device.brand}", "${_subtitle?.brand} : ${device?.brand}",
style: Theme.of(context).textTheme.subtitle2, style: Theme.of(context).textTheme.subtitle2,
), ),
Divider( Divider(
color: Theme.of(context).textTheme.subtitle1?.color, color: Theme.of(context).textTheme.subtitle1?.color,
), ),
Text( Text(
"${_subtitle?.model} : ${device.model}", "${_subtitle?.model} : ${device?.model}",
style: Theme.of(context).textTheme.subtitle2, style: Theme.of(context).textTheme.subtitle2,
), ),
], ],
), ),
)), )),
const Icon(Icons.keyboard_arrow_down, size: 28, color: AColors.grey3A), const Icon(Icons.keyboard_arrow_down,
size: 28, color: AColors.grey3A),
], ],
), ),
onPressed: () async { onPressed: () async {
Device _device = await Navigator.of(context).pushNamed(SingleDevicePicker.id) as Device; Device _device = await Navigator.of(context)
.pushNamed(SingleDevicePicker.id) as Device;
onDevicePick!(_device); onDevicePick!(_device);
}); });
} }

Loading…
Cancel
Save