diff --git a/android/app/build.gradle b/android/app/build.gradle index ca56c586..7d86fe74 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -1,3 +1,10 @@ +plugins { + id "com.android.application" + id "kotlin-android" + id "dev.flutter.flutter-gradle-plugin" + id "com.google.gms.google-services" +} + def localProperties = new Properties() def localPropertiesFile = rootProject.file('local.properties') if (localPropertiesFile.exists()) { @@ -6,10 +13,10 @@ if (localPropertiesFile.exists()) { } } -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} +//def flutterRoot = localProperties.getProperty('flutter.sdk') +//if (flutterRoot == null) { +// throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") +//} def flutterVersionCode = localProperties.getProperty('flutter.versionCode') if (flutterVersionCode == null) { @@ -21,10 +28,10 @@ if (flutterVersionName == null) { flutterVersionName = '1.0' } -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply plugin: 'com.google.gms.google-services' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" +//apply plugin: 'com.android.application' +//apply plugin: 'kotlin-android' +//apply plugin: 'com.google.gms.google-services' +//apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" def keystoreProperties = new Properties() def keystorePropertiesFile = rootProject.file('key.properties') diff --git a/android/build.gradle b/android/build.gradle index cf27c349..f98890b1 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,16 +1,16 @@ -buildscript { - ext.kotlin_version = '1.8.20' - repositories { - google() - mavenCentral() - } - - dependencies { - classpath 'com.android.tools.build:gradle:7.1.2' - classpath 'com.google.gms:google-services:4.3.13' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} +//buildscript { +// ext.kotlin_version = '1.8.20' +// repositories { +// google() +// mavenCentral() +// } +// +// dependencies { +// classpath 'com.android.tools.build:gradle:7.1.2' +// classpath 'com.google.gms:google-services:4.3.13' +// classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" +// } +//} allprojects { repositories { diff --git a/android/settings.gradle b/android/settings.gradle index 44e62bcf..5339b725 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -1,11 +1,39 @@ -include ':app' +//include ':app' +// +//def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +//def properties = new Properties() +// +//assert localPropertiesFile.exists() +//localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } +// +//def flutterSdkPath = properties.getProperty("flutter.sdk") +//assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +//apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" +// -def localPropertiesFile = new File(rootProject.projectDir, "local.properties") -def properties = new Properties() +pluginManagement { + def flutterSdkPath = { + def properties = new Properties() + file("local.properties").withInputStream { properties.load(it) } + def flutterSdkPath = properties.getProperty("flutter.sdk") + assert flutterSdkPath != null, "flutter.sdk not set in local.properties" + return flutterSdkPath + }() -assert localPropertiesFile.exists() -localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") -def flutterSdkPath = properties.getProperty("flutter.sdk") -assert flutterSdkPath != null, "flutter.sdk not set in local.properties" -apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id "dev.flutter.flutter-plugin-loader" version "1.0.0" + id "com.android.application" version "7.1.2" apply false // Replace {agpVersion} with your version, e.g., "7.3.0" + id "org.jetbrains.kotlin.android" version "1.8.20" apply false // Replace {kotlinVersion} with your version, e.g., "1.7.10" + id "com.google.gms.google-services" version "4.3.13" apply false // Replace {kotlinVersion} with your version, e.g., "1.7.10" +} + +include ":app" \ No newline at end of file diff --git a/lib/controllers/api_routes/api_manager.dart b/lib/controllers/api_routes/api_manager.dart index 0eabcaf5..1f53b45c 100644 --- a/lib/controllers/api_routes/api_manager.dart +++ b/lib/controllers/api_routes/api_manager.dart @@ -31,8 +31,8 @@ class ApiManager { Future get(String url, {Map? headers, bool enableToastMessage = true}) async { headers ??= {}; headers.addAll(_headers); - Uri _url = Uri.parse(url); - http.Response response = await http.get(_url, headers: headers); + Uri url0 = Uri.parse(url); + http.Response response = await http.get(url0, headers: headers); try { if (response.statusCode == 401) { @@ -55,19 +55,19 @@ class ApiManager { headers.addAll(_headers); - Uri _url = Uri.parse(url); + Uri url0 = Uri.parse(url); if (!kReleaseMode) { - print("URL:$_url"); + print("URL:$url0"); print("Headers:$headers"); print("Body:$body"); } - var request = http.Request('POST', _url); + var request = http.Request('POST', url0); request.body = json.encode(body); request.headers.addAll(headers); - http.StreamedResponse _streamedResponse = await request.send(); - http.Response response = await http.Response.fromStream(_streamedResponse); + http.StreamedResponse streamedResponse = await request.send(); + http.Response response = await http.Response.fromStream(streamedResponse); try { if (response.statusCode == 401) { showLoginDialog(); @@ -89,11 +89,11 @@ class ApiManager { headers.addAll(_headers); - Uri _url = Uri.parse(url); - print(_url); + Uri url0 = Uri.parse(url); + print(url0); // print(headers); // log(json.encode(body)); - var request = http.Request('PUT', _url); + var request = http.Request('PUT', url0); request.body = json.encode(body); request.headers.addAll(headers); @@ -115,21 +115,21 @@ class ApiManager { } Future multiPart(String url, {Map? headers, required Map body, required List> files}) async { - Map _headers = const { + Map headers0 = const { 'Content-Type': 'multipart/form-data', }; headers ??= {}; - headers.addAll(_headers); + headers.addAll(headers0); - Uri _url = Uri.parse(url); + Uri url0 = Uri.parse(url); // print(_url); // print(_headers); // print(json.encode(body)); - var request = http.MultipartRequest('POST', _url); + var request = http.MultipartRequest('POST', url0); request.fields.addAll(body); - request.headers.addAll(_headers); + request.headers.addAll(headers0); for (var element in files) { request.files.add(await element); @@ -160,12 +160,12 @@ class ApiManager { barrierDismissible: false, builder: (_) => Platform.isIOS ? CupertinoAlertDialog( - title: Text('Session Expired'), - content: Text('Login session is expired,\nPlease login.'), + title: const Text('Session Expired'), + content: const Text('Login session is expired,\nPlease login.'), //actionsAlignment: MainAxisAlignment.center, actions: [ CupertinoButton( - child: Text("Login"), + child: const Text("Login"), onPressed: () { logout(navigatorKey.currentContext); }, @@ -173,13 +173,13 @@ class ApiManager { ], ) : AlertDialog( - title: Text('Session Expired'), - content: Text('Login session is expired,\nPlease login.'), + title: const Text('Session Expired'), + content: const Text('Login session is expired,\nPlease login.'), actionsAlignment: MainAxisAlignment.center, - contentPadding: EdgeInsets.only(left: 24.0, top: 20.0, right: 24.0, bottom: 16.0), + contentPadding: const EdgeInsets.only(left: 24.0, top: 20.0, right: 24.0, bottom: 16.0), actions: [ FilledButton( - child: Text("Login"), + child: const Text("Login"), onPressed: () { logout(navigatorKey.currentContext); }, diff --git a/lib/controllers/api_routes/http_status_manger.dart b/lib/controllers/api_routes/http_status_manger.dart index efa234d7..93ea13ee 100644 --- a/lib/controllers/api_routes/http_status_manger.dart +++ b/lib/controllers/api_routes/http_status_manger.dart @@ -1,5 +1,4 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart'; -import 'package:meta/meta.dart'; class HttpStatusManger { static String getStatusMessage({ @@ -8,12 +7,14 @@ class HttpStatusManger { String? messageFor400, String? messageFor200, }) { - if (status == null) + if (status == null) { // no status code - code error no need for subtitle return "careful null status"; - if (status == -1) + } + if (status == -1) { // client's request in process return subtitle.serverErrorMessage; + } if (status == -2) { // client's request in process return subtitle.requestLockMessage; diff --git a/lib/controllers/api_routes/urls.dart b/lib/controllers/api_routes/urls.dart index b865b455..12be61d2 100644 --- a/lib/controllers/api_routes/urls.dart +++ b/lib/controllers/api_routes/urls.dart @@ -5,7 +5,7 @@ class URLs { static const host1 = "https://atomsmdev.hmg.com"; // local UAT url // static String _baseUrl = "$_host/mobile"; - static String _baseUrl = "$_host/v2/mobile"; // new V2 apis + static final String _baseUrl = "$_host/v2/mobile"; // new V2 apis static String _host = host1; diff --git a/lib/controllers/notification/firebase_notification_manger.dart b/lib/controllers/notification/firebase_notification_manger.dart index 3076b21d..d2833de6 100644 --- a/lib/controllers/notification/firebase_notification_manger.dart +++ b/lib/controllers/notification/firebase_notification_manger.dart @@ -90,7 +90,7 @@ class FirebaseNotificationManger { FirebaseMessaging.instance.getInitialMessage().then((initialMessage) { if (initialMessage != null) { - handleMessage(context, initialMessage!.data); + handleMessage(context, initialMessage.data); } }); diff --git a/lib/controllers/notification/notification_manger.dart b/lib/controllers/notification/notification_manger.dart index 7549f23d..ee606c93 100644 --- a/lib/controllers/notification/notification_manger.dart +++ b/lib/controllers/notification/notification_manger.dart @@ -29,7 +29,7 @@ class NotificationManger { await localNotificationsPlugin.resolvePlatformSpecificImplementation()?.requestPermissions(alert: true, badge: true, sound: true); } else if (Platform.isAndroid) { final AndroidFlutterLocalNotificationsPlugin? androidImplementation = localNotificationsPlugin.resolvePlatformSpecificImplementation(); - final bool granted = await androidImplementation?.requestPermission() ?? false; + final bool granted = await androidImplementation?.requestNotificationsPermission() ?? false; if (!granted) { if (kDebugMode) { print("-------------------- Permission Granted ------------------------"); diff --git a/lib/controllers/providers/api/all_requests_provider.dart b/lib/controllers/providers/api/all_requests_provider.dart index 01f7c27b..1212ba0b 100644 --- a/lib/controllers/providers/api/all_requests_provider.dart +++ b/lib/controllers/providers/api/all_requests_provider.dart @@ -181,7 +181,6 @@ class AllRequestsProvider extends ChangeNotifier { if (isCalendarLoading == true) return -2; isCalendarLoading = true; notifyListeners(); - if (isCalendarLoading == null) notifyListeners(); Response response; try { Map body = { diff --git a/lib/controllers/providers/api/asset_transfer_provider.dart b/lib/controllers/providers/api/asset_transfer_provider.dart index edf021b8..7f722ddf 100644 --- a/lib/controllers/providers/api/asset_transfer_provider.dart +++ b/lib/controllers/providers/api/asset_transfer_provider.dart @@ -127,7 +127,7 @@ class AssetTransferProvider extends ChangeNotifier { }) async { Response response; try { - showDialog(context: context, barrierDismissible: false, builder: (context) => AppLazyLoading()); + showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); response = await ApiManager.instance.post(URLs.requestDeviceTransfer, body: assetDestination.transferBody(asset: asset)); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { @@ -151,7 +151,7 @@ class AssetTransferProvider extends ChangeNotifier { Future updateRequest(BuildContext context, {required AssetTransfer assetTransfer, required bool isSender}) async { Response response; try { - showDialog(context: context, barrierDismissible: false, builder: (context) => AppLazyLoading()); + showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); response = await ApiManager.instance.put(URLs.updateDeviceTransfer, body: assetTransfer.toJson()); //print(response.body); diff --git a/lib/controllers/providers/api/comments_provider.dart b/lib/controllers/providers/api/comments_provider.dart index e1d728f2..636fbdd7 100644 --- a/lib/controllers/providers/api/comments_provider.dart +++ b/lib/controllers/providers/api/comments_provider.dart @@ -85,7 +85,7 @@ class CommentsProvider extends ChangeNotifier { late Response response; try { comment.id = 0; - showDialog(context: context, barrierDismissible: false, builder: (context) => AppLazyLoading()); + showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); response = await ApiManager.instance.post(URLs.addComment, body: comment.toJson()); stateCode = response.statusCode; diff --git a/lib/controllers/providers/api/devices_provider.dart b/lib/controllers/providers/api/devices_provider.dart index 7642ba84..28f4c88e 100644 --- a/lib/controllers/providers/api/devices_provider.dart +++ b/lib/controllers/providers/api/devices_provider.dart @@ -81,10 +81,10 @@ class AssetProvider extends ChangeNotifier { if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List equipmentListJson = json.decode(response.body)["data"]; - var dList = equipmentListJson?.map((asset) => Asset.fromJson(asset))?.toList() ?? []; + var dList = equipmentListJson.map((asset) => Asset.fromJson(asset)).toList() ?? []; try { if (isQr) { - dList = dList.where((element) => search?.assetNo?.toLowerCase() == element?.assetNumber?.toLowerCase())?.toList() ?? []; + dList = dList.where((element) => search?.assetNo?.toLowerCase() == element.assetNumber?.toLowerCase()).toList() ?? []; } } catch (e) { print(e); diff --git a/lib/controllers/providers/api/gas_refill_comments.dart b/lib/controllers/providers/api/gas_refill_comments.dart index 10a5fa76..71e85f01 100644 --- a/lib/controllers/providers/api/gas_refill_comments.dart +++ b/lib/controllers/providers/api/gas_refill_comments.dart @@ -86,7 +86,7 @@ class GasRefillCommentsProvider extends ChangeNotifier { isLoading = true; late Response response; try { - showDialog(context: context, barrierDismissible: false, builder: (context) => AppLazyLoading()); + showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); response = await ApiManager.instance.post(URLs.addGazRefillComment, body: {"id": 0, "gasRefillId": id, "comment": comment}); stateCode = response.statusCode; diff --git a/lib/controllers/providers/api/gas_refill_provider.dart b/lib/controllers/providers/api/gas_refill_provider.dart index 5249e046..a551ebb2 100644 --- a/lib/controllers/providers/api/gas_refill_provider.dart +++ b/lib/controllers/providers/api/gas_refill_provider.dart @@ -111,12 +111,12 @@ class GasRefillProvider extends ChangeNotifier { }) async { late Response response; try { - showDialog(context: context, barrierDismissible: false, builder: (context) => AppLazyLoading()); + showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); final Map body = { "uid": user.id.toString(), "token": user.token ?? "", }; - if (model != null) body.addAll(model.toJson()); + body.addAll(model.toJson()); response = await ApiManager.instance.post(URLs.requestGasRefill, body: body); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { diff --git a/lib/controllers/providers/api/hospitals_provider.dart b/lib/controllers/providers/api/hospitals_provider.dart index 507d72e7..e0b4c6ee 100644 --- a/lib/controllers/providers/api/hospitals_provider.dart +++ b/lib/controllers/providers/api/hospitals_provider.dart @@ -68,11 +68,11 @@ class HospitalsProvider extends ChangeNotifier { if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List categoriesListJson = json.decode(response.body)["data"]; - List _page = categoriesListJson.map((category) => Hospital.fromJson(category)).toList(); + List page = categoriesListJson.map((category) => Hospital.fromJson(category)).toList(); if (hospitals == null) _hospitals = []; - _hospitals!.addAll(_page); - if (_page.length >= pageItemNumber) { + _hospitals!.addAll(page); + if (page.length >= pageItemNumber) { _nextPage = true; } else { _nextPage = false; @@ -105,13 +105,13 @@ class HospitalsProvider extends ChangeNotifier { // ); _stateCode = response.statusCode; - List _page = []; + List 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(); + page = categoriesListJson.map((category) => Hospital.fromJson(category)).toList(); } - return _page; + return page; } catch (error) { _loading = false; _stateCode = -1; @@ -136,13 +136,13 @@ class HospitalsProvider extends ChangeNotifier { // ); _stateCode = response.statusCode; - List _page = []; + List 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(); + page = categoriesListJson.map((category) => Hospital.fromJson(category)).toList(); } - return _page; + return page; } catch (error) { _loading = false; _stateCode = -1; diff --git a/lib/controllers/providers/api/notifications_provider.dart b/lib/controllers/providers/api/notifications_provider.dart index 84fd6578..e82a3694 100644 --- a/lib/controllers/providers/api/notifications_provider.dart +++ b/lib/controllers/providers/api/notifications_provider.dart @@ -52,15 +52,15 @@ class NotificationsProvider extends ChangeNotifier { response = await ApiManager.instance.post(URLs.getSystemNotifications, body: body); stateCode = response.statusCode; - print('notifaction response is ${response}'); + print('notifaction response is $response'); if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List requestsListJson = json.decode(response.body)["data"]; - List _serviceRequestsPage = requestsListJson.map((request) => SystemNotificationModel.fromJson(request)).toList(); - if (notifications == null) notifications = []; - notifications.addAll(_serviceRequestsPage); + List serviceRequestsPage = requestsListJson.map((request) => SystemNotificationModel.fromJson(request)).toList(); + notifications ??= []; + notifications.addAll(serviceRequestsPage); // Update nextPage based on response length - nextPage = _serviceRequestsPage.length == pageItemNumber; + nextPage = serviceRequestsPage.length == pageItemNumber; } isLoading = false; notifyListeners(); @@ -87,14 +87,14 @@ class NotificationsProvider extends ChangeNotifier { //userId = 397.toString(); // testing id to view data try { - response = await get(Uri.parse(host + URLs.getSystemNotifications + "?uid=${user.id}&token=${user.token}"), headers: {"Content-Type": "application/json; charset=utf-8"}); + response = await get(Uri.parse("${host + URLs.getSystemNotifications}?uid=${user.id}&token=${user.token}"), headers: {"Content-Type": "application/json; charset=utf-8"}); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List requestsListJson = json.decode(utf8.decode(response.bodyBytes)); - List _recentNotifications = requestsListJson.map((request) => SystemNotificationModel.fromJson(request)).toList(); - return _recentNotifications; + List recentNotifications = requestsListJson.map((request) => SystemNotificationModel.fromJson(request)).toList(); + return recentNotifications; } return null; } catch (error) { diff --git a/lib/controllers/providers/api/parts_provider.dart b/lib/controllers/providers/api/parts_provider.dart index 8cc463b1..6705a4f9 100644 --- a/lib/controllers/providers/api/parts_provider.dart +++ b/lib/controllers/providers/api/parts_provider.dart @@ -63,10 +63,10 @@ class PartsProvider extends ChangeNotifier { if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); - List _page = categoriesListJson.map((part) => SparePart.fromJson(part)).toList(); + List page = categoriesListJson.map((part) => SparePart.fromJson(part)).toList(); _parts ??= []; - _parts!.addAll(_page.map((e) => SparePartsWorkOrders(sparePart: e)).toList()); - _nextPage = _page.length >= pageItemNumber; + _parts!.addAll(page.map((e) => SparePartsWorkOrders(sparePart: e)).toList()); + _nextPage = page.length >= pageItemNumber; } _loading = false; notifyListeners(); diff --git a/lib/controllers/providers/api/ppm_provider.dart b/lib/controllers/providers/api/ppm_provider.dart index c37f7745..11aedd53 100644 --- a/lib/controllers/providers/api/ppm_provider.dart +++ b/lib/controllers/providers/api/ppm_provider.dart @@ -179,7 +179,7 @@ class PpmProvider extends ChangeNotifier { workingHours: ((ppm.tbsTimer?.durationInSecond ?? 0) / 60 / 60), ), ); - showDialog(context: context, barrierDismissible: false, builder: (context) => AppLazyLoading()); + showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); late Response response; // Using 'late' for initialization later Map body = ppm.copyWith(assignedEmployeeId: user.userName, tbsTimer: ppm.tbsTimer).toJson(); response = await ApiManager.instance.put(URLs.updatePentry, body: body); diff --git a/lib/controllers/providers/api/service_requests_provider.dart b/lib/controllers/providers/api/service_requests_provider.dart index f40457bc..d41f9e96 100644 --- a/lib/controllers/providers/api/service_requests_provider.dart +++ b/lib/controllers/providers/api/service_requests_provider.dart @@ -269,7 +269,7 @@ class ServiceRequestsProvider extends ChangeNotifier { Future checkAssetPendingRequest(int assetId) async { Response response; try { - response = await await ApiManager.instance.get(URLs.CheckIfAssetHasAnotherServiceRequest + "?assetId=$assetId"); + response = await ApiManager.instance.get(URLs.CheckIfAssetHasAnotherServiceRequest + "?assetId=$assetId"); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) {} return PendingAssetServiceRequest.fromJson(json.decode(response.body)["data"]); @@ -304,7 +304,7 @@ class ServiceRequestsProvider extends ChangeNotifier { "requestedThrough": request.requestedThrough?.toJson(), "voiceNote": request.audio, "assets": request.deviceId == null ? [] : [request.deviceId], - "attachmentsCallRequest": (request.devicePhotos?.isNotEmpty ?? false) ? request.devicePhotos?.map((e) => {"name": e.getFileName})?.toList() : [], + "attachmentsCallRequest": (request.devicePhotos?.isNotEmpty ?? false) ? request.devicePhotos?.map((e) => {"name": e.getFileName}).toList() : [], "assignedEmployee": { "id": request.engineerId, "name": request.engineerName, @@ -368,7 +368,7 @@ class ServiceRequestsProvider extends ChangeNotifier { try { showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); final body = report.toJson(); - final callRequest = CallRequest(id: num.tryParse(request?.id ?? "")).toJson(); + final callRequest = CallRequest(id: num.tryParse(request.id ?? "")).toJson(); final contactPerson = [ { "id": 0, @@ -448,7 +448,7 @@ class ServiceRequestsProvider extends ChangeNotifier { try { var body = { "pageSize": pageItemNumber, - "pageNumber": ((workOrders?.length ?? 0) ~/ pageItemNumber) + 1, + "pageNumber": ((workOrders.length ?? 0) ~/ pageItemNumber) + 1, "callId": callId, }; response = await ApiManager.instance.post(URLs.searchWorkOrders, body: body); @@ -528,7 +528,7 @@ class ServiceRequestsProvider extends ChangeNotifier { Fluttertoast.showToast(msg: context.translation.successfulRequestMessage); Navigator.of(context).pop(); } else { - Fluttertoast.showToast(msg: "${context.translation.failedToCompleteRequest}"); + Fluttertoast.showToast(msg: context.translation.failedToCompleteRequest); } Navigator.of(context).pop(); return response.statusCode; @@ -662,17 +662,17 @@ class ServiceRequestsProvider extends ChangeNotifier { try { var body = { "pageSize": pageItemNumber, - "pageNumber": ((workOrders?.length ?? 0) ~/ pageItemNumber) + 1, - if (callerId?.isNotEmpty ?? false) "callId": callerId, + "pageNumber": ((workOrders.length ?? 0) ~/ pageItemNumber) + 1, + if (callerId.isNotEmpty ?? false) "callId": callerId, if (search.assetType != null) "assetSerialNo": search.assetType?.name, if (search.workOrderNo != null) "workOrderNo": search.workOrderNo, if (search.id != null) "workOrderNo": search.id.toString(), if (search.calllastSituation != null) "callslastSituationWO": search.calllastSituation!.toJson(), if (search.assignedEmployee != null) "assignedEmployees": [search.assignedEmployee!.id], // "statusWO": [], - if (site?.isNotEmpty ?? false) "site": site, - if (search.visitDate != null && dateOperator != null) "visitDateSymbol": dateOperator?.toJson(), - if (search.visitDate != null && dateOperator != null) "visitDateFrom": search.visitDate, + if (site.isNotEmpty ?? false) "site": site, + if (search.visitDate != null) "visitDateSymbol": dateOperator.toJson(), + if (search.visitDate != null) "visitDateFrom": search.visitDate, }; print(body); response = await ApiManager.instance.post(URLs.searchWorkOrders, body: body); diff --git a/lib/controllers/providers/api/status_drop_down/report/service_report_assistants_employee_provider.dart b/lib/controllers/providers/api/status_drop_down/report/service_report_assistants_employee_provider.dart index 2b3f2a48..b35a6981 100644 --- a/lib/controllers/providers/api/status_drop_down/report/service_report_assistants_employee_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/report/service_report_assistants_employee_provider.dart @@ -1,7 +1,7 @@ import 'dart:convert'; 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/api_manager.dart'; import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/models/employee.dart'; diff --git a/lib/controllers/providers/api/status_drop_down/report/service_report_fault_description_provider.dart b/lib/controllers/providers/api/status_drop_down/report/service_report_fault_description_provider.dart index 706f86d5..230d147a 100644 --- a/lib/controllers/providers/api/status_drop_down/report/service_report_fault_description_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/report/service_report_fault_description_provider.dart @@ -58,7 +58,7 @@ class ServiceRequestFaultDescriptionProvider extends ChangeNotifier { if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List listJson = json.decode(response.body)["data"]['asset']['modelDefinition']['modelDefRelatedDefects']; - _items = listJson?.map((type) => FaultDescription.fromJson(type))?.toList() ?? []; + _items = listJson.map((type) => FaultDescription.fromJson(type)).toList() ?? []; } _loading = false; notifyListeners(); diff --git a/lib/controllers/providers/api/status_drop_down/report/service_report_repair_location_provider.dart b/lib/controllers/providers/api/status_drop_down/report/service_report_repair_location_provider.dart index d80099bb..84ca53c8 100644 --- a/lib/controllers/providers/api/status_drop_down/report/service_report_repair_location_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/report/service_report_repair_location_provider.dart @@ -6,7 +6,6 @@ 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/lookup.dart'; -import 'package:test_sa/models/user.dart'; class ServiceReportRepairLocationProvider extends ChangeNotifier { //reset provider data diff --git a/lib/controllers/providers/api/user_provider.dart b/lib/controllers/providers/api/user_provider.dart index 52cd2a19..222ad014 100644 --- a/lib/controllers/providers/api/user_provider.dart +++ b/lib/controllers/providers/api/user_provider.dart @@ -54,7 +54,7 @@ class UserProvider extends ChangeNotifier { notifyListeners(); Response response; try { - showDialog(context: context, barrierDismissible: false, builder: (context) => AppLazyLoading()); + showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); response = await ApiManager.instance.post(URLs.login, body: await user.toLoginJson()); _loading = false; if (response.statusCode >= 200 && response.statusCode < 300) { diff --git a/lib/controllers/providers/settings/app_settings.dart b/lib/controllers/providers/settings/app_settings.dart index 587bb562..38d6020e 100644 --- a/lib/controllers/providers/settings/app_settings.dart +++ b/lib/controllers/providers/settings/app_settings.dart @@ -1,12 +1,12 @@ class ASettings { - static final String user = "user"; - static final String assetGroup = "asset_group"; - static final String host = "host"; - static final String language = "language"; - static final String theme = "theme"; - static final String localAuth = "local_auth"; - static final String speechToText = "speech_to_text"; - static final String rememberMe = "remember_me"; - static final String userName = "username"; - static final String password = "password"; + static const String user = "user"; + static const String assetGroup = "asset_group"; + static const String host = "host"; + static const String language = "language"; + static const String theme = "theme"; + static const String localAuth = "local_auth"; + static const String speechToText = "speech_to_text"; + static const String rememberMe = "remember_me"; + static const String userName = "username"; + static const String password = "password"; } diff --git a/lib/controllers/providers/settings/setting_provider.dart b/lib/controllers/providers/settings/setting_provider.dart index 7202f2b9..cb97341c 100644 --- a/lib/controllers/providers/settings/setting_provider.dart +++ b/lib/controllers/providers/settings/setting_provider.dart @@ -2,7 +2,6 @@ import 'dart:async'; import 'dart:convert'; import 'package:flutter/material.dart'; -import 'package:http/http.dart'; import 'package:local_auth/local_auth.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart'; diff --git a/lib/controllers/validator/validator.dart b/lib/controllers/validator/validator.dart index f3b3428b..067d510b 100644 --- a/lib/controllers/validator/validator.dart +++ b/lib/controllers/validator/validator.dart @@ -10,18 +10,18 @@ class Validator { // Return true if email is valid. Otherwise, return false static bool isEmail(String email) { - RegExp exp = new RegExp(r"^[a-zA-Z0-9.a-zA-Z0-9.!#$%&'*+-/=?^_`{|}~]+@[a-zA-Z0-9]+\.[a-zA-Z]+"); + RegExp exp = RegExp(r"^[a-zA-Z0-9.a-zA-Z0-9.!#$%&'*+-/=?^_`{|}~]+@[a-zA-Z0-9]+\.[a-zA-Z]+"); if (exp.hasMatch(email)) return true; return false; } // Return true if phone number is valid. Otherwise, return false static bool isPhoneNumber(String phoneNumber) { - if (phoneNumber == null || phoneNumber.isEmpty) { + if (phoneNumber.isEmpty) { return false; } - final pattern = r'^[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\s\./0-9]*$'; + const pattern = r'^[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\s\./0-9]*$'; final regExp = RegExp(pattern); if (regExp.hasMatch(phoneNumber)) return true; @@ -30,24 +30,17 @@ class Validator { // Return true if password is valid. Otherwise, return false static bool isValidPassword(String password) { - if (password == null) return false; if (password.length < 6) return false; return true; } // Return true if String is valid Numeric. Otherwise, return false static bool isNumeric(String s) { - if (s == null) { - return false; - } return double.tryParse(s) != null; } // Return true if String is valid Numeric. Otherwise, return false static bool isInt(String value) { - if (value == null) { - return false; - } return int.tryParse(value) != null; } } diff --git a/lib/dashboard_latest/dashboard_view.dart b/lib/dashboard_latest/dashboard_view.dart index 9b8d95cd..c985f827 100644 --- a/lib/dashboard_latest/dashboard_view.dart +++ b/lib/dashboard_latest/dashboard_view.dart @@ -29,7 +29,7 @@ class DashboardView extends StatefulWidget { } class _DashboardViewState extends State { - int _currentPage = 0; + final int _currentPage = 0; bool isFCM = true; late User user; @@ -87,7 +87,7 @@ class _DashboardViewState extends State { void handleScroll() async { _scrollController = ScrollController(); _scrollController.addListener(() async { - if (_scrollController?.position?.pixels == _scrollController?.position?.maxScrollExtent && !allRequestsProvider.isFilterRequestLoading) { + if (_scrollController.position.pixels == _scrollController.position.maxScrollExtent && !allRequestsProvider.isFilterRequestLoading) { allRequestsProvider.pageNum = allRequestsProvider.pageNum + 1; await allRequestsProvider.getFilterRequests(showLoader: false, status: allRequestsProvider.status); } @@ -118,7 +118,7 @@ class _DashboardViewState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, - children: [14.height, ProgressFragment(), 25.height, SizedBox(height: 110.toScreenHeight, child: RequestsFragment()), 16.height, RequestCategoryFragment()], + children: [14.height, ProgressFragment(), 25.height, SizedBox(height: 110.toScreenHeight, child: const RequestsFragment()), 16.height, const RequestCategoryFragment()], ).paddingOnly(start: 16, end: 16, top: 0, bottom: 8), ), ), diff --git a/lib/dashboard_latest/widgets/app_bar_widget.dart b/lib/dashboard_latest/widgets/app_bar_widget.dart index 8c7cc548..705c6308 100644 --- a/lib/dashboard_latest/widgets/app_bar_widget.dart +++ b/lib/dashboard_latest/widgets/app_bar_widget.dart @@ -52,7 +52,7 @@ class AppBarWidget extends StatelessWidget { style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50, fontWeight: FontWeight.w600), ), Text( - snapshot.user?.type?.name?.toCamelCase ?? "", // Simplified null check + snapshot.user?.type?.name.toCamelCase ?? "", // Simplified null check style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20), ), ], @@ -99,11 +99,11 @@ class AppBarWidget extends StatelessWidget { return DropdownMenuItem( value: value, child: Text( - value?.name ?? "", + value.name ?? "", style: Theme.of(context).textTheme.bodyLarge, ), ); - })?.toList() ?? + }).toList() ?? [], // Added null check and empty list default ), ); diff --git a/lib/extensions/string_extensions.dart b/lib/extensions/string_extensions.dart index 76ff2b66..fef79a7d 100644 --- a/lib/extensions/string_extensions.dart +++ b/lib/extensions/string_extensions.dart @@ -40,8 +40,8 @@ extension StringExtensions on String { String get getFileName { try { - if (this.contains("fileName=")) { - String sub = this.substring(this.indexOf("fileName="), this.length); + if (contains("fileName=")) { + String sub = substring(indexOf("fileName="), length); sub = sub.replaceAll("fileName=", ""); return sub; } else { diff --git a/lib/extensions/text_extensions.dart b/lib/extensions/text_extensions.dart index 9ecd586e..99aed3a7 100644 --- a/lib/extensions/text_extensions.dart +++ b/lib/extensions/text_extensions.dart @@ -154,7 +154,7 @@ extension CapExtension on String { String get capitalizeFirstOfEach => trim().isNotEmpty ? trim().toLowerCase().split(" ").map((str) { - return str.trim()?.inCaps ?? ""; + return str.trim().inCaps ?? ""; }).join(" ") : ""; } diff --git a/lib/extensions/widget_extensions.dart b/lib/extensions/widget_extensions.dart index 34da1f1e..4f01cf1c 100644 --- a/lib/extensions/widget_extensions.dart +++ b/lib/extensions/widget_extensions.dart @@ -6,7 +6,7 @@ import 'package:test_sa/extensions/int_extensions.dart'; import '../new_views/app_style/app_color.dart'; extension WidgetExtensions on Widget { - Widget onPress(VoidCallback? onTap) => InkWell(onTap: onTap, child: this, highlightColor: Colors.transparent, splashColor: Colors.transparent); + Widget onPress(VoidCallback? onTap) => InkWell(onTap: onTap, highlightColor: Colors.transparent, splashColor: Colors.transparent, child: this); Widget get expanded => Expanded(child: this); diff --git a/lib/main.dart b/lib/main.dart index 47ebe4a4..130278e8 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -17,32 +17,12 @@ import 'package:test_sa/controllers/providers/api/notifications_provider.dart'; import 'package:test_sa/controllers/providers/api/parts_provider.dart'; 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'; -import 'package:test_sa/controllers/providers/api/status_drop_down/pentry/pentry_task_status_provider.dart'; -import 'package:test_sa/controllers/providers/api/status_drop_down/pentry/pentry_visit_status_provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_assistants_employee_provider.dart'; -import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_defect_types_provider.dart'; -import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_equipment_status_provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_fault_description_provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_last_calls_provider.dart'; -import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_maintenance_situation_provider.dart'; -import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_priority_provider.dart'; -import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_reasons_provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_repair_location_provider.dart'; -import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_status_provider.dart'; -import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_types_provider.dart'; -import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_users_provider.dart'; -import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_visit_date_operator_provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_types_provider.dart'; -import 'package:test_sa/controllers/providers/api/status_drop_down/service_reqest/service_request_first_action_provider.dart'; -import 'package:test_sa/controllers/providers/api/status_drop_down/service_reqest/service_request_status_provider.dart'; -import 'package:test_sa/controllers/providers/api/status_drop_down/service_reqest/service_request_through_provider.dart'; -import 'package:test_sa/controllers/providers/api/status_drop_down/service_reqest/service_request_type_provider.dart'; import 'package:test_sa/new_views/app_style/app_themes.dart'; import 'package:test_sa/new_views/pages/help_center_page.dart'; import 'package:test_sa/new_views/pages/land_page/land_page.dart'; @@ -69,10 +49,8 @@ import 'package:test_sa/providers/service_request_providers/commissioning_status import 'package:test_sa/providers/service_request_providers/equipment_status_provider.dart'; import 'package:test_sa/providers/service_request_providers/first_action_provider.dart'; import 'package:test_sa/providers/service_request_providers/priority_provider.dart'; -import 'package:test_sa/providers/service_request_providers/request_status_provider.dart'; import 'package:test_sa/providers/service_request_providers/requested_through_provider.dart'; import 'package:test_sa/providers/service_request_providers/type_of_request_provider.dart'; -import 'package:test_sa/providers/work_order/asset_types_provider.dart'; import 'package:test_sa/providers/work_order/reason_provider.dart'; import 'package:test_sa/providers/work_order/service_type_provider.dart'; import 'package:test_sa/providers/work_order/supplier_engineer_provider.dart'; @@ -82,16 +60,12 @@ import 'package:test_sa/views/pages/device_transfer/asset_search_screen.dart'; import 'package:test_sa/views/pages/device_transfer/request_device_transfer.dart'; import 'package:test_sa/views/pages/device_transfer/track_device_transfer.dart'; import 'package:test_sa/views/pages/sub_workorder/create_sub_workorder_page.dart'; -import 'package:test_sa/views/pages/sub_workorder/search_sub_workorder_page.dart'; import 'package:test_sa/views/pages/user/gas_refill/request_gas_refill.dart'; import 'package:test_sa/views/pages/user/gas_refill/track_gas_refill.dart'; -import 'package:test_sa/views/pages/user/land_page.dart' as old; import 'package:test_sa/views/pages/user/notifications/notifications_page.dart'; import 'package:test_sa/views/pages/user/ppm/ppm_page.dart'; import 'package:test_sa/views/pages/user/profile_page.dart'; -import 'package:test_sa/views/pages/user/report_issues_page.dart'; import 'package:test_sa/views/pages/user/requests/create_service_request_page.dart'; -import 'package:test_sa/views/pages/user/requests/future_request_service_details.dart'; import 'package:test_sa/views/pages/user/requests/requests_page.dart'; import 'package:test_sa/views/pages/user/requests/update_service_request_page.dart'; import 'package:test_sa/views/pages/user/requests/work_order/work_order_details_page.dart'; @@ -99,7 +73,6 @@ import 'package:test_sa/views/pages/user/requests/work_order/work_orders_list_pa import 'package:test_sa/views/widgets/departments/single_department_picker.dart'; import 'package:test_sa/views/widgets/equipment/asset_detail_page.dart'; import 'package:test_sa/views/widgets/equipment/single_device_picker.dart'; -import 'package:test_sa/views/widgets/hospitals/single_hospital_picker.dart'; import 'controllers/providers/api/gas_refill_comments.dart'; import 'controllers/providers/api/user_provider.dart'; @@ -259,14 +232,14 @@ class MyApp extends StatelessWidget { //old.LandPage.id: (_) => const old.LandPage(), LandPage.routeName: (_) => const LandPage(), NewGasRefillRequestPage.routeName: (_) => const NewGasRefillRequestPage(), - ServiceRequestsPage.id: (_) => ServiceRequestsPage(), + ServiceRequestsPage.id: (_) => const ServiceRequestsPage(), //ReportIssuesPage.id: (_) => ReportIssuesPage(), - RequestGasRefill.id: (_) => RequestGasRefill(), - CreateServiceRequestPage.id: (_) => CreateServiceRequestPage(), + RequestGasRefill.id: (_) => const RequestGasRefill(), + CreateServiceRequestPage.id: (_) => const CreateServiceRequestPage(), // SingleHospitalPicker.id: (_) => SingleHospitalPicker(), MyAssetsPage.id: (_) => const MyAssetsPage(), - SingleDepartmentPicker.id: (_) => SingleDepartmentPicker(), - NotificationsPage.id: (_) => NotificationsPage(), + SingleDepartmentPicker.id: (_) => const SingleDepartmentPicker(), + NotificationsPage.id: (_) => const NotificationsPage(), // FutureRequestServiceDetails.id: (_) => FutureRequestServiceDetails(), // PreventiveMaintenanceVisitsPage.id: (_) => PreventiveMaintenanceVisitsPage(), PpmPage.id: (_) => const PpmPage(), @@ -276,13 +249,13 @@ class MyApp extends StatelessWidget { // todo remove this class after work // SearchSubWorkOrderPage.id: (_) => const SearchSubWorkOrderPage(), - CreateSubWorkOrderPage.id: (_) => CreateSubWorkOrderPage(), + CreateSubWorkOrderPage.id: (_) => const CreateSubWorkOrderPage(), WorkOrderListPage.id: (_) => WorkOrderListPage(), - AssetDetailPage.id: (_) => AssetDetailPage(), - AssetSearchScreen.id: (_) => AssetSearchScreen(), - AssetFilterScreen.id: (_) => AssetFilterScreen(), - WorkOrderDetailsPage.id: (_) => WorkOrderDetailsPage(), - UpdateServiceRequestPage.id: (_) => UpdateServiceRequestPage(), + AssetDetailPage.id: (_) => const AssetDetailPage(), + AssetSearchScreen.id: (_) => const AssetSearchScreen(), + AssetFilterScreen.id: (_) => const AssetFilterScreen(), + WorkOrderDetailsPage.id: (_) => const WorkOrderDetailsPage(), + UpdateServiceRequestPage.id: (_) => const UpdateServiceRequestPage(), SettingsPage.id: (_) => const SettingsPage(), ProfilePage.id: (_) => const ProfilePage(), ReportBugPage.id: (_) => const ReportBugPage(), diff --git a/lib/models/device/asset_by_id_model.dart b/lib/models/device/asset_by_id_model.dart index e358c16e..f83eb4bc 100644 --- a/lib/models/device/asset_by_id_model.dart +++ b/lib/models/device/asset_by_id_model.dart @@ -129,26 +129,26 @@ class AssetByIdModel { if (json['multiAssets'] != null) { multiAssets = []; json['multiAssets'].forEach((v) { - multiAssets!.add(new MultiAssets.fromJson(v)); + multiAssets!.add(MultiAssets.fromJson(v)); }); } id = json['id']; - modelDefinition = json['modelDefinition'] != null ? new ModelDefinition.fromJson(json['modelDefinition']) : null; + modelDefinition = json['modelDefinition'] != null ? ModelDefinition.fromJson(json['modelDefinition']) : null; supplier = json['supplier'] != null ? Suppliers.fromJson(json['supplier']) : null; ipAddress = json['ipAddress']; macAddress = json['macAddress']; portNumber = json['portNumber']; - assetReplace = json['assetReplace'] != null ? new AssetReplace.fromJson(json['assetReplace']) : null; + assetReplace = json['assetReplace'] != null ? AssetReplace.fromJson(json['assetReplace']) : null; oldAsset = json['oldAsset'] != null ? AssetInfo.fromJson(json['oldAsset']) : null; - isParent = json['isParent'] != null ? new AssetReplace.fromJson(json['isParent']) : null; + isParent = json['isParent'] != null ? AssetReplace.fromJson(json['isParent']) : null; parentAsset = json['parentAsset'] != null ? AssetInfo.fromJson(json['parentAsset']) : null; - assetType = json['assetType'] != null ? new AssetReplace.fromJson(json['assetType']) : null; + assetType = json['assetType'] != null ? AssetReplace.fromJson(json['assetType']) : null; demoRequest = json['demoRequest']; missionCritical = json['missionCritical']; - site = json['site'] != null ? new Site.fromJson(json['site']) : null; - building = json['building'] != null ? new AssetReplace.fromJson(json['building']) : null; - floor = json['floor'] != null ? new AssetReplace.fromJson(json['floor']) : null; - department = json['department'] != null ? new Department.fromJson(json['department']) : null; + site = json['site'] != null ? Site.fromJson(json['site']) : null; + building = json['building'] != null ? AssetReplace.fromJson(json['building']) : null; + floor = json['floor'] != null ? AssetReplace.fromJson(json['floor']) : null; + department = json['department'] != null ? Department.fromJson(json['department']) : null; room = json['room'] != null ? Lookup.fromJson(json['room']) : null; testsDay = json['testsDay']; purchasingPrice = json['purchasingPrice']; @@ -162,8 +162,8 @@ class AssetByIdModel { budgetYear = json['budgetYear']; lastPOPrice = json['lastPOPrice']; commissioningStatus = json['commissioningStatus'] != null ? Lookup.fromJson(json['commissioningStatus']) : null; - originDepartment = json['originDepartment'] != null ? new Department.fromJson(json['originDepartment']) : null; - originSite = json['originSite'] != null ? new Site.fromJson(json['originSite']) : null; + originDepartment = json['originDepartment'] != null ? Department.fromJson(json['originDepartment']) : null; + originSite = json['originSite'] != null ? Site.fromJson(json['originSite']) : null; productionDate = json['productionDate']; edd = json['edd']; technicalInspectionDate = json['technicalInspectionDate']; @@ -204,97 +204,97 @@ class AssetByIdModel { } Map toJson() { - final Map data = new Map(); - if (this.multiAssets != null) { - data['multiAssets'] = this.multiAssets!.map((v) => v.toJson()).toList(); + final Map data = {}; + if (multiAssets != null) { + data['multiAssets'] = multiAssets!.map((v) => v.toJson()).toList(); } - data['id'] = this.id; - if (this.modelDefinition != null) { - data['modelDefinition'] = this.modelDefinition?.toJson(); + data['id'] = id; + if (modelDefinition != null) { + data['modelDefinition'] = modelDefinition?.toJson(); } - if (this.supplier != null) { - data['supplier'] = this.supplier?.toJson(); + if (supplier != null) { + data['supplier'] = supplier?.toJson(); } - data['ipAddress'] = this.ipAddress; - data['macAddress'] = this.macAddress; - data['portNumber'] = this.portNumber; - if (this.assetReplace != null) { - data['assetReplace'] = this.assetReplace?.toJson(); + data['ipAddress'] = ipAddress; + data['macAddress'] = macAddress; + data['portNumber'] = portNumber; + if (assetReplace != null) { + data['assetReplace'] = assetReplace?.toJson(); } - data['oldAsset'] = this.oldAsset?.toJson(); - if (this.isParent != null) { - data['isParent'] = this.isParent?.toJson(); + data['oldAsset'] = oldAsset?.toJson(); + if (isParent != null) { + data['isParent'] = isParent?.toJson(); } - data['parentAsset'] = this.parentAsset?.toJson(); - if (this.assetType != null) { - data['assetType'] = this.assetType?.toJson(); + data['parentAsset'] = parentAsset?.toJson(); + if (assetType != null) { + data['assetType'] = assetType?.toJson(); } - data['demoRequest'] = this.demoRequest; - data['missionCritical'] = this.missionCritical; - if (this.site != null) { - data['site'] = this.site?.toJson(); + data['demoRequest'] = demoRequest; + data['missionCritical'] = missionCritical; + if (site != null) { + data['site'] = site?.toJson(); } - if (this.building != null) { - data['building'] = this.building?.toJson(); + if (building != null) { + data['building'] = building?.toJson(); } - if (this.floor != null) { - data['floor'] = this.floor?.toJson(); + if (floor != null) { + data['floor'] = floor?.toJson(); } - if (this.department != null) { - data['department'] = this.department?.toJson(); + if (department != null) { + data['department'] = department?.toJson(); } - data['room'] = this.room?.toJson(); - data['testsDay'] = this.testsDay; - data['purchasingPrice'] = this.purchasingPrice; - data['nbv'] = this.nbv; - data['currency'] = this.currency; - data['poDate'] = this.poDate; - data['poNo'] = this.poNo; - data['invoiceNumber'] = this.invoiceNumber; - data['invoiceDate'] = this.invoiceDate; - data['replacementDate'] = this.replacementDate; - data['budgetYear'] = this.budgetYear; - data['lastPOPrice'] = this.lastPOPrice; - data['commissioningStatus'] = this.commissioningStatus?.toJson(); - if (this.originDepartment != null) { - data['originDepartment'] = this.originDepartment?.toJson(); + data['room'] = room?.toJson(); + data['testsDay'] = testsDay; + data['purchasingPrice'] = purchasingPrice; + data['nbv'] = nbv; + data['currency'] = currency; + data['poDate'] = poDate; + data['poNo'] = poNo; + data['invoiceNumber'] = invoiceNumber; + data['invoiceDate'] = invoiceDate; + data['replacementDate'] = replacementDate; + data['budgetYear'] = budgetYear; + data['lastPOPrice'] = lastPOPrice; + data['commissioningStatus'] = commissioningStatus?.toJson(); + if (originDepartment != null) { + data['originDepartment'] = originDepartment?.toJson(); } - if (this.originSite != null) { - data['originSite'] = this.originSite?.toJson(); + if (originSite != null) { + data['originSite'] = originSite?.toJson(); } - data['productionDate'] = this.productionDate; - data['edd'] = this.edd; - data['technicalInspectionDate'] = this.technicalInspectionDate; - data['deliveryInspectionDate'] = this.deliveryInspectionDate; - data['endUserAcceptanceDate'] = this.endUserAcceptanceDate; - data['technicalAcceptanceDate'] = this.technicalAcceptanceDate; - data['finalAcceptanceDate'] = this.finalAcceptanceDate; - data['installationDate'] = this.installationDate; - data['siteWarrantyMonthNo'] = this.siteWarrantyMonthNo; - data['extendedWarrantyMonthNo'] = this.extendedWarrantyMonthNo; - data['remainderWarrantyMonthNo'] = this.remainderWarrantyMonthNo; - data['eomWarrantyMonthsNo'] = this.eomWarrantyMonthsNo; - data['warrantyValue'] = this.warrantyValue; - data['warrantyEndDate'] = this.warrantyEndDate; - data['warrantyContractConditions'] = this.warrantyContractConditions; - if (this.technicalGuidanceBooks != null) { - data['technicalGuidanceBooks'] = this.technicalGuidanceBooks!.map((v) => v).toList(); + data['productionDate'] = productionDate; + data['edd'] = edd; + data['technicalInspectionDate'] = technicalInspectionDate; + data['deliveryInspectionDate'] = deliveryInspectionDate; + data['endUserAcceptanceDate'] = endUserAcceptanceDate; + data['technicalAcceptanceDate'] = technicalAcceptanceDate; + data['finalAcceptanceDate'] = finalAcceptanceDate; + data['installationDate'] = installationDate; + data['siteWarrantyMonthNo'] = siteWarrantyMonthNo; + data['extendedWarrantyMonthNo'] = extendedWarrantyMonthNo; + data['remainderWarrantyMonthNo'] = remainderWarrantyMonthNo; + data['eomWarrantyMonthsNo'] = eomWarrantyMonthsNo; + data['warrantyValue'] = warrantyValue; + data['warrantyEndDate'] = warrantyEndDate; + data['warrantyContractConditions'] = warrantyContractConditions; + if (technicalGuidanceBooks != null) { + data['technicalGuidanceBooks'] = technicalGuidanceBooks!.map((v) => v).toList(); } - data['comment'] = this.comment; - data['isEnabled'] = this.isEnabled; - data['tagCode'] = this.tagCode; - if (this.assetAttachments != null) { - data['assetAttachments'] = this.assetAttachments!.map((v) => v).toList(); + data['comment'] = comment; + data['isEnabled'] = isEnabled; + data['tagCode'] = tagCode; + if (assetAttachments != null) { + data['assetAttachments'] = assetAttachments!.map((v) => v).toList(); } - data['retirementTypeName'] = this.retirementTypeName; - data['retirementStatusName'] = this.retirementStatusName; - data['retirementDate'] = this.retirementDate; - if (this.assetGroup != null) { - data['assetGroup'] = this.assetGroup?.toJson(); + data['retirementTypeName'] = retirementTypeName; + data['retirementStatusName'] = retirementStatusName; + data['retirementDate'] = retirementDate; + if (assetGroup != null) { + data['assetGroup'] = assetGroup?.toJson(); } - data['assetPhoto'] = this.assetPhoto; - data['nextPMDate'] = this.nextPMDate; - data['lastPMDate'] = this.lastPMDate; + data['assetPhoto'] = assetPhoto; + data['nextPMDate'] = nextPMDate; + data['lastPMDate'] = lastPMDate; return data; } } @@ -313,10 +313,10 @@ class MultiAssets { } Map toJson() { - final Map data = new Map(); - data['assetSerialNo'] = this.assetSerialNo; - data['systemID'] = this.systemID; - data['assetNumber'] = this.assetNumber; + final Map data = {}; + data['assetSerialNo'] = assetSerialNo; + data['systemID'] = systemID; + data['assetNumber'] = assetNumber; return data; } } @@ -375,30 +375,30 @@ class ModelDefinition { if (json['suppliers'] != null) { suppliers = []; json['suppliers'].forEach((v) { - suppliers!.add(new Suppliers.fromJson(v)); + suppliers!.add(Suppliers.fromJson(v)); }); } } Map toJson() { - final Map data = new Map(); - data['id'] = this.id; - data['assetName'] = this.assetName; - data['assetDescription'] = this.assetDescription; - data['modelDefCode'] = this.modelDefCode; - data['modelName'] = this.modelName; - data['manufacturerId'] = this.manufacturerId; - data['manufacturerName'] = this.manufacturerName; - data['supplierName'] = this.supplierName; - data['replacementDate'] = this.replacementDate; - data['essentialEquipement'] = this.essentialEquipement; - data['businessCritical'] = this.businessCritical; - data['lifeSpan'] = this.lifeSpan; - if (this.modelDefRelatedDefects != null) { - data['modelDefRelatedDefects'] = this.modelDefRelatedDefects!.map((v) => v.toJson()).toList(); + final Map data = {}; + data['id'] = id; + data['assetName'] = assetName; + data['assetDescription'] = assetDescription; + data['modelDefCode'] = modelDefCode; + data['modelName'] = modelName; + data['manufacturerId'] = manufacturerId; + data['manufacturerName'] = manufacturerName; + data['supplierName'] = supplierName; + data['replacementDate'] = replacementDate; + data['essentialEquipement'] = essentialEquipement; + data['businessCritical'] = businessCritical; + data['lifeSpan'] = lifeSpan; + if (modelDefRelatedDefects != null) { + data['modelDefRelatedDefects'] = modelDefRelatedDefects!.map((v) => v.toJson()).toList(); } - if (this.suppliers != null) { - data['suppliers'] = this.suppliers!.map((v) => v.toJson()).toList(); + if (suppliers != null) { + data['suppliers'] = suppliers!.map((v) => v.toJson()).toList(); } return data; } @@ -416,9 +416,9 @@ class Suppliers { } Map toJson() { - final Map data = new Map(); - data['id'] = this.id; - data['suppliername'] = this.suppliername; + final Map data = {}; + data['id'] = id; + data['suppliername'] = suppliername; return data; } } @@ -437,10 +437,10 @@ class AssetReplace { } Map toJson() { - final Map data = new Map(); - data['id'] = this.id; - data['name'] = this.name; - data['value'] = this.value; + final Map data = {}; + data['id'] = id; + data['name'] = name; + data['value'] = value; return data; } } @@ -460,18 +460,18 @@ class Site { if (json['buildings'] != null) { buildings = []; json['buildings'].forEach((v) { - buildings!.add(new Buildings.fromJson(v)); + buildings!.add(Buildings.fromJson(v)); }); } } Map toJson() { - final Map data = new Map(); - 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(); + final Map data = {}; + data['id'] = id; + data['customerCode'] = customerCode; + data['custName'] = custName; + if (buildings != null) { + data['buildings'] = buildings!.map((v) => v.toJson()).toList(); } return data; } @@ -492,18 +492,18 @@ class Buildings { if (json['floors'] != null) { floors = []; json['floors'].forEach((v) { - floors!.add(new Floors.fromJson(v)); + floors!.add(Floors.fromJson(v)); }); } } Map toJson() { - final Map data = new Map(); - 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(); + final Map data = {}; + data['id'] = id; + data['name'] = name; + data['value'] = value; + if (floors != null) { + data['floors'] = floors!.map((v) => v.toJson()).toList(); } return data; } @@ -524,18 +524,18 @@ class Floors { if (json['departments'] != null) { departments = []; json['departments'].forEach((v) { - departments!.add(new Departments.fromJson(v)); + departments!.add(Departments.fromJson(v)); }); } } Map toJson() { - final Map data = new Map(); - 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(); + final Map data = {}; + data['id'] = id; + data['name'] = name; + data['value'] = value; + if (departments != null) { + data['departments'] = departments!.map((v) => v.toJson()).toList(); } return data; } @@ -553,9 +553,9 @@ class Departments { } Map toJson() { - final Map data = new Map(); - data['id'] = this.id; - data['name'] = this.name; + final Map data = {}; + data['id'] = id; + data['name'] = name; return data; } } @@ -576,11 +576,11 @@ class Department { } Map toJson() { - final Map data = new Map(); - data['id'] = this.id; - data['departmentName'] = this.departmentName; - data['departmentCode'] = this.departmentCode; - data['ntCode'] = this.ntCode; + final Map data = {}; + data['id'] = id; + data['departmentName'] = departmentName; + data['departmentCode'] = departmentCode; + data['ntCode'] = ntCode; return data; } } @@ -599,10 +599,10 @@ class AssetGroup { } Map toJson() { - final Map data = new Map(); - data['id'] = this.id; - data['name'] = this.name; - data['code'] = this.code; + final Map data = {}; + data['id'] = id; + data['name'] = name; + data['code'] = code; return data; } } diff --git a/lib/models/device/asset_transfer.dart b/lib/models/device/asset_transfer.dart index fcbb8cf0..26116478 100644 --- a/lib/models/device/asset_transfer.dart +++ b/lib/models/device/asset_transfer.dart @@ -399,11 +399,11 @@ class AssetTransfer { map['senderWorkingHours'] = senderWorkingHours; map['senderTravelingHours'] = senderTravelingHours; map['senderEngSignature'] = senderEngSignature; - if (this.senderVisitTimers != null) { - map['assetTransferSenderTimers'] = this.senderVisitTimers!.map((v) => v.toJson()).toList(); + if (senderVisitTimers != null) { + map['assetTransferSenderTimers'] = senderVisitTimers!.map((v) => v.toJson()).toList(); } - if (this.receiverVisitTimers != null) { - map['assetTransferReceiverTimers'] = this.receiverVisitTimers!.map((v) => v.toJson()).toList(); + if (receiverVisitTimers != null) { + map['assetTransferReceiverTimers'] = receiverVisitTimers!.map((v) => v.toJson()).toList(); } if (senderAttachments != null) { map['senderAttachments'] = senderAttachments!.map((v) => v.toJson()).toList(); diff --git a/lib/models/gas_refill_comments_model.dart b/lib/models/gas_refill_comments_model.dart index 9cd68c8a..10a72aa4 100644 --- a/lib/models/gas_refill_comments_model.dart +++ b/lib/models/gas_refill_comments_model.dart @@ -30,7 +30,7 @@ class GasRefillComment { }) => GasRefillComment( id: id ?? this.id, - gasRefillId: callRequestId ?? this.gasRefillId, + gasRefillId: callRequestId ?? gasRefillId, createdOn: createdOn ?? this.createdOn, createdBy: createdBy ?? this.createdBy, comment: comment ?? this.comment, diff --git a/lib/models/lookup.dart b/lib/models/lookup.dart index 2f691aeb..f176d1f6 100644 --- a/lib/models/lookup.dart +++ b/lib/models/lookup.dart @@ -3,6 +3,7 @@ import 'base.dart'; class Lookup extends Base { int? id; // Now nullable int? value; // Now nullable + @override String? name; // Now nullable Lookup({this.id, this.value, this.name}) : super(identifier: id?.toString(), name: name); diff --git a/lib/models/new_models/room_model.dart b/lib/models/new_models/room_model.dart index 1d853b62..1fa7ccbe 100644 --- a/lib/models/new_models/room_model.dart +++ b/lib/models/new_models/room_model.dart @@ -2,6 +2,7 @@ import 'package:test_sa/models/base.dart'; class Rooms extends Base { int? id; // Now nullable + @override String? name; // Now nullable int?value; // Now nullable @@ -15,10 +16,10 @@ class Rooms extends Base { } Map toJson() { - final Map data = new Map(); - data['id'] = this.id; - data['name'] = this.name; - data['value'] = this.value; + final Map data = {}; + data['id'] = id; + data['name'] = name; + data['value'] = value; return data; } } diff --git a/lib/models/ppm/ppm.dart b/lib/models/ppm/ppm.dart index c88520a8..44090346 100644 --- a/lib/models/ppm/ppm.dart +++ b/lib/models/ppm/ppm.dart @@ -28,11 +28,11 @@ class VisitTimers { } Map toJson() { - final Map data = new Map(); - data['id'] = this.id; - data['startDateTime'] = this.startDateTime; - data['endDateTime'] = this.endDateTime; - data['workingHours'] = this.workingHours; + final Map data = {}; + data['id'] = id; + data['startDateTime'] = startDateTime; + data['endDateTime'] = endDateTime; + data['workingHours'] = workingHours; return data; } } @@ -578,8 +578,8 @@ class Ppm { .toList(); } map['visitStatusId'] = visitStatusId; - if (this.visitTimers != null) { - map['visitTimers'] = this.visitTimers!.map((v) => v.toJson()).toList(); + if (visitTimers != null) { + map['visitTimers'] = visitTimers!.map((v) => v.toJson()).toList(); } // map['startDate'] = tbsTimer?.startAt?.toIso8601String(); // map['endDate'] = tbsTimer?.endAt?.toIso8601String(); @@ -643,7 +643,7 @@ class Ppm { } bool _isLocalUrl(String url) { - if (url?.isEmpty != false) return false; + if (url.isEmpty != false) return false; return url.startsWith("/") || url.startsWith("file://") || url.substring(1).startsWith(':\\'); } diff --git a/lib/models/service_request/pending_service_request_model.dart b/lib/models/service_request/pending_service_request_model.dart index 5c5931b2..47fc23f6 100644 --- a/lib/models/service_request/pending_service_request_model.dart +++ b/lib/models/service_request/pending_service_request_model.dart @@ -9,16 +9,16 @@ class PendingAssetServiceRequest { details =
[]; if (json['details'] != null) { json['details'].forEach((v) { - details!.add(new Details.fromJson(v)); + details!.add(Details.fromJson(v)); }); } } Map toJson() { - final Map data = new Map(); - data['headerMessage'] = this.headerMessage; - if (this.details != null) { - data['details'] = this.details!.map((v) => v.toJson()).toList(); + final Map data = {}; + data['headerMessage'] = headerMessage; + if (details != null) { + data['details'] = details!.map((v) => v.toJson()).toList(); } return data; } @@ -42,12 +42,12 @@ class Details { } Map toJson() { - final Map data = new Map(); - data['id'] = this.id; - data['message'] = this.message; - data['callComments'] = this.callComments; - data['voiceNote'] = this.voiceNote; - data['createdBy'] = this.createdBy; + final Map data = {}; + data['id'] = id; + data['message'] = message; + data['callComments'] = callComments; + data['voiceNote'] = voiceNote; + data['createdBy'] = createdBy; return data; } } diff --git a/lib/models/service_request/search_work_order.dart b/lib/models/service_request/search_work_order.dart index 44d3a549..41f282cf 100644 --- a/lib/models/service_request/search_work_order.dart +++ b/lib/models/service_request/search_work_order.dart @@ -133,14 +133,14 @@ class SearchWorkOrder { visitDate = wo.visitDate ?? visitDate; assistantEmployees = (wo.assistantEmployees ?? assistantEmployees) ?.map((e) => AssistantEmployees.fromJson({ - "id": e?.id, - "user": {"name": e?.user?.name, "id": (e?.user?.id) ?? "0"} + "id": e.id, + "user": {"name": e.user?.name, "id": (e.user?.id) ?? "0"} })) - ?.toList() ?? + .toList() ?? []; if (wo.supplier != null) supplier = SupplierDetails.fromJson((wo.supplier)?.toJson() ?? {}); vendorTicketNumber = wo.vendorTicketNumber ?? vendorTicketNumber; - contactPersonWorkOrders = (wo.contactPersonWorkOrders ?? contactPersonWorkOrders)?.map((e) => ContactPersonWorkOrder.fromJson(e?.toJson() ?? {}))?.toList() ?? []; + contactPersonWorkOrders = (wo.contactPersonWorkOrders ?? contactPersonWorkOrders)?.map((e) => ContactPersonWorkOrder.fromJson(e.toJson() ?? {})).toList() ?? []; calllastSituation = Lookup.fromJson((wo.calllastSituation ?? calllastSituation)?.toJson() ?? {}); if (wo.currentSituation != null) currentSituation = Lookup.fromJson((wo.currentSituation)?.toJson() ?? {}); repairLocation = Lookup.fromJson((wo.repairLocation ?? repairLocation)?.toJson() ?? {}); @@ -152,12 +152,12 @@ class SearchWorkOrder { travelingHours = wo.travelingHours ?? travelingHours; travelingExpenses = wo.travelingExpenses ?? travelingExpenses; faultDescription = FaultDescription.fromJson((wo.faultDescription ?? faultDescription)?.toJson() ?? {}); - sparePartsWorkOrders = (wo.sparePartsWorkOrders ?? sparePartsWorkOrders)?.map((e) => SparePartsWorkOrders.fromJson(e?.toJson() ?? {}))?.toList() ?? []; + sparePartsWorkOrders = (wo.sparePartsWorkOrders ?? sparePartsWorkOrders)?.map((e) => SparePartsWorkOrders.fromJson(e.toJson() ?? {})).toList() ?? []; reviewComment = wo.reviewComment ?? reviewComment; comment = wo.comment ?? comment; - attachmentsWorkOrder = (wo.attachmentsWorkOrder ?? attachmentsWorkOrder)?.map((e) => Attachment.fromJson(e?.toJson() ?? {}))?.toList() ?? []; + attachmentsWorkOrder = (wo.attachmentsWorkOrder ?? attachmentsWorkOrder)?.map((e) => Attachment.fromJson(e.toJson() ?? {})).toList() ?? []; equipmentStatus = Lookup.fromJson((wo.equipmentStatus ?? equipmentStatus)?.toJson() ?? {}); - suppEngineerWorkOrders = (wo.suppEngineerWorkOrders ?? suppEngineerWorkOrders)?.map((e) => SuppEngineerWorkOrders.fromJson(e?.toJson() ?? {}))?.toList() ?? []; + suppEngineerWorkOrders = (wo.suppEngineerWorkOrders ?? suppEngineerWorkOrders)?.map((e) => SuppEngineerWorkOrders.fromJson(e.toJson() ?? {})).toList() ?? []; engSignature = wo.engSignature ?? engSignature; nurseSignature = wo.nurseSignature ?? nurseSignature; woParentDto = wo.woParentDto ?? woParentDto; @@ -301,7 +301,7 @@ class SearchWorkOrder { } map['visitDate'] = visitDate; if (assistantEmployees != null) { - map['assistantEmployees'] = assistantEmployees!.map((v) => v?.toJson()).toList(); + map['assistantEmployees'] = assistantEmployees!.map((v) => v.toJson()).toList(); } if (supplier != null) { map['supplier'] = supplier!.toJson(); diff --git a/lib/models/service_request/service_request.dart b/lib/models/service_request/service_request.dart index df4b7193..31f259a2 100644 --- a/lib/models/service_request/service_request.dart +++ b/lib/models/service_request/service_request.dart @@ -194,9 +194,9 @@ class CallCreatedBy { } Map toJson() { - final Map data = new Map(); - data['id'] = this.id; - data['name'] = this.name; + final Map data = {}; + data['id'] = id; + data['name'] = name; return data; } } diff --git a/lib/models/service_request/supplier_engineer_model.dart b/lib/models/service_request/supplier_engineer_model.dart index d46d3f2b..b54161a6 100644 --- a/lib/models/service_request/supplier_engineer_model.dart +++ b/lib/models/service_request/supplier_engineer_model.dart @@ -18,13 +18,13 @@ class SupplierEngineer { } Map toJson() { - final Map data = new Map(); - data['id'] = this.id; - data['supplierId'] = this.supplierId; - data['personName'] = this.personName; - data['personRoleId'] = this.personRoleId; - data['contact'] = this.contact; - data['email'] = this.email; + final Map data = {}; + data['id'] = id; + data['supplierId'] = supplierId; + data['personName'] = personName; + data['personRoleId'] = personRoleId; + data['contact'] = contact; + data['email'] = email; return data; } } diff --git a/lib/models/user.dart b/lib/models/user.dart index 7745f0a2..6a8a7dd1 100644 --- a/lib/models/user.dart +++ b/lib/models/user.dart @@ -75,12 +75,12 @@ class User { return { "username": userName, "password": password, - "fireBaseToken": FirebaseNotificationManger?.token ?? "", + "fireBaseToken": FirebaseNotificationManger.token ?? "", }; } UsersTypes? get type { - switch (userRoles?.first?.value) { + switch (userRoles?.first.value) { case "R-6": return UsersTypes.engineer; case "R-7": // Nurse Role diff --git a/lib/new_views/common_widgets/app_loading_manager.dart b/lib/new_views/common_widgets/app_loading_manager.dart index 7a4f70b2..ef8f7cf4 100644 --- a/lib/new_views/common_widgets/app_loading_manager.dart +++ b/lib/new_views/common_widgets/app_loading_manager.dart @@ -54,7 +54,7 @@ class _AppLoadingManagerState extends State { borderRadius: BorderRadius.circular(10), color: context.isDark ? AppColor.neutral50 : Colors.white, ), - child: AppLazyLoading(), + child: const AppLazyLoading(), ); } else if (widget.isFailedLoading && !widget.isNotPage) { // if failed, return failed widget diff --git a/lib/new_views/common_widgets/app_text_form_field.dart b/lib/new_views/common_widgets/app_text_form_field.dart index da1e7a8a..45158219 100644 --- a/lib/new_views/common_widgets/app_text_form_field.dart +++ b/lib/new_views/common_widgets/app_text_form_field.dart @@ -101,7 +101,7 @@ class _AppTextFormFieldState extends State { controller: widget.controller, textInputAction: widget.textInputType == TextInputType.multiline ? null : widget.textInputAction ?? TextInputAction.next, onEditingComplete: widget.onAction ?? () => FocusScope.of(context).nextFocus(), - style: AppTextStyle.body1?.copyWith(fontWeight: FontWeight.w500), + style: AppTextStyle.body1.copyWith(fontWeight: FontWeight.w500), onTap: widget.onTap, decoration: InputDecoration( alignLabelWithHint: widget.alignLabelWithHint, @@ -120,8 +120,8 @@ class _AppTextFormFieldState extends State { : !widget.enable ? AppColor.neutral40 : AppColor.background(context)), - errorStyle: AppTextStyle.tiny?.copyWith(color: context.isDark ? AppColor.red50 : AppColor.red60), - floatingLabelStyle: AppTextStyle.body1?.copyWith(fontWeight: FontWeight.w500, color: context.isDark ? null : AppColor.neutral20), + errorStyle: AppTextStyle.tiny.copyWith(color: context.isDark ? AppColor.red50 : AppColor.red60), + floatingLabelStyle: AppTextStyle.body1.copyWith(fontWeight: FontWeight.w500, color: context.isDark ? null : AppColor.neutral20), hintText: widget.hintText ?? "", labelText: widget.labelText ?? "", labelStyle: widget.labelStyle, diff --git a/lib/new_views/common_widgets/custom_app_bar.dart b/lib/new_views/common_widgets/custom_app_bar.dart index f6a77a04..9ab589d1 100644 --- a/lib/new_views/common_widgets/custom_app_bar.dart +++ b/lib/new_views/common_widgets/custom_app_bar.dart @@ -25,7 +25,7 @@ class CustomAppBar extends StatelessWidget implements PreferredSizeWidget { }), Text( title ?? "", - style: AppTextStyles.heading3?.copyWith(fontWeight: FontWeight.w600, color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), + style: AppTextStyles.heading3.copyWith(fontWeight: FontWeight.w600, color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), ).expanded, ], ), diff --git a/lib/new_views/common_widgets/default_app_bar.dart b/lib/new_views/common_widgets/default_app_bar.dart index 7f512369..219c5768 100644 --- a/lib/new_views/common_widgets/default_app_bar.dart +++ b/lib/new_views/common_widgets/default_app_bar.dart @@ -25,7 +25,7 @@ class DefaultAppBar extends StatelessWidget implements PreferredSizeWidget { 10.width, Text( title ?? "", - style: AppTextStyles.heading3?.copyWith(fontWeight: FontWeight.w500, color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), + style: AppTextStyles.heading3.copyWith(fontWeight: FontWeight.w500, color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), ).expanded, ], ), diff --git a/lib/new_views/common_widgets/single_item_drop_down_menu.dart b/lib/new_views/common_widgets/single_item_drop_down_menu.dart index 55090049..25f6bf53 100644 --- a/lib/new_views/common_widgets/single_item_drop_down_menu.dart +++ b/lib/new_views/common_widgets/single_item_drop_down_menu.dart @@ -151,14 +151,14 @@ class _SingleItemDropDownMenuState( value: value, child: Text( - value?.name ?? "", // Null-aware operator for value.name + value.name ?? "", // Null-aware operator for value.name style: Theme.of(context).textTheme.bodyLarge, ), ); }).toList(), ).onPress(widget.showAsBottomSheet ? () async { - final _selectedT = await showModalBottomSheet( + final selectedT = await showModalBottomSheet( // Specify return type context: context, isScrollControlled: true, @@ -176,8 +176,8 @@ class _SingleItemDropDownMenuState emp?.name ?? "", // Null-aware operator for emp.name ), ); - if (_selectedT != null) { - widget.onSelect!(_selectedT); // Non-null assertion after null check + if (selectedT != null) { + widget.onSelect!(selectedT); // Non-null assertion after null check } } : null), diff --git a/lib/new_views/common_widgets/tab_button.dart b/lib/new_views/common_widgets/tab_button.dart index 625eabd8..f3f8986d 100644 --- a/lib/new_views/common_widgets/tab_button.dart +++ b/lib/new_views/common_widgets/tab_button.dart @@ -23,7 +23,7 @@ class TabButton extends StatelessWidget { Widget build(BuildContext context) { return InkWell( onTap: onPressed, - child: count != null && count > 0 && isSelected && !loading + child: count > 0 && isSelected && !loading ? CustomBadge( value: count.toString(), child: Container( diff --git a/lib/new_views/pages/land_page/calender_fragments/monthly_fragment.dart b/lib/new_views/pages/land_page/calender_fragments/monthly_fragment.dart index e5edda33..38deeb00 100644 --- a/lib/new_views/pages/land_page/calender_fragments/monthly_fragment.dart +++ b/lib/new_views/pages/land_page/calender_fragments/monthly_fragment.dart @@ -75,8 +75,8 @@ class _MonthlyFragmentState extends State { return CalendarDaysCard( day: day, fill: snapshot.calendarRequests?.requestsDetails?.firstWhere( - (element) => (element.date != null) && (DateTime.tryParse(element.date!)?.difference(dateTime)?.inDays == 0), - orElse: null, + (element) => (element.date != null) && (DateTime.tryParse(element.date!)?.difference(dateTime).inDays == 0), + orElse: null, ) != null, ).toShimmer(isShow: snapshot.isCalendarLoading); diff --git a/lib/new_views/pages/land_page/calender_fragments/weekly_fragment.dart b/lib/new_views/pages/land_page/calender_fragments/weekly_fragment.dart index 51ebc96e..0c6ad5b0 100644 --- a/lib/new_views/pages/land_page/calender_fragments/weekly_fragment.dart +++ b/lib/new_views/pages/land_page/calender_fragments/weekly_fragment.dart @@ -78,7 +78,7 @@ class _WeeklyFragmentState extends State { return CalendarDaysCard( day: day, fill: snapshot.calendarRequests!.requestsDetails?.firstWhere( - (element) => (element.date != null) && (DateTime.tryParse(element.date!)?.day == (dateTime)?.day), + (element) => (element.date != null) && (DateTime.tryParse(element.date!)?.day == (dateTime).day), orElse: null, ) != null, @@ -89,8 +89,8 @@ class _WeeklyFragmentState extends State { return CalendarDaysCard( day: day, fill: snapshot.calendarRequests!.requestsDetails?.firstWhere( - (element) => (element.date != null) && (DateTime.tryParse(element.date!)?.day == (dateTime)?.day), - orElse: null, + (element) => (element.date != null) && (DateTime.tryParse(element.date!)?.day == (dateTime).day), + orElse: null, ) != null, ).toShimmer(isShow: snapshot.isCalendarLoading); diff --git a/lib/new_views/pages/land_page/dashboard_fragments/recent_activites_fragment.dart b/lib/new_views/pages/land_page/dashboard_fragments/recent_activites_fragment.dart index 0c189701..899dbed8 100644 --- a/lib/new_views/pages/land_page/dashboard_fragments/recent_activites_fragment.dart +++ b/lib/new_views/pages/land_page/dashboard_fragments/recent_activites_fragment.dart @@ -76,29 +76,26 @@ import 'package:test_sa/controllers/notification/firebase_notification_manger.da import 'package:test_sa/controllers/providers/api/all_requests_provider.dart'; import 'package:test_sa/controllers/providers/api/notifications_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.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/enums/user_types.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/views/widgets/notifications/notification_item.dart'; class RecentActivitiesFragment extends StatelessWidget { - RecentActivitiesFragment({Key? key}) : super(key: key); + const RecentActivitiesFragment({Key? key}) : super(key: key); //NotificationsProvider _notificationsProvider; @override Widget build(BuildContext context) { //_notificationsProvider ??= Provider.of(context, listen: false); - return Consumer(builder: (context, _notificationsProvider, _) { - UserProvider _userProvider = Provider.of(context); - bool isCurrentUserNotEngineer = (_userProvider.user!.type != UsersTypes.engineer); + return Consumer(builder: (context, notificationsProvider, _) { + UserProvider userProvider = Provider.of(context); + bool isCurrentUserNotEngineer = (userProvider.user!.type != UsersTypes.engineer); return RefreshIndicator( onRefresh: () { Provider.of(context, listen: false).getRequests(); - _notificationsProvider.getSystemNotifications(user: Provider.of(context, listen: false).user!,resetProvider: true); + notificationsProvider.getSystemNotifications(user: Provider.of(context, listen: false).user!,resetProvider: true); return Future.delayed(const Duration(microseconds: 250)); }, child: SingleChildScrollView( @@ -110,7 +107,7 @@ class RecentActivitiesFragment extends StatelessWidget { ListView.builder( shrinkWrap: true, physics: const NeverScrollableScrollPhysics(), - itemCount: _notificationsProvider.notifications.length, + itemCount: notificationsProvider.notifications.length, // separatorBuilder: (context, itemIndex) => const Divider().defaultStyle(context).paddingOnly(top: 16, bottom: 16), itemBuilder: (context, itemIndex) { // todo add priority & progress tag to show chip @@ -123,8 +120,8 @@ class RecentActivitiesFragment extends StatelessWidget { shadows: [boxShadowR14], ), child: NotificationItem( - isLoading: _notificationsProvider.isLoading, - notification: _notificationsProvider.notifications[itemIndex], + isLoading: notificationsProvider.isLoading, + notification: notificationsProvider.notifications[itemIndex], onPressed: (notification) { FirebaseNotificationManger.handleMessage(context, notification.toNotificationJson()); }, diff --git a/lib/new_views/pages/land_page/dashboard_fragments/request_category_fragment.dart b/lib/new_views/pages/land_page/dashboard_fragments/request_category_fragment.dart index 483f98fe..ea25ae5f 100644 --- a/lib/new_views/pages/land_page/dashboard_fragments/request_category_fragment.dart +++ b/lib/new_views/pages/land_page/dashboard_fragments/request_category_fragment.dart @@ -109,7 +109,7 @@ class RequestCategoryFragment extends StatelessWidget { child: const SizedBox().toRequestShimmer(context, allRequestProvider.isFilterRequestLoading), ); })) - : RequestCategoryList(allRequestProvider.filterRequest?.requestsDetails ?? [], allRequestProvider.isFilterRequestLoading, allRequestProvider?.filterRequest?.total?.count ?? 0), + : RequestCategoryList(allRequestProvider.filterRequest?.requestsDetails ?? [], allRequestProvider.isFilterRequestLoading, allRequestProvider.filterRequest?.total?.count ?? 0), ]); }); } diff --git a/lib/new_views/pages/land_page/dashboard_fragments/request_category_list.dart b/lib/new_views/pages/land_page/dashboard_fragments/request_category_list.dart index 5fe446e1..0dddf321 100644 --- a/lib/new_views/pages/land_page/dashboard_fragments/request_category_list.dart +++ b/lib/new_views/pages/land_page/dashboard_fragments/request_category_list.dart @@ -1,6 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; -import 'package:test_sa/controllers/providers/api/all_requests_provider.dart'; import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/models/all_requests_and_count_model.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; @@ -23,10 +21,10 @@ class RequestCategoryList extends StatelessWidget { physics:const NeverScrollableScrollPhysics(), itemBuilder: (context, index) { if (index == list.length) { - return ListTile( + return const ListTile( title: Row( mainAxisAlignment: MainAxisAlignment.center, - children: const [ + children: [ CircularProgressIndicator( color: AppColor.primary10, strokeWidth: 1, diff --git a/lib/new_views/pages/land_page/dashboard_fragments/requests_fragment.dart b/lib/new_views/pages/land_page/dashboard_fragments/requests_fragment.dart index 0aebb021..e24fafeb 100644 --- a/lib/new_views/pages/land_page/dashboard_fragments/requests_fragment.dart +++ b/lib/new_views/pages/land_page/dashboard_fragments/requests_fragment.dart @@ -66,15 +66,15 @@ class RequestsFragment extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center, children: [ - value != null && value > 0 && !isLoading + value > 0 && !isLoading ? CustomBadge( value: value.toString(), child: Container( - child: (icon ?? "").toSvgAsset(height: 26, width: 26, color: iconColor)?.toShimmer(isShow: isLoading), + child: (icon ?? "").toSvgAsset(height: 26, width: 26, color: iconColor).toShimmer(isShow: isLoading), ).toShadowCircleContainer(context, padding: 18), ) : Container( - child: (icon ?? "").toSvgAsset(height: 26, width: 26, color: iconColor)?.toShimmer(isShow: isLoading), + child: (icon ?? "").toSvgAsset(height: 26, width: 26, color: iconColor).toShimmer(isShow: isLoading), ).toShadowCircleContainer(context, padding: 18), 10.height, Text( diff --git a/lib/new_views/pages/land_page/dashboard_page.dart b/lib/new_views/pages/land_page/dashboard_page.dart index 7d160082..7430ef3e 100644 --- a/lib/new_views/pages/land_page/dashboard_page.dart +++ b/lib/new_views/pages/land_page/dashboard_page.dart @@ -88,9 +88,9 @@ class _DashboardPageState extends State { ), ); }).onPress(widget.onDrawerPress), - Spacer(), + const Spacer(), Container( - padding: EdgeInsets.fromLTRB(12, 6, 6, 6), + padding: const EdgeInsets.fromLTRB(12, 6, 6, 6), decoration: BoxDecoration( borderRadius: BorderRadius.circular(8), color: AppColor.background(context), @@ -124,11 +124,11 @@ class _DashboardPageState extends State { return DropdownMenuItem( value: value, child: Text( - value?.name ?? "", + value.name ?? "", style: Theme.of(context).textTheme.bodyLarge, ), ); - })?.toList(), + }).toList(), ), ), 16.width, @@ -168,7 +168,7 @@ class _DashboardPageState extends State { style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20), ), Text( - user?.username ?? "", + user.username ?? "", style: AppTextStyles.heading2.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50, fontWeight: FontWeight.w600), ), 24.height, @@ -190,7 +190,7 @@ class _DashboardPageState extends State { children: [ const RequestsFragment(), ProgressFragment(), - RecentActivitiesFragment(), + const RecentActivitiesFragment(), ], ).expanded, ], diff --git a/lib/new_views/pages/land_page/land_page.dart b/lib/new_views/pages/land_page/land_page.dart index 35611896..161ac389 100644 --- a/lib/new_views/pages/land_page/land_page.dart +++ b/lib/new_views/pages/land_page/land_page.dart @@ -23,7 +23,6 @@ import '../../../views/widgets/dialogs/dialog.dart'; import '../../common_widgets/app_bottom_nav_bar.dart'; import '../../common_widgets/app_drawer.dart'; import 'contact_us_bottom_sheet.dart'; -import 'dashboard_page.dart'; class LandPage extends StatefulWidget { static const String routeName = "/land-page"; @@ -51,7 +50,7 @@ class _LandPageState extends State { if (await Provider.of(context, listen: false).auth.isDeviceSupported()) { SharedPreferences prefs = await SharedPreferences.getInstance(); if (!prefs.containsKey(ASettings.localAuth)) { - (await Provider.of(context, listen: false)).setAuth(false); + (Provider.of(context, listen: false)).setAuth(false); showModalBottomSheet( context: context, useSafeArea: true, diff --git a/lib/new_views/pages/land_page/my_request/all_requests_search_page.dart b/lib/new_views/pages/land_page/my_request/all_requests_search_page.dart index 4011f156..e7b027f2 100644 --- a/lib/new_views/pages/land_page/my_request/all_requests_search_page.dart +++ b/lib/new_views/pages/land_page/my_request/all_requests_search_page.dart @@ -143,11 +143,11 @@ class _AllRequestsSearchPageState extends State { } bool _showResetButton() { - return (search?.requestNumber?.controller?.text?.isNotEmpty ?? false) || - (search?.assetName?.controller?.text?.isNotEmpty ?? false) || - (search?.assetNo?.controller?.text?.isNotEmpty ?? false) || - (search?.manufacture?.controller?.text?.isNotEmpty ?? false) || - (search?.sn?.controller?.text?.isNotEmpty ?? false) || - (search?.model?.controller?.text?.isNotEmpty ?? false); + return (search?.requestNumber?.controller?.text.isNotEmpty ?? false) || + (search?.assetName?.controller?.text.isNotEmpty ?? false) || + (search?.assetNo?.controller?.text.isNotEmpty ?? false) || + (search?.manufacture?.controller?.text.isNotEmpty ?? false) || + (search?.sn?.controller?.text.isNotEmpty ?? false) || + (search?.model?.controller?.text.isNotEmpty ?? false); } } diff --git a/lib/new_views/pages/land_page/requests/asset_item_view.dart b/lib/new_views/pages/land_page/requests/asset_item_view.dart index 070d86b2..4ea6901f 100644 --- a/lib/new_views/pages/land_page/requests/asset_item_view.dart +++ b/lib/new_views/pages/land_page/requests/asset_item_view.dart @@ -49,8 +49,8 @@ class AssetItemView extends StatelessWidget { mainAxisSize: MainAxisSize.min, children: [ context.translation.deviceTransferRequest.heading5(context), - "${context.translation.from} : ${request.siteTransferFrom?.cleanupWhitespace?.capitalizeFirstOfEach}".bodyText(context), - "${context.translation.to} : ${request.siteTransferTo?.cleanupWhitespace?.capitalizeFirstOfEach}".bodyText(context), + "${context.translation.from} : ${request.siteTransferFrom?.cleanupWhitespace.capitalizeFirstOfEach}".bodyText(context), + "${context.translation.to} : ${request.siteTransferTo?.cleanupWhitespace.capitalizeFirstOfEach}".bodyText(context), request.status!.replaceAll("=", ":").bodyText(context), '${context.translation.requestNo}: ${request.requestNo}'.bodyText(context), ], diff --git a/lib/new_views/pages/land_page/requests/gas_refill_item_view.dart b/lib/new_views/pages/land_page/requests/gas_refill_item_view.dart index 36f922db..ea69ebb9 100644 --- a/lib/new_views/pages/land_page/requests/gas_refill_item_view.dart +++ b/lib/new_views/pages/land_page/requests/gas_refill_item_view.dart @@ -43,7 +43,7 @@ class GasRefillItemView extends StatelessWidget { 8.height, context.translation.gasRefillRequest.heading5(context), '${context.translation.gasType}: ${request.gasType}'.bodyText(context), - '${context.translation.site}: ${request.site?.cleanupWhitespace?.capitalizeFirstOfEach}'.bodyText(context), + '${context.translation.site}: ${request.site?.cleanupWhitespace.capitalizeFirstOfEach}'.bodyText(context), '${context.translation.requestNo}: ${request.requestNo}'.bodyText(context), 8.height, Row( diff --git a/lib/new_views/pages/land_page/requests/request_paginated_listview.dart b/lib/new_views/pages/land_page/requests/request_paginated_listview.dart index 239e8cc7..3a4b2db5 100644 --- a/lib/new_views/pages/land_page/requests/request_paginated_listview.dart +++ b/lib/new_views/pages/land_page/requests/request_paginated_listview.dart @@ -1,6 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; -import 'package:test_sa/controllers/providers/api/all_requests_provider.dart'; import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/models/all_requests_and_count_model.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; @@ -25,10 +23,10 @@ class RequestPaginatedList extends StatelessWidget { shrinkWrap: true, itemBuilder: (context, index) { if (index == list.length) { - return ListTile( + return const ListTile( title: Row( mainAxisAlignment: MainAxisAlignment.center, - children: const [ + children: [ CircularProgressIndicator( color: AppColor.primary10, strokeWidth: 1, diff --git a/lib/new_views/pages/land_page/requests/service_request_item_view.dart b/lib/new_views/pages/land_page/requests/service_request_item_view.dart index bac20d28..a5c3eec2 100644 --- a/lib/new_views/pages/land_page/requests/service_request_item_view.dart +++ b/lib/new_views/pages/land_page/requests/service_request_item_view.dart @@ -43,7 +43,7 @@ class ServiceRequestItemView extends StatelessWidget { ), 8.height, context.translation.serviceRequest.heading5(context), - '${context.translation.assetName}: ${request.assetName?.cleanupWhitespace?.capitalizeFirstOfEach}'.bodyText(context), + '${context.translation.assetName}: ${request.assetName?.cleanupWhitespace.capitalizeFirstOfEach}'.bodyText(context), '${context.translation.assetNumber}: ${request.assetNo}'.bodyText(context), '${context.translation.requestType}: ${request.requestType}'.bodyText(context), '${context.translation.requestNo}: ${request.requestNo}'.bodyText(context), diff --git a/lib/new_views/pages/land_page/requests_list_page.dart b/lib/new_views/pages/land_page/requests_list_page.dart index c416c1c9..49d5d87b 100644 --- a/lib/new_views/pages/land_page/requests_list_page.dart +++ b/lib/new_views/pages/land_page/requests_list_page.dart @@ -48,7 +48,7 @@ class _RequestsListPageState extends State { _scrollController = ScrollController(); int pageNo = 1; _scrollController.addListener(() async { - if (_scrollController?.position?.pixels == _scrollController?.position?.maxScrollExtent && !_provider.isRequestCategoryLoading) { + if (_scrollController.position.pixels == _scrollController.position.maxScrollExtent && !_provider.isRequestCategoryLoading) { pageNo = pageNo + 1; callRequestApis(showLoader: false, pageNo: pageNo); } diff --git a/lib/new_views/pages/land_page/widgets/request_item_view_list.dart b/lib/new_views/pages/land_page/widgets/request_item_view_list.dart index b98729ab..d4892723 100644 --- a/lib/new_views/pages/land_page/widgets/request_item_view_list.dart +++ b/lib/new_views/pages/land_page/widgets/request_item_view_list.dart @@ -1,7 +1,5 @@ //request tab page import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; -import 'package:test_sa/controllers/providers/api/all_requests_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'; diff --git a/lib/new_views/pages/land_page/widgets/static_filter_buttons.dart b/lib/new_views/pages/land_page/widgets/static_filter_buttons.dart index b0db4bb3..77b3bcf2 100644 --- a/lib/new_views/pages/land_page/widgets/static_filter_buttons.dart +++ b/lib/new_views/pages/land_page/widgets/static_filter_buttons.dart @@ -22,15 +22,13 @@ class _RequestsTypeFilterState extends State { @override void initState() { - if (widget.initialValues != null) { - _selected.addAll(widget.initialValues); - } - super.initState(); + _selected.addAll(widget.initialValues); + super.initState(); } @override void didUpdateWidget(covariant RequestsTypeFilter oldWidget) { - if ((widget.initialValues?.isEmpty ?? true) || widget.initialValues != oldWidget.initialValues) { + if ((widget.initialValues.isEmpty ?? true) || widget.initialValues != oldWidget.initialValues) { setState(() { _selected = widget.initialValues ?? []; }); diff --git a/lib/new_views/pages/settings_page.dart b/lib/new_views/pages/settings_page.dart index 33921c99..3cdaad4b 100644 --- a/lib/new_views/pages/settings_page.dart +++ b/lib/new_views/pages/settings_page.dart @@ -2,8 +2,6 @@ import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter_advanced_switch/flutter_advanced_switch.dart'; -import 'package:local_auth/local_auth.dart'; -import 'package:local_auth_android/local_auth_android.dart'; import 'package:local_auth_darwin/local_auth_darwin.dart'; import 'package:provider/provider.dart'; @@ -48,8 +46,8 @@ class _SettingsPageState extends State { void checkForLocalAuth(bool buttonState) async { bool authStatus = await _settingProvider!.auth.authenticate( localizedReason: Platform.isAndroid ? "Scan your fingerprint to authenticate" : "Scan with face id to authenticate", - options: AuthenticationOptions(), - authMessages: [IOSAuthMessages(cancelButton: 'cancel', goToSettingsButton: 'settings', goToSettingsDescription: 'Please enable Touch ID.', lockOut: 'Please reenable your Touch ID')]); + options: const AuthenticationOptions(), + authMessages: [const IOSAuthMessages(cancelButton: 'cancel', goToSettingsButton: 'settings', goToSettingsDescription: 'Please enable Touch ID.', lockOut: 'Please reenable your Touch ID')]); if (authStatus) { localAuth = !localAuth; await _settingProvider!.setAuth(localAuth); diff --git a/lib/new_views/pages/splash_page.dart b/lib/new_views/pages/splash_page.dart index b0941c48..8de05715 100644 --- a/lib/new_views/pages/splash_page.dart +++ b/lib/new_views/pages/splash_page.dart @@ -74,7 +74,7 @@ class _SplashPageState extends State { Future checkDualAuthentication() async { return await _settingProvider.auth.authenticate( localizedReason: Platform.isAndroid ? "Scan your fingerprint to authenticate" : "Scan with face id to authenticate", - options: AuthenticationOptions(), + options: const AuthenticationOptions(), ); } diff --git a/lib/service_request_latest/views/components/activities_list_view.dart b/lib/service_request_latest/views/components/activities_list_view.dart index 51865184..0dc0fa43 100644 --- a/lib/service_request_latest/views/components/activities_list_view.dart +++ b/lib/service_request_latest/views/components/activities_list_view.dart @@ -21,14 +21,14 @@ import 'package:test_sa/views/widgets/requests/request_status.dart'; class ActivitiesListView extends StatelessWidget { static const String id = "/activities-list"; - ActivitiesListView({Key? key}) : super(key: key); + const ActivitiesListView({Key? key}) : super(key: key); @override Widget build(BuildContext context) { // UserProvider _userProvider = Provider.of(context); // SettingProvider _settingProvider = Provider.of(context); List workOrders = []; - UserProvider _userProvider = Provider.of(context); + UserProvider userProvider = Provider.of(context); return Scaffold( appBar: DefaultAppBar(title: context.translation.activities), //backgroundColor: const Color(0xfff8f9fb), @@ -64,7 +64,7 @@ class ActivitiesListView extends StatelessWidget { Text(serviceRequestsProvider.currentSelectedRequest!.requestCode!, style: AppTextStyles.heading5.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)), Text( - '${context.translation.assetName}: ${workOrders[index].callRequest!.asset!.modelDefinition!.assetName?.cleanupWhitespace?.capitalizeFirstOfEach}', + '${context.translation.assetName}: ${workOrders[index].callRequest!.asset!.modelDefinition!.assetName?.cleanupWhitespace.capitalizeFirstOfEach}', style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20), ), Text( @@ -94,7 +94,7 @@ class ActivitiesListView extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.end, mainAxisAlignment: MainAxisAlignment.start, children: [ - if (_userProvider.user!.type == UsersTypes.engineer && + if (userProvider.user!.type == UsersTypes.engineer && serviceRequestsProvider.currentSelectedRequest?.statusValue != 5 && serviceRequestsProvider.currentSelectedRequest?.statusValue != 3) "edit".toSvgAsset(height: 48, width: 48).onPress(() { @@ -102,7 +102,7 @@ class ActivitiesListView extends StatelessWidget { MaterialPageRoute(builder: (_) => UpdateServiceReport(request: serviceRequestsProvider.currentSelectedRequest!, workOrder: workOrders[index])), ); }), - if (_userProvider.user!.type == UsersTypes.engineer && + if (userProvider.user!.type == UsersTypes.engineer && serviceRequestsProvider.currentSelectedRequest?.statusValue != 5 && serviceRequestsProvider.currentSelectedRequest?.statusValue != 3) 8.height, @@ -114,7 +114,7 @@ class ActivitiesListView extends StatelessWidget { ).toShadowContainer(context); }, ).expanded, - if (_userProvider.user!.type == UsersTypes.engineer && + if (userProvider.user!.type == UsersTypes.engineer && (serviceRequestsProvider.currentSelectedRequest?.statusValue != 5 && serviceRequestsProvider.currentSelectedRequest?.statusValue != 3)) AppFilledButton( label: context.translation.createNewActivity, diff --git a/lib/service_request_latest/views/components/activity_card_view.dart b/lib/service_request_latest/views/components/activity_card_view.dart index 45336f03..75fc9dba 100644 --- a/lib/service_request_latest/views/components/activity_card_view.dart +++ b/lib/service_request_latest/views/components/activity_card_view.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import 'package:test_sa/controllers/providers/api/all_requests_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_extensions.dart'; @@ -21,11 +20,11 @@ class ActivityCardView extends StatelessWidget { final ServiceRequest serviceRequest; final bool showShadow; - ActivityCardView(this.workOrder, this.serviceRequest, {Key? key, this.showShadow = true}) : super(key: key); + const ActivityCardView(this.workOrder, this.serviceRequest, {Key? key, this.showShadow = true}) : super(key: key); @override Widget build(BuildContext context) { - UserProvider _userProvider = Provider.of(context, listen: false); + UserProvider userProvider = Provider.of(context, listen: false); return Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -41,7 +40,7 @@ class ActivityCardView extends StatelessWidget { 8.height, Text(serviceRequest.requestCode!, style: AppTextStyles.heading5.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)), Text( - '${context.translation.assetName}: ${workOrder.callRequest!.asset!.modelDefinition!.assetName?.cleanupWhitespace?.capitalizeFirstOfEach}', + '${context.translation.assetName}: ${workOrder.callRequest!.asset!.modelDefinition!.assetName?.cleanupWhitespace.capitalizeFirstOfEach}', style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20), ), Text( @@ -71,13 +70,13 @@ class ActivityCardView extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.end, mainAxisAlignment: MainAxisAlignment.start, children: [ - if (_userProvider.user!.type == UsersTypes.engineer && serviceRequest.statusValue != 5 && serviceRequest.statusValue != 3) + if (userProvider.user!.type == UsersTypes.engineer && serviceRequest.statusValue != 5 && serviceRequest.statusValue != 3) "edit_icon".toSvgAsset(height: 21, width: 21).onPress(() { Navigator.of(context).push( MaterialPageRoute(builder: (_) => UpdateServiceReport(request: serviceRequest, workOrder: workOrder)), ); }), - if (_userProvider.user!.type == UsersTypes.engineer && serviceRequest.statusValue != 5 && serviceRequest.statusValue != 3) 8.height, + if (userProvider.user!.type == UsersTypes.engineer && serviceRequest.statusValue != 5 && serviceRequest.statusValue != 3) 8.height, Text(workOrder.visitDate?.toServiceRequestCardFormat ?? "", textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral30 : const Color(0xFF3B3D4A))), ], diff --git a/lib/service_request_latest/views/components/bottom_sheets/activity_type_bottomsheet.dart b/lib/service_request_latest/views/components/bottom_sheets/activity_type_bottomsheet.dart index 72cf5b25..2c72134c 100644 --- a/lib/service_request_latest/views/components/bottom_sheets/activity_type_bottomsheet.dart +++ b/lib/service_request_latest/views/components/bottom_sheets/activity_type_bottomsheet.dart @@ -12,7 +12,7 @@ import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/service_request_latest/views/components/spare_part_request.dart'; class ActivityTypeBottomSheet extends StatelessWidget { - ActivityTypeBottomSheet({Key? key}) : super(key: key); + const ActivityTypeBottomSheet({Key? key}) : super(key: key); @override Widget build(BuildContext context) { @@ -114,13 +114,6 @@ class ActivityTypeBottomSheet extends StatelessWidget { // MaterialPageRoute(builder: (context) => const ScanQrView()), // ); break; - case 2: - //push to specific screen... - // Navigator.push( - // context, - // MaterialPageRoute(builder: (context) => const ScanQrView()), - // ); - break; } // ScanQr } diff --git a/lib/service_request_latest/views/components/bottom_sheets/initial_visit_bottomsheet.dart b/lib/service_request_latest/views/components/bottom_sheets/initial_visit_bottomsheet.dart index a8c90f5b..fffe34e0 100644 --- a/lib/service_request_latest/views/components/bottom_sheets/initial_visit_bottomsheet.dart +++ b/lib/service_request_latest/views/components/bottom_sheets/initial_visit_bottomsheet.dart @@ -56,31 +56,27 @@ class InitialVisitBottomSheet extends StatelessWidget { date: DateTime.tryParse(serviceRequestProvider.currentSelectedRequest?.visitDate ?? ""), formatDateWithTime: true, onDatePicker: (selectedDate) { - if (selectedDate != null) { - showTimePicker( - context: context, - initialTime: TimeOfDay.now(), - ).then((selectedTime) { - // Handle the selected date and time here. - if (selectedTime != null) { - DateTime selectedDateTime = DateTime( - selectedDate.year, - selectedDate.month, - selectedDate.day, - selectedTime.hour, - selectedTime.minute, - ); - if (selectedDateTime != null) { - if (selectedDateTime.isBefore(DateTime.parse(serviceRequestProvider.currentSelectedRequest!.date!))) { - "Visit Date time must be greater then request date".showToast; - return; - } - serviceRequestProvider.currentSelectedRequest?.visitDate = selectedDateTime?.toIso8601String(); - } + showTimePicker( + context: context, + initialTime: TimeOfDay.now(), + ).then((selectedTime) { + // Handle the selected date and time here. + if (selectedTime != null) { + DateTime selectedDateTime = DateTime( + selectedDate.year, + selectedDate.month, + selectedDate.day, + selectedTime.hour, + selectedTime.minute, + ); + if (selectedDateTime.isBefore(DateTime.parse(serviceRequestProvider.currentSelectedRequest!.date!))) { + "Visit Date time must be greater then request date".showToast; + return; } - }); - } - }, + serviceRequestProvider.currentSelectedRequest?.visitDate = selectedDateTime.toIso8601String(); + } + }); + }, ), // ], @@ -93,29 +89,24 @@ class InitialVisitBottomSheet extends StatelessWidget { date: DateTime.tryParse(serviceRequestProvider.currentSelectedRequest?.startDate ?? ""), formatDateWithTime: true, onDatePicker: (selectedDate) { - if (selectedDate != null) { - showTimePicker( - context: context, - initialTime: TimeOfDay.now(), - ).then((selectedTime) { - // Handle the selected date and time here. - if (selectedTime != null) { - DateTime selectedDateTime = DateTime( - selectedDate.year, - selectedDate.month, - selectedDate.day, - selectedTime.hour, - selectedTime.minute, - ); - if (selectedDateTime != null) { - - serviceRequestProvider.currentSelectedRequest?.startDate = selectedDateTime?.toIso8601String(); + showTimePicker( + context: context, + initialTime: TimeOfDay.now(), + ).then((selectedTime) { + // Handle the selected date and time here. + if (selectedTime != null) { + DateTime selectedDateTime = DateTime( + selectedDate.year, + selectedDate.month, + selectedDate.day, + selectedTime.hour, + selectedTime.minute, + ); + serviceRequestProvider.currentSelectedRequest?.startDate = selectedDateTime.toIso8601String(); - } - } - }); - } - }, + } + }); + }, ).expanded, 8.width, ADatePicker( @@ -123,29 +114,25 @@ class InitialVisitBottomSheet extends StatelessWidget { date: DateTime.tryParse(serviceRequestProvider.currentSelectedRequest?.endDate ?? ""), formatDateWithTime: true, onDatePicker: (selectedDate) { - if (selectedDate != null) { - showTimePicker( - context: context, - initialTime: TimeOfDay.now(), - ).then((selectedTime) { - // Handle the selected date and time here. - if (selectedTime != null) { - DateTime selectedDateTime = DateTime( - selectedDate.year, - selectedDate.month, - selectedDate.day, - selectedTime.hour, - selectedTime.minute, - ); - if (selectedDateTime != null) { - serviceRequestProvider.currentSelectedRequest?.endDate = selectedDateTime?.toIso8601String(); - serviceRequestProvider.currentSelectedRequest?.workingHours = - (((DateTime.parse(serviceRequestProvider.currentSelectedRequest!.endDate!).difference(DateTime.parse(serviceRequestProvider.currentSelectedRequest!.startDate!)).inSeconds ?? 0) / 60) / 60).toStringAsFixed(2); - } - } - }); - } - }, + showTimePicker( + context: context, + initialTime: TimeOfDay.now(), + ).then((selectedTime) { + // Handle the selected date and time here. + if (selectedTime != null) { + DateTime selectedDateTime = DateTime( + selectedDate.year, + selectedDate.month, + selectedDate.day, + selectedTime.hour, + selectedTime.minute, + ); + serviceRequestProvider.currentSelectedRequest?.endDate = selectedDateTime.toIso8601String(); + serviceRequestProvider.currentSelectedRequest?.workingHours = + (((DateTime.parse(serviceRequestProvider.currentSelectedRequest!.endDate!).difference(DateTime.parse(serviceRequestProvider.currentSelectedRequest!.startDate!)).inSeconds ?? 0) / 60) / 60).toStringAsFixed(2); + } + }); + }, ).expanded, ], ) @@ -199,7 +186,7 @@ class InitialVisitBottomSheet extends StatelessWidget { // await snapshot.updateRequest(user: userProvider.user, request: serviceRequestProvider.serviceRequest); // Navigator.pop(context, true); Navigator.of(context).push(MaterialPageRoute( - builder: (_) => VerifyArrivalView())); + builder: (_) => const VerifyArrivalView())); }, ), ), diff --git a/lib/service_request_latest/views/components/bottom_sheets/service_request_bottomsheet.dart b/lib/service_request_latest/views/components/bottom_sheets/service_request_bottomsheet.dart index 21ec9609..6ec6c94f 100644 --- a/lib/service_request_latest/views/components/bottom_sheets/service_request_bottomsheet.dart +++ b/lib/service_request_latest/views/components/bottom_sheets/service_request_bottomsheet.dart @@ -228,7 +228,7 @@ import '../../../../new_views/common_widgets/app_text_form_field.dart'; class ServiceRequestBottomSheet { static Future fixRemotelyBottomSheet({required BuildContext context}) { - final GlobalKey _formKey = GlobalKey(); + final GlobalKey formKey = GlobalKey(); return showModalBottomSheet( context: context, useSafeArea: true, @@ -244,7 +244,7 @@ class ServiceRequestBottomSheet { ), padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 8.toScreenHeight), child: Form( - key: _formKey, + key: formKey, child: SingleChildScrollView( child: StatefulBuilder(builder: (context, setState) { return Column( @@ -270,35 +270,31 @@ class ServiceRequestBottomSheet { date: DateTime.tryParse(serviceRequestProvider.currentSelectedRequest?.startDate ?? ""), formatDateWithTime: true, onDatePicker: (selectedDate) { - if (selectedDate != null) { - showTimePicker( - context: context, - initialTime: TimeOfDay.now(), - ).then((selectedTime) { - // Handle the selected date and time here. - if (selectedTime != null) { - DateTime selectedDateTime = DateTime( - selectedDate.year, - selectedDate.month, - selectedDate.day, - selectedTime.hour, - selectedTime.minute, - ); - if (selectedDateTime != null) { - if (selectedDateTime.isBefore(DateTime.parse(serviceRequestProvider.currentSelectedRequest!.date!))) { - "Visit Date time must be greater then request date".showToast; - return; - } - - setState(() { - serviceRequestProvider.currentSelectedRequest?.startDate = selectedDateTime?.toIso8601String(); - }); - print('start date i got is ${serviceRequestProvider.currentSelectedRequest?.startDate}'); - } + showTimePicker( + context: context, + initialTime: TimeOfDay.now(), + ).then((selectedTime) { + // Handle the selected date and time here. + if (selectedTime != null) { + DateTime selectedDateTime = DateTime( + selectedDate.year, + selectedDate.month, + selectedDate.day, + selectedTime.hour, + selectedTime.minute, + ); + if (selectedDateTime.isBefore(DateTime.parse(serviceRequestProvider.currentSelectedRequest!.date!))) { + "Visit Date time must be greater then request date".showToast; + return; } - }); - } - }, + + setState(() { + serviceRequestProvider.currentSelectedRequest?.startDate = selectedDateTime.toIso8601String(); + }); + print('start date i got is ${serviceRequestProvider.currentSelectedRequest?.startDate}'); + } + }); + }, ), // ATimePicker( @@ -432,7 +428,7 @@ class ServiceRequestBottomSheet { } static Future initialVisitBottomSheet({required BuildContext context}) { - final GlobalKey _formKey = GlobalKey(); + final GlobalKey formKey = GlobalKey(); return showModalBottomSheet( context: context, useSafeArea: true, @@ -448,7 +444,7 @@ class ServiceRequestBottomSheet { ), padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 8.toScreenHeight), child: Form( - key: _formKey, + key: formKey, child: SingleChildScrollView( child: Column( children: [ @@ -468,25 +464,21 @@ class ServiceRequestBottomSheet { date: DateTime.tryParse(serviceRequestProvider.currentSelectedRequest?.visitDate ?? ""), formatDateWithTime: true, onDatePicker: (selectedDate) { - if (selectedDate != null) { - showTimePicker( - context: context, - initialTime: TimeOfDay.now(), - ).then((selectedTime) { - // Handle the selected date and time here. - if (selectedTime != null) { - DateTime selectedDateTime = DateTime(selectedDate.year, selectedDate.month, selectedDate.day, selectedTime.hour, selectedTime.minute); - if (selectedDateTime != null) { - if (selectedDateTime.isBefore(DateTime.parse(serviceRequestProvider.currentSelectedRequest!.date!))) { - "Visit Date time must be greater then request date".showToast; - return; - } - serviceRequestProvider.currentSelectedRequest?.visitDate = selectedDateTime?.toIso8601String(); - } + showTimePicker( + context: context, + initialTime: TimeOfDay.now(), + ).then((selectedTime) { + // Handle the selected date and time here. + if (selectedTime != null) { + DateTime selectedDateTime = DateTime(selectedDate.year, selectedDate.month, selectedDate.day, selectedTime.hour, selectedTime.minute); + if (selectedDateTime.isBefore(DateTime.parse(serviceRequestProvider.currentSelectedRequest!.date!))) { + "Visit Date time must be greater then request date".showToast; + return; } - }); - } - }, + serviceRequestProvider.currentSelectedRequest?.visitDate = selectedDateTime.toIso8601String(); + } + }); + }, ), // ], @@ -499,27 +491,23 @@ class ServiceRequestBottomSheet { date: DateTime.tryParse(serviceRequestProvider.currentSelectedRequest?.startDate ?? ""), formatDateWithTime: true, onDatePicker: (selectedDate) { - if (selectedDate != null) { - showTimePicker( - context: context, - initialTime: TimeOfDay.now(), - ).then((selectedTime) { - // Handle the selected date and time here. - if (selectedTime != null) { - DateTime selectedDateTime = DateTime( - selectedDate.year, - selectedDate.month, - selectedDate.day, - selectedTime.hour, - selectedTime.minute, - ); - if (selectedDateTime != null) { - serviceRequestProvider.currentSelectedRequest?.startDate = selectedDateTime?.toIso8601String(); - } - } - }); - } - }, + showTimePicker( + context: context, + initialTime: TimeOfDay.now(), + ).then((selectedTime) { + // Handle the selected date and time here. + if (selectedTime != null) { + DateTime selectedDateTime = DateTime( + selectedDate.year, + selectedDate.month, + selectedDate.day, + selectedTime.hour, + selectedTime.minute, + ); + serviceRequestProvider.currentSelectedRequest?.startDate = selectedDateTime.toIso8601String(); + } + }); + }, ).expanded, 8.width, ADatePicker( @@ -527,28 +515,24 @@ class ServiceRequestBottomSheet { date: DateTime.tryParse(serviceRequestProvider.currentSelectedRequest?.endDate ?? ""), formatDateWithTime: true, onDatePicker: (selectedDate) { - if (selectedDate != null) { - showTimePicker( - context: context, - initialTime: TimeOfDay.now(), - ).then((selectedTime) { - // Handle the selected date and time here. - if (selectedTime != null) { - DateTime selectedDateTime = DateTime(selectedDate.year, selectedDate.month, selectedDate.day, selectedTime.hour, selectedTime.minute); - if (selectedDateTime != null) { - serviceRequestProvider.currentSelectedRequest?.endDate = selectedDateTime?.toIso8601String(); - serviceRequestProvider.currentSelectedRequest?.workingHours = (((DateTime.parse(serviceRequestProvider.currentSelectedRequest!.endDate!) - .difference(DateTime.parse(serviceRequestProvider.currentSelectedRequest!.startDate!)) - .inSeconds ?? - 0) / - 60) / - 60) - .toStringAsFixed(2); - } - } - }); - } - }, + showTimePicker( + context: context, + initialTime: TimeOfDay.now(), + ).then((selectedTime) { + // Handle the selected date and time here. + if (selectedTime != null) { + DateTime selectedDateTime = DateTime(selectedDate.year, selectedDate.month, selectedDate.day, selectedTime.hour, selectedTime.minute); + serviceRequestProvider.currentSelectedRequest?.endDate = selectedDateTime.toIso8601String(); + serviceRequestProvider.currentSelectedRequest?.workingHours = (((DateTime.parse(serviceRequestProvider.currentSelectedRequest!.endDate!) + .difference(DateTime.parse(serviceRequestProvider.currentSelectedRequest!.startDate!)) + .inSeconds ?? + 0) / + 60) / + 60) + .toStringAsFixed(2); + } + }); + }, ).expanded, ], ) @@ -571,11 +555,11 @@ class ServiceRequestBottomSheet { label: context.translation.save, loading: snapshot.isLoading ?? false, onPressed: () async { - _formKey.currentState!.save(); + formKey.currentState!.save(); // await snapshot.updateRequest(user: userProvider.user, request: serviceRequestProvider.serviceRequest); // Navigator.pop(context, true); - Navigator.of(context).push(MaterialPageRoute(builder: (_) => VerifyArrivalView())); + Navigator.of(context).push(MaterialPageRoute(builder: (_) => const VerifyArrivalView())); }, ), ), @@ -589,7 +573,7 @@ class ServiceRequestBottomSheet { } static Future rejectRequestBottomSheet({required BuildContext context}) { - final GlobalKey _formKey = GlobalKey(); + final GlobalKey formKey = GlobalKey(); final userProvider = Provider.of(context, listen: false); return showModalBottomSheet( context: context, @@ -606,7 +590,7 @@ class ServiceRequestBottomSheet { ), padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 8.toScreenHeight), child: Form( - key: _formKey, + key: formKey, child: SingleChildScrollView( child: Column( children: [ @@ -652,7 +636,7 @@ class ServiceRequestBottomSheet { showBorder: true, loading: snapshot.isLoading ?? false, onPressed: () async { - _formKey.currentState!.save(); + formKey.currentState!.save(); // serviceRequestProvider.serviceRequest.device = asset; await snapshot.updateRequest(user: userProvider.user!, request: serviceRequestProvider.currentSelectedRequest!); Navigator.pop(context, true); @@ -724,13 +708,6 @@ class ServiceRequestBottomSheet { // MaterialPageRoute(builder: (context) => const ScanQrView()), // ); break; - case 2: - //push to specific screen... - // Navigator.push( - // context, - // MaterialPageRoute(builder: (context) => const ScanQrView()), - // ); - break; } // ScanQr } @@ -780,7 +757,7 @@ class ServiceRequestBottomSheet { } static Future actionBottomSheet({required BuildContext context, required String title, String? noButtonText, String? yesButtonText, VoidCallback? onNoPressed, VoidCallback? onYesPressed}) { - final GlobalKey _formKey = GlobalKey(); + final GlobalKey formKey = GlobalKey(); final userProvider = Provider.of(context, listen: false); return showModalBottomSheet( context: context, diff --git a/lib/service_request_latest/views/components/history_log_view.dart b/lib/service_request_latest/views/components/history_log_view.dart index 3067cf17..34f72658 100644 --- a/lib/service_request_latest/views/components/history_log_view.dart +++ b/lib/service_request_latest/views/components/history_log_view.dart @@ -5,7 +5,6 @@ import 'package:test_sa/extensions/string_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/default_app_bar.dart'; import 'package:test_sa/views/widgets/requests/request_status.dart'; class HistoryLogView extends StatelessWidget { diff --git a/lib/service_request_latest/views/components/request_detail_view.dart b/lib/service_request_latest/views/components/request_detail_view.dart index 1fb51bcc..7dff9894 100644 --- a/lib/service_request_latest/views/components/request_detail_view.dart +++ b/lib/service_request_latest/views/components/request_detail_view.dart @@ -54,19 +54,19 @@ class _RequestDetailViewState extends State { @override Widget build(BuildContext context) { - UserProvider _userProvider = Provider.of(context, listen: false); + UserProvider userProvider = Provider.of(context, listen: false); return !widget.fromTabView ? Scaffold( appBar: DefaultAppBar(title: context.translation.serviceDetails), body: Padding( padding: EdgeInsets.only(top: 12.toScreenHeight), child: Consumer(builder: (context, serviceRequestsProvider, child) { - return requestDetailCard(serviceRequestsProvider: serviceRequestsProvider, userProvider: _userProvider); + return requestDetailCard(serviceRequestsProvider: serviceRequestsProvider, userProvider: userProvider); }), ), ) : Consumer(builder: (context, serviceRequestsProvider, child) { - return requestDetailCard(serviceRequestsProvider: serviceRequestsProvider, userProvider: _userProvider); + return requestDetailCard(serviceRequestsProvider: serviceRequestsProvider, userProvider: userProvider); }); } @@ -247,7 +247,7 @@ class _RequestDetailViewState extends State { style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), ), 8.height, - '${context.translation.assetName}: ${serviceRequest.deviceEnName?.cleanupWhitespace?.capitalizeFirstOfEach}'.bodyText(context), + '${context.translation.assetName}: ${serviceRequest.deviceEnName?.cleanupWhitespace.capitalizeFirstOfEach}'.bodyText(context), // 8.height, Text( '${context.translation.assetNumber}: ${serviceRequest.device?.assetNumber}', @@ -259,31 +259,31 @@ class _RequestDetailViewState extends State { style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20), ), Text( - '${context.translation.manufacture}: ${serviceRequest.device!.modelDefinition?.manufacturerName?.cleanupWhitespace?.capitalizeFirstOfEach}', + '${context.translation.manufacture}: ${serviceRequest.device!.modelDefinition?.manufacturerName?.cleanupWhitespace.capitalizeFirstOfEach}', style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20), ), Text( - '${context.translation.model}: ${serviceRequest.device!.modelDefinition?.modelName?.cleanupWhitespace?.capitalizeFirstOfEach}', + '${context.translation.model}: ${serviceRequest.device!.modelDefinition?.modelName?.cleanupWhitespace.capitalizeFirstOfEach}', style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20), ), Text( - '${context.translation.site}: ${serviceRequest.device!.site?.custName?.cleanupWhitespace?.capitalizeFirstOfEach}', + '${context.translation.site}: ${serviceRequest.device!.site?.custName?.cleanupWhitespace.capitalizeFirstOfEach}', style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20), ), Text( - '${context.translation.building}: ${serviceRequest.device!.building?.name?.cleanupWhitespace?.capitalizeFirstOfEach}', + '${context.translation.building}: ${serviceRequest.device!.building?.name?.cleanupWhitespace.capitalizeFirstOfEach}', style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20), ), Text( - '${context.translation.floor}: ${serviceRequest.device!.floor?.name?.cleanupWhitespace?.capitalizeFirstOfEach ?? ""}', + '${context.translation.floor}: ${serviceRequest.device!.floor?.name?.cleanupWhitespace.capitalizeFirstOfEach ?? ""}', style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20), ), Text( - '${context.translation.department}: ${serviceRequest.device!.department?.departmentName?.cleanupWhitespace?.capitalizeFirstOfEach}', + '${context.translation.department}: ${serviceRequest.device!.department?.departmentName?.cleanupWhitespace.capitalizeFirstOfEach}', style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20), ), Text( - '${context.translation.room}: ${(serviceRequest.device!.room?.name ?? "").cleanupWhitespace?.capitalizeFirstOfEach}', + '${context.translation.room}: ${(serviceRequest.device!.room?.name ?? "").cleanupWhitespace.capitalizeFirstOfEach}', style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20), ), ], diff --git a/lib/service_request_latest/views/components/scan_qr_view.dart b/lib/service_request_latest/views/components/scan_qr_view.dart index 08345e42..b25bf2a6 100644 --- a/lib/service_request_latest/views/components/scan_qr_view.dart +++ b/lib/service_request_latest/views/components/scan_qr_view.dart @@ -60,7 +60,7 @@ class _ScanQrViewState extends State { overlay: QrScannerOverlayShape(borderColor: Colors.red, borderRadius: 10, borderLength: 30, borderWidth: 10, cutOutSize: 280), ), Padding( - padding: EdgeInsets.all(12.0), + padding: const EdgeInsets.all(12.0), child: SizedBox( height: 100.toScreenHeight, child: DefaultAppBar(title: context.translation.scanQr)), diff --git a/lib/service_request_latest/views/components/spare_part_request.dart b/lib/service_request_latest/views/components/spare_part_request.dart index 3f9dfffa..9a670118 100644 --- a/lib/service_request_latest/views/components/spare_part_request.dart +++ b/lib/service_request_latest/views/components/spare_part_request.dart @@ -10,7 +10,6 @@ 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/device/asset.dart'; import 'package:test_sa/models/service_request/service_report.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; @@ -110,7 +109,7 @@ class _SparePartRequestState extends State with TickerProvider } _serviceReport.assetType = _assetTypeProvider.statuses?.firstWhere( (element) => element.value == _serviceReport.callRequest?.assetType, - orElse: null, + orElse: null, ); return Scaffold( @@ -157,7 +156,7 @@ class _SparePartRequestState extends State with TickerProvider contentPadding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 20.toScreenHeight), showWithoutDecoration: true, backgroundColor: context.isDark ? AppColor.neutral20 : AppColor.neutral90, - enable: serviceRequestProvider.initialSelectedSparePart != null && serviceRequestProvider.initialSelectedSparePart.sparePart?.id != null, + enable: serviceRequestProvider.initialSelectedSparePart.sparePart?.id != null, validator: (value) => value == null || value.isEmpty ? context.translation.requiredField : Validator.isNumeric(value) @@ -175,7 +174,7 @@ class _SparePartRequestState extends State with TickerProvider contentPadding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 20.toScreenHeight), showWithoutDecoration: true, backgroundColor: context.isDark ? AppColor.neutral20 : AppColor.neutral90, - enable: serviceRequestProvider.initialSelectedSparePart != null && serviceRequestProvider.initialSelectedSparePart.sparePart?.id != null, + enable: serviceRequestProvider.initialSelectedSparePart.sparePart?.id != null, validator: (value) => value == null || value.isEmpty ? context.translation.requiredField : Validator.isNumeric(value) diff --git a/lib/service_request_latest/views/components/verify_arrival_view.dart b/lib/service_request_latest/views/components/verify_arrival_view.dart index 68df42e2..5eae6d76 100644 --- a/lib/service_request_latest/views/components/verify_arrival_view.dart +++ b/lib/service_request_latest/views/components/verify_arrival_view.dart @@ -13,7 +13,7 @@ import 'package:test_sa/service_request_latest/views/components/scan_qr_view.dar import 'activities_list_view.dart'; class VerifyArrivalView extends StatelessWidget { - VerifyArrivalView({Key? key}) : super(key: key); + const VerifyArrivalView({Key? key}) : super(key: key); @override Widget build(BuildContext context) { @@ -83,7 +83,7 @@ class VerifyArrivalView extends StatelessWidget { //push to specific screen... Navigator.push( context, - MaterialPageRoute(builder: (context) => ActivitiesListView()), + MaterialPageRoute(builder: (context) => const ActivitiesListView()), ); break; case 2: @@ -93,13 +93,6 @@ class VerifyArrivalView extends StatelessWidget { // MaterialPageRoute(builder: (context) => const ScanQrView()), // ); break; - case 2: - //push to specific screen... - // Navigator.push( - // context, - // MaterialPageRoute(builder: (context) => const ScanQrView()), - // ); - break; } // ScanQr } diff --git a/lib/service_request_latest/views/components/verify_otp_view.dart b/lib/service_request_latest/views/components/verify_otp_view.dart index 9e0e6981..85688fac 100644 --- a/lib/service_request_latest/views/components/verify_otp_view.dart +++ b/lib/service_request_latest/views/components/verify_otp_view.dart @@ -4,10 +4,8 @@ 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/timer_model.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/common_widgets/default_app_bar.dart'; -import 'package:test_sa/views/widgets/timer/app_timer.dart'; class VerifyOtpView extends StatelessWidget { const VerifyOtpView({Key? key}) : super(key: key); diff --git a/lib/views/pages/device_transfer/asset_filter_screen.dart b/lib/views/pages/device_transfer/asset_filter_screen.dart index 29773bfd..29b6fcc9 100644 --- a/lib/views/pages/device_transfer/asset_filter_screen.dart +++ b/lib/views/pages/device_transfer/asset_filter_screen.dart @@ -44,14 +44,14 @@ class _AssetFilterScreenState extends State { WidgetsFlutterBinding.ensureInitialized().addPostFrameCallback((timeStamp) async { loading = true; setState(() {}); - startDate = filter!.supplyDateFrom; - endDate = filter!.supplyDateTo; + startDate = filter.supplyDateFrom; + endDate = filter.supplyDateTo; final departmentProvider = Provider.of(context, listen: false); final siteProvider = Provider.of(context, listen: false); - if (departmentProvider?.items?.isEmpty ?? true) await departmentProvider.getDate(); - if (siteProvider?.items?.isEmpty ?? true) await siteProvider.getDate(); - _department = departmentProvider.items?.firstWhere((element) => element.name == filter?.department, orElse: null); - _site = siteProvider.items?.firstWhere((element) => element.name == filter?.site, orElse: null); + if (departmentProvider.items.isEmpty ?? true) await departmentProvider.getDate(); + if (siteProvider.items.isEmpty ?? true) await siteProvider.getDate(); + _department = departmentProvider.items.firstWhere((element) => element.name == filter.department, orElse: null); + _site = siteProvider.items.firstWhere((element) => element.name == filter.site, orElse: null); loading = false; setState(() {}); }); @@ -133,7 +133,7 @@ class _AssetFilterScreenState extends State { date: DateTime.tryParse(startDate ?? ""), onDatePicker: (date) { setState(() { - startDate = date?.toIso8601String(); + startDate = date.toIso8601String(); }); }, ).expanded, @@ -144,7 +144,7 @@ class _AssetFilterScreenState extends State { date: DateTime.tryParse(endDate ?? ""), onDatePicker: (date) { setState(() { - endDate = date?.toIso8601String(); + endDate = date.toIso8601String(); }); }, ).expanded, diff --git a/lib/views/pages/device_transfer/asset_search_screen.dart b/lib/views/pages/device_transfer/asset_search_screen.dart index 56de844c..117af7d7 100644 --- a/lib/views/pages/device_transfer/asset_search_screen.dart +++ b/lib/views/pages/device_transfer/asset_search_screen.dart @@ -43,15 +43,15 @@ class _AssetSearchScreenState extends State { @override void dispose() { - _assetNameController?.dispose(); - _assetNumberController?.dispose(); - _snController?.dispose(); - _modelController?.dispose(); - _supplierController?.dispose(); - _siteController?.dispose(); - _siteController?.dispose(); - _manufactureController?.dispose(); - _mdController?.dispose(); + _assetNameController.dispose(); + _assetNumberController.dispose(); + _snController.dispose(); + _modelController.dispose(); + _supplierController.dispose(); + _siteController.dispose(); + _siteController.dispose(); + _manufactureController.dispose(); + _mdController.dispose(); super.dispose(); } @@ -237,13 +237,13 @@ class _AssetSearchScreenState extends State { } bool _showResetButton() { - return (_assetNameController?.text?.isNotEmpty ?? false) || - (_assetNumberController?.text?.isNotEmpty ?? false) || - (_snController?.text?.isNotEmpty ?? false) || - (_modelController?.text?.isNotEmpty ?? false) || - (_supplierController?.text?.isNotEmpty ?? false) || - (_siteController?.text?.isNotEmpty ?? false) || - (_manufactureController?.text?.isNotEmpty ?? false) || - (_mdController?.text?.isNotEmpty ?? false); + return (_assetNameController.text.isNotEmpty ?? false) || + (_assetNumberController.text.isNotEmpty ?? false) || + (_snController.text.isNotEmpty ?? false) || + (_modelController.text.isNotEmpty ?? false) || + (_supplierController.text.isNotEmpty ?? false) || + (_siteController.text.isNotEmpty ?? false) || + (_manufactureController.text.isNotEmpty ?? false) || + (_mdController.text.isNotEmpty ?? false); } } diff --git a/lib/views/pages/device_transfer/device_transfer_details.dart b/lib/views/pages/device_transfer/device_transfer_details.dart index 50db3178..6e1e6481 100644 --- a/lib/views/pages/device_transfer/device_transfer_details.dart +++ b/lib/views/pages/device_transfer/device_transfer_details.dart @@ -29,7 +29,7 @@ class DeviceTransferDetails extends StatefulWidget { class _DeviceTransferDetailsState extends State { UserProvider? _userProvider; AssetTransfer? _model; - bool _isLoading = false; + final bool _isLoading = false; final GlobalKey _formKey = GlobalKey(); final GlobalKey _scaffoldKey = GlobalKey(); @@ -73,7 +73,7 @@ class _DeviceTransferDetailsState extends State { Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - _buildTextWidget('${context.translation.assetName} : ${_model?.assetName?.cleanupWhitespace?.capitalizeFirstOfEach ?? ""}'), + _buildTextWidget('${context.translation.assetName} : ${_model?.assetName?.cleanupWhitespace.capitalizeFirstOfEach ?? ""}'), _buildTextWidget('${context.translation.assetNumber} : ${_model?.assetNumber ?? ""}'), _buildTextWidget('${context.translation.model} : ${_model?.modelName ?? ""}'), _buildTextWidget('${context.translation.sn} : ${_model?.assetSerialNo ?? ""}'), @@ -122,10 +122,10 @@ class _DeviceTransferDetailsState extends State { // sender card _buildCard( isSender: true, - site: _model?.senderSiteName?.cleanupWhitespace?.capitalizeFirstOfEach ?? "", + site: _model?.senderSiteName?.cleanupWhitespace.capitalizeFirstOfEach ?? "", /// TBD - unit: _model?.senderDepartmentName?.cleanupWhitespace?.capitalizeFirstOfEach ?? "", + unit: _model?.senderDepartmentName?.cleanupWhitespace.capitalizeFirstOfEach ?? "", comment: _model?.senderComment ?? "", /// TBD @@ -142,10 +142,10 @@ class _DeviceTransferDetailsState extends State { // receiver card _buildCard( isSender: false, - site: _model?.destSiteName?.cleanupWhitespace?.capitalizeFirstOfEach ?? "", + site: _model?.destSiteName?.cleanupWhitespace.capitalizeFirstOfEach ?? "", /// TBD - unit: _model?.destDepartmentName?.cleanupWhitespace?.capitalizeFirstOfEach ?? "", + unit: _model?.destDepartmentName?.cleanupWhitespace.capitalizeFirstOfEach ?? "", comment: _model?.receiverComment ?? "", /// TBD @@ -214,7 +214,7 @@ class _DeviceTransferDetailsState extends State { ), _buildTextWidget('${context.translation.site} : $site'), _buildTextWidget('${context.translation.department} : $unit'), - if (comment != null && comment.isNotEmpty) ...[ + if (comment.isNotEmpty) ...[ 8.height, const Divider().defaultStyle(context), 8.height, diff --git a/lib/views/pages/device_transfer/request_device_transfer.dart b/lib/views/pages/device_transfer/request_device_transfer.dart index fed0c557..ea7ccb03 100644 --- a/lib/views/pages/device_transfer/request_device_transfer.dart +++ b/lib/views/pages/device_transfer/request_device_transfer.dart @@ -72,7 +72,7 @@ class _RequestDeviceTransferState extends State { @override void dispose() { _requestedQuantityController.dispose(); - _deviceTransferProvider!.reset(); + _deviceTransferProvider.reset(); _receiverNameController.dispose(); _commentsController.dispose(); super.dispose(); @@ -111,7 +111,7 @@ class _RequestDeviceTransferState extends State { SingleItemDropDownMenu( context: context, title: context.translation.destinationSite, - initialValue: _assetDestination?.site, + initialValue: _assetDestination.site, onSelect: (value) { _assetDestination.site = value; _assetDestination.building = null; @@ -127,13 +127,13 @@ class _RequestDeviceTransferState extends State { SingleItemDropDownMenu( context: context, title: context.translation.building, - initialValue: _assetDestination?.building, - enabled: _assetDestination?.site?.buildings?.isNotEmpty ?? false, - staticData: _assetDestination?.site?.buildings ?? [], + initialValue: _assetDestination.building, + enabled: _assetDestination.site?.buildings?.isNotEmpty ?? false, + staticData: _assetDestination.site?.buildings ?? [], onSelect: (value) { - _assetDestination?.building = value; - _assetDestination?.floor = null; - _assetDestination?.department = null; + _assetDestination.building = value; + _assetDestination.floor = null; + _assetDestination.department = null; setState(() {}); }, ), @@ -141,12 +141,12 @@ class _RequestDeviceTransferState extends State { SingleItemDropDownMenu( context: context, title: context.translation.floor, - initialValue: _assetDestination?.floor, - enabled: _assetDestination?.building?.floors?.isNotEmpty ?? false, - staticData: _assetDestination?.building?.floors ?? [], + initialValue: _assetDestination.floor, + enabled: _assetDestination.building?.floors?.isNotEmpty ?? false, + staticData: _assetDestination.building?.floors ?? [], onSelect: (value) { - _assetDestination?.floor = value; - _assetDestination?.department = null; + _assetDestination.floor = value; + _assetDestination.department = null; setState(() {}); }, ), @@ -154,12 +154,12 @@ class _RequestDeviceTransferState extends State { SingleItemDropDownMenu( context: context, title: context.translation.department, - initialValue: _assetDestination?.department, - enabled: _assetDestination?.floor?.departments?.isNotEmpty ?? false, - staticData: _assetDestination?.floor?.departments ?? [], + initialValue: _assetDestination.department, + enabled: _assetDestination.floor?.departments?.isNotEmpty ?? false, + staticData: _assetDestination.floor?.departments ?? [], onSelect: (value) { - _assetDestination?.department = value; - _assetDestination?.room = null; + _assetDestination.department = value; + _assetDestination.room = null; setState(() {}); }, ), @@ -167,11 +167,11 @@ class _RequestDeviceTransferState extends State { SingleItemDropDownMenu( context: context, title: context.translation.room, - initialValue: _assetDestination?.room, - enabled: _assetDestination?.department?.rooms?.isNotEmpty ?? false, - staticData: _assetDestination?.department?.rooms ?? [], + initialValue: _assetDestination.room, + enabled: _assetDestination.department?.rooms?.isNotEmpty ?? false, + staticData: _assetDestination.department?.rooms ?? [], onSelect: (value) { - _assetDestination?.room = value; + _assetDestination.room = value; setState(() {}); }, ), diff --git a/lib/views/pages/device_transfer/search_asset_page.dart b/lib/views/pages/device_transfer/search_asset_page.dart index cdb9a769..49d47b32 100644 --- a/lib/views/pages/device_transfer/search_asset_page.dart +++ b/lib/views/pages/device_transfer/search_asset_page.dart @@ -32,7 +32,7 @@ class _SearchAssetPageState extends State { AssetSearch? search; late TextEditingController _searchController; late AssetProvider _deviceProvider; - List _searchableList = []; + final List _searchableList = []; final GlobalKey _formKey = GlobalKey(); bool _isFirst = true; @@ -138,7 +138,7 @@ class _SearchAssetPageState extends State { child: ListView.separated( itemCount: _searchableList.length, separatorBuilder: (listContext, itemIndex) => 8.height, - padding: EdgeInsets.all(16), + padding: const EdgeInsets.all(16), itemBuilder: (listContext, itemIndex) { return AssetItemListView( device: _searchableList[itemIndex], diff --git a/lib/views/pages/device_transfer/update_device_transfer.dart b/lib/views/pages/device_transfer/update_device_transfer.dart index 7f7f6141..8a3ffcf9 100644 --- a/lib/views/pages/device_transfer/update_device_transfer.dart +++ b/lib/views/pages/device_transfer/update_device_transfer.dart @@ -41,7 +41,7 @@ class UpdateDeviceTransfer extends StatefulWidget { } class _UpdateDeviceTransferState extends State { - bool _isLoading = false; + final bool _isLoading = false; bool _validate = false; late UserProvider _userProvider; late SettingProvider _settingProvider; @@ -75,11 +75,11 @@ class _UpdateDeviceTransferState extends State { ); } - if (_formModel?.tbsTimer?.startAt == null) { + if (_formModel.tbsTimer?.startAt == null) { await Fluttertoast.showToast(msg: "Working Hours Required"); return false; } - if (_formModel?.tbsTimer?.endAt == null || isTimerRunning) { + if (_formModel.tbsTimer?.endAt == null || isTimerRunning) { await Fluttertoast.showToast(msg: "Please Stop The Timer"); return false; } @@ -148,8 +148,8 @@ class _UpdateDeviceTransferState extends State { : (widget.model.receiverVisitTimers?.fold(0.0, (sum, item) => (sum ?? 0) + DateTime.parse(item.endDateTime!).difference(DateTime.parse(item.startDateTime!)).inSeconds) ?? 0); bool isTimerEnable = widget.isSender - ? (!(_formModel.senderMachineStatusName?.toLowerCase().contains("close") ?? false) || !(_formModel.senderMachineStatusName?.toLowerCase()?.contains("complete") ?? false)) - : (!(_formModel.receiverMachineStatusName?.toLowerCase().contains("close") ?? false) || !(_formModel.receiverMachineStatusName?.toLowerCase()?.contains("complete") ?? false)); + ? (!(_formModel.senderMachineStatusName?.toLowerCase().contains("close") ?? false) || !(_formModel.senderMachineStatusName?.toLowerCase().contains("complete") ?? false)) + : (!(_formModel.receiverMachineStatusName?.toLowerCase().contains("close") ?? false) || !(_formModel.receiverMachineStatusName?.toLowerCase().contains("complete") ?? false)); return Scaffold( appBar: DefaultAppBar(title: context.translation.updateRequest), @@ -232,7 +232,7 @@ class _UpdateDeviceTransferState extends State { context: context, title: widget.isSender ? "Status Sender" : "Status Receiver", //,context.translation.reportStatus, initialValue: - snapshot.items.firstWhere((element) => element.name == (widget.isSender ? _formModel.senderMachineStatusName : _formModel.receiverMachineStatusName), orElse: null), + snapshot.items.firstWhere((element) => element.name == (widget.isSender ? _formModel.senderMachineStatusName : _formModel.receiverMachineStatusName), orElse: null), onSelect: (value) { if (value?.value == 4) { "Status cannot be change to ${value?.name}.".addTranslation.showToast; @@ -265,7 +265,7 @@ class _UpdateDeviceTransferState extends State { 8.height, ESignature( title: "Signature", - oldSignature: widget.isSender ? widget.model?.senderEngSignature : widget.model?.receiverEngSignature, + oldSignature: widget.isSender ? widget.model.senderEngSignature : widget.model.receiverEngSignature, newSignature: _signature, onSaved: (signature) { _signature = signature; @@ -300,7 +300,7 @@ class _UpdateDeviceTransferState extends State { context.translation.transferDetails.heading5(context), 8.height, '${context.translation.assetName}: ${_formModel.assetName?.cleanupWhitespace.capitalizeFirstOfEach}'.bodyText(context), - '${context.translation.requesterName}: ${_formModel.receiverEndUserName?.cleanupWhitespace?.capitalizeFirstOfEach ?? ""}'.bodyText(context), + '${context.translation.requesterName}: ${_formModel.receiverEndUserName?.cleanupWhitespace.capitalizeFirstOfEach ?? ""}'.bodyText(context), ], ).toShadowContainer(context); } diff --git a/lib/views/pages/sub_workorder/create_sub_workorder_page.dart b/lib/views/pages/sub_workorder/create_sub_workorder_page.dart index 33f82401..d03ebda0 100644 --- a/lib/views/pages/sub_workorder/create_sub_workorder_page.dart +++ b/lib/views/pages/sub_workorder/create_sub_workorder_page.dart @@ -81,8 +81,8 @@ class _CreateSubWorkOrderPageState extends State { @override void initState() { _subWorkOrders = SearchWorkOrder( - assignedEmployee: widget?.workOrder?.callRequest?.assignedEmployee, - callRequest: CallRequest(id: widget?.workOrder?.callRequest?.id), + assignedEmployee: widget.workOrder?.callRequest?.assignedEmployee, + callRequest: CallRequest(id: widget.workOrder?.callRequest?.id), currentSituation: null, supplier: null, parentWOId: widget.workOrder?.id, @@ -106,7 +106,7 @@ class _CreateSubWorkOrderPageState extends State { Provider.of(context, listen: false).reset(); assetTypesProvider = Provider.of(context, listen: false); _callRequestForWorkOrder = await serviceRequestProvider.getCallRequestForWorkOrder(callId: widget.workOrder!.callRequest!.id!.toString()); - if (_subWorkOrders?.parentWOId != null) { + if (_subWorkOrders.parentWOId != null) { ServiceReport? subWoDetails = await serviceRequestProvider.getSubWorkOrderDetails(parentId: _subWorkOrders.parentWOId.toString()); if (subWoDetails != null) { _subWorkOrders.copyDetails(subWoDetails); @@ -119,16 +119,16 @@ class _CreateSubWorkOrderPageState extends State { } } await assetTypesProvider.getTypes(); - _subWorkOrders?.assetType = assetTypesProvider.statuses?.firstWhere( + _subWorkOrders.assetType = assetTypesProvider.statuses?.firstWhere( (element) => element.value == _callRequestForWorkOrder?.assetType, - orElse: null, + orElse: null, ); if (checkVendorFieldsVisibility(_subWorkOrders.calllastSituation)) { if (_subWorkOrders.suppEngineerWorkOrders?.isNotEmpty ?? false) { engineer = _subWorkOrders.suppEngineerWorkOrders?.last; engineer?.id = engineer?.supplierContactId; } - _subWorkOrders.supplier ??= SupplierDetails(id: _subWorkOrders?.supplier?.id); + _subWorkOrders.supplier ??= SupplierDetails(id: _subWorkOrders.supplier?.id); } _spareParts = await _partsProvider.getPartsList(assetId: widget.workOrder?.callRequest?.asset?.id); setState(() { @@ -140,8 +140,8 @@ class _CreateSubWorkOrderPageState extends State { @override void dispose() { - _workPreformedController?.dispose(); - _partQtyController?.dispose(); + _workPreformedController.dispose(); + _partQtyController.dispose(); super.dispose(); } @@ -209,7 +209,7 @@ class _CreateSubWorkOrderPageState extends State { } setState(() { - _subWorkOrders.visitDate = selectedDateTime?.toIso8601String(); + _subWorkOrders.visitDate = selectedDateTime.toIso8601String(); }); } }); @@ -219,12 +219,12 @@ class _CreateSubWorkOrderPageState extends State { AppTimer( label: context.translation.workingHours, timer: _subWorkOrders.timer, - enabled: _subWorkOrders?.timer?.endAt == null, + enabled: _subWorkOrders.timer?.endAt == null, onChange: (timer) async { _subWorkOrders.timer = timer; - if (timer?.startAt != null && timer?.endAt != null) { - if (timer?.durationInSecond != 0) { - _subWorkOrders.workingHours = num.tryParse((((timer?.durationInSecond ?? 0) / 60) / 60)?.toStringAsFixed(2) ?? "0"); + if (timer.startAt != null && timer.endAt != null) { + if (timer.durationInSecond != 0) { + _subWorkOrders.workingHours = num.tryParse((((timer.durationInSecond ?? 0) / 60) / 60).toStringAsFixed(2) ?? "0"); } else { timer.durationInSecond = (timer.endAt!.difference(timer.startAt!)).inSeconds; String workingHours = (((timer.durationInSecond ?? 0) / 60) / 60).toStringAsFixed(2); @@ -242,14 +242,14 @@ class _CreateSubWorkOrderPageState extends State { onRefresh: () async { assetTypesProvider.reset(); await assetTypesProvider.getTypes(); - _subWorkOrders?.assetType = assetTypesProvider.statuses?.firstWhere( + _subWorkOrders.assetType = assetTypesProvider.statuses?.firstWhere( (element) => element.value == _serviceReport.callRequest?.assetType, - orElse: null, + orElse: null, ); }, child: AppTextFormField( labelText: context.translation.assetType, - initialValue: _subWorkOrders?.assetType?.name, + initialValue: _subWorkOrders.assetType?.name, textAlign: TextAlign.center, enable: false, style: Theme.of(context).textTheme.titleMedium, @@ -285,7 +285,7 @@ class _CreateSubWorkOrderPageState extends State { onSelect: (status) { _serviceReport.calllastSituation = status; if (checkVendorFieldsVisibility(status)) { - _subWorkOrders.supplier ??= SupplierDetails(id: _subWorkOrders?.supplier?.id); + _subWorkOrders.supplier ??= SupplierDetails(id: _subWorkOrders.supplier?.id); engineer = null; } else { _subWorkOrders.supplier = initialSupplier; @@ -330,8 +330,8 @@ class _CreateSubWorkOrderPageState extends State { SingleItemDropDownMenu( context: context, title: context.translation.supplierEngineer, - enabled: _subWorkOrders?.supplier?.suppPersons?.isNotEmpty ?? false, - staticData: _subWorkOrders?.supplier?.suppPersons, + enabled: _subWorkOrders.supplier?.suppPersons?.isNotEmpty ?? false, + staticData: _subWorkOrders.supplier?.suppPersons, showAsBottomSheet: true, initialValue: engineer == null ? null : SuppPersons.fromJson(engineer!.toJson()), onSelect: (suppPerson) { @@ -373,13 +373,11 @@ class _CreateSubWorkOrderPageState extends State { backgroundColor: Colors.transparent, builder: (context) => AddSupplierEngineerBottomSheet(_subWorkOrders.supplier!.id!.toInt()), )) as SuppEngineerWorkOrders; - if (suppEngineer != null) { - _subWorkOrders?.supplier?.suppPersons ??= []; - _subWorkOrders?.supplier?.suppPersons?.add(SuppPersons.fromJson(suppEngineer.toJson())); - engineer = suppEngineer; - setState(() {}); - } - }), + _subWorkOrders.supplier?.suppPersons ??= []; + _subWorkOrders.supplier?.suppPersons?.add(SuppPersons.fromJson(suppEngineer.toJson())); + engineer = suppEngineer; + setState(() {}); + }), ], ), 8.height, @@ -388,13 +386,13 @@ class _CreateSubWorkOrderPageState extends State { initialValue: _subWorkOrders.faultDescription, onSelect: (status) { _subWorkOrders.faultDescription = status; - _workPreformedController?.text = _subWorkOrders.faultDescription?.workPerformed ?? ""; + _workPreformedController.text = _subWorkOrders.faultDescription?.workPerformed ?? ""; }, ), 8.height, AppTextFormField( labelText: context.translation.solution, - initialValue: _subWorkOrders?.faultDescription?.workPerformed, + initialValue: _subWorkOrders.faultDescription?.workPerformed, textAlign: TextAlign.center, enable: false, controller: _workPreformedController, @@ -403,7 +401,7 @@ class _CreateSubWorkOrderPageState extends State { SingleItemDropDownMenu( context: context, title: context.translation.loanAvailability, - initialValue: _subWorkOrders?.loanAvailablity, + initialValue: _subWorkOrders.loanAvailablity, onSelect: (status) { if (status != null) { setState(() { @@ -416,18 +414,16 @@ class _CreateSubWorkOrderPageState extends State { } }, ), - if (_subWorkOrders?.loanAvailablity?.value == 1) 8.height, - if (_subWorkOrders?.loanAvailablity?.value == 1) + if (_subWorkOrders.loanAvailablity?.value == 1) 8.height, + if (_subWorkOrders.loanAvailablity?.value == 1) PickAsset( device: loanAvailabilityAsset, // ?? _serviceReport.device, onPickAsset: (asset) { - if (asset != null) { - _subWorkOrders.assetLoan = AssetInfo.fromJson(asset.toJson()); - setState(() { - loanAvailabilityAsset = asset; - }); - } - }, + _subWorkOrders.assetLoan = AssetInfo.fromJson(asset.toJson()); + setState(() { + loanAvailabilityAsset = asset; + }); + }, ), 8.height, ServiceReportAssistantEmployeeMenu( @@ -472,7 +468,7 @@ class _CreateSubWorkOrderPageState extends State { 8.height, AppTextFormField( labelText: context.translation.travelingExpense, - initialValue: _subWorkOrders?.travelingExpenses?.toString(), + initialValue: _subWorkOrders.travelingExpenses?.toString(), textInputType: TextInputType.number, onSaved: (value) { _subWorkOrders.travelingExpenses = double.tryParse(value) ?? 0.0; @@ -481,7 +477,7 @@ class _CreateSubWorkOrderPageState extends State { 8.height, AppTextFormField( labelText: context.translation.travelingHours, - initialValue: _subWorkOrders?.travelingHours?.toString(), + initialValue: _subWorkOrders.travelingHours?.toString(), textInputType: TextInputType.number, onSaved: (value) { _subWorkOrders.travelingHours = double.tryParse(value) ?? 0.0; @@ -489,7 +485,7 @@ class _CreateSubWorkOrderPageState extends State { ), 8.height, AppTextFormField( - initialValue: _subWorkOrders?.comment, + initialValue: _subWorkOrders.comment, labelText: context.translation.technicalComment, alignLabelWithHint: true, textInputType: TextInputType.multiline, @@ -517,7 +513,7 @@ class _CreateSubWorkOrderPageState extends State { setState(() {}); return; } - if (signature == null || signature.isEmpty) return; + if (signature.isEmpty) return; _subWorkOrders.localEngSignature = signature; _subWorkOrders.engSignature = signature != null ? "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}" : null; }, @@ -559,7 +555,7 @@ class _CreateSubWorkOrderPageState extends State { if (_formKey.currentState?.validate() ?? false) {} _formKey.currentState?.save(); final serviceRequestsProvider = Provider.of(context, listen: false); - for (var element in (_subWorkOrders?.suppEngineerWorkOrders ?? [])) { + for (var element in (_subWorkOrders.suppEngineerWorkOrders ?? [])) { if (element != null && element.id != 0) { element.supplierContactId = element.id; element.id = 0; @@ -587,8 +583,8 @@ class _CreateSubWorkOrderPageState extends State { bool checkVendorFieldsVisibility(Lookup? callsLastSituation) { bool result = (initialSupplier?.suppliername?.isNotEmpty ?? false) || - (callsLastSituation?.name?.toLowerCase()?.contains("under repair-vendor") ?? false) || - (callsLastSituation?.name?.toLowerCase()?.contains("waiting for vendor") ?? false); + (callsLastSituation?.name?.toLowerCase().contains("under repair-vendor") ?? false) || + (callsLastSituation?.name?.toLowerCase().contains("waiting for vendor") ?? false); setState(() { _showVendorFields = result; }); @@ -614,10 +610,10 @@ class _CreateSubWorkOrderPageState extends State { } else if (_subWorkOrders.calllastSituation!.value == 12 && (_subWorkOrders.sparePartsWorkOrders?.isEmpty ?? true)) { Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.partNo}"); return false; - } else if (_subWorkOrders?.timer?.startAt == null) { + } else if (_subWorkOrders.timer?.startAt == null) { await Fluttertoast.showToast(msg: "Working Hours Required"); return false; - } else if (_subWorkOrders?.timer?.endAt == null) { + } else if (_subWorkOrders.timer?.endAt == null) { await Fluttertoast.showToast(msg: "Please Stop The Timer"); return false; } diff --git a/lib/views/pages/user/gas_refill/gas_refill_comments.dart b/lib/views/pages/user/gas_refill/gas_refill_comments.dart index 24e5f806..b20b498a 100644 --- a/lib/views/pages/user/gas_refill/gas_refill_comments.dart +++ b/lib/views/pages/user/gas_refill/gas_refill_comments.dart @@ -95,9 +95,9 @@ class _GasRefillCommentsBottomSheetState extends State { GasRefillModel _model = GasRefillModel(gazRefillDetails: []); late UserProvider _userProvider; - bool _isLoading = false; + final bool _isLoading = false; final GlobalKey _formKey = GlobalKey(); final GlobalKey _scaffoldKey = GlobalKey(); @@ -47,14 +47,14 @@ class _GasRefillDetailsPageState extends State { @override Widget build(BuildContext context) { _userProvider = Provider.of(context); - GasRefillProvider _gasRefillProvider = Provider.of(context); + GasRefillProvider gasRefillProvider = Provider.of(context); return Scaffold( appBar: DefaultAppBar(title: context.translation.gasRefillDetails), key: _scaffoldKey, body: SafeArea( child: FutureBuilder( - future: _gasRefillProvider.getGasRefillObjectById(widget.model.id!), + future: gasRefillProvider.getGasRefillObjectById(widget.model.id!), builder: (context, snap) { if (snap.connectionState == ConnectionState.waiting) { return const ALoading(); @@ -110,12 +110,12 @@ class _GasRefillDetailsPageState extends State { '${context.translation.gasRequest}: ${gasRefillModel.gazRefillDetails![0].gasType?.name}'.bodyText(context), '${context.translation.cylinderType}: ${gasRefillModel.gazRefillDetails![0].cylinderType?.name}'.bodyText(context), '${context.translation.cylinderSize}: ${gasRefillModel.gazRefillDetails![0].cylinderSize?.name}'.bodyText(context), - '${context.translation.site}: ${gasRefillModel.site?.name?.cleanupWhitespace?.capitalizeFirstOfEach}'.bodyText(context), - '${context.translation.department}: ${gasRefillModel.department?.name?.cleanupWhitespace?.capitalizeFirstOfEach}'.bodyText(context), + '${context.translation.site}: ${gasRefillModel.site?.name?.cleanupWhitespace.capitalizeFirstOfEach}'.bodyText(context), + '${context.translation.department}: ${gasRefillModel.department?.name?.cleanupWhitespace.capitalizeFirstOfEach}'.bodyText(context), '${context.translation.requestNo}: ${gasRefillModel.gazRefillNo}'.bodyText(context), const Divider().defaultStyle(context), - '${context.translation.requestedQuantity}: ${gasRefillModel.gazRefillDetails![0]?.requestedQty ?? 0}'.bodyText(context), - '${context.translation.deliveredQuantity}: ${gasRefillModel.gazRefillDetails![0]?.deliverdQty ?? 0}'.bodyText(context), + '${context.translation.requestedQuantity}: ${gasRefillModel.gazRefillDetails![0].requestedQty ?? 0}'.bodyText(context), + '${context.translation.deliveredQuantity}: ${gasRefillModel.gazRefillDetails![0].deliverdQty ?? 0}'.bodyText(context), 8.height, if (gasRefillModel.comment?.isNotEmpty ?? false) ...[ const Divider().defaultStyle(context), @@ -130,7 +130,7 @@ class _GasRefillDetailsPageState extends State { if (_userProvider.user!.type == UsersTypes.engineer && (gasRefillModel.status?.value ?? 0) != 2) "edit".toSvgAsset(height: 48, width: 48).onPress( () async { - _model?.fromGasRefillModel(gasRefillModel); + _model.fromGasRefillModel(gasRefillModel); // setState(() {}); Navigator.push( context, diff --git a/lib/views/pages/user/gas_refill/request_gas_refill.dart b/lib/views/pages/user/gas_refill/request_gas_refill.dart index 06130c95..3aa67db8 100644 --- a/lib/views/pages/user/gas_refill/request_gas_refill.dart +++ b/lib/views/pages/user/gas_refill/request_gas_refill.dart @@ -39,7 +39,7 @@ class RequestGasRefill extends StatefulWidget { } class _RequestGasRefillState extends State { - bool _isLoading = false; + final bool _isLoading = false; bool _validate = false; Uint8List? _engineerSignature; Uint8List? _nurseSignature; @@ -52,7 +52,7 @@ class _RequestGasRefillState extends State { final TextEditingController _commentController = TextEditingController(); final TextEditingController _workingHoursController = TextEditingController(); - GasRefillModel _formModel = GasRefillModel(gazRefillDetails: []); + final GasRefillModel _formModel = GasRefillModel(gazRefillDetails: []); final GlobalKey _formKey = GlobalKey(); final GlobalKey _DetailsKey = GlobalKey(); final GlobalKey _scaffoldKey = GlobalKey(); @@ -156,27 +156,24 @@ class _RequestGasRefillState extends State { Widget build(BuildContext context) { _userProvider = Provider.of(context); _settingProvider = Provider.of(context); - if (_gasRefillProvider == null) { - _gasRefillProvider = Provider.of(context, listen: false); - //_gasRefillProvider.reset(); - } + _gasRefillProvider ??= Provider.of(context, listen: false); if (_firstTime) { - String? _clientName; + String? clientName; if (widget.gasRefillModel != null) { //_formModel.status = widget.gasRefillModel?.status ?? Lookup(value: 0); _gasRefillProvider!.expectedDateTime = DateTime.tryParse(_formModel.expectedDate ?? ""); _formModel.timer = TimerModel(startAt: DateTime.tryParse(widget.gasRefillModel?.startDate ?? ""), endAt: DateTime.tryParse(widget.gasRefillModel?.endDate ?? "")); - _clientName = _formModel.site?.custName; + clientName = _formModel.site?.custName; } else { _formModel.timer = null; - _clientName = _userProvider.user?.clientName; + clientName = _userProvider.user?.clientName; } - HospitalsProvider().getHospitalsListByVal(searchVal: _clientName!).then((value) { - _gasRefillProvider!.hospital = value?.firstWhere((element) => element.name == _clientName, orElse: null); - _gasRefillProvider!.building = _gasRefillProvider!.hospital?.buildings?.firstWhere((element) => element.name == widget.gasRefillModel?.building?.name, orElse: null); - _gasRefillProvider!.floor = _gasRefillProvider!.building?.floors?.firstWhere((element) => element.name == widget.gasRefillModel?.floor?.name, orElse: null); - _gasRefillProvider!.department = _gasRefillProvider!.floor?.departments?.firstWhere((element) => element.name == widget.gasRefillModel?.department?.departmentName, orElse: null); + HospitalsProvider().getHospitalsListByVal(searchVal: clientName!).then((value) { + _gasRefillProvider!.hospital = value.firstWhere((element) => element.name == clientName, orElse: null); + _gasRefillProvider!.building = _gasRefillProvider!.hospital?.buildings?.firstWhere((element) => element.name == widget.gasRefillModel?.building?.name, orElse: null); + _gasRefillProvider!.floor = _gasRefillProvider!.building?.floors?.firstWhere((element) => element.name == widget.gasRefillModel?.floor?.name, orElse: null); + _gasRefillProvider!.department = _gasRefillProvider!.floor?.departments?.firstWhere((element) => element.name == widget.gasRefillModel?.department?.departmentName, orElse: null); _firstTime = false; setState(() {}); }); @@ -245,7 +242,7 @@ class _RequestGasRefillState extends State { initialValue: _formModel.gazRefillDetails?[0].deliverdQty?.toString() ?? "", labelText: context.translation.deliveredQuantity, onSaved: (value) { - _currentDetails?.deliverdQty = double.tryParse(value); + _currentDetails.deliverdQty = double.tryParse(value); }, textInputType: TextInputType.number, controller: _deliveredQuantityController, diff --git a/lib/views/pages/user/notifications/notifications_page.dart b/lib/views/pages/user/notifications/notifications_page.dart index 3366a82d..47b64d00 100644 --- a/lib/views/pages/user/notifications/notifications_page.dart +++ b/lib/views/pages/user/notifications/notifications_page.dart @@ -10,7 +10,9 @@ import 'package:test_sa/views/pages/user/notifications/notifications_list.dart'; import '../../../widgets/loaders/loading_manager.dart'; class NotificationsPage extends StatefulWidget { - static final String id = "/notifications"; + static const String id = "/notifications"; + + const NotificationsPage({Key? key}) : super(key: key); @override _NotificationsPageState createState() => _NotificationsPageState(); diff --git a/lib/views/pages/user/ppm/ppm_details_page.dart b/lib/views/pages/user/ppm/ppm_details_page.dart index 30488e02..77160dea 100644 --- a/lib/views/pages/user/ppm/ppm_details_page.dart +++ b/lib/views/pages/user/ppm/ppm_details_page.dart @@ -23,7 +23,7 @@ class PpmDetailsPage extends StatefulWidget { static const String id = "/visit-details"; final RequestsDetails request; - PpmDetailsPage({Key? key, required this.request}) : super(key: key); + const PpmDetailsPage({Key? key, required this.request}) : super(key: key); @override _PpmDetailsPageState createState() { @@ -97,11 +97,11 @@ class _PpmDetailsPageState extends State { const Divider().defaultStyle(context), '${context.translation.assignedTo}: ${ppm.assignedToName ?? ""}'.bodyText(context), '${context.translation.engineerName}: ${ppm.assignedEmployeeName ?? ""}'.bodyText(context), - '${context.translation.site}: ${ppm.siteName?.cleanupWhitespace?.capitalizeFirstOfEach}'.bodyText(context), - '${context.translation.building}: ${ppm.buildingName?.cleanupWhitespace?.capitalizeFirstOfEach}'.bodyText(context), - '${context.translation.floor}: ${ppm.floorName?.cleanupWhitespace?.capitalizeFirstOfEach}'.bodyText(context), - '${context.translation.department}: ${ppm.departmentName?.cleanupWhitespace?.capitalizeFirstOfEach}'.bodyText(context), - '${context.translation.room}: ${(ppm.roomName ?? "").cleanupWhitespace?.capitalizeFirstOfEach}'.bodyText(context), + '${context.translation.site}: ${ppm.siteName?.cleanupWhitespace.capitalizeFirstOfEach}'.bodyText(context), + '${context.translation.building}: ${ppm.buildingName?.cleanupWhitespace.capitalizeFirstOfEach}'.bodyText(context), + '${context.translation.floor}: ${ppm.floorName?.cleanupWhitespace.capitalizeFirstOfEach}'.bodyText(context), + '${context.translation.department}: ${ppm.departmentName?.cleanupWhitespace.capitalizeFirstOfEach}'.bodyText(context), + '${context.translation.room}: ${(ppm.roomName ?? "").cleanupWhitespace.capitalizeFirstOfEach}'.bodyText(context), ], ).toShadowContainer(context).paddingAll(16), ).expanded, diff --git a/lib/views/pages/user/ppm/update_ppm/edit_ppm.dart b/lib/views/pages/user/ppm/update_ppm/edit_ppm.dart index f9711f22..ff0322fa 100644 --- a/lib/views/pages/user/ppm/update_ppm/edit_ppm.dart +++ b/lib/views/pages/user/ppm/update_ppm/edit_ppm.dart @@ -102,7 +102,7 @@ class _EditPpmState extends State with SingleTickerProviderStateMixin { children: [ PentryTBSForm(model: _ppm), PentryCalibrationToolForm(models: _ppm.vCalibrationTools), - PentryPMKitForm(models: _ppm.vKits, assetId: widget.ppm?.assetId), + PentryPMKitForm(models: _ppm.vKits, assetId: widget.ppm.assetId), PentryPMChecklistForm(models: _ppm.vChecklists), ], ).expanded, diff --git a/lib/views/pages/user/profile_page.dart b/lib/views/pages/user/profile_page.dart index fb40b5af..8ecb6098 100644 --- a/lib/views/pages/user/profile_page.dart +++ b/lib/views/pages/user/profile_page.dart @@ -84,10 +84,10 @@ class _ProfilePageState extends State { radius: 14, backgroundColor: AppColor.primary70, child: Padding( - padding: EdgeInsets.all(1), // Border radius + padding: const EdgeInsets.all(1), // Border radius child: snapshot.isLoading ? const SizedBox(height: 16, width: 16, child: CircularProgressIndicator(color: Colors.white, strokeWidth: 2)) - : Icon(Icons.upload, size: 16, color: Colors.white), + : const Icon(Icons.upload, size: 16, color: Colors.white), ), ).onPress(snapshot.isLoading ? null @@ -97,7 +97,7 @@ class _ProfilePageState extends State { if (pickedFile != null) { CroppedFile? croppedFile = await ImageCropper().cropImage( sourcePath: pickedFile.path, - aspectRatioPresets: [CropAspectRatioPreset.square], + aspectRatio: CropAspectRatio(ratioX: 1, ratioY: 1), uiSettings: [ AndroidUiSettings( toolbarTitle: 'ATOMS', diff --git a/lib/views/pages/user/requests/add_supplier_engineer_bottom_sheet.dart b/lib/views/pages/user/requests/add_supplier_engineer_bottom_sheet.dart index 96bdb7fc..b3b2c451 100644 --- a/lib/views/pages/user/requests/add_supplier_engineer_bottom_sheet.dart +++ b/lib/views/pages/user/requests/add_supplier_engineer_bottom_sheet.dart @@ -131,7 +131,7 @@ class _AddSupplierEngineerBottomSheetState extends State { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - (model?.createdBy?.userName ?? "Nurse").heading6(context), + (model.createdBy?.userName ?? "Nurse").heading6(context), 8.height, - (model?.comment ?? "").bodyText(context), + (model.comment ?? "").bodyText(context), 8.height, Align( alignment: AlignmentDirectional.bottomEnd, diff --git a/lib/views/pages/user/requests/create_service_request_page.dart b/lib/views/pages/user/requests/create_service_request_page.dart index a426173d..4ed70f88 100644 --- a/lib/views/pages/user/requests/create_service_request_page.dart +++ b/lib/views/pages/user/requests/create_service_request_page.dart @@ -46,7 +46,7 @@ class CreateServiceRequestPageState extends State { late ServiceRequestsProvider _serviceRequestsProvider; late ServiceRequest _serviceRequest; final List _deviceImages = []; - bool _isLoading = false; + final bool _isLoading = false; bool _showDatePicker = false; final GlobalKey _formKey = GlobalKey(); final GlobalKey _scaffoldKey = GlobalKey(); @@ -67,7 +67,7 @@ class CreateServiceRequestPageState extends State { } else { _serviceRequest = ServiceRequest(); } - isFirstActionSubmitted = _serviceRequest?.firstAction != null; + isFirstActionSubmitted = _serviceRequest.firstAction != null; super.initState(); } @@ -98,7 +98,7 @@ class CreateServiceRequestPageState extends State { } bool _isLocalUrl(String url) { - if (url?.isEmpty != false) return false; + if (url.isEmpty != false) return false; return url.startsWith("/") || url.startsWith("file://") || url.substring(1).startsWith(':\\'); } @@ -119,10 +119,6 @@ class CreateServiceRequestPageState extends State { _userProvider = Provider.of(context); _serviceRequestsProvider = Provider.of(context); - if (_settingProvider == null) { - _settingProvider = Provider.of(context); - getData(); - } return Scaffold( key: _scaffoldKey, @@ -166,7 +162,7 @@ class CreateServiceRequestPageState extends State { 8.width, Text( "This asset already have ${pendingAssetServiceRequest!.details!.length} request pending", - style: TextStyle(fontSize: 12, fontWeight: FontWeight.w500, color: Color(0xff7D859A), decoration: TextDecoration.underline), + style: const TextStyle(fontSize: 12, fontWeight: FontWeight.w500, color: Color(0xff7D859A), decoration: TextDecoration.underline), ).expanded, ], ).onPress(() { @@ -179,19 +175,19 @@ class CreateServiceRequestPageState extends State { children: [ Text(context.translation.priority, style: Theme.of(context).textTheme.bodyLarge), Consumer(builder: (cxt, snapshot, _) { - _serviceRequest?.priority ??= snapshot.items?.firstWhere((element) => element.value == 0, orElse: null); + _serviceRequest.priority ??= snapshot.items.firstWhere((element) => element.value == 0, orElse: null); return Transform.scale( scale: 0.8, child: CupertinoSwitch( - thumbColor: _serviceRequest?.priority?.value != 0 ? Color(0xffF63939) : Colors.blueGrey.withOpacity(.5), + thumbColor: _serviceRequest.priority?.value != 0 ? const Color(0xffF63939) : Colors.blueGrey.withOpacity(.5), activeColor: AppColor.blueStatus(context).withOpacity(.25), - value: _serviceRequest?.priority?.value != 0, + value: _serviceRequest.priority?.value != 0, onChanged: (state) { if (state) { - _serviceRequest?.priority = snapshot.items?.firstWhere((element) => element.value == 1, orElse: null); + _serviceRequest.priority = snapshot.items.firstWhere((element) => element.value == 1, orElse: null); } else { - _serviceRequest?.priority = snapshot.items?.firstWhere((element) => element.value == 0, orElse: null); + _serviceRequest.priority = snapshot.items.firstWhere((element) => element.value == 0, orElse: null); } setState(() {}); }).toShimmer(isShow: snapshot.loading), @@ -202,9 +198,9 @@ class CreateServiceRequestPageState extends State { 16.height, Consumer(builder: (cxt, snapshot, _) { try { - _serviceRequest?.defectType ??= snapshot.items?.first; + _serviceRequest.defectType ??= snapshot.items.first; } catch (ex) { - print("snapshot.items:${snapshot.items?.length}"); + print("snapshot.items:${snapshot.items.length}"); } return Column( @@ -227,14 +223,14 @@ class CreateServiceRequestPageState extends State { child: Radio( value: element, activeColor: Colors.red, - fillColor: MaterialStateColor.resolveWith((states) { - if (states.contains(MaterialState.selected)) return Color(0xff3DA5E5); - return Color(0xffE0E0E0); + fillColor: WidgetStateColor.resolveWith((states) { + if (states.contains(WidgetState.selected)) return const Color(0xff3DA5E5); + return const Color(0xffE0E0E0); }), - groupValue: _serviceRequest?.defectType, + groupValue: _serviceRequest.defectType, onChanged: (state) { setState(() { - _serviceRequest?.defectType = element; + _serviceRequest.defectType = element; }); }), ), @@ -275,7 +271,7 @@ class CreateServiceRequestPageState extends State { // context: context, // enabled: false, // title: context.translation.source, - // initialValue: snapshot.items?.firstWhere((element) => element.value == 3, orElse: () => null), + // initialValue: snapshot.items?.firstWhere((element) => element.value == 3, orElse: null), // ); // }), // 8.height, @@ -284,7 +280,7 @@ class CreateServiceRequestPageState extends State { // context: context, // title: context.translation.requestType, // enabled: false, - // initialValue: snapshot.items?.firstWhere((element) => element.value == 1, orElse: () => null), + // initialValue: snapshot.items?.firstWhere((element) => element.value == 1, orElse: null), // // onSelect: (value) { // // _serviceRequest.type = value; // // }, @@ -379,8 +375,8 @@ class CreateServiceRequestPageState extends State { } Future _submit() async { - _serviceRequest?.requestedThrough = Provider.of(context, listen: false).items?.firstWhere((element) => element.value == 3, orElse: null); - _serviceRequest?.type = Provider.of(context, listen: false).items?.firstWhere((element) => element.value == 1, orElse: null); + _serviceRequest.requestedThrough = Provider.of(context, listen: false).items.firstWhere((element) => element.value == 3, orElse: null); + _serviceRequest.type = Provider.of(context, listen: false).items.firstWhere((element) => element.value == 1, orElse: null); // print("_serviceRequest?.requestedThrough:${_serviceRequest?.requestedThrough.toJson()}"); // print("_serviceRequest?.type:${_serviceRequest?.type.toJson()}"); diff --git a/lib/views/pages/user/requests/first_action_bottom_sheet.dart b/lib/views/pages/user/requests/first_action_bottom_sheet.dart index c329eb63..efb7ebe4 100644 --- a/lib/views/pages/user/requests/first_action_bottom_sheet.dart +++ b/lib/views/pages/user/requests/first_action_bottom_sheet.dart @@ -90,34 +90,30 @@ class _FirstActionBottomSheetState extends State { date: DateTime.tryParse(_serviceRequest.visitDate ?? ""), formatDateWithTime: true, onDatePicker: (selectedDate) { - if (selectedDate != null) { - showTimePicker( - context: context, - initialTime: TimeOfDay.now(), - ).then((selectedTime) { - // Handle the selected date and time here. - if (selectedTime != null) { - DateTime selectedDateTime = DateTime( - selectedDate.year, - selectedDate.month, - selectedDate.day, - selectedTime.hour, - selectedTime.minute, - ); - if (selectedDateTime != null) { - if (selectedDateTime.isBefore(DateTime.parse(_serviceRequest.date!))) { - "Visit Date time must be greater then request date".showToast; - return; - } - - setState(() { - _serviceRequest.visitDate = selectedDateTime?.toIso8601String(); - }); - } + showTimePicker( + context: context, + initialTime: TimeOfDay.now(), + ).then((selectedTime) { + // Handle the selected date and time here. + if (selectedTime != null) { + DateTime selectedDateTime = DateTime( + selectedDate.year, + selectedDate.month, + selectedDate.day, + selectedTime.hour, + selectedTime.minute, + ); + if (selectedDateTime.isBefore(DateTime.parse(_serviceRequest.date!))) { + "Visit Date time must be greater then request date".showToast; + return; } - }); - } - }, + + setState(() { + _serviceRequest.visitDate = selectedDateTime.toIso8601String(); + }); + } + }); + }, ), ], @@ -130,29 +126,25 @@ class _FirstActionBottomSheetState extends State { date: DateTime.tryParse(_serviceRequest.startDate ?? ""), formatDateWithTime: true, onDatePicker: (selectedDate) { - if (selectedDate != null) { - showTimePicker( - context: context, - initialTime: TimeOfDay.now(), - ).then((selectedTime) { - // Handle the selected date and time here. - if (selectedTime != null) { - DateTime selectedDateTime = DateTime( - selectedDate.year, - selectedDate.month, - selectedDate.day, - selectedTime.hour, - selectedTime.minute, - ); - if (selectedDateTime != null) { - setState(() { - _serviceRequest.startDate = selectedDateTime?.toIso8601String(); - }); - } - } - }); - } - }, + showTimePicker( + context: context, + initialTime: TimeOfDay.now(), + ).then((selectedTime) { + // Handle the selected date and time here. + if (selectedTime != null) { + DateTime selectedDateTime = DateTime( + selectedDate.year, + selectedDate.month, + selectedDate.day, + selectedTime.hour, + selectedTime.minute, + ); + setState(() { + _serviceRequest.startDate = selectedDateTime.toIso8601String(); + }); + } + }); + }, ).expanded, 8.width, ADatePicker( @@ -160,31 +152,27 @@ class _FirstActionBottomSheetState extends State { date: DateTime.tryParse(_serviceRequest.endDate ?? ""), formatDateWithTime: true, onDatePicker: (selectedDate) { - if (selectedDate != null) { - showTimePicker( - context: context, - initialTime: TimeOfDay.now(), - ).then((selectedTime) { - // Handle the selected date and time here. - if (selectedTime != null) { - DateTime selectedDateTime = DateTime( - selectedDate.year, - selectedDate.month, - selectedDate.day, - selectedTime.hour, - selectedTime.minute, - ); - if (selectedDateTime != null) { - setState(() { - _serviceRequest.endDate = selectedDateTime?.toIso8601String(); - _serviceRequest.workingHours = - (((DateTime.parse(_serviceRequest.endDate!).difference(DateTime.parse(_serviceRequest.startDate!)).inSeconds ?? 0) / 60) / 60).toStringAsFixed(2); - }); - } - } - }); - } - }, + showTimePicker( + context: context, + initialTime: TimeOfDay.now(), + ).then((selectedTime) { + // Handle the selected date and time here. + if (selectedTime != null) { + DateTime selectedDateTime = DateTime( + selectedDate.year, + selectedDate.month, + selectedDate.day, + selectedTime.hour, + selectedTime.minute, + ); + setState(() { + _serviceRequest.endDate = selectedDateTime.toIso8601String(); + _serviceRequest.workingHours = + (((DateTime.parse(_serviceRequest.endDate!).difference(DateTime.parse(_serviceRequest.startDate!)).inSeconds ?? 0) / 60) / 60).toStringAsFixed(2); + }); + } + }); + }, ).expanded, ], ) diff --git a/lib/views/pages/user/requests/pending_requests_screen.dart b/lib/views/pages/user/requests/pending_requests_screen.dart index 1c8eee35..137d4599 100644 --- a/lib/views/pages/user/requests/pending_requests_screen.dart +++ b/lib/views/pages/user/requests/pending_requests_screen.dart @@ -12,7 +12,7 @@ import 'package:test_sa/views/widgets/sound/sound_player.dart'; class PendingServiceRequestScreen extends StatelessWidget { final PendingAssetServiceRequest pendingAssetServiceRequest; - PendingServiceRequestScreen(this.pendingAssetServiceRequest, {Key? key}) : super(key: key); + const PendingServiceRequestScreen(this.pendingAssetServiceRequest, {Key? key}) : super(key: key); @override Widget build(BuildContext context) { @@ -20,10 +20,10 @@ class PendingServiceRequestScreen extends StatelessWidget { appBar: DefaultAppBar(title: "Pending Requests (${pendingAssetServiceRequest.details!.length})"), body: ListView.separated( itemCount: pendingAssetServiceRequest.details!.length, - padding: EdgeInsets.all(16), + padding: const EdgeInsets.all(16), separatorBuilder: (cxt, index) => 12.height, itemBuilder: (cxt, index) => Container( - padding: EdgeInsets.symmetric(vertical: 16, horizontal: 16), + padding: const EdgeInsets.symmetric(vertical: 16, horizontal: 16), decoration: BoxDecoration( color: Colors.grey[200], borderRadius: BorderRadius.circular(16), @@ -34,14 +34,14 @@ class PendingServiceRequestScreen extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - pendingAssetServiceRequest.details![index].message!.cleanupWhitespace?.capitalizeFirstOfEach ?? "", + pendingAssetServiceRequest.details![index].message!.cleanupWhitespace.capitalizeFirstOfEach ?? "", style: Theme.of(context).textTheme.bodyLarge, ), if ((pendingAssetServiceRequest.details![index].callComments ?? "").isNotEmpty) ...[ 4.height, Text( "${pendingAssetServiceRequest.details![index].callComments}", - style: Theme.of(context).textTheme.bodyMedium!.copyWith(color: Color(0xff7D859A)), + style: Theme.of(context).textTheme.bodyMedium!.copyWith(color: const Color(0xff7D859A)), ), ], if ((pendingAssetServiceRequest.details![index].voiceNote ?? "").isNotEmpty) ...[ @@ -60,7 +60,7 @@ class PendingServiceRequestScreen extends StatelessWidget { ], ).expanded, 8.width, - Icon(Icons.arrow_forward_ios, size: 16) + const Icon(Icons.arrow_forward_ios, size: 16) ], ), ).onPress(() { diff --git a/lib/views/pages/user/requests/requests_page.dart b/lib/views/pages/user/requests/requests_page.dart index c8b53489..a31908c7 100644 --- a/lib/views/pages/user/requests/requests_page.dart +++ b/lib/views/pages/user/requests/requests_page.dart @@ -9,7 +9,9 @@ import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/requests/service_request_list.dart'; class ServiceRequestsPage extends StatefulWidget { - static final String id = "/service-requests"; + static const String id = "/service-requests"; + + const ServiceRequestsPage({Key? key}) : super(key: key); @override _ServiceRequestsPageState createState() => _ServiceRequestsPageState(); @@ -19,7 +21,7 @@ class _ServiceRequestsPageState extends State with TickerPr late ServiceRequestsProvider _serviceRequestsProvider; late UserProvider _userProvider; late SettingProvider _settingProvider; - bool _expandedSearch = false; + final bool _expandedSearch = false; bool _firstTime = true; @override diff --git a/lib/views/pages/user/requests/service_request_details.dart b/lib/views/pages/user/requests/service_request_details.dart index c90cd223..6e642c8f 100644 --- a/lib/views/pages/user/requests/service_request_details.dart +++ b/lib/views/pages/user/requests/service_request_details.dart @@ -56,7 +56,7 @@ class _ServiceRequestDetailsPageState extends State { @override Widget build(BuildContext context) { - UserProvider _userProvider = Provider.of(context, listen: false); + UserProvider userProvider = Provider.of(context, listen: false); Widget informationCard(ServiceRequest serviceRequest) { return Column( @@ -90,7 +90,7 @@ class _ServiceRequestDetailsPageState extends State { ], ), 8.height, - Text(serviceRequest.deviceEnName?.cleanupWhitespace?.capitalizeFirstOfEach ?? "", + Text(serviceRequest.deviceEnName?.cleanupWhitespace.capitalizeFirstOfEach ?? "", style: AppTextStyles.heading5.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)), 8.height, Text( @@ -118,11 +118,11 @@ class _ServiceRequestDetailsPageState extends State { Column( crossAxisAlignment: CrossAxisAlignment.end, children: [ - if (_userProvider.user!.type == UsersTypes.normal_user) + if (userProvider.user!.type == UsersTypes.normal_user) context.translation.code.toSvgAsset(width: 48).onPress(() { Navigator.push(context, MaterialPageRoute(builder: (context) => UpdateServiceRequestPage(serviceRequest: serviceRequest))); }), - if (_userProvider.user!.type == UsersTypes.engineer) 16.height, + if (userProvider.user!.type == UsersTypes.engineer) 16.height, Text( serviceRequest.date!.toServiceRequestCardFormat, textAlign: TextAlign.end, @@ -136,31 +136,31 @@ class _ServiceRequestDetailsPageState extends State { const Divider().defaultStyle(context), 8.height, Text( - '${context.translation.manufacture}: ${serviceRequest.device!.modelDefinition!.manufacturerName?.cleanupWhitespace?.capitalizeFirstOfEach}', + '${context.translation.manufacture}: ${serviceRequest.device!.modelDefinition!.manufacturerName?.cleanupWhitespace.capitalizeFirstOfEach}', style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20), ), Text( - '${context.translation.model}: ${serviceRequest.device!.modelDefinition!.modelName?.cleanupWhitespace?.capitalizeFirstOfEach}', + '${context.translation.model}: ${serviceRequest.device!.modelDefinition!.modelName?.cleanupWhitespace.capitalizeFirstOfEach}', style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20), ), Text( - '${context.translation.site}: ${serviceRequest.device!.site?.custName?.cleanupWhitespace?.capitalizeFirstOfEach}', + '${context.translation.site}: ${serviceRequest.device!.site?.custName?.cleanupWhitespace.capitalizeFirstOfEach}', style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20), ), Text( - '${context.translation.building}: ${serviceRequest.device!.building?.name?.cleanupWhitespace?.capitalizeFirstOfEach}', + '${context.translation.building}: ${serviceRequest.device!.building?.name?.cleanupWhitespace.capitalizeFirstOfEach}', style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20), ), Text( - '${context.translation.floor}: ${serviceRequest.device!.floor?.name?.cleanupWhitespace?.capitalizeFirstOfEach ?? ""}', + '${context.translation.floor}: ${serviceRequest.device!.floor?.name?.cleanupWhitespace.capitalizeFirstOfEach ?? ""}', style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20), ), Text( - '${context.translation.department}: ${serviceRequest.device!.department?.departmentName?.cleanupWhitespace?.capitalizeFirstOfEach}', + '${context.translation.department}: ${serviceRequest.device!.department?.departmentName?.cleanupWhitespace.capitalizeFirstOfEach}', style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20), ), Text( - '${context.translation.room}: ${(serviceRequest.device!.room?.name ?? "").cleanupWhitespace?.capitalizeFirstOfEach}', + '${context.translation.room}: ${(serviceRequest.device!.room?.name ?? "").cleanupWhitespace.capitalizeFirstOfEach}', style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20), ), 8.height, @@ -185,7 +185,7 @@ class _ServiceRequestDetailsPageState extends State { ], ], ).paddingOnly(start: 16, end: 16, top: 16, bottom: 8), - (_userProvider.user!.type == UsersTypes.normal_user + (userProvider.user!.type == UsersTypes.normal_user ? Container( height: 50, padding: const EdgeInsets.only(left: 16, right: 16), @@ -263,7 +263,7 @@ class _ServiceRequestDetailsPageState extends State { padding: const EdgeInsets.all(16), child: informationCard(serviceRequest!), ).expanded, - if (_userProvider.user!.type == UsersTypes.engineer || (serviceRequest!.statusValue == 5 || serviceRequest!.statusValue == 3)) + if (userProvider.user!.type == UsersTypes.engineer || (serviceRequest!.statusValue == 5 || serviceRequest!.statusValue == 3)) (serviceRequest?.firstAction == null ? AppFilledButton( label: context.translation.firstAction, diff --git a/lib/views/pages/user/requests/update_service_request_page.dart b/lib/views/pages/user/requests/update_service_request_page.dart index f05db2c8..bf36c5cb 100644 --- a/lib/views/pages/user/requests/update_service_request_page.dart +++ b/lib/views/pages/user/requests/update_service_request_page.dart @@ -101,7 +101,7 @@ class _UpdateServiceRequestPageState extends State { context: context, enabled: false, title: context.translation.source, - initialValue: snapshot.items?.firstWhere((element) => element.value == 3, orElse: null), + initialValue: snapshot.items.firstWhere((element) => element.value == 3, orElse: null), ); }), 8.height, @@ -150,7 +150,7 @@ class _UpdateServiceRequestPageState extends State { } Future _submit() async { - widget.serviceRequest?.requestedThrough = Provider.of(context, listen: false).items?.firstWhere((element) => element.value == 3, orElse: null); + widget.serviceRequest?.requestedThrough = Provider.of(context, listen: false).items.firstWhere((element) => element.value == 3, orElse: null); if (_formKey.currentState!.validate() && await widget.serviceRequest!.validateNewRequest(context)) { _formKey.currentState!.save(); widget.serviceRequest!.devicePhotos = _deviceImages.map((e) => _isLocalUrl(e.path) ? "${e.path.split("/").last}|${base64Encode(e.readAsBytesSync())}" : e.path).toList(); @@ -167,7 +167,7 @@ class _UpdateServiceRequestPageState extends State { } bool _isLocalUrl(String url) { - if (url?.isEmpty != false) return false; + if (url.isEmpty != false) return false; return url.startsWith("/") || url.startsWith("file://") || url.substring(1).startsWith(':\\'); } } diff --git a/lib/views/pages/user/requests/work_order/create_service_report.dart b/lib/views/pages/user/requests/work_order/create_service_report.dart index 0c4018f4..86fe22bd 100644 --- a/lib/views/pages/user/requests/work_order/create_service_report.dart +++ b/lib/views/pages/user/requests/work_order/create_service_report.dart @@ -120,7 +120,7 @@ class _CreateServiceReportState extends State with TickerPr } _serviceReport.assetType = _assetTypeProvider.statuses?.firstWhere( (element) => element.value == _serviceReport.callRequest?.assetType, - orElse: null, + orElse: null, ); return Scaffold( @@ -157,32 +157,28 @@ class _CreateServiceReportState extends State with TickerPr date: DateTime.tryParse(_serviceReport.visitDate ?? ""), formatDateWithTime: true, onDatePicker: (selectedDate) { - if (selectedDate != null) { - showTimePicker( - context: context, - initialTime: TimeOfDay.now(), - ).then((selectedTime) { - if (selectedTime != null) { - DateTime selectedDateTime = DateTime( - selectedDate.year, - selectedDate.month, - selectedDate.day, - selectedTime.hour, - selectedTime.minute, - ); - if (selectedDateTime != null) { - if (selectedDateTime.isBefore(DateTime.parse(widget.request.date!))) { - "Return to service Date time must be greater then request date".showToast; - return; - } - setState(() { - _serviceReport.visitDate = selectedDateTime?.toIso8601String(); - }); - } + showTimePicker( + context: context, + initialTime: TimeOfDay.now(), + ).then((selectedTime) { + if (selectedTime != null) { + DateTime selectedDateTime = DateTime( + selectedDate.year, + selectedDate.month, + selectedDate.day, + selectedTime.hour, + selectedTime.minute, + ); + if (selectedDateTime.isBefore(DateTime.parse(widget.request.date!))) { + "Return to service Date time must be greater then request date".showToast; + return; } - }); - } - }, + setState(() { + _serviceReport.visitDate = selectedDateTime.toIso8601String(); + }); + } + }); + }, ), 8.height, AppTimer( @@ -191,11 +187,11 @@ class _CreateServiceReportState extends State with TickerPr enabled: _serviceReport.endofWorkTime == null, onChange: (timer) async { _serviceReport.timer = timer; - if (timer?.startAt != null && timer?.endAt != null) { - if (timer?.durationInSecond != 0) { - _serviceReport.workingHours = num.tryParse((((timer?.durationInSecond ?? 0) / 60) / 60)?.toStringAsFixed(2) ?? "0"); + if (timer.startAt != null && timer.endAt != null) { + if (timer.durationInSecond != 0) { + _serviceReport.workingHours = num.tryParse((((timer.durationInSecond ?? 0) / 60) / 60).toStringAsFixed(2) ?? "0"); } else { - timer.durationInSecond = (timer.endAt!.difference(timer.startAt!))?.inSeconds; + timer.durationInSecond = (timer.endAt!.difference(timer.startAt!)).inSeconds; String workingHours = (((timer.durationInSecond ?? 0) / 60) / 60).toStringAsFixed(2); _serviceReport.workingHours = num.tryParse(workingHours ?? "0"); } @@ -211,14 +207,14 @@ class _CreateServiceReportState extends State with TickerPr onRefresh: () async { _assetTypeProvider.reset(); await _assetTypeProvider.getTypes(); - _serviceReport?.assetType = _assetTypeProvider.statuses?.firstWhere( + _serviceReport.assetType = _assetTypeProvider.statuses?.firstWhere( (element) => element.value == _serviceReport.callRequest!.assetType, - orElse: null, + orElse: null, ); }, child: AppTextFormField( labelText: context.translation.assetType, - initialValue: _serviceReport?.assetType?.name, + initialValue: _serviceReport.assetType?.name, textAlign: TextAlign.center, enable: false, style: Theme.of(context).textTheme.titleMedium, @@ -264,17 +260,17 @@ class _CreateServiceReportState extends State with TickerPr ), 8.height, ServiceReportFaultDescription( - requestId: widget.request?.id, + requestId: widget.request.id, initialValue: _serviceReport.faultDescription, onSelect: (status) { _serviceReport.faultDescription = status; - _workPreformedController?.text = _serviceReport.faultDescription?.workPerformed ?? ""; + _workPreformedController.text = _serviceReport.faultDescription?.workPerformed ?? ""; }, ), 8.height, AppTextFormField( labelText: context.translation.solution, - initialValue: _serviceReport?.faultDescription?.workPerformed, + initialValue: _serviceReport.faultDescription?.workPerformed, textAlign: TextAlign.center, enable: false, controller: _workPreformedController, @@ -283,7 +279,7 @@ class _CreateServiceReportState extends State with TickerPr SingleItemDropDownMenu( context: context, title: context.translation.loanAvailability, - initialValue: _serviceReport?.loanAvailablity, + initialValue: _serviceReport.loanAvailablity, onSelect: (status) { if (status != null) { setState(() { @@ -296,18 +292,16 @@ class _CreateServiceReportState extends State with TickerPr } }, ), - if (_serviceReport?.loanAvailablity?.value == 1) 8.height, - if (_serviceReport?.loanAvailablity?.value == 1) + if (_serviceReport.loanAvailablity?.value == 1) 8.height, + if (_serviceReport.loanAvailablity?.value == 1) PickAsset( device: loanAvailabilityAsset, // ?? _serviceReport.device, onPickAsset: (asset) { - if (asset != null) { - _serviceReport.assetLoan = AssetInfo.fromJson(asset.toJson()); - setState(() { - loanAvailabilityAsset = asset; - }); - } - }, + _serviceReport.assetLoan = AssetInfo.fromJson(asset.toJson()); + setState(() { + loanAvailabilityAsset = asset; + }); + }, ), 8.height, ServiceReportAssistantEmployeeMenu( @@ -325,7 +319,7 @@ class _CreateServiceReportState extends State with TickerPr 8.height, AppTextFormField( labelText: context.translation.travelingExpense, - initialValue: _serviceReport?.travelingExpenses?.toString(), + initialValue: _serviceReport.travelingExpenses?.toString(), textInputType: TextInputType.number, onSaved: (value) { _serviceReport.travelingExpenses = double.tryParse(value) ?? 0.0; @@ -334,7 +328,7 @@ class _CreateServiceReportState extends State with TickerPr 8.height, AppTextFormField( labelText: context.translation.travelingHours, - initialValue: _serviceReport?.travelingHours?.toString(), + initialValue: _serviceReport.travelingHours?.toString(), textInputType: TextInputType.number, onSaved: (value) { _serviceReport.travelingHours = double.tryParse(value) ?? 0.0; @@ -342,7 +336,7 @@ class _CreateServiceReportState extends State with TickerPr ), 8.height, AppTextFormField( - initialValue: _serviceReport?.comment, + initialValue: _serviceReport.comment, labelText: context.translation.technicalComment, alignLabelWithHint: true, textInputType: TextInputType.multiline, diff --git a/lib/views/pages/user/requests/work_order/edit_service_report.dart b/lib/views/pages/user/requests/work_order/edit_service_report.dart index 6c4c6a67..84aad1fd 100644 --- a/lib/views/pages/user/requests/work_order/edit_service_report.dart +++ b/lib/views/pages/user/requests/work_order/edit_service_report.dart @@ -40,7 +40,7 @@ import '../../../../widgets/status/report/service_report_repair_location.dart'; import '../../../../widgets/timer/app_timer.dart'; class EditServiceReport extends StatefulWidget { - static final String id = "/edit-service-report"; + static const String id = "/edit-service-report"; final ServiceRequest request; final ServiceReport report; @@ -104,10 +104,7 @@ class _EditServiceReportState extends State with TickerProvid _settingProvider = Provider.of(context); _serviceRequestsProvider = Provider.of(context); _assetTypeProvider = Provider.of(context); - if (_callRequestForWorkOrder == null) { - getRequestForWorkOrder(); - } - _serviceReport.assetType = _assetTypeProvider.statuses?.firstWhere((element) => element.value == _callRequestForWorkOrder?.assetType, orElse: null); + _serviceReport.assetType = _assetTypeProvider.statuses?.firstWhere((element) => element.value == _callRequestForWorkOrder.assetType, orElse: null); return Scaffold( key: _scaffoldKey, appBar: DefaultAppBar(title: context.translation.updateWorkOrder), @@ -142,28 +139,24 @@ class _EditServiceReportState extends State with TickerProvid date: DateTime.tryParse(_serviceReport.visitDate ?? ""), formatDateWithTime: true, onDatePicker: (selectedDate) { - if (selectedDate != null) { - showTimePicker( - context: context, - initialTime: TimeOfDay.now(), - ).then((selectedTime) { - if (selectedTime != null) { - DateTime selectedDateTime = DateTime( - selectedDate.year, - selectedDate.month, - selectedDate.day, - selectedTime.hour, - selectedTime.minute, - ); - if (selectedDateTime != null) { - setState(() { - _serviceReport.visitDate = selectedDateTime?.toIso8601String(); - }); - } - } - }); - } - }, + showTimePicker( + context: context, + initialTime: TimeOfDay.now(), + ).then((selectedTime) { + if (selectedTime != null) { + DateTime selectedDateTime = DateTime( + selectedDate.year, + selectedDate.month, + selectedDate.day, + selectedTime.hour, + selectedTime.minute, + ); + setState(() { + _serviceReport.visitDate = selectedDateTime.toIso8601String(); + }); + } + }); + }, ), 8.height, AppTimer( @@ -183,14 +176,14 @@ class _EditServiceReportState extends State with TickerProvid onRefresh: () async { _assetTypeProvider.reset(); await _assetTypeProvider.getTypes(); - _serviceReport?.assetType = _assetTypeProvider.statuses?.firstWhere( + _serviceReport.assetType = _assetTypeProvider.statuses?.firstWhere( (element) => element.value == _serviceReport.callRequest?.assetType, - orElse: null, + orElse: null, ); }, child: AppTextFormField( labelText: context.translation.assetType, - initialValue: _serviceReport?.assetType?.name, + initialValue: _serviceReport.assetType?.name, textAlign: TextAlign.center, enable: false, style: Theme.of(context).textTheme.titleMedium, @@ -236,17 +229,17 @@ class _EditServiceReportState extends State with TickerProvid ), 8.height, ServiceReportFaultDescription( - requestId: widget.request?.id, + requestId: widget.request.id, initialValue: _serviceReport.faultDescription, onSelect: (status) { _serviceReport.faultDescription = status; - _workPreformedController?.text = _serviceReport.faultDescription?.workPerformed ?? ""; + _workPreformedController.text = _serviceReport.faultDescription?.workPerformed ?? ""; }, ), 8.height, AppTextFormField( labelText: context.translation.solution, - initialValue: _serviceReport?.faultDescription?.workPerformed, + initialValue: _serviceReport.faultDescription?.workPerformed, textAlign: TextAlign.center, enable: false, controller: _workPreformedController, @@ -255,7 +248,7 @@ class _EditServiceReportState extends State with TickerProvid SingleItemDropDownMenu( context: context, title: context.translation.loanAvailability, - initialValue: _serviceReport?.loanAvailablity, + initialValue: _serviceReport.loanAvailablity, onSelect: (status) { if (status != null) { setState(() { @@ -268,18 +261,16 @@ class _EditServiceReportState extends State with TickerProvid } }, ), - if (_serviceReport?.loanAvailablity?.value == 1) 8.height, - if (_serviceReport?.loanAvailablity?.value == 1) + if (_serviceReport.loanAvailablity?.value == 1) 8.height, + if (_serviceReport.loanAvailablity?.value == 1) PickAsset( device: loanAvailabilityAsset, // ?? _serviceReport.device, onPickAsset: (asset) { - if (asset != null) { - _serviceReport.assetLoan = AssetInfo.fromJson(asset.toJson()); - setState(() { - loanAvailabilityAsset = asset; - }); - } - }, + _serviceReport.assetLoan = AssetInfo.fromJson(asset.toJson()); + setState(() { + loanAvailabilityAsset = asset; + }); + }, ), if (_serviceReport.assetLoan != null && loanAvailabilityAsset == null) Card(child: "${context.translation.assetNumber}: ${_serviceReport.assetLoan?.assetNumber}".bodyText(context).paddingAll(16)), @@ -299,7 +290,7 @@ class _EditServiceReportState extends State with TickerProvid 8.height, AppTextFormField( labelText: context.translation.travelingExpense, - initialValue: _serviceReport?.travelingExpenses?.toString(), + initialValue: _serviceReport.travelingExpenses?.toString(), textInputType: TextInputType.number, onSaved: (value) { _serviceReport.travelingExpenses = double.tryParse(value) ?? 0.0; @@ -308,7 +299,7 @@ class _EditServiceReportState extends State with TickerProvid 8.height, AppTextFormField( labelText: context.translation.travelingHours, - initialValue: _serviceReport?.travelingHours?.toString(), + initialValue: _serviceReport.travelingHours?.toString(), textInputType: TextInputType.number, onSaved: (value) { _serviceReport.travelingHours = double.tryParse(value) ?? 0.0; @@ -316,7 +307,7 @@ class _EditServiceReportState extends State with TickerProvid ), 8.height, AppTextFormField( - initialValue: _serviceReport?.comment, + initialValue: _serviceReport.comment, labelText: context.translation.technicalComment, alignLabelWithHint: true, textInputType: TextInputType.multiline, diff --git a/lib/views/pages/user/requests/work_order/part_no_button.dart b/lib/views/pages/user/requests/work_order/part_no_button.dart index ee62bb76..5a7e1aa2 100644 --- a/lib/views/pages/user/requests/work_order/part_no_button.dart +++ b/lib/views/pages/user/requests/work_order/part_no_button.dart @@ -65,7 +65,7 @@ class _PartNoButtonState extends State { context: context, title: context.translation.partNo, staticData: widget.spareParts, - initialValue: current?.sparePart, + initialValue: current.sparePart, backgroundColor: context.isDark ? AppColor.neutral20 : AppColor.neutral30, // initialValue: (_serviceReport.sparePartsWorkOrders?.isNotEmpty ?? false) ? _serviceReport.sparePartsWorkOrders.first.sparePart : null, onSelect: (part) { @@ -98,7 +98,7 @@ class _PartNoButtonState extends State { onPressed: widget.disablePartEdit ? null : () { - if (current != null && _formKey.currentState!.validate()) { + if (_formKey.currentState!.validate()) { _formKey.currentState!.save(); list.add(current); if (widget.onChange != null) widget.onChange!(list); @@ -144,7 +144,7 @@ class _PartNoButtonState extends State { textInputType: TextInputType.number, backgroundColor: context.isDark ? AppColor.neutral20 : AppColor.neutral30, enable: true, - initialValue: list[index].installQty?.toInt()?.toString() ?? "", + initialValue: list[index].installQty?.toInt().toString() ?? "", validator: (value) => value == null || value.isEmpty ? context.translation.requiredField : Validator.isNumeric(value) @@ -165,7 +165,7 @@ class _PartNoButtonState extends State { textInputType: TextInputType.number, backgroundColor: context.isDark ? AppColor.neutral20 : AppColor.neutral30, enable: true, - initialValue: list[index].returnQty?.toInt()?.toString() ?? "", + initialValue: list[index].returnQty?.toInt().toString() ?? "", validator: (value) => value == null || value.isEmpty ? context.translation.requiredField : Validator.isNumeric(value) diff --git a/lib/views/pages/user/requests/work_order/work_order_details_page.dart b/lib/views/pages/user/requests/work_order/work_order_details_page.dart index 12250fd1..ef6b94bb 100644 --- a/lib/views/pages/user/requests/work_order/work_order_details_page.dart +++ b/lib/views/pages/user/requests/work_order/work_order_details_page.dart @@ -58,7 +58,7 @@ class WorkOrderDetailsPage extends StatelessWidget { Text(serviceRequest!.requestCode!, style: AppTextStyles.heading5.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)), 8.height, Text( - '${context.translation.assetName}: ${workOrderDetails?.callRequest?.asset?.modelDefinition?.assetName?.cleanupWhitespace?.capitalizeFirstOfEach}', + '${context.translation.assetName}: ${workOrderDetails?.callRequest?.asset?.modelDefinition?.assetName?.cleanupWhitespace.capitalizeFirstOfEach}', style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20), ), Text( @@ -87,7 +87,7 @@ class WorkOrderDetailsPage extends StatelessWidget { style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20)), Text('${context.translation.endDate}: ${workOrderDetails.endofWorkTime?.toServiceRequestDetailsFormat ?? "" ?? '' ?? ""}', style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20)), - if (workOrderDetails!.attachmentsWorkOrder?.isNotEmpty ?? false) ...[ + if (workOrderDetails.attachmentsWorkOrder?.isNotEmpty ?? false) ...[ 8.height, const Divider().defaultStyle(context), FilesList(images: workOrderDetails.attachmentsWorkOrder!.map((e) => e.name!).toList()), diff --git a/lib/views/widgets/bottom_sheets/asset_detail_bottom_sheet.dart b/lib/views/widgets/bottom_sheets/asset_detail_bottom_sheet.dart index e39d85e9..1b75aeae 100644 --- a/lib/views/widgets/bottom_sheets/asset_detail_bottom_sheet.dart +++ b/lib/views/widgets/bottom_sheets/asset_detail_bottom_sheet.dart @@ -18,7 +18,7 @@ class AssetDetailBottomSheet extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ - (asset?.modelDefinition?.assetName?.cleanupWhitespace?.capitalizeFirstOfEach ?? "-").heading5(context), + (asset?.modelDefinition?.assetName?.cleanupWhitespace.capitalizeFirstOfEach ?? "-").heading5(context), 16.height, AspectRatio( aspectRatio: 358 / 136, diff --git a/lib/views/widgets/bottom_sheets/pending_request_bottom_sheet.dart b/lib/views/widgets/bottom_sheets/pending_request_bottom_sheet.dart index abf907c8..f22c2d1b 100644 --- a/lib/views/widgets/bottom_sheets/pending_request_bottom_sheet.dart +++ b/lib/views/widgets/bottom_sheets/pending_request_bottom_sheet.dart @@ -12,7 +12,7 @@ class PendingRequestBottomSheet extends StatelessWidget { final PendingAssetServiceRequest pendingAssetServiceRequest; final Asset device; - PendingRequestBottomSheet(this.pendingAssetServiceRequest, this.device, {Key? key}) : super(key: key); + const PendingRequestBottomSheet(this.pendingAssetServiceRequest, this.device, {Key? key}) : super(key: key); @override Widget build(BuildContext context) { @@ -33,7 +33,7 @@ class PendingRequestBottomSheet extends StatelessWidget { decoration: TextDecoration.none, ), ), - "${device.assetNumber} (${device.modelDefinition?.assetName?.cleanupWhitespace?.capitalizeFirstOfEach ?? ""})".bodyText(context), + "${device.assetNumber} (${device.modelDefinition?.assetName?.cleanupWhitespace.capitalizeFirstOfEach ?? ""})".bodyText(context), 16.height, Row( children: [ diff --git a/lib/views/widgets/bottom_sheets/selection_bottom_sheet.dart b/lib/views/widgets/bottom_sheets/selection_bottom_sheet.dart index 9ad146bf..a8071243 100644 --- a/lib/views/widgets/bottom_sheets/selection_bottom_sheet.dart +++ b/lib/views/widgets/bottom_sheets/selection_bottom_sheet.dart @@ -91,7 +91,7 @@ class _SelectionBottomSheetState extends State> { setState(() {}); }, title: Text( - widget.builderString(filteredList![index]).cleanupWhitespace?.capitalizeFirstOfEach ?? "", + widget.builderString(filteredList![index]).cleanupWhitespace.capitalizeFirstOfEach ?? "", style: Theme.of(context).textTheme.bodyLarge, ), ), diff --git a/lib/views/widgets/date_and_time/date_picker.dart b/lib/views/widgets/date_and_time/date_picker.dart index f4387c61..783b677f 100644 --- a/lib/views/widgets/date_and_time/date_picker.dart +++ b/lib/views/widgets/date_and_time/date_picker.dart @@ -62,8 +62,8 @@ class ADatePicker extends StatelessWidget { (date == null ? hint ?? context.translation.pickADate : (formatDateWithTime - ? date?.toIso8601String()?.toFirstActionFormat // Use null-aware operator - : (date?.toIso8601String()?.split("T")?.first ?? context.translation.pickADate)))! + ? date?.toIso8601String().toFirstActionFormat // Use null-aware operator + : (date?.toIso8601String().split("T").first ?? context.translation.pickADate)))! .bodyText(context) .custom(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), ], diff --git a/lib/views/widgets/departments/department_item.dart b/lib/views/widgets/departments/department_item.dart index 8e9cdd41..bac42f9e 100644 --- a/lib/views/widgets/departments/department_item.dart +++ b/lib/views/widgets/departments/department_item.dart @@ -11,7 +11,7 @@ class DepartmentItem extends StatelessWidget { @override Widget build(BuildContext context) { return Padding( - padding: EdgeInsets.symmetric(horizontal: 16, vertical: 6), + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 6), child: ElevatedButton( style: ElevatedButton.styleFrom( // backgroundColor: AColors.primaryColor, diff --git a/lib/views/widgets/departments/single_department_picker.dart b/lib/views/widgets/departments/single_department_picker.dart index 3abf4797..cea687dd 100644 --- a/lib/views/widgets/departments/single_department_picker.dart +++ b/lib/views/widgets/departments/single_department_picker.dart @@ -11,7 +11,9 @@ import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; import '../app_text_form_field.dart'; class SingleDepartmentPicker extends StatefulWidget { - static final String id = "/single-Department-Picker"; + static const String id = "/single-Department-Picker"; + + const SingleDepartmentPicker({Key? key}) : super(key: key); @override _SingleDepartmentPickerState createState() => _SingleDepartmentPickerState(); @@ -20,7 +22,7 @@ class SingleDepartmentPicker extends StatefulWidget { class _SingleDepartmentPickerState extends State { late DepartmentsProvider _departmentsProvider; late SettingProvider _settingProvider; - List _searchableList = []; + final List _searchableList = []; bool _firstTime = true; @override @@ -44,13 +46,13 @@ class _SingleDepartmentPickerState extends State { }, child: Column( children: [ - SizedBox(height: 48), + const SizedBox(height: 48), Padding( padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 16), child: ATextFormField( hintText: context.translation.searchByName, style: Theme.of(context).textTheme.titleLarge, - suffixIcon: Icon(Icons.search_rounded), + suffixIcon: const Icon(Icons.search_rounded), onChange: (value) { _searchableList.clear(); _searchableList.addAll(_departmentsProvider.departments!.where((element) => element.name!.toLowerCase().contains(value.toLowerCase())).toList()); diff --git a/lib/views/widgets/equipment/asset_detail_page.dart b/lib/views/widgets/equipment/asset_detail_page.dart index 4831447f..b512952f 100644 --- a/lib/views/widgets/equipment/asset_detail_page.dart +++ b/lib/views/widgets/equipment/asset_detail_page.dart @@ -18,7 +18,7 @@ import '../requests/request_status.dart'; class AssetDetailPage extends StatefulWidget { static const String id = "/asset-details"; - AssetDetailPage({Key? key}) : super(key: key); + const AssetDetailPage({Key? key}) : super(key: key); @override _AssetDetailPageState createState() { @@ -80,7 +80,7 @@ class _AssetDetailPageState extends State { ), image: DecorationImage( fit: BoxFit.cover, - image: NetworkImage(assetModel?.assetPhoto != null ? URLs.getFileUrl(assetModel.assetPhoto!)! : "https://www.lasteelcraft.com/images/no-image-available.png"), + image: NetworkImage(assetModel.assetPhoto != null ? URLs.getFileUrl(assetModel.assetPhoto!)! : "https://www.lasteelcraft.com/images/no-image-available.png"), )), ), ), @@ -96,7 +96,7 @@ class _AssetDetailPageState extends State { backgroundColor: AppColor.getRequestStatusColorByName(context, assetModel.commissioningStatus!.name!), ), if (assetModel.commissioningStatus != null) 8.height, - (assetModel?.modelDefinition?.assetName?.cleanupWhitespace?.capitalizeFirstOfEach ?? "-").heading5(context), + (assetModel.modelDefinition?.assetName?.cleanupWhitespace.capitalizeFirstOfEach ?? "-").heading5(context), 8.height, Row( crossAxisAlignment: CrossAxisAlignment.start, @@ -118,11 +118,11 @@ class _AssetDetailPageState extends State { /// TODO: theres no [ORACLE CODE] available to preview // "${context.translation.oracleCode}: ${"-"}".bodyText(context), "${context.translation.snNo}: ${assetModel.multiAssets!.first.assetSerialNo}".bodyText(context), - "${context.translation.site}: ${assetModel?.site?.custName?.cleanupWhitespace?.capitalizeFirstOfEach ?? "-"}".bodyText(context), - "${context.translation.building}: ${assetModel?.building?.name?.cleanupWhitespace?.capitalizeFirstOfEach ?? "-"}".bodyText(context), - "${context.translation.floor}: ${assetModel?.floor?.name?.cleanupWhitespace?.capitalizeFirstOfEach ?? "-"}".bodyText(context), - "${context.translation.md}: ${assetModel?.department?.departmentName?.cleanupWhitespace?.capitalizeFirstOfEach ?? "-"}".bodyText(context), - "${context.translation.room}: ${assetModel?.room?.value ?? "-"}".bodyText(context), + "${context.translation.site}: ${assetModel.site?.custName?.cleanupWhitespace.capitalizeFirstOfEach ?? "-"}".bodyText(context), + "${context.translation.building}: ${assetModel.building?.name?.cleanupWhitespace.capitalizeFirstOfEach ?? "-"}".bodyText(context), + "${context.translation.floor}: ${assetModel.floor?.name?.cleanupWhitespace.capitalizeFirstOfEach ?? "-"}".bodyText(context), + "${context.translation.md}: ${assetModel.department?.departmentName?.cleanupWhitespace.capitalizeFirstOfEach ?? "-"}".bodyText(context), + "${context.translation.room}: ${assetModel.room?.value ?? "-"}".bodyText(context), ], ).expanded, ], @@ -130,9 +130,9 @@ class _AssetDetailPageState extends State { 8.height, const Divider(color: AppColor.neutral30, height: 1, thickness: 1), 8.height, - "${context.translation.installationDate}: ${assetModel.installationDate!.toAssetDetailsFormat ?? "-"}".bodyText(context), - "${context.translation.nextPmDate}: ${assetModel.nextPMDate!.toAssetDetailsFormat}".bodyText(context), - "${context.translation.lastPmDate}: ${assetModel.lastPMDate!.toAssetDetailsFormat}".bodyText(context), + "${context.translation.installationDate}: ${assetModel.installationDate?.toAssetDetailsFormat ?? "-"}".bodyText(context), + "${context.translation.nextPmDate}: ${assetModel.nextPMDate?.toAssetDetailsFormat}".bodyText(context), + "${context.translation.lastPmDate}: ${assetModel.lastPMDate?.toAssetDetailsFormat}".bodyText(context), if ((assetModel.modelDefinition?.assetDescription ?? "").isNotEmpty) ...[ 8.height, const Divider(color: AppColor.neutral30, height: 1, thickness: 1), diff --git a/lib/views/widgets/equipment/asset_picker.dart b/lib/views/widgets/equipment/asset_picker.dart index 438a3a1a..93fc91d8 100644 --- a/lib/views/widgets/equipment/asset_picker.dart +++ b/lib/views/widgets/equipment/asset_picker.dart @@ -4,7 +4,6 @@ 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/views/widgets/bottom_sheets/asset_detail_bottom_sheet.dart'; -import 'package:test_sa/views/widgets/equipment/single_device_picker.dart'; import 'package:test_sa/views/widgets/qr/asset_scan_qr.dart'; import '../../../models/device/asset.dart'; @@ -18,7 +17,7 @@ class AssetPicker extends StatelessWidget { final bool forPPM; final bool showLoading; - AssetPicker({Key? key, this.editable = true, this.device, this.onPick, this.showAssetInfo = true, this.forPPM = false, this.showLoading = false}) : super(key: key); + const AssetPicker({Key? key, this.editable = true, this.device, this.onPick, this.showAssetInfo = true, this.forPPM = false, this.showLoading = false}) : super(key: key); @override Widget build(BuildContext context) { @@ -73,12 +72,12 @@ class AssetPicker extends StatelessWidget { }), if (device != null && showAssetInfo) Container( - padding: EdgeInsets.all(12), + padding: const EdgeInsets.all(12), decoration: BoxDecoration( - color: showLoading ? Colors.white : Color(0xffF4F6FC), + color: showLoading ? Colors.white : const Color(0xffF4F6FC), borderRadius: BorderRadius.circular(12), border: Border.all( - color: Color(0xff212936).withOpacity(.03), + color: const Color(0xff212936).withOpacity(.03), ), ), child: Column( @@ -87,7 +86,7 @@ class AssetPicker extends StatelessWidget { Row( children: [ Text( - device?.modelDefinition?.assetName?.cleanupWhitespace?.capitalizeFirstOfEach ?? "", + device?.modelDefinition?.assetName?.cleanupWhitespace.capitalizeFirstOfEach ?? "", style: TextStyle( fontSize: 14.toScreenWidth, fontWeight: FontWeight.w500, diff --git a/lib/views/widgets/equipment/commissioning_status_buttons.dart b/lib/views/widgets/equipment/commissioning_status_buttons.dart index 9887745d..67931dc8 100644 --- a/lib/views/widgets/equipment/commissioning_status_buttons.dart +++ b/lib/views/widgets/equipment/commissioning_status_buttons.dart @@ -14,7 +14,7 @@ class CommissioningStatusButtons extends StatefulWidget { final Function(Lookup?)? onSelect; final Lookup? initialValue; - CommissioningStatusButtons({Key? key, this.onSelect, this.initialValue}) : super(key: key); + const CommissioningStatusButtons({Key? key, this.onSelect, this.initialValue}) : super(key: key); @override State createState() => _CommissioningStatusButtonsState(); diff --git a/lib/views/widgets/equipment/single_device_picker.dart b/lib/views/widgets/equipment/single_device_picker.dart index d2cb14ee..beabe8df 100644 --- a/lib/views/widgets/equipment/single_device_picker.dart +++ b/lib/views/widgets/equipment/single_device_picker.dart @@ -20,11 +20,9 @@ import '../../../models/device/asset.dart'; import '../../../models/device/asset_search.dart'; import '../../../new_views/app_style/app_color.dart'; import '../../pages/device_transfer/asset_filter_screen.dart'; -import '../../pages/device_transfer/search_asset_page.dart'; -import '../qr/asset_scan_qr.dart'; class MyAssetsPage extends StatefulWidget { - static final String id = "/single-device-Picker"; + static const String id = "/single-device-Picker"; final bool fromBottomBar; const MyAssetsPage({Key? key, this.fromBottomBar = false}) : super(key: key); @@ -37,9 +35,9 @@ class _MyAssetsPageState extends State { late AssetProvider _devicesProvider; late UserProvider _userProvider; late SettingProvider _settingProvider; - List _searchableList = []; - List _initList = []; - bool _firstTime = true; + final List _searchableList = []; + final List _initList = []; + final bool _firstTime = true; AssetSearch? _searchAsset; bool showListView = true; @@ -48,7 +46,6 @@ class _MyAssetsPageState extends State { TextEditingController snController = TextEditingController(); _getDevice(String result, {bool isQr = false}) async { - if (result == null) return; _devicesProvider.reset(); await _devicesProvider.getAssets( search: AssetSearch(assetNo: result, assetSerialNumber: ""), @@ -77,7 +74,7 @@ class _MyAssetsPageState extends State { _userProvider = Provider.of(context); _settingProvider = Provider.of(context); - if (_firstTime && _devicesProvider.devices != null) { + if (_firstTime) { _searchableList.clear(); _searchableList.addAll(_devicesProvider.devices); _initList.addAll(_devicesProvider.devices); @@ -116,7 +113,7 @@ class _MyAssetsPageState extends State { ], ), ).onPress(() async { - final result = await Navigator.push(context, MaterialPageRoute(builder: (context) => AssetSearchScreen())); + final result = await Navigator.push(context, MaterialPageRoute(builder: (context) => const AssetSearchScreen())); if (result != null) { _searchAsset = result; } @@ -211,10 +208,10 @@ class _MyAssetsPageState extends State { 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: (_) => ScanQr()), - ) as String; - _getDevice(result, isQr: true); + String? result = await Navigator.of(context).push( + MaterialPageRoute(builder: (_) => const ScanQr()), + ) as String?; + if (result != null) _getDevice(result, isQr: true); }, ), ); diff --git a/lib/views/widgets/horizontal_list_widget.dart b/lib/views/widgets/horizontal_list_widget.dart index 886a56e1..6905aa8c 100644 --- a/lib/views/widgets/horizontal_list_widget.dart +++ b/lib/views/widgets/horizontal_list_widget.dart @@ -43,7 +43,7 @@ class _HorizontalListWidgetState extends State { setState(() { _selectedIndex = index; }); - widget.callBackFunction?.call(index); + widget.callBackFunction.call(index); }), ), ); diff --git a/lib/views/widgets/images/files_list.dart b/lib/views/widgets/images/files_list.dart index d27330a5..427e8c8f 100644 --- a/lib/views/widgets/images/files_list.dart +++ b/lib/views/widgets/images/files_list.dart @@ -24,8 +24,8 @@ class FilesList extends StatelessWidget { gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 6, mainAxisSpacing: 8, crossAxisSpacing: 8), itemCount: images.length, itemBuilder: (context, itemIndex) { - if (images[itemIndex] == null || !images[itemIndex].contains(".")) { - return Text("Bad\nFile"); + if (!images[itemIndex].contains(".")) { + return const Text("Bad\nFile"); } var isImage = images[itemIndex].split(".").last.toLowerCase() == "png" || images[itemIndex].split(".").last.toLowerCase() == "jpg" || images[itemIndex].split(".").last.toLowerCase() == "jpeg"; var isPdf = images[itemIndex].split(".").last.toLowerCase() == "pdf"; diff --git a/lib/views/widgets/images/multi_image_picker.dart b/lib/views/widgets/images/multi_image_picker.dart index 206f8fd0..cce9be4b 100644 --- a/lib/views/widgets/images/multi_image_picker.dart +++ b/lib/views/widgets/images/multi_image_picker.dart @@ -42,7 +42,7 @@ class _MultiFilesPickerState extends State { ? showFileSourceSheet : onFilePicker), 16.height, - if (widget.files?.isNotEmpty ?? false) + if (widget.files.isNotEmpty ?? false) Wrap( spacing: 8.toScreenWidth, children: List.generate( @@ -105,10 +105,10 @@ class _MultiFilesPickerState extends State { "Attach File".heading4(context), 12.height, GridView( - padding: EdgeInsets.all(0), + padding: const EdgeInsets.all(0), shrinkWrap: true, physics: const NeverScrollableScrollPhysics(), - gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 3, childAspectRatio: 1, crossAxisSpacing: 12, mainAxisSpacing: 12), + gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 3, childAspectRatio: 1, crossAxisSpacing: 12, mainAxisSpacing: 12), children: [ gridItem(Icons.camera_enhance_rounded, context.translation.pickFromCamera).onPress(() => Navigator.of(context).pop(ImageSource.camera)), gridItem(Icons.image_rounded, context.translation.pickFromGallery).onPress(() => Navigator.of(context).pop(ImageSource.gallery)), @@ -139,20 +139,20 @@ class _MultiFilesPickerState extends State { Widget gridItem(IconData iconData, String title) { return Container( - padding: EdgeInsets.all(12), + padding: const EdgeInsets.all(12), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(12), - border: Border.all(color: Color(0xffF1F1F1), width: 1), + border: Border.all(color: const Color(0xffF1F1F1), width: 1), ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Icon(iconData, color: Color(0xff7D859A), size: 36), + Icon(iconData, color: const Color(0xff7D859A), size: 36), Text( title, - style: TextStyle(fontSize: 12, fontWeight: FontWeight.w500), + style: const TextStyle(fontSize: 12, fontWeight: FontWeight.w500), ), ], ), @@ -196,14 +196,12 @@ class _MultiFilesPickerState extends State { if (pickedFile != null) { File fileImage = File(pickedFile.path); - if (fileImage != null) { - widget.files.add(fileImage); - if (widget.onChange != null) { - widget.onChange!(widget.files); - } - setState(() {}); + widget.files.add(fileImage); + if (widget.onChange != null) { + widget.onChange!(widget.files); } - } + setState(() {}); + } setState(() {}); } diff --git a/lib/views/widgets/images/multi_image_picker_item.dart b/lib/views/widgets/images/multi_image_picker_item.dart index c95ee4c8..b892de93 100644 --- a/lib/views/widgets/images/multi_image_picker_item.dart +++ b/lib/views/widgets/images/multi_image_picker_item.dart @@ -97,7 +97,7 @@ class MultiFilesPickerItem extends StatelessWidget { } bool _isLocalUrl(String url) { - if (url?.isEmpty != false) return false; + if (url.isEmpty != false) return false; return url.startsWith("/") || url.startsWith("file://") || url.substring(1).startsWith(':\\'); } } diff --git a/lib/views/widgets/issues/report_issue_item.dart b/lib/views/widgets/issues/report_issue_item.dart index a8c54cec..39003488 100644 --- a/lib/views/widgets/issues/report_issue_item.dart +++ b/lib/views/widgets/issues/report_issue_item.dart @@ -12,7 +12,7 @@ class ReportIssueItem extends StatelessWidget { Widget build(BuildContext context) { return MaterialButton( // splashColor: AColors.secondaryColor.withOpacity(.5), - padding: EdgeInsets.symmetric(vertical: 4), + padding: const EdgeInsets.symmetric(vertical: 4), onPressed: () { onChange(issueInfo, !isSelected); }, @@ -41,8 +41,8 @@ class ReportIssueItem extends StatelessWidget { ), ], ), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 16), + const Padding( + padding: EdgeInsets.symmetric(horizontal: 16), child: Divider(), ), ], diff --git a/lib/views/widgets/loaders/failed_loading.dart b/lib/views/widgets/loaders/failed_loading.dart index e8306fb3..ae1f1b07 100644 --- a/lib/views/widgets/loaders/failed_loading.dart +++ b/lib/views/widgets/loaders/failed_loading.dart @@ -19,12 +19,12 @@ class FailedLoading extends StatelessWidget { style: Theme.of(context).textTheme.titleMedium, textScaleFactor: AppStyle.getScaleFactor(context), ), - SizedBox( + const SizedBox( height: 16, ), OutlinedButton( - child: Text(context.translation.tryAgain), onPressed: onReload, + child: Text(context.translation.tryAgain), ) ], ), diff --git a/lib/views/widgets/loaders/lazy_loading.dart b/lib/views/widgets/loaders/lazy_loading.dart index 9ebebb2d..7ee69cc1 100644 --- a/lib/views/widgets/loaders/lazy_loading.dart +++ b/lib/views/widgets/loaders/lazy_loading.dart @@ -29,7 +29,7 @@ class _LazyLoadingState extends State with TickerProviderStateMixin if (!_animationController.isAnimating && !_animationController.isCompleted && widget.nextPage) { //_animationController.forward(); await widget.onLazyLoad(); - await Future.delayed(Duration(milliseconds: 600)); + await Future.delayed(const Duration(milliseconds: 600)); // _animationController.reverse(); } } @@ -77,9 +77,9 @@ class _LazyLoadingState extends State with TickerProviderStateMixin child: Container( height: 36 * AppStyle.getScaleFactor(context), width: 36 * AppStyle.getScaleFactor(context), - padding: EdgeInsets.all(8), - decoration: BoxDecoration(color: Colors.white, shape: BoxShape.circle, boxShadow: [AppStyle.boxShadow]), - child: ALoading(), + padding: const EdgeInsets.all(8), + decoration: const BoxDecoration(color: Colors.white, shape: BoxShape.circle, boxShadow: [AppStyle.boxShadow]), + child: const ALoading(), ), ), ), diff --git a/lib/views/widgets/loaders/loading_manager.dart b/lib/views/widgets/loaders/loading_manager.dart index d908df41..87789cbc 100644 --- a/lib/views/widgets/loaders/loading_manager.dart +++ b/lib/views/widgets/loaders/loading_manager.dart @@ -14,7 +14,7 @@ class LoadingManager extends StatefulWidget { final Future Function() onRefresh; final Widget child; - LoadingManager({ + const LoadingManager({ Key? key, required this.isLoading, required this.isFailedLoading, @@ -32,7 +32,7 @@ class LoadingManager extends StatefulWidget { class _LoadingManagerState extends State { @override void initState() { - if (widget.onRefresh != null && widget.stateCode == null) { + if (widget.stateCode == null) { WidgetsBinding.instance.addPostFrameCallback((timeStamp) { widget.onRefresh(); }); @@ -53,7 +53,7 @@ class _LoadingManagerState extends State { // if loading of still not start in loading (true or null) // return loading widget if (widget.isLoading != false || widget.stateCode == null) { - placeHolder = ALoading(); + placeHolder = const ALoading(); } else if (widget.isFailedLoading && !widget.isNotPage) { // if failed return failed widget placeHolder = FailedLoading( diff --git a/lib/views/widgets/notifications/notification_item.dart b/lib/views/widgets/notifications/notification_item.dart index c03614ed..682deea7 100644 --- a/lib/views/widgets/notifications/notification_item.dart +++ b/lib/views/widgets/notifications/notification_item.dart @@ -61,7 +61,7 @@ class NotificationItem extends StatelessWidget { Text( notification.text ?? "", style: AppTextStyles.bodyText2.copyWith( - color: context.isDark ? AppColor.neutral10 : Color(0xFF757575), + color: context.isDark ? AppColor.neutral10 : const Color(0xFF757575), ), ).toShimmer(isShow: isLoading), ], diff --git a/lib/views/widgets/parts/auto_complete_parts_field.dart b/lib/views/widgets/parts/auto_complete_parts_field.dart index 4c1386c6..b7e21466 100644 --- a/lib/views/widgets/parts/auto_complete_parts_field.dart +++ b/lib/views/widgets/parts/auto_complete_parts_field.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:flutter_typeahead/flutter_typeahead.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/providers/api/parts_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; @@ -64,50 +63,50 @@ class _AutoCompletePartsFieldState extends State { borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)), boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)], ), - child: TypeAheadField( - minCharsForSuggestions: 1, - textFieldConfiguration: TextFieldConfiguration( - style: AppTextStyles.bodyText, - controller: _controller, - textAlign: TextAlign.start, - decoration: InputDecoration( - border: border, - disabledBorder: border, - focusedBorder: border, - enabledBorder: border, - errorBorder: border, - contentPadding: EdgeInsets.symmetric(vertical: 8.toScreenHeight, horizontal: 16.toScreenWidth), - constraints: const BoxConstraints(), - suffixIconConstraints: const BoxConstraints(minWidth: 0), - filled: true, - fillColor: (context.isDark ? AppColor.neutral50 : AppColor.background(context)), - errorStyle: AppTextStyle.tiny.copyWith(color: context.isDark ? AppColor.red50 : AppColor.red60), - floatingLabelStyle: AppTextStyle.body1?.copyWith(fontWeight: FontWeight.w500, color: context.isDark ? null : AppColor.neutral20), - labelText: widget.byName ? context.translation.partName : context.translation.partNumber, - ), - textInputAction: TextInputAction.search, - ), - suggestionsCallback: (value) async { - return (await _partsProvider.getPartsList(partName: widget.byName ? value : null, partNo: widget.byName ? null : value, assetId: widget.assetId)) + child: Autocomplete( + optionsBuilder: (TextEditingValue textEditingValue) async { + if (textEditingValue.text.isEmpty) { + return const Iterable.empty(); + } + return (await _partsProvider.getPartsList(partName: widget.byName ? textEditingValue.text : null, partNo: widget.byName ? null : textEditingValue.text, assetId: widget.assetId)) .map((e) => SparePartsWorkOrders(sparePart: e)) .toList(); }, - itemBuilder: (context, part) { - return ListTile( - title: Text(part?.sparePart?.partNo ?? ""), - subtitle: Text( - part?.sparePart?.partName ?? "", - style: Theme.of(context).textTheme.bodySmall, + displayStringForOption: (SparePartsWorkOrders option) => widget.byName ? option.sparePart?.partName ?? "" : option.sparePart?.partNo ?? "", + fieldViewBuilder: (BuildContext context, TextEditingController fieldTextEditingController, FocusNode fieldFocusNode, VoidCallback onFieldSubmitted) { + return TextField( + controller: fieldTextEditingController, + focusNode: fieldFocusNode, + style: AppTextStyles.bodyText, + textAlign: TextAlign.start, + decoration: InputDecoration( + border: border, + disabledBorder: border, + focusedBorder: border, + enabledBorder: border, + errorBorder: border, + contentPadding: EdgeInsets.symmetric(vertical: 8.toScreenHeight, horizontal: 16.toScreenWidth), + constraints: const BoxConstraints(), + suffixIconConstraints: const BoxConstraints(minWidth: 0), + filled: true, + fillColor: (context.isDark ? AppColor.neutral50 : AppColor.background(context)), + errorStyle: AppTextStyle.tiny.copyWith(color: context.isDark ? AppColor.red50 : AppColor.red60), + floatingLabelStyle: AppTextStyle.body1.copyWith(fontWeight: FontWeight.w500, color: context.isDark ? null : AppColor.neutral20), + labelText: widget.byName ? context.translation.partName : context.translation.partNumber, ), + textInputAction: TextInputAction.search, + onSubmitted: (String value) { + onFieldSubmitted(); + }, ); }, - onSuggestionSelected: (part) { + onSelected: (SparePartsWorkOrders selection) { if (widget.clearAfterPick) { _controller.clear(); } else { - _controller.text = widget.byName ? (part?.sparePart?.partName ?? "") : (part?.sparePart?.partNo ?? ""); + _controller.text = widget.byName ? (selection.sparePart?.partName ?? "") : (selection.sparePart?.partNo ?? ""); } - widget.onPick(part); + widget.onPick(selection); }, ), ); diff --git a/lib/views/widgets/pentry/pentry_calibration_tool_form.dart b/lib/views/widgets/pentry/pentry_calibration_tool_form.dart index 4f3b82f6..1324607f 100644 --- a/lib/views/widgets/pentry/pentry_calibration_tool_form.dart +++ b/lib/views/widgets/pentry/pentry_calibration_tool_form.dart @@ -93,7 +93,7 @@ class _PentryCalibrationToolFormState extends State { backgroundColor: context.isDark ? AppColor.neutral50 : AppColor.background(context), withBorder: false, onDatePicker: (date) { - model.calibrationDateOfTesters = date?.toIso8601String(); + model.calibrationDateOfTesters = date.toIso8601String(); setState(() {}); }, ), diff --git a/lib/views/widgets/pentry/pentry_pm_kit_form.dart b/lib/views/widgets/pentry/pentry_pm_kit_form.dart index b9745429..e36f9be0 100644 --- a/lib/views/widgets/pentry/pentry_pm_kit_form.dart +++ b/lib/views/widgets/pentry/pentry_pm_kit_form.dart @@ -79,9 +79,9 @@ class _PentryPMKitFormState extends State { byName: true, initialValue: model.partName ?? "", onPick: (part) { - model.partCatalogItemId = part?.sparePart?.id; - model.partNumber = part?.sparePart?.partNo; - model.partName = part?.sparePart?.partName; + model.partCatalogItemId = part.sparePart?.id; + model.partNumber = part.sparePart?.partNo; + model.partName = part.sparePart?.partName; setState(() {}); }, ), @@ -92,9 +92,9 @@ class _PentryPMKitFormState extends State { byName: false, initialValue: model.partNumber ?? "", onPick: (part) { - model.partCatalogItemId = part?.sparePart?.id; - model.partNumber = part?.sparePart?.partNo; - model.partName = part?.sparePart?.partName; + model.partCatalogItemId = part.sparePart?.id; + model.partNumber = part.sparePart?.partNo; + model.partName = part.sparePart?.partName; setState(() {}); }, ), diff --git a/lib/views/widgets/pentry/pentry_tbs_form.dart b/lib/views/widgets/pentry/pentry_tbs_form.dart index f3b175eb..5126da73 100644 --- a/lib/views/widgets/pentry/pentry_tbs_form.dart +++ b/lib/views/widgets/pentry/pentry_tbs_form.dart @@ -41,8 +41,8 @@ class _PentryTBSFormState extends State { @override Widget build(BuildContext context) { - widget.model?.files ??= []; - widget.model?.files = (widget.model.files ?? []).where((element) => element.attachmentName?.isNotEmpty ?? false).toList(); + widget.model.files ??= []; + widget.model.files = (widget.model.files ?? []).where((element) => element.attachmentName?.isNotEmpty ?? false).toList(); double totalWorkingHours = widget.model.visitTimers?.fold(0.0, (sum, item) => (sum ?? 0) + DateTime.parse(item.endDateTime!).difference(DateTime.parse(item.startDateTime!)).inSeconds) ?? 0; @@ -180,7 +180,7 @@ class _PentryTBSFormState extends State { }, ), 8.height, - if (widget.model?.typeOfServiceId == 66) ...[ + if (widget.model.typeOfServiceId == 66) ...[ SingleItemDropDownMenu( context: context, title: context.translation.supplier, @@ -246,13 +246,12 @@ class _PentryTBSFormState extends State { date: DateTime.tryParse(widget.model.actualDate ?? ""), from: DateTime.now().subtract(const Duration(days: 30)), onDatePicker: (date) { - if (date == null) return; if (date.isBefore(DateTime.parse(widget.model.expectedDate!))) { "Actual visit date must be greater then expected date".showToast; return; } - widget.model.actualDate = date?.toIso8601String(); + widget.model.actualDate = date.toIso8601String(); setState(() {}); }, ), @@ -263,8 +262,7 @@ class _PentryTBSFormState extends State { from: DateTime.now().subtract(const Duration(days: 30)), enable: false, onDatePicker: (date) { - if (date == null) return; - widget.model.nextDate = date?.toIso8601String(); + widget.model.nextDate = date.toIso8601String(); setState(() {}); }, ), diff --git a/lib/views/widgets/qr/asset_scan_qr.dart b/lib/views/widgets/qr/asset_scan_qr.dart index 36b8ed77..13362630 100644 --- a/lib/views/widgets/qr/asset_scan_qr.dart +++ b/lib/views/widgets/qr/asset_scan_qr.dart @@ -55,7 +55,6 @@ class _AssetScanQrState extends State { } _getDevice(String result, {bool isQr = false}) async { - if (result == null) return; _devicesProvider.reset(); await _devicesProvider.getAssets( search: AssetSearch(assetNo: result, assetSerialNumber: ""), diff --git a/lib/views/widgets/qr/scan_qr.dart b/lib/views/widgets/qr/scan_qr.dart index 479376f3..541dece6 100644 --- a/lib/views/widgets/qr/scan_qr.dart +++ b/lib/views/widgets/qr/scan_qr.dart @@ -58,7 +58,7 @@ class _ScanQrState extends State { ), SafeArea( child: Padding( - padding: EdgeInsets.all(12.0), + padding: const EdgeInsets.all(12.0), child: AIconButton( iconData: Icons.arrow_back, onPressed: () { diff --git a/lib/views/widgets/requests/service_request_item.dart b/lib/views/widgets/requests/service_request_item.dart index e20ea589..0d64fefa 100644 --- a/lib/views/widgets/requests/service_request_item.dart +++ b/lib/views/widgets/requests/service_request_item.dart @@ -51,19 +51,19 @@ class ServiceRequestItem extends StatelessWidget { Text(context.translation.serviceRequest, style: AppTextStyles.heading5.copyWith(color: context.isDark ? AppColor.neutral30 : const Color(0xFF3B3D4A))), Text( '${context.translation.assetName}: ${request.deviceEnName}', - style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : Color(0xFF757575)), + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : const Color(0xFF757575)), ), Text( '${context.translation.assetNumber}: ${request.device!.assetNumber}', - style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : Color(0xFF757575)), + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : const Color(0xFF757575)), ), Text( '${context.translation.requestType}: ${request.type!.name}', - style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : Color(0xFF757575)), + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : const Color(0xFF757575)), ), Text( '${context.translation.requestNo}: ${request.requestCode}', - style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : Color(0xFF757575)), + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : const Color(0xFF757575)), ), 8.height, Row( diff --git a/lib/views/widgets/requests/service_request_list.dart b/lib/views/widgets/requests/service_request_list.dart index a525ac84..5bc1d9af 100644 --- a/lib/views/widgets/requests/service_request_list.dart +++ b/lib/views/widgets/requests/service_request_list.dart @@ -1,4 +1,3 @@ -import 'dart:developer'; import 'package:flutter/material.dart'; import 'package:test_sa/extensions/context_extension.dart'; @@ -19,7 +18,7 @@ class ServiceRequestsList extends StatelessWidget { @override Widget build(BuildContext context) { print('servies request page'); - if (requests.length == 0) { + if (requests.isEmpty) { return NoItemFound( message: context.translation.noServiceRequestFound, ); diff --git a/lib/views/widgets/search/asset_transfer_search_dialog.dart b/lib/views/widgets/search/asset_transfer_search_dialog.dart index 0b9a4312..d36a80d8 100644 --- a/lib/views/widgets/search/asset_transfer_search_dialog.dart +++ b/lib/views/widgets/search/asset_transfer_search_dialog.dart @@ -116,7 +116,7 @@ // // _isLoading = true; // // setState(() {}); // // await HospitalsProvider().getHospitalsListByVal(searchVal: selected?.name ?? "").then((value) { -// // _search.hospital = value?.firstWhere((element) => element.name == selected.name, orElse: () => null); +// // _search.hospital = value?.firstWhere((element) => element.name == selected.name, orElse: null); // // _search.buildingsList = _search.hospital?.buildings; // // }); // // _isLoading = false; diff --git a/lib/views/widgets/sound/TextSpeechRecordWidget.dart b/lib/views/widgets/sound/TextSpeechRecordWidget.dart index 8a749ae2..3ae6f985 100644 --- a/lib/views/widgets/sound/TextSpeechRecordWidget.dart +++ b/lib/views/widgets/sound/TextSpeechRecordWidget.dart @@ -40,7 +40,7 @@ class _RecordSoundState extends State { bool _recorderIsOpened = false; bool _recording = false; - bool _played = false; + final bool _played = false; String? _record; Artboard? _rive; Timer? _timer; @@ -106,7 +106,7 @@ class _RecordSoundState extends State { @override void dispose() { - _timeController?.dispose(); + _timeController.dispose(); // Be careful : you must `close` the audio session when you have finished with it. RecordMp3.instance.stop(); //_myRecorder.closeRecorder(); @@ -331,7 +331,7 @@ class _RecordSoundState extends State { if (_recording) { _stopRecording(); } else if (_record != null) { - _timeController?.text = "00:00"; + _timeController.text = "00:00"; widget.onRecord(null); _record = null; setState(() {}); diff --git a/lib/views/widgets/sound/record_sound.dart b/lib/views/widgets/sound/record_sound.dart index 20152b63..56a23c13 100644 --- a/lib/views/widgets/sound/record_sound.dart +++ b/lib/views/widgets/sound/record_sound.dart @@ -33,7 +33,7 @@ class _RecordSoundState extends State { bool _recorderIsOpened = false; bool _recording = false; - bool _played = false; + final bool _played = false; String? _record; late Artboard _rive; Timer? _timer; @@ -81,7 +81,7 @@ class _RecordSoundState extends State { @override void dispose() { - _timeController?.dispose(); + _timeController.dispose(); // Be careful : you must `close` the audio session when you have finished with it. RecordMp3.instance.stop(); //_myRecorder.closeRecorder(); @@ -183,7 +183,7 @@ class _RecordSoundState extends State { if (_recording) { _stopRecording(); } else if (_record != null) { - _timeController?.text = "00:00"; + _timeController.text = "00:00"; widget.onRecord(null); _record = null; setState(() {}); diff --git a/lib/views/widgets/sound/sound_player.dart b/lib/views/widgets/sound/sound_player.dart index 7555f980..d0e1355b 100644 --- a/lib/views/widgets/sound/sound_player.dart +++ b/lib/views/widgets/sound/sound_player.dart @@ -72,7 +72,7 @@ class _ASoundPlayerState extends State { _isLocalFile ? DeviceFileSource(_audio) : UrlSource(_audio), ); rebuild(); - } on Exception catch (e) { + } on Exception { _failedToLoad = true; } }); @@ -88,7 +88,7 @@ class _ASoundPlayerState extends State { _isLocalFile ? DeviceFileSource(_audio) : UrlSource(_audio), ); rebuild(); - } on Exception catch (e) { + } on Exception { _failedToLoad = true; } }); @@ -96,7 +96,6 @@ class _ASoundPlayerState extends State { } String format(Duration d) { - if (d == null) return "00:00"; return d.toString().substring(2, 7); } @@ -106,7 +105,7 @@ class _ASoundPlayerState extends State { } bool _isLocalUrl(String url) { - if (url?.isEmpty != false) return false; + if (url.isEmpty != false) return false; return url.startsWith("/") || url.startsWith("file://") || url.substring(1).startsWith(':\\'); } @@ -178,9 +177,9 @@ class _ASoundPlayerState extends State { SliderTheme( data: SliderTheme.of(context).copyWith(trackHeight: 2.0, thumbShape: const RoundSliderThumbShape(enabledThumbRadius: 6.0), overlayShape: SliderComponentShape.noOverlay), child: Slider( - value: _audioPosition?.inMilliseconds?.toDouble() ?? 0.0, + value: _audioPosition?.inMilliseconds.toDouble() ?? 0.0, min: 0, - max: _audioTime?.inMilliseconds?.toDouble() ?? 60.0, + max: _audioTime?.inMilliseconds.toDouble() ?? 60.0, activeColor: context.isDark ? AppColor.primary40 : AppColor.primary70, inactiveColor: context.isDark ? AppColor.neutral20 : AppColor.neutral30, onChangeStart: (value) { diff --git a/lib/views/widgets/status/nurse_employee_menu.dart b/lib/views/widgets/status/nurse_employee_menu.dart index 816a7271..bb716bdd 100644 --- a/lib/views/widgets/status/nurse_employee_menu.dart +++ b/lib/views/widgets/status/nurse_employee_menu.dart @@ -42,7 +42,7 @@ class _SingleNurseEmployeeMenuState extends State { _selectedStatus = null; } if ((widget.initialValue?.id ?? "") != (_selectedStatus?.id ?? "")) { - widget.onSelect!(_selectedStatus!); + widget.onSelect(_selectedStatus!); } } else { _selectedStatus = null; @@ -99,7 +99,7 @@ class _SingleNurseEmployeeMenuState extends State { style: Theme.of(context).textTheme.bodySmall?.copyWith(color: context.isDark ? null : AppColor.neutral20, fontWeight: FontWeight.w500), ), Text( - _selectedStatus?.name?.cleanupWhitespace?.capitalizeFirstOfEach ?? context.translation.select, + _selectedStatus?.name?.cleanupWhitespace.capitalizeFirstOfEach ?? context.translation.select, style: Theme.of(context).textTheme.bodyLarge, ), ], diff --git a/lib/views/widgets/status/report/service_report_assistant_employee_menu.dart b/lib/views/widgets/status/report/service_report_assistant_employee_menu.dart index 4a4063c5..0385366b 100644 --- a/lib/views/widgets/status/report/service_report_assistant_employee_menu.dart +++ b/lib/views/widgets/status/report/service_report_assistant_employee_menu.dart @@ -1,7 +1,6 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.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'; diff --git a/lib/views/widgets/status/single_status_menu.dart b/lib/views/widgets/status/single_status_menu.dart index 8b7a13dc..bd0d9300 100644 --- a/lib/views/widgets/status/single_status_menu.dart +++ b/lib/views/widgets/status/single_status_menu.dart @@ -37,7 +37,7 @@ class _SingleStatusMenuState extends State { void didUpdateWidget(covariant SingleStatusMenu oldWidget) { _selectedStatus = widget.statuses?.firstWhere( (element) => element == widget.initialStatus, - orElse: null); + orElse: null); if (widget.initialStatus != _selectedStatus) { widget.onSelect?.call(_selectedStatus); // Use null-aware operator @@ -50,7 +50,7 @@ class _SingleStatusMenuState extends State { void initState() { _selectedStatus = widget.statuses?.firstWhere( (element) => element == widget.initialStatus, - orElse: null); + orElse: null); if (widget.initialStatus != _selectedStatus) { widget.onSelect?.call(_selectedStatus); // Use null-aware operator diff --git a/pubspec.lock b/pubspec.lock index d90b108d..ba40d82b 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,10 +5,10 @@ packages: dependency: transitive description: name: _flutterfire_internals - sha256: "7bcb5c5d62b3907fb4a269c0f0843df46760d38e12829a715f2ff1fb492f19ef" + sha256: ddc6f775260b89176d329dee26f88b9469ef46aa3228ff6a0b91caf2b2989692 url: "https://pub.dev" source: hosted - version: "1.3.10" + version: "1.3.42" another_flushbar: dependency: "direct main" description: @@ -21,18 +21,18 @@ packages: dependency: transitive description: name: archive - sha256: "7e0d52067d05f2e0324268097ba723b71cb41ac8a6a2b24d1edf9c536b987b03" + sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d url: "https://pub.dev" source: hosted - version: "3.4.6" + version: "3.6.1" args: dependency: transitive description: name: args - sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596 + sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" url: "https://pub.dev" source: hosted - version: "2.4.2" + version: "2.5.0" async: dependency: transitive description: @@ -45,66 +45,66 @@ packages: dependency: "direct main" description: name: audioplayers - sha256: bb506873ab4fb663db9b47243754ef669adf684dbe6ba8b57c26e27b834065c4 + sha256: c346ba5a39dc208f1bab55fc239855f573d69b0e832402114bf0b793622adc4d url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "6.1.0" audioplayers_android: dependency: transitive description: name: audioplayers_android - sha256: "53969a1c5d94ebdaef72e334f1c0ea2f3946ab2baa8d398a9584ac27baf4f037" + sha256: de576b890befe27175c2f511ba8b742bec83765fa97c3ce4282bba46212f58e4 url: "https://pub.dev" source: hosted - version: "1.1.3" + version: "5.0.0" audioplayers_darwin: dependency: transitive description: name: audioplayers_darwin - sha256: dcd5a4ceef5aa3d04e8ae49441f13a3d9f93fe6e9e88fe121ff6b6f391b2a40b + sha256: e507887f3ff18d8e5a10a668d7bedc28206b12e10b98347797257c6ae1019c3b url: "https://pub.dev" source: hosted - version: "1.0.4" + version: "6.0.0" audioplayers_linux: dependency: transitive description: name: audioplayers_linux - sha256: ea1cb9a5c9389b38f293ee1375b22b02fb1d1f7a2e1517fcb674297dd074dc7b + sha256: "3d3d244c90436115417f170426ce768856d8fe4dfc5ed66a049d2890acfa82f9" url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "4.0.0" audioplayers_platform_interface: dependency: transitive description: name: audioplayers_platform_interface - sha256: "589c3106d0c656540e81ac2c7a78a9414a4a6534ae7b77f06ddb5d6aa5dc653c" + sha256: "6834dd48dfb7bc6c2404998ebdd161f79cd3774a7e6779e1348d54a3bfdcfaa5" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "7.0.0" audioplayers_web: dependency: transitive description: name: audioplayers_web - sha256: "13fb044a443276223774f8ed1f8d2b82f443cf8980edd0e172e55967c1556a49" + sha256: "3609bdf0e05e66a3d9750ee40b1e37f2a622c4edb796cc600b53a90a30a2ace4" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "5.0.1" audioplayers_windows: dependency: transitive description: name: audioplayers_windows - sha256: "87964ddece7275b97277935df67af60536155914c81c633f708914b99433129b" + sha256: "8605762dddba992138d476f6a0c3afd9df30ac5b96039929063eceed416795c2" url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "4.0.0" badges: dependency: "direct main" description: name: badges - sha256: "6e7f3ec561ec08f47f912cfe349d4a1707afdc8dda271e17b046aa6d42c89e77" + sha256: a7b6bbd60dce418df0db3058b53f9d083c22cdb5132a052145dc267494df0b84 url: "https://pub.dev" source: hosted - version: "3.1.1" + version: "3.1.2" boolean_selector: dependency: transitive description: @@ -117,34 +117,34 @@ packages: dependency: "direct main" description: name: cached_network_image - sha256: fd3d0dc1d451f9a252b32d95d3f0c3c487bc41a75eba2e6097cb0b9c71491b15 + sha256: "7c1183e361e5c8b0a0f21a28401eecdbde252441106a9816400dd4c2b2424916" url: "https://pub.dev" source: hosted - version: "3.2.3" + version: "3.4.1" cached_network_image_platform_interface: dependency: transitive description: name: cached_network_image_platform_interface - sha256: bb2b8403b4ccdc60ef5f25c70dead1f3d32d24b9d6117cfc087f496b178594a7 + sha256: "35814b016e37fbdc91f7ae18c8caf49ba5c88501813f73ce8a07027a395e2829" url: "https://pub.dev" source: hosted - version: "2.0.0" + version: "4.1.1" cached_network_image_web: dependency: transitive description: name: cached_network_image_web - sha256: b8eb814ebfcb4dea049680f8c1ffb2df399e4d03bf7a352c775e26fa06e02fa0 + sha256: "980842f4e8e2535b8dbd3d5ca0b1f0ba66bf61d14cc3a17a9b4788a3685ba062" url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "1.3.1" carousel_slider: dependency: "direct main" description: name: carousel_slider - sha256: "9c695cc963bf1d04a47bd6021f68befce8970bcd61d24938e1fb0918cf5d9c42" + sha256: "7b006ec356205054af5beaef62e2221160ea36b90fb70a35e4deacd49d0349ae" url: "https://pub.dev" source: hosted - version: "4.2.1" + version: "5.0.0" characters: dependency: transitive description: @@ -165,10 +165,10 @@ packages: dependency: transitive description: name: cli_util - sha256: "66f86e916d285c1a93d3b79587d94bd71984a66aac4ff74e524cfa7877f1395c" + sha256: c05b7406fdabc7a49a3929d4af76bcaccbbffcbcdcf185b082e1ae07da323d19 url: "https://pub.dev" source: hosted - version: "0.3.5" + version: "0.4.1" clock: dependency: transitive description: @@ -185,46 +185,38 @@ packages: url: "https://pub.dev" source: hosted version: "1.18.0" - convert: - dependency: transitive - description: - name: convert - sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" - url: "https://pub.dev" - source: hosted - version: "3.1.1" cross_file: dependency: transitive description: name: cross_file - sha256: "445db18de832dba8d851e287aff8ccf169bed30d2e94243cb54c7d2f1ed2142c" + sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" url: "https://pub.dev" source: hosted - version: "0.3.3+6" + version: "0.3.4+2" crypto: dependency: transitive description: name: crypto - sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab + sha256: ec30d999af904f33454ba22ed9a86162b35e52b44ac4807d1d93c288041d7d27 url: "https://pub.dev" source: hosted - version: "3.0.3" + version: "3.0.5" cupertino_icons: dependency: "direct main" description: name: cupertino_icons - sha256: d57953e10f9f8327ce64a508a355f0b1ec902193f66288e8cb5070e7c47eeb2d + sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 url: "https://pub.dev" source: hosted - version: "1.0.6" + version: "1.0.8" dbus: dependency: transitive description: name: dbus - sha256: "6f07cba3f7b3448d42d015bfd3d53fe12e5b36da2423f23838efc1d5fb31a263" + sha256: "365c771ac3b0e58845f39ec6deebc76e3276aa9922b0cc60840712094d9047ac" url: "https://pub.dev" source: hosted - version: "0.7.8" + version: "0.7.10" dotted_border: dependency: "direct main" description: @@ -245,26 +237,26 @@ packages: dependency: transitive description: name: ffi - sha256: ed5337a5660c506388a9f012be0288fb38b49020ce2b45fe1f8b8323fe429f99 + sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6" url: "https://pub.dev" source: hosted - version: "2.0.2" + version: "2.1.3" file: dependency: transitive description: name: file - sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" url: "https://pub.dev" source: hosted - version: "6.1.4" + version: "7.0.0" file_picker: dependency: "direct main" description: name: file_picker - sha256: "9d6e95ec73abbd31ec54d0e0df8a961017e165aba1395e462e5b31ea0c165daf" + sha256: "167bb619cdddaa10ef2907609feb8a79c16dfa479d3afaf960f8e223f754bf12" url: "https://pub.dev" source: hosted - version: "5.3.1" + version: "8.1.2" file_selector_linux: dependency: transitive description: @@ -277,74 +269,82 @@ packages: dependency: transitive description: name: file_selector_macos - sha256: b15c3da8bd4908b9918111fa486903f5808e388b8d1c559949f584725a6594d6 + sha256: f42eacb83b318e183b1ae24eead1373ab1334084404c8c16e0354f9a3e55d385 url: "https://pub.dev" source: hosted - version: "0.9.3+3" + version: "0.9.4" file_selector_platform_interface: dependency: transitive description: name: file_selector_platform_interface - sha256: "0aa47a725c346825a2bd396343ce63ac00bda6eff2fbc43eabe99737dede8262" + sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b url: "https://pub.dev" source: hosted - version: "2.6.1" + version: "2.6.2" file_selector_windows: dependency: transitive description: name: file_selector_windows - sha256: d3547240c20cabf205c7c7f01a50ecdbc413755814d6677f3cb366f04abcead0 + sha256: "2ad726953f6e8affbc4df8dc78b77c3b4a060967a291e528ef72ae846c60fb69" url: "https://pub.dev" source: hosted - version: "0.9.3+1" + version: "0.9.3+2" firebase_core: dependency: "direct main" description: name: firebase_core - sha256: "37299e4907391d7fac8c7ea059bb3292768cc07b72b6c6c777675cc58da2ef4d" + sha256: "40921de9795fbf5887ed5c0adfdf4972d5a8d7ae7e1b2bb98dea39bc02626a88" url: "https://pub.dev" source: hosted - version: "2.20.0" + version: "3.4.1" firebase_core_platform_interface: dependency: transitive description: name: firebase_core_platform_interface - sha256: c437ae5d17e6b5cc7981cf6fd458a5db4d12979905f9aafd1fea930428a9fe63 + sha256: f7d7180c7f99babd4b4c517754d41a09a4943a0f7a69b65c894ca5c68ba66315 url: "https://pub.dev" source: hosted - version: "5.0.0" + version: "5.2.1" firebase_core_web: dependency: transitive description: name: firebase_core_web - sha256: "0631a2ec971dbc540275e2fa00c3a8a2676f0a7adbc3c197d6fba569db689d97" + sha256: f4ee170441ca141c5f9ee5ad8737daba3ee9c8e7efb6902aee90b4fbd178ce25 url: "https://pub.dev" source: hosted - version: "2.8.1" + version: "2.18.0" firebase_messaging: dependency: "direct main" description: name: firebase_messaging - sha256: d7b6f9c394f8575598fa94e67220cdd2097a0bc28ce20a3ef2db2da94ede5b47 + sha256: cc02c4afd6510cd84586020670140c4a23fbe52af16cd260ccf8ede101bb8d1b url: "https://pub.dev" source: hosted - version: "14.7.2" + version: "15.1.1" firebase_messaging_platform_interface: dependency: transitive description: name: firebase_messaging_platform_interface - sha256: "825356880eb94bf16ea7ef6a71384d2c32cc88143b54ecffed8b3987f7178854" + sha256: d8a4984635f09213302243ea670fe5c42f3261d7d8c7c0a5f7dcd5d6c84be459 url: "https://pub.dev" source: hosted - version: "4.5.11" + version: "4.5.44" firebase_messaging_web: dependency: transitive description: name: firebase_messaging_web - sha256: "9c82e55c4b470970c77a99c90733adff6be7d5a67251007727b2a98d4f04e0cd" + sha256: "258b9d637965db7855299b123533609ed95e52350746a723dfd1d8d6f3fac678" url: "https://pub.dev" source: hosted - version: "3.5.11" + version: "3.9.0" + fixnum: + dependency: transitive + description: + name: fixnum + sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" + url: "https://pub.dev" + source: hosted + version: "1.1.0" flare_flutter: dependency: "direct main" description: @@ -362,26 +362,18 @@ packages: dependency: "direct main" description: name: flutter_advanced_switch - sha256: b16c92c648a35c95cf9cfd0d6cf3391765f1c9cc5786418999d0058ed51f3d6b + sha256: e1147161a3dd9b708a71c65e76174d4d1a0a5908a571b8b38b65c79b142c52a0 url: "https://pub.dev" source: hosted - version: "3.0.1" - flutter_blurhash: - dependency: transitive - description: - name: flutter_blurhash - sha256: "05001537bd3fac7644fa6558b09ec8c0a3f2eba78c0765f88912882b1331a5c6" - url: "https://pub.dev" - source: hosted - version: "0.7.0" + version: "3.1.0" flutter_cache_manager: dependency: transitive description: name: flutter_cache_manager - sha256: "8207f27539deb83732fdda03e259349046a39a4c767269285f449ade355d54ba" + sha256: "400b6592f16a4409a7f2bb929a9a7e38c72cceb8ffb99ee57bbf2cb2cecf8386" url: "https://pub.dev" source: hosted - version: "3.3.1" + version: "3.4.1" flutter_custom_month_picker: dependency: "direct main" description: @@ -394,10 +386,10 @@ packages: dependency: transitive description: name: flutter_keyboard_visibility - sha256: "4983655c26ab5b959252ee204c2fffa4afeb4413cd030455194ec0caa3b8e7cb" + sha256: "98664be7be0e3ffca00de50f7f6a287ab62c763fc8c762e0a21584584a3ff4f8" url: "https://pub.dev" source: hosted - version: "5.4.1" + version: "6.0.0" flutter_keyboard_visibility_linux: dependency: transitive description: @@ -442,12 +434,12 @@ packages: dependency: "direct main" description: name: flutter_launcher_icons - sha256: a9de6706cd844668beac27c0aed5910fa0534832b3c2cad61a5fd977fce82a5d + sha256: "526faf84284b86a4cb36d20a5e45147747b7563d921373d4ee0559c54fcdbcea" url: "https://pub.dev" source: hosted - version: "0.10.0" + version: "0.13.1" flutter_lints: - dependency: "direct dev" + dependency: "direct overridden" description: name: flutter_lints sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04 @@ -458,26 +450,26 @@ packages: dependency: "direct main" description: name: flutter_local_notifications - sha256: f222919a34545931e47b06000836b5101baeffb0e6eb5a4691d2d42851740dd9 + sha256: c500d5d9e7e553f06b61877ca6b9c8b92c570a4c8db371038702e8ce57f8a50f url: "https://pub.dev" source: hosted - version: "12.0.4" + version: "17.2.2" flutter_local_notifications_linux: dependency: transitive description: name: flutter_local_notifications_linux - sha256: "3c6d6db334f609a92be0c0915f40871ec56f5d2adf01e77ae364162c587c0ca8" + sha256: c49bd06165cad9beeb79090b18cd1eb0296f4bf4b23b84426e37dd7c027fc3af url: "https://pub.dev" source: hosted - version: "2.0.0" + version: "4.0.1" flutter_local_notifications_platform_interface: dependency: transitive description: name: flutter_local_notifications_platform_interface - sha256: "5ec1feac5f7f7d9266759488bc5f76416152baba9aa1b26fe572246caa00d1ab" + sha256: "85f8d07fe708c1bdcf45037f2c0109753b26ae077e9d9e899d55971711a4ea66" url: "https://pub.dev" source: hosted - version: "6.0.0" + version: "7.2.0" flutter_localizations: dependency: "direct main" description: flutter @@ -487,42 +479,42 @@ packages: dependency: transitive description: name: flutter_plugin_android_lifecycle - sha256: b068ffc46f82a55844acfa4fdbb61fad72fa2aef0905548419d97f0f95c456da + sha256: "9ee02950848f61c4129af3d6ec84a1cfc0e47931abc746b03e7a3bc3e8ff6eda" url: "https://pub.dev" source: hosted - version: "2.0.17" + version: "2.0.22" flutter_sound: dependency: "direct main" description: name: flutter_sound - sha256: "090a4694b11ecc744c2010621c4ffc5fe7c3079d304ea014961a72c7b72cfe6c" + sha256: "1f40b26b92907a433afe877c927cd48f5a2e4d0f7188e5d39eb5756008aa51ab" url: "https://pub.dev" source: hosted - version: "9.2.13" + version: "9.6.0" flutter_sound_platform_interface: dependency: transitive description: name: flutter_sound_platform_interface - sha256: "4537eaeb58a32748c42b621ad6116f7f4c6ee0a8d6ffaa501b165fe1c9df4753" + sha256: "2e218521d8187b9a4c65063ad9c79bfe88119531ff68047a2eaa6b027cb276bb" url: "https://pub.dev" source: hosted - version: "9.2.13" + version: "9.6.0" flutter_sound_web: dependency: transitive description: name: flutter_sound_web - sha256: ad4ca92671a1879e1f613e900bbbdb8170b20d57d1e4e6363018fe56b055594f + sha256: "5013a15e4e69a4bdc8badd729130eef43c3305e30ba8e6933f863436ce969932" url: "https://pub.dev" source: hosted - version: "9.2.13" + version: "9.6.0" flutter_svg: dependency: "direct main" description: name: flutter_svg - sha256: "6ff9fa12892ae074092de2fa6a9938fb21dbabfdaa2ff57dc697ff912fc8d4b2" + sha256: "7b4ca6cf3304575fe9c8ec64813c8d02ee41d2afe60bcfe0678bcb5375d596a2" url: "https://pub.dev" source: hosted - version: "1.1.6" + version: "2.0.10+1" flutter_test: dependency: "direct dev" description: flutter @@ -532,10 +524,10 @@ packages: dependency: "direct main" description: name: flutter_typeahead - sha256: b9942bd5b7611a6ec3f0730c477146cffa4cd4b051077983ba67ddfc9e7ee818 + sha256: d64712c65db240b1057559b952398ebb6e498077baeebf9b0731dade62438a6d url: "https://pub.dev" source: hosted - version: "4.8.0" + version: "5.2.0" flutter_web_plugins: dependency: transitive description: flutter @@ -545,18 +537,18 @@ packages: dependency: "direct main" description: name: fluttertoast - sha256: "474f7d506230897a3cd28c965ec21c5328ae5605fc9c400cd330e9e9d6ac175c" + sha256: "95f349437aeebe524ef7d6c9bde3e6b4772717cf46a0eb6a3ceaddc740b297cc" url: "https://pub.dev" source: hosted - version: "8.2.2" + version: "8.2.8" font_awesome_flutter: dependency: "direct main" description: name: font_awesome_flutter - sha256: "959ef4add147753f990b4a7c6cccb746d5792dbdc81b1cde99e62e7edb31b206" + sha256: "275ff26905134bcb59417cf60ad979136f1f8257f2f449914b2c3e05bbb4cd6f" url: "https://pub.dev" source: hosted - version: "10.4.0" + version: "10.7.0" get: dependency: transitive description: @@ -569,18 +561,18 @@ packages: dependency: transitive description: name: graphs - sha256: aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19 + sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.3.2" http: dependency: "direct main" description: name: http - sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2" + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 url: "https://pub.dev" source: hosted - version: "0.13.6" + version: "1.2.2" http_parser: dependency: transitive description: @@ -593,66 +585,66 @@ packages: dependency: transitive description: name: image - sha256: "8e9d133755c3e84c73288363e6343157c383a0c6c56fc51afcc5d4d7180306d6" + sha256: "2237616a36c0d69aef7549ab439b833fb7f9fb9fc861af2cc9ac3eedddd69ca8" url: "https://pub.dev" source: hosted - version: "3.3.0" + version: "4.2.0" image_cropper: dependency: "direct main" description: name: image_cropper - sha256: "710ab4b7953e9ce1d27d833f741e5f8f3afb0b0ba3556dc0b844741b5f55c2b3" + sha256: fe37d9a129411486e0d93089b61bd326d05b89e78ad4981de54b560725bf5bd5 url: "https://pub.dev" source: hosted - version: "3.0.3" + version: "8.0.2" image_cropper_for_web: dependency: transitive description: name: image_cropper_for_web - sha256: "09e93a8ec0435adcaa23622ac090442872f18145d70b9ff605ffedcf97d56255" + sha256: "34256c8fb7fcb233251787c876bb37271744459b593a948a2db73caa323034d0" url: "https://pub.dev" source: hosted - version: "1.0.3" + version: "6.0.2" image_cropper_platform_interface: dependency: transitive description: name: image_cropper_platform_interface - sha256: "62349e3aab63873ea9b9ab9f69d036ab8a0d74b3004beec4303981386cb9273f" + sha256: e8e9d2ca36360387aee39295ce49029362ae4df3071f23e8e71f2b81e40b7531 url: "https://pub.dev" source: hosted - version: "3.0.3" + version: "7.0.0" image_picker: dependency: "direct main" description: name: image_picker - sha256: b6951e25b795d053a6ba03af5f710069c99349de9341af95155d52665cb4607c + sha256: "021834d9c0c3de46bf0fe40341fa07168407f694d9b2bb18d532dc1261867f7a" url: "https://pub.dev" source: hosted - version: "0.8.9" + version: "1.1.2" image_picker_android: dependency: transitive description: name: image_picker_android - sha256: d6a6e78821086b0b737009b09363018309bbc6de3fd88cc5c26bc2bb44a4957f + sha256: c0a6763d50b354793d0192afd0a12560b823147d3ded7c6b77daf658fa05cc85 url: "https://pub.dev" source: hosted - version: "0.8.8+2" + version: "0.8.12+13" image_picker_for_web: dependency: transitive description: name: image_picker_for_web - sha256: "869fe8a64771b7afbc99fc433a5f7be2fea4d1cb3d7c11a48b6b579eb9c797f0" + sha256: "65d94623e15372c5c51bebbcb820848d7bcb323836e12dfdba60b5d3a8b39e50" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "3.0.5" image_picker_ios: dependency: transitive description: name: image_picker_ios - sha256: c5538cacefacac733c724be7484377923b476216ad1ead35a0d2eadcdc0fc497 + sha256: "6703696ad49f5c3c8356d576d7ace84d1faf459afb07accbb0fae780753ff447" url: "https://pub.dev" source: hosted - version: "0.8.8+2" + version: "0.8.12" image_picker_linux: dependency: transitive description: @@ -673,10 +665,10 @@ packages: dependency: transitive description: name: image_picker_platform_interface - sha256: ed9b00e63977c93b0d2d2b343685bed9c324534ba5abafbb3dfbd6a780b1b514 + sha256: "9ec26d410ff46f483c5519c29c02ef0e02e13a543f882b152d4bfd2f06802f80" url: "https://pub.dev" source: hosted - version: "2.9.1" + version: "2.10.0" image_picker_windows: dependency: transitive description: @@ -697,18 +689,18 @@ packages: dependency: transitive description: name: js - sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" + sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 url: "https://pub.dev" source: hosted - version: "0.6.5" + version: "0.6.7" json_annotation: dependency: transitive description: name: json_annotation - sha256: b10a7b2ff83d83c777edba3c6a0f97045ddadd56c944e1a23a3fdf43a1bf4467 + sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" url: "https://pub.dev" source: hosted - version: "4.8.1" + version: "4.9.0" leak_tracker: dependency: transitive description: @@ -737,10 +729,10 @@ packages: dependency: transitive description: name: lints - sha256: "5e4a9cd06d447758280a8ac2405101e0e2094d2a1dbdd3756aec3fe7775ba593" + sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452" url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "2.1.1" local_auth: dependency: "direct main" description: @@ -758,7 +750,7 @@ packages: source: hosted version: "1.0.44" local_auth_darwin: - dependency: transitive + dependency: "direct main" description: name: local_auth_darwin sha256: "7ba5738c874ca2b910d72385d00d2bebad9d4e807612936cf5e32bc01a048c71" @@ -769,42 +761,42 @@ packages: dependency: transitive description: name: local_auth_platform_interface - sha256: fc5bd537970a324260fda506cfb61b33ad7426f37a8ea5c461cf612161ebba54 + sha256: "1b842ff177a7068442eae093b64abe3592f816afd2a533c0ebcdbe40f9d2075a" url: "https://pub.dev" source: hosted - version: "1.0.8" + version: "1.0.10" local_auth_windows: dependency: transitive description: name: local_auth_windows - sha256: "19323b75ab781d5362dbb15dcb7e0916d2431c7a6dbdda016ec9708689877f73" + sha256: bc4e66a29b0fdf751aafbec923b5bed7ad6ed3614875d8151afe2578520b2ab5 url: "https://pub.dev" source: hosted - version: "1.0.8" + version: "1.0.11" localization: dependency: "direct main" description: name: localization - sha256: "01d892155364dc456e1141dd8003e43c98d457f2b51fe1b8984766bad2a3fd72" + sha256: "9fa21644b75ca3fe844f8f115d03cd6fdc675054dd9aab6c5de5861145ea57b5" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" logger: dependency: transitive description: name: logger - sha256: "7ad7215c15420a102ec687bb320a7312afd449bac63bfb1c60d9787c27b9767f" + sha256: "697d067c60c20999686a0add96cf6aba723b3aa1f83ecf806a8097231529ec32" url: "https://pub.dev" source: hosted - version: "1.4.0" + version: "2.4.0" lottie: dependency: "direct main" description: name: lottie - sha256: "23522951540d20a57a60202ed7022e6376bed206a4eee1c347a91f58bd57eb9f" + sha256: "6a24ade5d3d918c306bb1c21a6b9a04aab0489d51a2582522eea820b4093b62b" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "3.1.2" matcher: dependency: transitive description: @@ -833,10 +825,10 @@ packages: dependency: transitive description: name: mime - sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e + sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a" url: "https://pub.dev" source: hosted - version: "1.0.4" + version: "1.0.6" nested: dependency: transitive description: @@ -849,18 +841,74 @@ packages: dependency: transitive description: name: octo_image - sha256: "107f3ed1330006a3bea63615e81cf637433f5135a52466c7caa0e7152bca9143" + sha256: "34faa6639a78c7e3cbe79be6f9f96535867e879748ade7d17c9b1ae7536293bd" url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "2.1.0" open_file: dependency: "direct main" description: name: open_file - sha256: a5a32d44acb7c899987d0999e1e3cbb0a0f1adebbf41ac813ec6d2d8faa0af20 + sha256: de371f549b1320a48980952473fae1903d4927975506534c8ea4643642eb5f98 url: "https://pub.dev" source: hosted - version: "3.3.2" + version: "3.5.3" + open_file_android: + dependency: transitive + description: + name: open_file_android + sha256: b5e1a2e9c5ea8e256b015403e94299039627c7205c2a5e6bb426c33235b6ca9a + url: "https://pub.dev" + source: hosted + version: "1.0.2" + open_file_ios: + dependency: transitive + description: + name: open_file_ios + sha256: "8d9c03495cf14ca70bdbf191894b822ba3b2629cc0046ee311cbbe504db66c44" + url: "https://pub.dev" + source: hosted + version: "1.0.2" + open_file_linux: + dependency: transitive + description: + name: open_file_linux + sha256: cd2088722048b9c40f8615c6d83005fe0726e0e447e9cdfb40c2b65477291f7d + url: "https://pub.dev" + source: hosted + version: "0.0.4" + open_file_mac: + dependency: transitive + description: + name: open_file_mac + sha256: "9d809f528cccc6dc9390caf50893eae9a6944e0f3b8a2558c7ad19e91c9244a1" + url: "https://pub.dev" + source: hosted + version: "1.0.1" + open_file_platform_interface: + dependency: transitive + description: + name: open_file_platform_interface + sha256: "14c50efb1a9667cb96e4fa68d601e6ad348fe337b02789834029b37ae3631498" + url: "https://pub.dev" + source: hosted + version: "1.0.2" + open_file_web: + dependency: transitive + description: + name: open_file_web + sha256: ba35c6f38c21c2bb4268a80927bb828353dda0edfce92e274e0b9639e4f31360 + url: "https://pub.dev" + source: hosted + version: "0.0.2" + open_file_windows: + dependency: transitive + description: + name: open_file_windows + sha256: "2f4318d2d3958ec8d63b6dd4430c15b1fcb2fe7a2113e83c734584501a5c6d81" + url: "https://pub.dev" + source: hosted + version: "0.0.2" package_info: dependency: "direct main" description: @@ -897,26 +945,26 @@ packages: dependency: "direct main" description: name: path_provider - sha256: a1aa8aaa2542a6bc57e381f132af822420216c80d4781f7aa085ca3229208aaa + sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378 url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.4" path_provider_android: dependency: transitive description: name: path_provider_android - sha256: e595b98692943b4881b219f0a9e3945118d3c16bd7e2813f98ec6e532d905f72 + sha256: "6f01f8e37ec30b07bc424b4deabac37cacb1bc7e2e515ad74486039918a37eb7" url: "https://pub.dev" source: hosted - version: "2.2.1" + version: "2.2.10" path_provider_foundation: dependency: transitive description: name: path_provider_foundation - sha256: "19314d595120f82aca0ba62787d58dde2cc6b5df7d2f0daf72489e38d1b57f2d" + sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16 url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.4.0" path_provider_linux: dependency: transitive description: @@ -929,18 +977,18 @@ packages: dependency: transitive description: name: path_provider_platform_interface - sha256: "94b1e0dd80970c1ce43d5d4e050a9918fce4f4a775e6142424c30a29a363265c" + sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" path_provider_windows: dependency: transitive description: name: path_provider_windows - sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170" + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 url: "https://pub.dev" source: hosted - version: "2.2.1" + version: "2.3.0" pedantic: dependency: transitive description: @@ -953,50 +1001,58 @@ packages: dependency: "direct main" description: name: permission_handler - sha256: bc56bfe9d3f44c3c612d8d393bd9b174eb796d706759f9b495ac254e4294baa5 + sha256: "18bf33f7fefbd812f37e72091a15575e72d5318854877e0e4035a24ac1113ecb" url: "https://pub.dev" source: hosted - version: "10.4.5" + version: "11.3.1" permission_handler_android: dependency: transitive description: name: permission_handler_android - sha256: "59c6322171c29df93a22d150ad95f3aa19ed86542eaec409ab2691b8f35f9a47" + sha256: "76e4ab092c1b240d31177bb64d2b0bea43f43d0e23541ec866151b9f7b2490fa" url: "https://pub.dev" source: hosted - version: "10.3.6" + version: "12.0.12" permission_handler_apple: dependency: transitive description: name: permission_handler_apple - sha256: "99e220bce3f8877c78e4ace901082fb29fa1b4ebde529ad0932d8d664b34f3f5" + sha256: e6f6d73b12438ef13e648c4ae56bd106ec60d17e90a59c4545db6781229082a0 + url: "https://pub.dev" + source: hosted + version: "9.4.5" + permission_handler_html: + dependency: transitive + description: + name: permission_handler_html + sha256: af26edbbb1f2674af65a8f4b56e1a6f526156bc273d0e65dd8075fab51c78851 url: "https://pub.dev" source: hosted - version: "9.1.4" + version: "0.1.3+2" permission_handler_platform_interface: dependency: transitive description: name: permission_handler_platform_interface - sha256: "6760eb5ef34589224771010805bea6054ad28453906936f843a8cc4d3a55c4a4" + sha256: e9c8eadee926c4532d0305dff94b85bf961f16759c3af791486613152af4b4f9 url: "https://pub.dev" source: hosted - version: "3.12.0" + version: "4.2.3" permission_handler_windows: dependency: transitive description: name: permission_handler_windows - sha256: cc074aace208760f1eee6aa4fae766b45d947df85bc831cde77009cdb4720098 + sha256: "1a790728016f79a41216d88672dbc5df30e686e811ad4e698bfc51f76ad91f1e" url: "https://pub.dev" source: hosted - version: "0.1.3" + version: "0.2.1" petitparser: dependency: transitive description: name: petitparser - sha256: "49392a45ced973e8d94a85fdb21293fbb40ba805fc49f2965101ae748a3683b4" + sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 url: "https://pub.dev" source: hosted - version: "5.1.0" + version: "6.0.2" pinput: dependency: "direct main" description: @@ -1009,50 +1065,58 @@ packages: dependency: transitive description: name: platform - sha256: "0a279f0707af40c890e80b1e9df8bb761694c074ba7e1d4ab1bc4b728e200b59" + sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65" url: "https://pub.dev" source: hosted - version: "3.1.3" + version: "3.1.5" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface - sha256: da3fdfeccc4d4ff2da8f8c556704c08f912542c5fb3cf2233ed75372384a034d + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" url: "https://pub.dev" source: hosted - version: "2.1.6" + version: "2.1.8" pointer_interceptor: dependency: transitive description: name: pointer_interceptor - sha256: acfcd63c00ec3d5a7894b0e2a875893716d31958fe03f064734dba7dfd9113d9 + sha256: "57210410680379aea8b1b7ed6ae0c3ad349bfd56fe845b8ea934a53344b9d523" + url: "https://pub.dev" + source: hosted + version: "0.10.1+2" + pointer_interceptor_ios: + dependency: transitive + description: + name: pointer_interceptor_ios + sha256: a6906772b3205b42c44614fcea28f818b1e5fdad73a4ca742a7bd49818d9c917 url: "https://pub.dev" source: hosted - version: "0.9.3+5" - pointycastle: + version: "0.10.1" + pointer_interceptor_platform_interface: dependency: transitive description: - name: pointycastle - sha256: "7c1e5f0d23c9016c5bbd8b1473d0d3fb3fc851b876046039509e18e0c7485f2c" + name: pointer_interceptor_platform_interface + sha256: "0597b0560e14354baeb23f8375cd612e8bd4841bf8306ecb71fcd0bb78552506" url: "https://pub.dev" source: hosted - version: "3.7.3" - process: + version: "0.10.0+1" + pointer_interceptor_web: dependency: transitive description: - name: process - sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" + name: pointer_interceptor_web + sha256: "7a7087782110f8c1827170660b09f8aa893e0e9a61431dbbe2ac3fc482e8c044" url: "https://pub.dev" source: hosted - version: "4.2.4" + version: "0.10.2+1" provider: dependency: "direct main" description: name: provider - sha256: cdbe7530b12ecd9eb455bdaa2fcb8d4dad22e80b8afb4798b41479d5ce26847f + sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c url: "https://pub.dev" source: hosted - version: "6.0.5" + version: "6.1.2" qr_code_scanner: dependency: "direct main" description: @@ -1081,18 +1145,26 @@ packages: dependency: "direct main" description: name: rive - sha256: "22e3755b75f4ea4492d2fecf4fc2acf1c8d0073df39781d290a20cbfe74c3760" + sha256: daa5394a7d064b4997b39e9afa02f6882c479c38b19fa0dd60f052b99c105400 + url: "https://pub.dev" + source: hosted + version: "0.13.13" + rive_common: + dependency: transitive + description: + name: rive_common + sha256: c7bf0781b1621629361579c300ac2f8aa1a238227a242202a596e82becc244d7 url: "https://pub.dev" source: hosted - version: "0.9.1" + version: "0.4.11" rxdart: dependency: transitive description: name: rxdart - sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb" + sha256: "5c3004a4a8dbb94bd4bf5412a4def4acdaa12e12f269737a5751369e12d1a962" url: "https://pub.dev" source: hosted - version: "0.27.7" + version: "0.28.0" share: dependency: "direct main" description: @@ -1105,82 +1177,82 @@ packages: dependency: "direct main" description: name: shared_preferences - sha256: "81429e4481e1ccfb51ede496e916348668fd0921627779233bd24cc3ff6abd02" + sha256: "746e5369a43170c25816cc472ee016d3a66bc13fcf430c0bc41ad7b4b2922051" url: "https://pub.dev" source: hosted - version: "2.2.2" + version: "2.3.2" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - sha256: "8568a389334b6e83415b6aae55378e158fbc2314e074983362d20c562780fb06" + sha256: "480ba4345773f56acda9abf5f50bd966f581dac5d514e5fc4a18c62976bbba7e" url: "https://pub.dev" source: hosted - version: "2.2.1" + version: "2.3.2" shared_preferences_foundation: dependency: transitive description: name: shared_preferences_foundation - sha256: "7bf53a9f2d007329ee6f3df7268fd498f8373602f943c975598bbb34649b62a7" + sha256: c4b35f6cb8f63c147312c054ce7c2254c8066745125264f0c88739c417fc9d9f url: "https://pub.dev" source: hosted - version: "2.3.4" + version: "2.5.2" shared_preferences_linux: dependency: transitive description: name: shared_preferences_linux - sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa" + sha256: "580abfd40f415611503cae30adf626e6656dfb2f0cee8f465ece7b6defb40f2f" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.1" shared_preferences_platform_interface: dependency: transitive description: name: shared_preferences_platform_interface - sha256: d4ec5fc9ebb2f2e056c617112aa75dcf92fc2e4faaf2ae999caa297473f75d8a + sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.4.1" shared_preferences_web: dependency: transitive description: name: shared_preferences_web - sha256: d762709c2bbe80626ecc819143013cc820fa49ca5e363620ee20a8b15a3e3daf + sha256: d2ca4132d3946fec2184261726b355836a82c33d7d5b67af32692aff18a4684e url: "https://pub.dev" source: hosted - version: "2.2.1" + version: "2.4.2" shared_preferences_windows: dependency: transitive description: name: shared_preferences_windows - sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59" + sha256: "94ef0f72b2d71bc3e700e025db3710911bd51a71cefb65cc609dd0d9a982e3c1" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.1" shimmer: dependency: "direct main" description: name: shimmer - sha256: "1f1009b5845a1f88f1c5630212279540486f97409e9fc3f63883e71070d107bf" + sha256: "5f88c883a22e9f9f299e5ba0e4f7e6054857224976a5d9f839d4ebdc94a14ac9" url: "https://pub.dev" source: hosted - version: "2.0.0" + version: "3.0.0" signature: dependency: "direct main" description: name: signature - sha256: ad23383717dfa926204695ef6928ff513a77387be1b4a8c685099ce3ec35e5f8 + sha256: "8056e091ad59c2eb5735fee975ec649d0caf8ce802bb1ffb1e0955b00a6d0daa" url: "https://pub.dev" source: hosted - version: "5.3.0" + version: "5.5.0" simple_gesture_detector: dependency: transitive description: name: simple_gesture_detector - sha256: "86d08f85f1f58583b7b4b941d989f48ea6ce08c1724a1d10954a277c2ec36592" + sha256: ba2cd5af24ff20a0b8d609cec3f40e5b0744d2a71804a2616ae086b9c19d19a3 url: "https://pub.dev" source: hosted - version: "0.2.0" + version: "0.2.1" sky_engine: dependency: transitive description: flutter @@ -1198,42 +1270,42 @@ packages: dependency: "direct main" description: name: speech_to_text - sha256: ff8fbd31d039bdbac6c7ec9f0516d37df2cbea62c45198326d3b64034e6fb920 + sha256: "6cf8f284997490ebef1d68f8707bef57dcf083f43c0f915cc285428520bfe6be" url: "https://pub.dev" source: hosted - version: "6.1.1" - speech_to_text_macos: + version: "7.0.0" + speech_to_text_platform_interface: dependency: transitive description: - name: speech_to_text_macos - sha256: "6b5575e5a8346be1779838b0a482c259474965b5943668830b479147a75b5bfc" + name: speech_to_text_platform_interface + sha256: a0df1a907091ea09880077dc25aae02af9f79811264e6e97ddb08639b7f771c2 url: "https://pub.dev" source: hosted - version: "1.0.2" - speech_to_text_platform_interface: + version: "2.2.0" + sprintf: dependency: transitive description: - name: speech_to_text_platform_interface - sha256: "13d90215a7554b9a8c1ce47c0a1739af8eacd2cf196ca66351e54dfd2172746d" + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "7.0.0" sqflite: dependency: transitive description: name: sqflite - sha256: b4d6710e1200e96845747e37338ea8a819a12b51689a3bcf31eff0003b37a0b9 + sha256: a43e5a27235518c03ca238e7b4732cf35eabe863a369ceba6cbefa537a66f16d url: "https://pub.dev" source: hosted - version: "2.2.8+4" + version: "2.3.3+1" sqflite_common: dependency: transitive description: name: sqflite_common - sha256: "8f7603f3f8f126740bc55c4ca2d1027aab4b74a1267a3e31ce51fe40e3b65b8f" + sha256: "7b41b6c3507854a159e24ae90a8e3e9cc01eb26a477c118d6dca065b5f55453e" url: "https://pub.dev" source: hosted - version: "2.4.5+1" + version: "2.5.4+2" stack_trace: dependency: transitive description: @@ -1262,26 +1334,26 @@ packages: dependency: "direct main" description: name: syncfusion_flutter_charts - sha256: bdb7cc5814ceb187793cea587f4a5946afcffd96726b219cee79df8460f44b7b + sha256: a755274a8786b200b7a05f7414168cd5858871db74d0f1de2e57b20a8aaeb7a4 url: "https://pub.dev" source: hosted - version: "21.2.4" + version: "26.2.14" syncfusion_flutter_core: dependency: transitive description: name: syncfusion_flutter_core - sha256: "8db8f55c77f56968681447d3837c10f27a9e861e238a898fda116c7531def979" + sha256: "6e67726b85812afc7105725a23620b876ab7f6b04b8410e211330ffb8c2cdbe8" url: "https://pub.dev" source: hosted - version: "21.2.10" + version: "26.2.14" synchronized: dependency: transitive description: name: synchronized - sha256: "5fcbd27688af6082f5abd611af56ee575342c30e87541d0245f7ff99faa02c60" + sha256: a824e842b8a054f91a728b783c177c1e4731f6b124f9192468457a8913371255 url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "3.2.0" table_calendar: dependency: "direct main" description: @@ -1310,10 +1382,10 @@ packages: dependency: transitive description: name: timezone - sha256: "1cfd8ddc2d1cfd836bc93e67b9be88c3adaeca6f40a00ca999104c30693cdca0" + sha256: "2236ec079a174ce07434e89fcd3fcda430025eb7692244139a9cf54fdcf1fc7d" url: "https://pub.dev" source: hosted - version: "0.9.2" + version: "0.9.4" typed_data: dependency: transitive description: @@ -1334,74 +1406,98 @@ packages: dependency: "direct main" description: name: url_launcher - sha256: eb1e00ab44303d50dd487aab67ebc575456c146c6af44422f9c13889984c00f3 + sha256: "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3" url: "https://pub.dev" source: hosted - version: "6.1.11" + version: "6.3.0" url_launcher_android: dependency: transitive description: name: url_launcher_android - sha256: "31222ffb0063171b526d3e569079cf1f8b294075ba323443fdc690842bfd4def" + sha256: e35a698ac302dd68e41f73250bd9517fe3ab5fa4f18fe4647a0872db61bacbab url: "https://pub.dev" source: hosted - version: "6.2.0" + version: "6.3.10" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: "4ac97281cf60e2e8c5cc703b2b28528f9b50c8f7cebc71df6bdf0845f647268a" + sha256: e43b677296fadce447e987a2f519dcf5f6d1e527dc35d01ffab4fff5b8a7063e url: "https://pub.dev" source: hosted - version: "6.2.0" + version: "6.3.1" url_launcher_linux: dependency: transitive description: name: url_launcher_linux - sha256: "9f2d390e096fdbe1e6e6256f97851e51afc2d9c423d3432f1d6a02a8a9a8b9fd" + sha256: e2b9622b4007f97f504cd64c0128309dfb978ae66adbe944125ed9e1750f06af url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "3.2.0" url_launcher_macos: dependency: transitive description: name: url_launcher_macos - sha256: b7244901ea3cf489c5335bdacda07264a6e960b1c1b1a9f91e4bc371d9e68234 + sha256: "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de" url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "3.2.0" url_launcher_platform_interface: dependency: transitive description: name: url_launcher_platform_interface - sha256: "980e8d9af422f477be6948bdfb68df8433be71f5743a188968b0c1b887807e50" + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.3.2" url_launcher_web: dependency: transitive description: name: url_launcher_web - sha256: ba140138558fcc3eead51a1c42e92a9fb074a1b1149ed3c73e66035b2ccd94f2 + sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e" url: "https://pub.dev" source: hosted - version: "2.0.19" + version: "2.3.3" url_launcher_windows: dependency: transitive description: name: url_launcher_windows - sha256: "7754a1ad30ee896b265f8d14078b0513a4dba28d358eabb9d5f339886f4a1adc" + sha256: "49c10f879746271804767cb45551ec5592cdab00ee105c06dddde1a98f73b185" url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "3.1.2" uuid: dependency: transitive description: name: uuid - sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + sha256: f33d6bb662f0e4f79dcd7ada2e6170f3b3a2530c28fc41f49a411ddedd576a77 + url: "https://pub.dev" + source: hosted + version: "4.5.0" + vector_graphics: + dependency: transitive + description: + name: vector_graphics + sha256: "32c3c684e02f9bc0afb0ae0aa653337a2fe022e8ab064bcd7ffda27a74e288e3" + url: "https://pub.dev" + source: hosted + version: "1.1.11+1" + vector_graphics_codec: + dependency: transitive + description: + name: vector_graphics_codec + sha256: c86987475f162fadff579e7320c7ddda04cd2fdeffbe1129227a85d9ac9e03da + url: "https://pub.dev" + source: hosted + version: "1.1.11+1" + vector_graphics_compiler: + dependency: transitive + description: + name: vector_graphics_compiler + sha256: "12faff3f73b1741a36ca7e31b292ddeb629af819ca9efe9953b70bd63fc8cd81" url: "https://pub.dev" source: hosted - version: "3.0.7" + version: "1.1.11+1" vector_math: dependency: transitive description: @@ -1418,30 +1514,38 @@ packages: url: "https://pub.dev" source: hosted version: "14.2.5" - win32: + web: dependency: transitive + description: + name: web + sha256: d43c1d6b787bf0afad444700ae7f4db8827f701bc61c255ac8d328c6f4d52062 + url: "https://pub.dev" + source: hosted + version: "1.0.0" + win32: + dependency: "direct overridden" description: name: win32 - sha256: "5a751eddf9db89b3e5f9d50c20ab8612296e4e8db69009788d6c8b060a84191c" + sha256: "68d1e89a91ed61ad9c370f9f8b6effed9ae5e0ede22a270bdfa6daf79fc2290a" url: "https://pub.dev" source: hosted - version: "4.1.4" + version: "5.5.4" xdg_directories: dependency: transitive description: name: xdg_directories - sha256: bd512f03919aac5f1313eb8249f223bacf4927031bf60b02601f81f687689e86 + sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d url: "https://pub.dev" source: hosted - version: "0.2.0+3" + version: "1.0.4" xml: dependency: transitive description: name: xml - sha256: "979ee37d622dec6365e2efa4d906c37470995871fe9ae080d967e192d88286b5" + sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 url: "https://pub.dev" source: hosted - version: "6.2.2" + version: "6.5.0" yaml: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index ff17afa5..d9ec191f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -18,7 +18,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.2.2+9 environment: - sdk: ">=2.12.0 <4.0.0" + sdk: ">=3.5.0 <4.0.0" localization_dir: assets\translations @@ -38,55 +38,57 @@ dependencies: # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.5 font_awesome_flutter: ^10.2.1 - http: ^0.13.5 + http: ^1.2.2 provider: ^6.0.3 shared_preferences: ^2.0.15 fluttertoast: ^8.0.9 - image_picker: ^0.8.6 + image_picker: ^1.1.2 url_launcher: ^6.1.6 - flutter_launcher_icons: ^0.10.0 + flutter_launcher_icons: ^0.13.1 package_info: ^2.0.2 share: ^2.0.4 - flutter_local_notifications: ^12.0.1+1 + flutter_local_notifications: ^17.2.2 cached_network_image: ^3.2.2 - carousel_slider: ^4.1.1 + carousel_slider: ^5.0.0 intl: ^0.19.0 - flutter_typeahead: ^4.1.1 - speech_to_text: ^6.1.1 - firebase_core: ^2.4.0 - firebase_messaging: ^14.2.0 + flutter_typeahead: ^5.2.0 + speech_to_text: ^7.0.0 + firebase_core: ^3.4.1 + firebase_messaging: ^15.1.1 qr_code_scanner: ^1.0.1 flutter_sound: ^9.2.13 - permission_handler: ^10.2.0 - rive: ^0.9.1 + permission_handler: ^11.3.1 + rive: ^0.13.13 another_flushbar: pinput: - audioplayers: ^1.1.1 + audioplayers: ^6.1.0 flare_flutter: ^3.0.2 signature: ^5.3.0 - flutter_svg: ^1.1.6 - file_picker: ^5.2.5 + flutter_svg: ^2.0.10+1 + file_picker: ^8.1.2 record_mp3_plus: any path_provider: ^2.1.0 open_file: ^3.3.2 localization: ^2.1.0 dotted_border: ^2.1.0 - lottie: ^2.3.0 - shimmer: ^2.0.0 + lottie: ^3.1.2 + shimmer: ^3.0.0 flutter_advanced_switch: ^3.0.1 table_calendar: ^3.0.8 - image_cropper: ^3.0.3 + image_cropper: ^8.0.2 badges: ^3.1.1 # buttons_tabbar: ^1.1.2 flutter_custom_month_picker: ^0.1.3 - syncfusion_flutter_charts: ^21.2.3 + syncfusion_flutter_charts: ^26.2.14 local_auth: ^2.3.0 + local_auth_darwin: any dev_dependencies: flutter_test: sdk: flutter - +dependency_overrides: + win32: ^5.5.4 # The "flutter_lints" package below contains a set of recommended lints to # encourage good coding practices. The lint set provided by the package is # activated in the `analysis_options.yaml` file located at the root of your diff --git a/test/widget_test.dart b/test/widget_test.dart index 9018cb41..8196589c 100644 --- a/test/widget_test.dart +++ b/test/widget_test.dart @@ -13,7 +13,7 @@ import 'package:test_sa/main.dart'; void main() { testWidgets('Counter increments smoke test', (WidgetTester tester) async { // Build our app and trigger a frame. - await tester.pumpWidget(MyApp()); + await tester.pumpWidget(const MyApp()); // Verify that our counter starts at 0. expect(find.text('0'), findsOneWidget);