diff --git a/android/app/build.gradle b/android/app/build.gradle index 8be014cb..b92d6c6d 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -32,13 +32,18 @@ if (keystorePropertiesFile.exists()) { apply plugin: "com.huawei.agconnect" android { - compileSdkVersion 34 + namespace 'com.example.test_sa' // ndkVersion flutter.ndkVersion - ndkVersion = "25.1.8937393" + ndkVersion = "27.0.12077973" compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 + coreLibraryDesugaringEnabled true + sourceCompatibility JavaVersion.VERSION_21 + targetCompatibility JavaVersion.VERSION_21 + } + + kotlinOptions { + jvmTarget = "21" // Must match the compileOptions target } defaultConfig { @@ -82,5 +87,6 @@ flutter { dependencies { implementation 'com.huawei.agconnect:agconnect-core:1.5.2.300' implementation 'com.huawei.hms:push:6.7.0.300' + coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.3' } diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index bdb17c4d..df7bac77 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,5 +1,4 @@ - + diff --git a/android/build.gradle b/android/build.gradle index 55524878..129984b8 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -4,12 +4,12 @@ buildscript { google() mavenCentral() maven { url "https://jitpack.io" } - maven {url 'https://developer.huawei.com/repo/'} + maven { url 'https://developer.huawei.com/repo/' } } dependencies { - classpath "com.android.tools.build:gradle:7.1.2" - classpath 'com.huawei.agconnect:agcp:1.5.2.300' + classpath "com.android.tools.build:gradle:8.7.0" + classpath 'com.huawei.agconnect:agcp:1.9.1.304' } } configurations.all { @@ -19,7 +19,7 @@ allprojects { repositories { google() mavenCentral() - maven {url 'https://developer.huawei.com/repo/'} + maven { url 'https://developer.huawei.com/repo/' } } } @@ -34,10 +34,20 @@ subprojects { } } } + } + +//subprojects { +// project.buildDir = "${rootProject.buildDir}/${project.name}" +// project.evaluationDependsOn(':app') +//} + +//rootProject.buildDir = File("../build") subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" - project.evaluationDependsOn(':app') +} +subprojects { + project.evaluationDependsOn(":app") } diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 43f1fa24..2fd3de27 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Thu Oct 24 09:39:31 AST 2024 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists \ No newline at end of file diff --git a/android/settings.gradle b/android/settings.gradle index 9f6599b7..b9a925b1 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -31,7 +31,7 @@ pluginManagement { 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 "com.android.application" version "8.7.0" apply false id "org.jetbrains.kotlin.android" version "1.9.25" 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" } diff --git a/lib/models/device/asset_by_id_model.dart b/lib/models/device/asset_by_id_model.dart index 691a916a..f0ff49bc 100644 --- a/lib/models/device/asset_by_id_model.dart +++ b/lib/models/device/asset_by_id_model.dart @@ -21,7 +21,7 @@ class AssetByIdModel { AssetReplace? floor; Department? department; Lookup? room; - int? testsDay; + num? testsDay; num? purchasingPrice; String? nbv; Lookup? currency; diff --git a/lib/modules/cm_module/views/components/scan_qr_view.dart b/lib/modules/cm_module/views/components/scan_qr_view.dart index b25bf2a6..af66d2ed 100644 --- a/lib/modules/cm_module/views/components/scan_qr_view.dart +++ b/lib/modules/cm_module/views/components/scan_qr_view.dart @@ -1,72 +1,73 @@ -import 'dart:io'; - -import 'package:flutter/material.dart'; -import 'package:qr_code_scanner/qr_code_scanner.dart'; -import 'package:test_sa/extensions/context_extension.dart'; -import 'package:test_sa/extensions/int_extensions.dart'; -import 'package:test_sa/new_views/common_widgets/default_app_bar.dart'; - - -class ScanQrView extends StatefulWidget { - const ScanQrView({Key? key}) : super(key: key); - - @override - _ScanQrViewState createState() => _ScanQrViewState(); -} - -class _ScanQrViewState extends State { - // Barcode result; - QRViewController? _controller; - bool _scanDone = false; - final GlobalKey qrKey = GlobalKey(debugLabel: 'QR_scanner'); - - // In order to get hot reload to work we need to pause the camera if the platform - // is android, or resume the camera if the platform is iOS. - @override - void reassemble() { - super.reassemble(); - if (Platform.isAndroid) { - _controller?.pauseCamera(); - } else if (Platform.isIOS) { - _controller?.resumeCamera(); - } - } - - @override - void dispose() { - super.dispose(); - _controller?.dispose(); - } - - @override - Widget build(BuildContext context) { - return Scaffold( - - body: Stack( - children: [ - QRView( - key: qrKey, - onQRViewCreated: (QRViewController controller) { - setState(() { - _controller = controller; - }); - controller.scannedDataStream.listen((scanData) { - if (!_scanDone) { - _scanDone = true; - Navigator.of(context).pop(scanData.code); - } - }); - }, - overlay: QrScannerOverlayShape(borderColor: Colors.red, borderRadius: 10, borderLength: 30, borderWidth: 10, cutOutSize: 280), - ), - Padding( - padding: const EdgeInsets.all(12.0), - child: SizedBox( - height: 100.toScreenHeight, - child: DefaultAppBar(title: context.translation.scanQr)), - ) - ], - ), - ); - } -} +// import 'dart:io'; +// +// @todo delete +// import 'package:flutter/material.dart'; +// import 'package:qr_code_scanner/qr_code_scanner.dart'; +// import 'package:test_sa/extensions/context_extension.dart'; +// import 'package:test_sa/extensions/int_extensions.dart'; +// import 'package:test_sa/new_views/common_widgets/default_app_bar.dart'; +// +// +// class ScanQrView extends StatefulWidget { +// const ScanQrView({Key? key}) : super(key: key); +// +// @override +// _ScanQrViewState createState() => _ScanQrViewState(); +// } +// +// class _ScanQrViewState extends State { +// // Barcode result; +// QRViewController? _controller; +// bool _scanDone = false; +// final GlobalKey qrKey = GlobalKey(debugLabel: 'QR_scanner'); +// +// // In order to get hot reload to work we need to pause the camera if the platform +// // is android, or resume the camera if the platform is iOS. +// @override +// void reassemble() { +// super.reassemble(); +// if (Platform.isAndroid) { +// _controller?.pauseCamera(); +// } else if (Platform.isIOS) { +// _controller?.resumeCamera(); +// } +// } +// +// @override +// void dispose() { +// super.dispose(); +// _controller?.dispose(); +// } +// +// @override +// Widget build(BuildContext context) { +// return Scaffold( +// +// body: Stack( +// children: [ +// QRView( +// key: qrKey, +// onQRViewCreated: (QRViewController controller) { +// setState(() { +// _controller = controller; +// }); +// controller.scannedDataStream.listen((scanData) { +// if (!_scanDone) { +// _scanDone = true; +// Navigator.of(context).pop(scanData.code); +// } +// }); +// }, +// overlay: QrScannerOverlayShape(borderColor: Colors.red, borderRadius: 10, borderLength: 30, borderWidth: 10, cutOutSize: 280), +// ), +// Padding( +// padding: const EdgeInsets.all(12.0), +// child: SizedBox( +// height: 100.toScreenHeight, +// child: DefaultAppBar(title: context.translation.scanQr)), +// ) +// ], +// ), +// ); +// } +// } diff --git a/lib/views/widgets/equipment/asset_detail_page.dart b/lib/views/widgets/equipment/asset_detail_page.dart index b512952f..f34f834c 100644 --- a/lib/views/widgets/equipment/asset_detail_page.dart +++ b/lib/views/widgets/equipment/asset_detail_page.dart @@ -131,8 +131,8 @@ class _AssetDetailPageState extends State { const Divider(color: AppColor.neutral30, height: 1, thickness: 1), 8.height, "${context.translation.installationDate}: ${assetModel.installationDate?.toAssetDetailsFormat ?? "-"}".bodyText(context), - "${context.translation.nextPmDate}: ${assetModel.nextPMDate?.toAssetDetailsFormat}".bodyText(context), - "${context.translation.lastPmDate}: ${assetModel.lastPMDate?.toAssetDetailsFormat}".bodyText(context), + "${context.translation.nextPmDate}: ${assetModel.nextPMDate?.toAssetDetailsFormat ?? "-"}".bodyText(context), + "${context.translation.lastPmDate}: ${assetModel.lastPMDate?.toAssetDetailsFormat ?? "-"}".bodyText(context), if ((assetModel.modelDefinition?.assetDescription ?? "").isNotEmpty) ...[ 8.height, const Divider(color: AppColor.neutral30, height: 1, thickness: 1), diff --git a/lib/views/widgets/qr/asset_scan_qr.dart b/lib/views/widgets/qr/asset_scan_qr.dart index e82f8fa8..16b76dbd 100644 --- a/lib/views/widgets/qr/asset_scan_qr.dart +++ b/lib/views/widgets/qr/asset_scan_qr.dart @@ -2,7 +2,7 @@ import 'dart:io'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import 'package:qr_code_scanner/qr_code_scanner.dart'; +import 'package:qr_code_scanner_plus/qr_code_scanner_plus.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'; diff --git a/lib/views/widgets/qr/scan_qr.dart b/lib/views/widgets/qr/scan_qr.dart index 70e378c1..def01183 100644 --- a/lib/views/widgets/qr/scan_qr.dart +++ b/lib/views/widgets/qr/scan_qr.dart @@ -1,7 +1,7 @@ import 'dart:io'; import 'package:flutter/material.dart'; -import 'package:qr_code_scanner/qr_code_scanner.dart'; +import 'package:qr_code_scanner_plus/qr_code_scanner_plus.dart'; import '../buttons/app_icon_button.dart'; diff --git a/lib/views/widgets/qr_scanner_dialog.dart b/lib/views/widgets/qr_scanner_dialog.dart index 224a4da7..db68e181 100644 --- a/lib/views/widgets/qr_scanner_dialog.dart +++ b/lib/views/widgets/qr_scanner_dialog.dart @@ -1,79 +1,79 @@ - -import 'package:flutter/material.dart'; - -import 'package:qr_code_scanner/qr_code_scanner.dart'; -import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; - -class QrScannerDialog extends StatefulWidget { - @override - State createState() => _QrScannerDialogState(); -} - -class _QrScannerDialogState extends State { - final GlobalKey qrKey = GlobalKey(debugLabel: 'QR'); - Barcode? result; - QRViewController? controller; - bool isPicked = false; - - @override - Widget build(BuildContext context) { - return Scaffold( - body: Container( - width: double.infinity, - height: double.infinity, - color: Colors.white, - child: Column( - children: [ - Expanded( - flex: 1, - child: QRView( - key: qrKey, - onQRViewCreated: _onQRViewCreated, - ), - ), - // Expanded( - // flex: 1, - // child: Center( - // child: (result != null) - // ? Text( - // 'Barcode Type: ${result!.format} Data: ${result!.code}') - // : Text('Scan a code'), - // ), - // ), - Padding( - padding: const EdgeInsets.all(12.0), - child: AppFilledButton( - label: "LocaleKeys.cancel.tr()", - onPressed: () { - Navigator.pop(context); - }, - ), - ), - ], - ), - ), - ); - } - - void _onQRViewCreated(QRViewController controller) { - this.controller = controller; - - controller.scannedDataStream.listen((scanData) { - setState(() { - result = scanData; - if (!isPicked) { - isPicked = true; - Navigator.pop(context, result!.code); - } - }); - }); - controller.pauseCamera(); - controller.resumeCamera(); - } - - @override - void dispose() { - controller?.dispose(); - super.dispose(); - } -} +// +// import 'package:flutter/material.dart'; +// +// import 'package:qr_code_scanner/qr_code_scanner.dart'; +// import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; +// todo @delete +// class QrScannerDialog extends StatefulWidget { +// @override +// State createState() => _QrScannerDialogState(); +// } +// +// class _QrScannerDialogState extends State { +// final GlobalKey qrKey = GlobalKey(debugLabel: 'QR'); +// Barcode? result; +// QRViewController? controller; +// bool isPicked = false; +// +// @override +// Widget build(BuildContext context) { +// return Scaffold( +// body: Container( +// width: double.infinity, +// height: double.infinity, +// color: Colors.white, +// child: Column( +// children: [ +// Expanded( +// flex: 1, +// child: QRView( +// key: qrKey, +// onQRViewCreated: _onQRViewCreated, +// ), +// ), +// // Expanded( +// // flex: 1, +// // child: Center( +// // child: (result != null) +// // ? Text( +// // 'Barcode Type: ${result!.format} Data: ${result!.code}') +// // : Text('Scan a code'), +// // ), +// // ), +// Padding( +// padding: const EdgeInsets.all(12.0), +// child: AppFilledButton( +// label: "LocaleKeys.cancel.tr()", +// onPressed: () { +// Navigator.pop(context); +// }, +// ), +// ), +// ], +// ), +// ), +// ); +// } +// +// void _onQRViewCreated(QRViewController controller) { +// this.controller = controller; +// +// controller.scannedDataStream.listen((scanData) { +// setState(() { +// result = scanData; +// if (!isPicked) { +// isPicked = true; +// Navigator.pop(context, result!.code); +// } +// }); +// }); +// controller.pauseCamera(); +// controller.resumeCamera(); +// } +// +// @override +// void dispose() { +// controller?.dispose(); +// super.dispose(); +// } +// } diff --git a/pubspec.lock b/pubspec.lock index 1b05ec91..fdc4903d 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -697,18 +697,18 @@ packages: dependency: "direct main" description: name: huawei_location - sha256: db937f0df4073ba6f3cdc1005855ee231aaf6bf5c2bd05a702d928d7e8bb4ee9 + sha256: "3100d6b2b11df56481b8deade71baa84970e0bae0ade6ec56407be2b036af355" url: "https://pub.dev" source: hosted - version: "6.12.0+303" + version: "6.14.2+301" huawei_push: dependency: "direct main" description: name: huawei_push - sha256: "94c70987591442e301745e881ee2768ca5349800294bb7bdd46f9f80d1096c53" + sha256: d9bdbc62d5b6a07fe2bff92790682c77ffcc8b56bafba8c12700d2b4b0e30a70 url: "https://pub.dev" source: hosted - version: "6.12.0+302" + version: "6.13.0+300" image: dependency: transitive description: @@ -1293,14 +1293,14 @@ packages: url: "https://pub.dev" source: hosted version: "6.1.2" - qr_code_scanner: + qr_code_scanner_plus: dependency: "direct main" description: - name: qr_code_scanner - sha256: f23b68d893505a424f0bd2e324ebea71ed88465d572d26bb8d2e78a4749591fd + name: qr_code_scanner_plus + sha256: a0f1ac8e13299b3db2646635f252fe2ec67222b848b24ed34d11052faf080bfa url: "https://pub.dev" source: hosted - version: "1.0.1" + version: "2.0.12" recase: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index a3bbe508..a7cf4381 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -55,7 +55,7 @@ dependencies: speech_to_text: ^7.0.0 firebase_core: ^3.4.1 firebase_messaging: ^15.1.1 - qr_code_scanner: ^1.0.1 + qr_code_scanner_plus: ^2.0.12 flutter_sound: ^9.3.1 permission_handler: ^11.3.1 rive: ^0.13.13 @@ -86,8 +86,8 @@ dependencies: flutter_custom_month_picker: ^0.1.3 local_auth: ^2.3.0 google_api_availability: ^5.0.0 - huawei_push: ^6.5.0+300 - huawei_location: ^6.11.0+301 + huawei_push: ^6.13.0+300 + huawei_location: ^6.14.2+301 geolocator: ^9.0.2 nfc_manager: ^3.2.0 wifi_iot: ^0.3.19+1