null safety conversion complete.

design_3.0_latest
Sikander Saleem 1 year ago
parent be4c8d7653
commit e6e35ab1d0

@ -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')

@ -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 {

@ -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"

@ -31,8 +31,8 @@ class ApiManager {
Future<http.Response> get(String url, {Map<String, String>? 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<http.Response> multiPart(String url, {Map<String, String>? headers, required Map<String, String> body, required List<Future<MultipartFile>> files}) async {
Map<String, String> _headers = const {
Map<String, String> 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);
},

@ -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;

@ -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;

@ -90,7 +90,7 @@ class FirebaseNotificationManger {
FirebaseMessaging.instance.getInitialMessage().then((initialMessage) {
if (initialMessage != null) {
handleMessage(context, initialMessage!.data);
handleMessage(context, initialMessage.data);
}
});

@ -29,7 +29,7 @@ class NotificationManger {
await localNotificationsPlugin.resolvePlatformSpecificImplementation<IOSFlutterLocalNotificationsPlugin>()?.requestPermissions(alert: true, badge: true, sound: true);
} else if (Platform.isAndroid) {
final AndroidFlutterLocalNotificationsPlugin? androidImplementation = localNotificationsPlugin.resolvePlatformSpecificImplementation<AndroidFlutterLocalNotificationsPlugin>();
final bool granted = await androidImplementation?.requestPermission() ?? false;
final bool granted = await androidImplementation?.requestNotificationsPermission() ?? false;
if (!granted) {
if (kDebugMode) {
print("-------------------- Permission Granted ------------------------");

@ -181,7 +181,6 @@ class AllRequestsProvider extends ChangeNotifier {
if (isCalendarLoading == true) return -2;
isCalendarLoading = true;
notifyListeners();
if (isCalendarLoading == null) notifyListeners();
Response response;
try {
Map<String, dynamic> body = {

@ -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<int> 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);

@ -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;

@ -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) => Asset.fromJson(asset))?.toList() ?? [];
var dList = equipmentListJson.map<Asset>((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);

@ -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;

@ -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<String, dynamic> 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) {

@ -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<Hospital> _page = categoriesListJson.map((category) => Hospital.fromJson(category)).toList();
List<Hospital> 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<Hospital> _page = [];
List<Hospital> page = [];
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List categoriesListJson = json.decode(response.body)["data"];
_page = categoriesListJson.map((category) => Hospital.fromJson(category)).toList();
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<Hospital> _page = [];
List<Hospital> page = [];
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List categoriesListJson = json.decode(response.body)["data"];
_page = categoriesListJson.map((category) => Hospital.fromJson(category)).toList();
page = categoriesListJson.map((category) => Hospital.fromJson(category)).toList();
}
return _page;
return page;
} catch (error) {
_loading = false;
_stateCode = -1;

@ -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<SystemNotificationModel> _serviceRequestsPage = requestsListJson.map((request) => SystemNotificationModel.fromJson(request)).toList();
if (notifications == null) notifications = [];
notifications.addAll(_serviceRequestsPage);
List<SystemNotificationModel> 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<SystemNotificationModel> _recentNotifications = requestsListJson.map((request) => SystemNotificationModel.fromJson(request)).toList();
return _recentNotifications;
List<SystemNotificationModel> recentNotifications = requestsListJson.map((request) => SystemNotificationModel.fromJson(request)).toList();
return recentNotifications;
}
return null;
} catch (error) {

@ -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<SparePart> _page = categoriesListJson.map((part) => SparePart.fromJson(part)).toList();
List<SparePart> 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();

@ -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<String, dynamic> body = ppm.copyWith(assignedEmployeeId: user.userName, tbsTimer: ppm.tbsTimer).toJson();
response = await ApiManager.instance.put(URLs.updatePentry, body: body);

@ -269,7 +269,7 @@ class ServiceRequestsProvider extends ChangeNotifier {
Future<PendingAssetServiceRequest?> 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);

@ -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';

@ -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();

@ -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

@ -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) {

@ -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";
}

@ -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';

@ -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;
}
}

@ -29,7 +29,7 @@ class DashboardView extends StatefulWidget {
}
class _DashboardViewState extends State<DashboardView> {
int _currentPage = 0;
final int _currentPage = 0;
bool isFCM = true;
late User user;
@ -87,7 +87,7 @@ class _DashboardViewState extends State<DashboardView> {
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<DashboardView> {
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),
),
),

@ -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<AssetGroup?>(
value: value,
child: Text(
value?.name ?? "",
value.name ?? "",
style: Theme.of(context).textTheme.bodyLarge,
),
);
})?.toList() ??
}).toList() ??
[], // Added null check and empty list default
),
);

@ -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 {

@ -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(" ")
: "";
}

@ -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);

@ -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(),

@ -129,26 +129,26 @@ class AssetByIdModel {
if (json['multiAssets'] != null) {
multiAssets = <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<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
if (this.multiAssets != null) {
data['multiAssets'] = this.multiAssets!.map((v) => v.toJson()).toList();
final Map<String, dynamic> data = <String, dynamic>{};
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<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['assetSerialNo'] = this.assetSerialNo;
data['systemID'] = this.systemID;
data['assetNumber'] = this.assetNumber;
final Map<String, dynamic> data = <String, dynamic>{};
data['assetSerialNo'] = assetSerialNo;
data['systemID'] = systemID;
data['assetNumber'] = assetNumber;
return data;
}
}
@ -375,30 +375,30 @@ class ModelDefinition {
if (json['suppliers'] != null) {
suppliers = <Suppliers>[];
json['suppliers'].forEach((v) {
suppliers!.add(new Suppliers.fromJson(v));
suppliers!.add(Suppliers.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
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<String, dynamic> data = <String, dynamic>{};
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<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['suppliername'] = this.suppliername;
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['suppliername'] = suppliername;
return data;
}
}
@ -437,10 +437,10 @@ class AssetReplace {
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['name'] = this.name;
data['value'] = this.value;
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['name'] = name;
data['value'] = value;
return data;
}
}
@ -460,18 +460,18 @@ class Site {
if (json['buildings'] != null) {
buildings = <Buildings>[];
json['buildings'].forEach((v) {
buildings!.add(new Buildings.fromJson(v));
buildings!.add(Buildings.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['customerCode'] = this.customerCode;
data['custName'] = this.custName;
if (this.buildings != null) {
data['buildings'] = this.buildings!.map((v) => v.toJson()).toList();
final Map<String, dynamic> data = <String, dynamic>{};
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 = <Floors>[];
json['floors'].forEach((v) {
floors!.add(new Floors.fromJson(v));
floors!.add(Floors.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['name'] = this.name;
data['value'] = this.value;
if (this.floors != null) {
data['floors'] = this.floors!.map((v) => v.toJson()).toList();
final Map<String, dynamic> data = <String, dynamic>{};
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 = <Departments>[];
json['departments'].forEach((v) {
departments!.add(new Departments.fromJson(v));
departments!.add(Departments.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['name'] = this.name;
data['value'] = this.value;
if (this.departments != null) {
data['departments'] = this.departments!.map((v) => v.toJson()).toList();
final Map<String, dynamic> data = <String, dynamic>{};
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<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['name'] = this.name;
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['name'] = name;
return data;
}
}
@ -576,11 +576,11 @@ class Department {
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['departmentName'] = this.departmentName;
data['departmentCode'] = this.departmentCode;
data['ntCode'] = this.ntCode;
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['departmentName'] = departmentName;
data['departmentCode'] = departmentCode;
data['ntCode'] = ntCode;
return data;
}
}
@ -599,10 +599,10 @@ class AssetGroup {
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['name'] = this.name;
data['code'] = this.code;
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['name'] = name;
data['code'] = code;
return data;
}
}

@ -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();

@ -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,

@ -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);

@ -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<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['name'] = this.name;
data['value'] = this.value;
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['name'] = name;
data['value'] = value;
return data;
}
}

@ -28,11 +28,11 @@ class VisitTimers {
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['startDateTime'] = this.startDateTime;
data['endDateTime'] = this.endDateTime;
data['workingHours'] = this.workingHours;
final Map<String, dynamic> data = <String, dynamic>{};
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(':\\');
}

@ -9,16 +9,16 @@ class PendingAssetServiceRequest {
details = <Details>[];
if (json['details'] != null) {
json['details'].forEach((v) {
details!.add(new Details.fromJson(v));
details!.add(Details.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['headerMessage'] = this.headerMessage;
if (this.details != null) {
data['details'] = this.details!.map((v) => v.toJson()).toList();
final Map<String, dynamic> data = <String, dynamic>{};
data['headerMessage'] = headerMessage;
if (details != null) {
data['details'] = details!.map((v) => v.toJson()).toList();
}
return data;
}
@ -42,12 +42,12 @@ class Details {
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['message'] = this.message;
data['callComments'] = this.callComments;
data['voiceNote'] = this.voiceNote;
data['createdBy'] = this.createdBy;
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['message'] = message;
data['callComments'] = callComments;
data['voiceNote'] = voiceNote;
data['createdBy'] = createdBy;
return data;
}
}

@ -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();

@ -194,9 +194,9 @@ class CallCreatedBy {
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['name'] = this.name;
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['name'] = name;
return data;
}
}

@ -18,13 +18,13 @@ class SupplierEngineer {
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
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<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['supplierId'] = supplierId;
data['personName'] = personName;
data['personRoleId'] = personRoleId;
data['contact'] = contact;
data['email'] = email;
return data;
}
}

@ -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

@ -54,7 +54,7 @@ class _AppLoadingManagerState extends State<AppLoadingManager> {
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

@ -101,7 +101,7 @@ class _AppTextFormFieldState extends State<AppTextFormField> {
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<AppTextFormField> {
: !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,

@ -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,
],
),

@ -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,
],
),

@ -151,14 +151,14 @@ class _SingleItemDropDownMenuState<T extends Base, X extends LoadingListNotifier
return DropdownMenuItem<T>(
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<T?>(
final selectedT = await showModalBottomSheet<T?>(
// Specify return type
context: context,
isScrollControlled: true,
@ -176,8 +176,8 @@ class _SingleItemDropDownMenuState<T extends Base, X extends LoadingListNotifier
builderString: (emp) => 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),

@ -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(

@ -75,8 +75,8 @@ class _MonthlyFragmentState extends State<MonthlyFragment> {
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);

@ -78,7 +78,7 @@ class _WeeklyFragmentState extends State<WeeklyFragment> {
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<WeeklyFragment> {
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);

@ -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<NotificationsProvider>(context, listen: false);
return Consumer<NotificationsProvider>(builder: (context, _notificationsProvider, _) {
UserProvider _userProvider = Provider.of<UserProvider>(context);
bool isCurrentUserNotEngineer = (_userProvider.user!.type != UsersTypes.engineer);
return Consumer<NotificationsProvider>(builder: (context, notificationsProvider, _) {
UserProvider userProvider = Provider.of<UserProvider>(context);
bool isCurrentUserNotEngineer = (userProvider.user!.type != UsersTypes.engineer);
return RefreshIndicator(
onRefresh: () {
Provider.of<AllRequestsProvider>(context, listen: false).getRequests();
_notificationsProvider.getSystemNotifications(user: Provider.of<UserProvider>(context, listen: false).user!,resetProvider: true);
notificationsProvider.getSystemNotifications(user: Provider.of<UserProvider>(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());
},

@ -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),
]);
});
}

@ -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 <Widget>[
children: <Widget>[
CircularProgressIndicator(
color: AppColor.primary10,
strokeWidth: 1,

@ -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(

@ -88,9 +88,9 @@ class _DashboardPageState extends State<DashboardPage> {
),
);
}).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<DashboardPage> {
return DropdownMenuItem<AssetGroup>(
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<DashboardPage> {
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<DashboardPage> {
children: [
const RequestsFragment(),
ProgressFragment(),
RecentActivitiesFragment(),
const RecentActivitiesFragment(),
],
).expanded,
],

@ -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<LandPage> {
if (await Provider.of<SettingProvider>(context, listen: false).auth.isDeviceSupported()) {
SharedPreferences prefs = await SharedPreferences.getInstance();
if (!prefs.containsKey(ASettings.localAuth)) {
(await Provider.of<SettingProvider>(context, listen: false)).setAuth(false);
(Provider.of<SettingProvider>(context, listen: false)).setAuth(false);
showModalBottomSheet(
context: context,
useSafeArea: true,

@ -143,11 +143,11 @@ class _AllRequestsSearchPageState extends State<AllRequestsSearchPage> {
}
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);
}
}

@ -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),
],

@ -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(

@ -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 <Widget>[
children: <Widget>[
CircularProgressIndicator(
color: AppColor.primary10,
strokeWidth: 1,

@ -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),

@ -48,7 +48,7 @@ class _RequestsListPageState extends State<RequestsListPage> {
_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);
}

@ -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';

@ -22,15 +22,13 @@ class _RequestsTypeFilterState extends State<RequestsTypeFilter> {
@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 ?? [];
});

@ -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<SettingsPage> {
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);

@ -74,7 +74,7 @@ class _SplashPageState extends State<SplashPage> {
Future<bool> 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(),
);
}

@ -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<UserProvider>(context);
// SettingProvider _settingProvider = Provider.of<SettingProvider>(context);
List<SearchWorkOrder> workOrders = [];
UserProvider _userProvider = Provider.of<UserProvider>(context);
UserProvider userProvider = Provider.of<UserProvider>(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,

@ -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<UserProvider>(context, listen: false);
UserProvider userProvider = Provider.of<UserProvider>(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))),
],

@ -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
}

@ -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()));
},
),
),

@ -228,7 +228,7 @@ import '../../../../new_views/common_widgets/app_text_form_field.dart';
class ServiceRequestBottomSheet {
static Future fixRemotelyBottomSheet({required BuildContext context}) {
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
final GlobalKey<FormState> formKey = GlobalKey<FormState>();
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<FormState> _formKey = GlobalKey<FormState>();
final GlobalKey<FormState> formKey = GlobalKey<FormState>();
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<FormState> _formKey = GlobalKey<FormState>();
final GlobalKey<FormState> formKey = GlobalKey<FormState>();
final userProvider = Provider.of<UserProvider>(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<FormState> _formKey = GlobalKey<FormState>();
final GlobalKey<FormState> formKey = GlobalKey<FormState>();
final userProvider = Provider.of<UserProvider>(context, listen: false);
return showModalBottomSheet(
context: context,

@ -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 {

@ -54,19 +54,19 @@ class _RequestDetailViewState extends State<RequestDetailView> {
@override
Widget build(BuildContext context) {
UserProvider _userProvider = Provider.of<UserProvider>(context, listen: false);
UserProvider userProvider = Provider.of<UserProvider>(context, listen: false);
return !widget.fromTabView
? Scaffold(
appBar: DefaultAppBar(title: context.translation.serviceDetails),
body: Padding(
padding: EdgeInsets.only(top: 12.toScreenHeight),
child: Consumer<ServiceRequestsProvider>(builder: (context, serviceRequestsProvider, child) {
return requestDetailCard(serviceRequestsProvider: serviceRequestsProvider, userProvider: _userProvider);
return requestDetailCard(serviceRequestsProvider: serviceRequestsProvider, userProvider: userProvider);
}),
),
)
: Consumer<ServiceRequestsProvider>(builder: (context, serviceRequestsProvider, child) {
return requestDetailCard(serviceRequestsProvider: serviceRequestsProvider, userProvider: _userProvider);
return requestDetailCard(serviceRequestsProvider: serviceRequestsProvider, userProvider: userProvider);
});
}
@ -247,7 +247,7 @@ class _RequestDetailViewState extends State<RequestDetailView> {
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<RequestDetailView> {
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),
),
],

@ -60,7 +60,7 @@ class _ScanQrViewState extends State<ScanQrView> {
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)),

@ -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<SparePartRequest> 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<SparePartRequest> 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<SparePartRequest> 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)

@ -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
}

@ -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);

@ -44,14 +44,14 @@ class _AssetFilterScreenState extends State<AssetFilterScreen> {
WidgetsFlutterBinding.ensureInitialized().addPostFrameCallback((timeStamp) async {
loading = true;
setState(() {});
startDate = filter!.supplyDateFrom;
endDate = filter!.supplyDateTo;
startDate = filter.supplyDateFrom;
endDate = filter.supplyDateTo;
final departmentProvider = Provider.of<DepartmentProvider>(context, listen: false);
final siteProvider = Provider.of<SiteProvider>(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<AssetFilterScreen> {
date: DateTime.tryParse(startDate ?? ""),
onDatePicker: (date) {
setState(() {
startDate = date?.toIso8601String();
startDate = date.toIso8601String();
});
},
).expanded,
@ -144,7 +144,7 @@ class _AssetFilterScreenState extends State<AssetFilterScreen> {
date: DateTime.tryParse(endDate ?? ""),
onDatePicker: (date) {
setState(() {
endDate = date?.toIso8601String();
endDate = date.toIso8601String();
});
},
).expanded,

@ -43,15 +43,15 @@ class _AssetSearchScreenState extends State<AssetSearchScreen> {
@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<AssetSearchScreen> {
}
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);
}
}

@ -29,7 +29,7 @@ class DeviceTransferDetails extends StatefulWidget {
class _DeviceTransferDetailsState extends State<DeviceTransferDetails> {
UserProvider? _userProvider;
AssetTransfer? _model;
bool _isLoading = false;
final bool _isLoading = false;
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
@ -73,7 +73,7 @@ class _DeviceTransferDetailsState extends State<DeviceTransferDetails> {
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<DeviceTransferDetails> {
// 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<DeviceTransferDetails> {
// 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<DeviceTransferDetails> {
),
_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,

@ -72,7 +72,7 @@ class _RequestDeviceTransferState extends State<RequestDeviceTransfer> {
@override
void dispose() {
_requestedQuantityController.dispose();
_deviceTransferProvider!.reset();
_deviceTransferProvider.reset();
_receiverNameController.dispose();
_commentsController.dispose();
super.dispose();
@ -111,7 +111,7 @@ class _RequestDeviceTransferState extends State<RequestDeviceTransfer> {
SingleItemDropDownMenu<Site, SiteProvider>(
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<RequestDeviceTransfer> {
SingleItemDropDownMenu<Building, NullableLoadingProvider>(
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<RequestDeviceTransfer> {
SingleItemDropDownMenu<Floor, NullableLoadingProvider>(
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<RequestDeviceTransfer> {
SingleItemDropDownMenu<Department, NullableLoadingProvider>(
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<RequestDeviceTransfer> {
SingleItemDropDownMenu<Rooms, NullableLoadingProvider>(
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(() {});
},
),

@ -32,7 +32,7 @@ class _SearchAssetPageState extends State<SearchAssetPage> {
AssetSearch? search;
late TextEditingController _searchController;
late AssetProvider _deviceProvider;
List<Asset> _searchableList = [];
final List<Asset> _searchableList = [];
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
bool _isFirst = true;
@ -138,7 +138,7 @@ class _SearchAssetPageState extends State<SearchAssetPage> {
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],

@ -41,7 +41,7 @@ class UpdateDeviceTransfer extends StatefulWidget {
}
class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
bool _isLoading = false;
final bool _isLoading = false;
bool _validate = false;
late UserProvider _userProvider;
late SettingProvider _settingProvider;
@ -75,11 +75,11 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
);
}
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<UpdateDeviceTransfer> {
: (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<UpdateDeviceTransfer> {
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<UpdateDeviceTransfer> {
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<UpdateDeviceTransfer> {
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);
}

@ -81,8 +81,8 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
@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<CreateSubWorkOrderPage> {
Provider.of<ServiceRequestFaultDescriptionProvider>(context, listen: false).reset();
assetTypesProvider = Provider.of<ServiceStatusProvider>(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<CreateSubWorkOrderPage> {
}
}
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<CreateSubWorkOrderPage> {
@override
void dispose() {
_workPreformedController?.dispose();
_partQtyController?.dispose();
_workPreformedController.dispose();
_partQtyController.dispose();
super.dispose();
}
@ -209,7 +209,7 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
}
setState(() {
_subWorkOrders.visitDate = selectedDateTime?.toIso8601String();
_subWorkOrders.visitDate = selectedDateTime.toIso8601String();
});
}
});
@ -219,12 +219,12 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
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<CreateSubWorkOrderPage> {
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<CreateSubWorkOrderPage> {
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<CreateSubWorkOrderPage> {
SingleItemDropDownMenu<SuppPersons, NullableLoadingProvider>(
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<CreateSubWorkOrderPage> {
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<CreateSubWorkOrderPage> {
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<CreateSubWorkOrderPage> {
SingleItemDropDownMenu<Lookup, LoanAvailabilityProvider>(
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<CreateSubWorkOrderPage> {
}
},
),
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<CreateSubWorkOrderPage> {
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<CreateSubWorkOrderPage> {
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<CreateSubWorkOrderPage> {
),
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<CreateSubWorkOrderPage> {
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<CreateSubWorkOrderPage> {
if (_formKey.currentState?.validate() ?? false) {}
_formKey.currentState?.save();
final serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(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<CreateSubWorkOrderPage> {
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<CreateSubWorkOrderPage> {
} 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;
}

@ -95,9 +95,9 @@ class _GasRefillCommentsBottomSheetState extends State<GasRefillCommentsBottomSh
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,

@ -32,7 +32,7 @@ class GasRefillDetailsPage extends StatefulWidget {
class _GasRefillDetailsPageState extends State<GasRefillDetailsPage> {
GasRefillModel _model = GasRefillModel(gazRefillDetails: []);
late UserProvider _userProvider;
bool _isLoading = false;
final bool _isLoading = false;
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
@ -47,14 +47,14 @@ class _GasRefillDetailsPageState extends State<GasRefillDetailsPage> {
@override
Widget build(BuildContext context) {
_userProvider = Provider.of<UserProvider>(context);
GasRefillProvider _gasRefillProvider = Provider.of<GasRefillProvider>(context);
GasRefillProvider gasRefillProvider = Provider.of<GasRefillProvider>(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<GasRefillDetailsPage> {
'${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<GasRefillDetailsPage> {
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,

@ -39,7 +39,7 @@ class RequestGasRefill extends StatefulWidget {
}
class _RequestGasRefillState extends State<RequestGasRefill> {
bool _isLoading = false;
final bool _isLoading = false;
bool _validate = false;
Uint8List? _engineerSignature;
Uint8List? _nurseSignature;
@ -52,7 +52,7 @@ class _RequestGasRefillState extends State<RequestGasRefill> {
final TextEditingController _commentController = TextEditingController();
final TextEditingController _workingHoursController = TextEditingController();
GasRefillModel _formModel = GasRefillModel(gazRefillDetails: []);
final GasRefillModel _formModel = GasRefillModel(gazRefillDetails: []);
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
final GlobalKey _DetailsKey = GlobalKey<FormState>();
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
@ -156,27 +156,24 @@ class _RequestGasRefillState extends State<RequestGasRefill> {
Widget build(BuildContext context) {
_userProvider = Provider.of<UserProvider>(context);
_settingProvider = Provider.of<SettingProvider>(context);
if (_gasRefillProvider == null) {
_gasRefillProvider = Provider.of<GasRefillProvider>(context, listen: false);
//_gasRefillProvider.reset();
}
_gasRefillProvider ??= Provider.of<GasRefillProvider>(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<RequestGasRefill> {
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,

@ -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();

@ -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<PpmDetailsPage> {
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,

@ -102,7 +102,7 @@ class _EditPpmState extends State<EditPpm> 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,

@ -84,10 +84,10 @@ class _ProfilePageState extends State<ProfilePage> {
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<ProfilePage> {
if (pickedFile != null) {
CroppedFile? croppedFile = await ImageCropper().cropImage(
sourcePath: pickedFile.path,
aspectRatioPresets: [CropAspectRatioPreset.square],
aspectRatio: CropAspectRatio(ratioX: 1, ratioY: 1),
uiSettings: [
AndroidUiSettings(
toolbarTitle: 'ATOMS',

@ -131,7 +131,7 @@ class _AddSupplierEngineerBottomSheetState extends State<AddSupplierEngineerBott
// return;
SuppEngineerWorkOrders? suppEngineer = await snapshot.addSupplierEngineer(engineer);
if (suppEngineer == null) {
Fluttertoast.showToast(msg: "${context.translation.failedToCompleteRequest}");
Fluttertoast.showToast(msg: context.translation.failedToCompleteRequest);
return;
}
Fluttertoast.showToast(msg: context.translation.successfulRequestMessage);

@ -94,9 +94,9 @@ class _CommentsBottomSheetState extends State<CommentsBottomSheet> {
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,

@ -46,7 +46,7 @@ class CreateServiceRequestPageState extends State<CreateServiceRequestPage> {
late ServiceRequestsProvider _serviceRequestsProvider;
late ServiceRequest _serviceRequest;
final List<File> _deviceImages = [];
bool _isLoading = false;
final bool _isLoading = false;
bool _showDatePicker = false;
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
@ -67,7 +67,7 @@ class CreateServiceRequestPageState extends State<CreateServiceRequestPage> {
} else {
_serviceRequest = ServiceRequest();
}
isFirstActionSubmitted = _serviceRequest?.firstAction != null;
isFirstActionSubmitted = _serviceRequest.firstAction != null;
super.initState();
}
@ -98,7 +98,7 @@ class CreateServiceRequestPageState extends State<CreateServiceRequestPage> {
}
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<CreateServiceRequestPage> {
_userProvider = Provider.of<UserProvider>(context);
_serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context);
if (_settingProvider == null) {
_settingProvider = Provider.of<SettingProvider>(context);
getData();
}
return Scaffold(
key: _scaffoldKey,
@ -166,7 +162,7 @@ class CreateServiceRequestPageState extends State<CreateServiceRequestPage> {
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<CreateServiceRequestPage> {
children: [
Text(context.translation.priority, style: Theme.of(context).textTheme.bodyLarge),
Consumer<PriorityProvider>(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<CreateServiceRequestPage> {
16.height,
Consumer<EquipmentStatusProvider>(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<CreateServiceRequestPage> {
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<CreateServiceRequestPage> {
// 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<CreateServiceRequestPage> {
// 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<CreateServiceRequestPage> {
}
Future<void> _submit() async {
_serviceRequest?.requestedThrough = Provider.of<RequestedThroughProvider>(context, listen: false).items?.firstWhere((element) => element.value == 3, orElse: null);
_serviceRequest?.type = Provider.of<TypeOfRequestProvider>(context, listen: false).items?.firstWhere((element) => element.value == 1, orElse: null);
_serviceRequest.requestedThrough = Provider.of<RequestedThroughProvider>(context, listen: false).items.firstWhere((element) => element.value == 3, orElse: null);
_serviceRequest.type = Provider.of<TypeOfRequestProvider>(context, listen: false).items.firstWhere((element) => element.value == 1, orElse: null);
// print("_serviceRequest?.requestedThrough:${_serviceRequest?.requestedThrough.toJson()}");
// print("_serviceRequest?.type:${_serviceRequest?.type.toJson()}");

@ -90,34 +90,30 @@ class _FirstActionBottomSheetState extends State<FirstActionBottomSheet> {
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<FirstActionBottomSheet> {
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<FirstActionBottomSheet> {
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,
],
)

@ -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(() {

@ -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<ServiceRequestsPage> with TickerPr
late ServiceRequestsProvider _serviceRequestsProvider;
late UserProvider _userProvider;
late SettingProvider _settingProvider;
bool _expandedSearch = false;
final bool _expandedSearch = false;
bool _firstTime = true;
@override

@ -56,7 +56,7 @@ class _ServiceRequestDetailsPageState extends State<ServiceRequestDetailsPage> {
@override
Widget build(BuildContext context) {
UserProvider _userProvider = Provider.of<UserProvider>(context, listen: false);
UserProvider userProvider = Provider.of<UserProvider>(context, listen: false);
Widget informationCard(ServiceRequest serviceRequest) {
return Column(
@ -90,7 +90,7 @@ class _ServiceRequestDetailsPageState extends State<ServiceRequestDetailsPage> {
],
),
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<ServiceRequestDetailsPage> {
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<ServiceRequestDetailsPage> {
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<ServiceRequestDetailsPage> {
],
],
).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<ServiceRequestDetailsPage> {
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,

@ -101,7 +101,7 @@ class _UpdateServiceRequestPageState extends State<UpdateServiceRequestPage> {
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<UpdateServiceRequestPage> {
}
Future<void> _submit() async {
widget.serviceRequest?.requestedThrough = Provider.of<RequestedThroughProvider>(context, listen: false).items?.firstWhere((element) => element.value == 3, orElse: null);
widget.serviceRequest?.requestedThrough = Provider.of<RequestedThroughProvider>(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<UpdateServiceRequestPage> {
}
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(':\\');
}
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save