upgraded the sdk to 35

mohem_flutter_upgrade
Syed Taha Alam 3 months ago
commit e50d1f70b2

@ -1,3 +1,13 @@
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
id "dev.flutter.flutter-gradle-plugin"
id "com.google.gms.google-services"
// id "com.huawei.agconnect" //todo this will be done
}
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
@ -27,16 +37,24 @@ if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
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.huawei.agconnect'
//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.huawei.agconnect'
android {
compileSdkVersion 34
namespace 'hmg.cloudSolutions.mohem'
compileSdkVersion 35
defaultConfig {
multiDexEnabled true
}
compileOptions {
// Flag to enable support for the new language APIs
coreLibraryDesugaringEnabled true
// Sets Java compatibility to Java 8
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
@ -53,10 +71,13 @@ android {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "hmg.cloudSolutions.mohem"
minSdkVersion 28
targetSdkVersion 34
targetSdkVersion 35
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
}
buildFeatures{
buildConfig true
}
signingConfigs {
release {
@ -84,5 +105,58 @@ flutter {
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.2.2'
// implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.10"
}
def targetProjects = ["huawei_push", "in_app_update", "qr_code_scanner"]
subprojects {
afterEvaluate { subproject ->
if (targetProjects.contains(subproject.name) && subproject.extensions.findByName("android") != null) {
// Register the fix task only for target projects
def fixTask = subproject.tasks.register("fixManifestsAndNamespace") {
doLast {
def buildGradleFile = file("build.gradle")
def manifestFile = file("src/main/AndroidManifest.xml")
// Step 1: Set namespace from package if not already present
if (manifestFile.exists()) {
def manifestContent = manifestFile.getText("UTF-8")
def matcher = (manifestContent =~ /package\s*=\s*"([^"]+)"/)
def packageName = matcher.find() ? matcher.group(1) : null
if (packageName != null && !buildGradleFile.getText().contains("namespace")) {
println "Setting namespace in ${buildGradleFile.path}"
def updatedBuildGradle = buildGradleFile.getText().replaceFirst(
/android\s*\{/,
"android {\n namespace = \"${packageName}\""
)
buildGradleFile.write(updatedBuildGradle, "UTF-8")
}
}
// Step 2: Remove `package` from all AndroidManifest.xml files in the project
def manifestFiles = fileTree("src/main") {
include "**/AndroidManifest.xml"
}
manifestFiles.each { file ->
def content = file.getText()
if (content.contains("package=")) {
println "Removing package attribute from ${file.path}"
def updated = content.replaceAll(/package\s*=\s*"[^"]*"/, "")
file.write(updated)
}
}
}
}
// Ensure the task runs before preBuild
subproject.tasks.matching { it.name.startsWith("preBuild") }.configureEach {
dependsOn fixTask
}
}
}
}

@ -1,5 +1,5 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mohem_flutter_app">
>
<!-- Flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->

@ -1,6 +1,6 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.mohem_flutter_app">
>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.USE_BIOMETRIC" />

@ -1,4 +1,4 @@
package com.mohem_flutter_app
package hmg.cloudSolutions.mohem
//import io.flutter.embedding.android.FlutterActivity
//

@ -1,5 +1,5 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mohem_flutter_app">
>
<!-- Flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->

@ -1,19 +1,19 @@
buildscript {
ext.kotlin_version = '1.9.10'
repositories {
google()
mavenCentral()
maven { url 'https://developer.huawei.com/repo/' }
}
dependencies {
classpath 'com.android.tools.build:gradle:7.1.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:4.3.8'
classpath 'com.huawei.agconnect:agcp:1.8.0.300'
classpath "com.android.tools:r8:8.2.33"
}
}
//buildscript {
// ext.kotlin_version = '`1.9.10'
// repositories {`
// google()
// mavenCentral()
// maven { url 'https://developer.huawei.com/repo/' }
// }
//
// dependencies {
// classpath 'com.android.tools.build:gradle:7.1.3'
// classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// classpath 'com.google.gms:google-services:4.3.8'
// classpath 'com.huawei.agconnect:agcp:1.8.0.300'
// classpath "com.android.tools:r8:8.2.33"
// }
//}
allprojects {
repositories {

@ -1,6 +1,6 @@
#Thu Mar 06 11:40:30 AST 2025
#Wed Jul 09 13:30:59 AST 2025
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

@ -1,11 +1,40 @@
include ':app'
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
}()
def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
def properties = new Properties()
includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")
assert localPropertiesFile.exists()
localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
repositories {
google()
mavenCentral()
gradlePluginPortal()
maven { url 'https://developer.huawei.com/repo/' }
}
resolutionStrategy {
eachPlugin {
if (requested.id.id == "com.huawei.agconnect") {
//https://flutter.dev/go/flutter-gradle-plugin-apply
//https://forums.developer.huawei.com/forumPortal/en/topic/0201148914110187023
//https://stackoverflow.com/questions/78339717/huawei-agcp-plugin-cannot-be-applied
useModule("com.huawei.agconnect:agcp:1.9.1.304")
}
}
}
}
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"
plugins {
id 'com.android.application' version "8.3.2" apply false
id 'dev.flutter.flutter-plugin-loader' version "1.0.0" // apply true
id "org.jetbrains.kotlin.android" version "2.0.0" apply false
id "com.google.gms.google-services" version "4.4.0" apply false
// id "com.google.gms.google-services" version "4.4.0" apply false
id "com.huawei.agconnect" version "1.9.1.304" apply false
// classpath 'com.huawei.agconnect:agcp:1.8.0.300'
}
include ":app"

@ -1,6 +1,8 @@
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:device_info_plus/device_info_plus.dart';
import 'package:mohem_flutter_app/api/api_client.dart';
import 'package:mohem_flutter_app/app_state/app_state.dart';
import 'package:mohem_flutter_app/classes/consts.dart';
@ -12,7 +14,7 @@ import 'package:mohem_flutter_app/models/dashboard/list_menu.dart';
import 'package:mohem_flutter_app/models/generic_response_model.dart';
import 'package:mohem_flutter_app/models/itg/itg_main_response.dart';
import 'package:mohem_flutter_app/models/itg/itg_response_model.dart';
import 'package:platform_device_id/platform_device_id.dart';
// import 'package:platform_device_id/platform_device_id.dart';
// import 'package:platform_device_id/platform_device_id.dart';
import 'package:uuid/uuid.dart';
@ -165,10 +167,17 @@ class DashboardApiClient {
}) async {
String url = "${ApiConsts.swpRest}AuthenticateAndSwipeUserSupportNFC";
var uuid = Uuid();
String? deviceId = "";
// Generate a v4 (random) id
if (Platform.isAndroid) {
AndroidDeviceInfo androidInfo = await DeviceInfoPlugin().androidInfo;
deviceId = androidInfo.id;
} else if (Platform.isIOS) {
IosDeviceInfo iosInfo = await DeviceInfoPlugin().iosInfo;
deviceId = iosInfo.identifierForVendor;
}
Map<String, dynamic> postParams = {
"UID": await PlatformDeviceId.getDeviceId, //uuid.v4(), //Mobile Id
"UID": deviceId, //uuid.v4(), //Mobile Id
// "UID": uuid.v4(), //Mobile Id
"Latitude": lat,
"Longitude": long,

@ -7,7 +7,7 @@ class ApiConsts {
// static String baseUrl = "http://10.20.200.111:1010/";
// static String baseUrl = "https://webservices.hmg.com"; // PreProd
static String baseUrl = "https://mohemm.hmg.com";
// static String baseUrl = "https://mohemm.hmg.com";
// static String baseUrl = "https://hmgwebservices.com"; // Live server
// static String baseUrl = "https://uat.hmgwebservices.com"; // UAT ser343622ver
@ -17,7 +17,7 @@ class ApiConsts {
// static String baseUrl = "https://mohemm.hmg.com"; // New Live server
//
// static String baseUrl = "https://uat.hmgwebservices.com"; // UAT ser343622ver
static String baseUrl = "https://uat.hmgwebservices.com"; // UAT ser343622ver
// static String baseUrl = "http://10.20.200.111:1010/";
// static String baseUrl = "https://webservices.hmg.com"; // PreProd

@ -1,6 +1,7 @@
class Advertisement {
int? advertisementId;
String? advertisementTitle;
String? advertisementTitleAr;
int? durationInSeconds;
bool? showDelete;
dynamic acknowledgment;
@ -16,6 +17,7 @@ class Advertisement {
Advertisement({
this.advertisementId,
this.advertisementTitle,
this.advertisementTitleAr,
this.durationInSeconds,
this.showDelete,
this.acknowledgment,
@ -34,6 +36,7 @@ class Advertisement {
Advertisement.fromJson(Map<String, dynamic> json) {
advertisementId = json['advertisementId'];
advertisementTitle = json['advertisementTitle'];
advertisementTitleAr = json['advertisementTitleAr'];
durationInSeconds = json['durationInSeconds'];
showDelete = json['showDelete'];
acknowledgment = json['acknowledgment'];
@ -63,6 +66,7 @@ class Advertisement {
Map<String, dynamic> data = Map<String, dynamic>();
data['advertisementId'] = this.advertisementId;
data['advertisementTitle'] = this.advertisementTitle;
data['advertisementTitleAr'] = this.advertisementTitleAr;
data['durationInSeconds'] = this.durationInSeconds;
data['showDelete'] = this.showDelete;
data['acknowledgment'] = this.acknowledgment;

@ -1659,7 +1659,7 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
void sRecoding() async {
isVoiceMsg = true;
recorderController.reset();
await recorderController.record(path);
await recorderController.record(path: path);
_recodeDuration = 0;
_startTimer();
isRecoding = !isRecoding;
@ -1691,7 +1691,7 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
File file = File(path!);
file.readAsBytesSync();
path = file.path;
await playerController.preparePlayer(file.path, 1.0);
await playerController.preparePlayer(path:file.path, volume: 1.0);
_timer?.cancel();
notifyListeners();
}

@ -11,8 +11,10 @@ import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/main.dart';
import 'package:mohem_flutter_app/models/itg/advertisement.dart' as ads;
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
import 'package:mohem_flutter_app/widgets/button/default_button.dart';
import 'package:mohem_flutter_app/widgets/my_video_progress_indicator.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:video_player/video_player.dart';
class ITGAdsScreen extends StatefulWidget {
@ -31,6 +33,8 @@ class _ITGAdsScreenState extends State<ITGAdsScreen> {
bool isAudio = false;
String ext = '';
bool isTextURL = false;
// late File imageFile;
late String imageUrl;
ads.Advertisement? advertisementData;
@ -45,23 +49,27 @@ class _ITGAdsScreenState extends State<ITGAdsScreen> {
late CountdownTimerController timerController;
void checkFileType() {
String? rFile = advertisementData!.viewAttachFileColl!.first.base64String;
try {
rFile = advertisementData!.viewAttachFileColl!.where((element) => element.languageId == AppState().getLanguageID(context)).toList().first.base64String;
} catch (ex) {}
String? rFileExt = advertisementData!.viewAttachFileColl!.first.fileName;
ext = "." + rFileExt!.split(".").last.toLowerCase();
if (ext == ".png" || ext == ".jpg" || ext == ".jpeg" || ext == ".gif") {
// await processImage();
imageUrl = rFile!;
isImage = true;
if (advertisementData!.viewAttachFileColl!.first.contentType!.toLowerCase() == "text") {
isTextURL = true;
} else {
if (ext == ".aac") {
isAudio = true;
String? rFile = advertisementData!.viewAttachFileColl!.first.base64String;
try {
rFile = advertisementData!.viewAttachFileColl!.where((element) => element.languageId == AppState().getLanguageID(context)).toList().first.base64String;
} catch (ex) {}
String? rFileExt = advertisementData!.viewAttachFileColl!.first.fileName;
ext = "." + rFileExt!.split(".").last.toLowerCase();
if (ext == ".png" || ext == ".jpg" || ext == ".jpeg" || ext == ".gif") {
// await processImage();
imageUrl = rFile!;
isImage = true;
} else {
if (ext == ".aac") {
isAudio = true;
}
isVideo = true;
_futureController = createVideoPlayer(rFile!);
}
isVideo = true;
_futureController = createVideoPlayer(rFile!);
}
// advertisementData?.actionButtonsColl!.forEach((element) {
@ -132,7 +140,17 @@ class _ITGAdsScreenState extends State<ITGAdsScreen> {
timerController = CountdownTimerController(endTime: DateTime.now().millisecondsSinceEpoch + 1000 * videoDuration, onEnd: onTimerEnd);
}
return Scaffold(
backgroundColor: Colors.black,
backgroundColor: isTextURL ? Colors.white : Colors.black,
appBar: isTextURL
? AppBar(
centerTitle: true,
automaticallyImplyLeading: false,
backgroundColor: Colors.white,
title: (AppState().isArabic(context) ? advertisementData!.advertisementTitleAr! : advertisementData!.advertisementTitleAr!).toText24(color: MyColors.darkTextColor, isBold: true),
//advertisementData!.viewAttachFileColl!.first.base64String!.toText24(color: MyColors.darkTextColor, isBold: true),
)
: null,
body: Stack(
children: [
if (isVideo)
@ -346,6 +364,45 @@ class _ITGAdsScreenState extends State<ITGAdsScreen> {
],
),
),
if (isTextURL)
SingleChildScrollView(
padding: const EdgeInsets.all(21),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
(AppState().isArabic(context) ? advertisementData!.viewAttachFileColl![0].base64String! : advertisementData!.viewAttachFileColl![1].base64String!)
.toText16(color: MyColors.darkTextColor),
24.height,
ListView.separated(
itemCount: advertisementData!.actionButtonsColl?.length ?? 0,
separatorBuilder: (cxt, index) => 16.height,
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
padding: EdgeInsets.zero,
itemBuilder: (cxt, index) => DefaultButton(
AppState().isArabic(context) ? advertisementData!.actionButtonsColl![index].btnTextAr : advertisementData!.actionButtonsColl![index].btnTextEn,
() async {
if (advertisementData!.actionButtonsColl![index].actionValue.toLowerCase() == "skip") {
Navigator.pop(context);
} else {
Uri uri = Uri.parse(advertisementData!.actionButtonsColl![index].iconOrImage);
// if (await canLaunchUrl(uri)) {
await launchUrl(uri, mode: LaunchMode.externalApplication).catchError((err) {
// print(err);
Utils.showToast('Could not launch');
});
Navigator.pop(context);
// } else {
// Utils.showToast('Could not launch');
// }
}
},
),
),
],
),
),
],
),
);

@ -112,7 +112,7 @@ class _VerifyLastLoginScreenState extends State<VerifyLastLoginScreen> {
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [LocaleKeys.lastLoginDetails.tr().toText16(), DateUtil.formatDateToDate(DateUtil.convertStringToDate(mobileLoginInfoListModel!.editedOn!), false).toText12()],
children: [LocaleKeys.lastLoginDetails.tr().toText16(), DateUtil.formatDateToDate(DateUtil.convertStringToDate(mobileLoginInfoListModel!.editedOn ?? DateTime.now().toString()), false).toText12()],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,

@ -16,7 +16,7 @@ import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/models/offers_and_discounts/get_offers_list.dart';
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
import 'package:path_provider/path_provider.dart';
import 'package:share/share.dart';
import 'package:share_plus/share_plus.dart';
import 'package:url_launcher/url_launcher.dart';
class OffersAndDiscountsDetails extends StatefulWidget {
@ -128,7 +128,12 @@ class _OffersAndDiscountsDetailsState extends State<OffersAndDiscountsDetails> {
Directory tempDir = await getTemporaryDirectory();
File file = await File('${tempDir.path}/${DateTime.now().toString()}.png').create();
await file.writeAsBytes(pngBytes);
await Share.shareFiles([(file.path)], text: AppState().isArabic(context) ? getOffersList[0].titleAr : getOffersList[0].titleEn);
var params = ShareParams(
text: AppState().isArabic(context) ? getOffersList[0].titleAr : getOffersList[0].titleEn,
files: [XFile('${tempDir.path}/${DateTime.now().toString()}.png')],
);
await SharePlus.instance.share(params);
} catch (ex) {
debugPrint(ex.toString());
}

@ -24,7 +24,7 @@ import 'package:mohem_flutter_app/widgets/nfc/nfc_reader_sheet.dart';
import 'package:mohem_flutter_app/widgets/qr_scanner_dialog.dart';
import 'package:nfc_manager/nfc_manager.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:platform_device_id/platform_device_id.dart';
// import 'package:platform_device_id/platform_device_id.dart';
import 'package:wifi_iot/wifi_iot.dart';
class MarkAttendanceWidget extends StatefulWidget {

@ -1,8 +1,8 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:mobile_scanner/mobile_scanner.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/widgets/button/default_button.dart';
import 'package:qr_code_scanner/qr_code_scanner.dart';
class QrScannerDialog extends StatefulWidget {
@override
@ -11,8 +11,9 @@ class QrScannerDialog extends StatefulWidget {
class _QrScannerDialogState extends State<QrScannerDialog> {
final GlobalKey qrKey = GlobalKey(debugLabel: 'QR');
Barcode? result;
QRViewController? controller;
// Barcode? result;
// QRViewController? controller;
Barcode? _barcode;
bool isPicked = false;
@override
@ -26,10 +27,7 @@ class _QrScannerDialogState extends State<QrScannerDialog> {
children: [
Expanded(
flex: 1,
child: QRView(
key: qrKey,
onQRViewCreated: _onQRViewCreated,
),
child: MobileScanner(key : qrKey,onDetect: _handleBarcode),
),
// Expanded(
// flex: 1,
@ -55,25 +53,25 @@ class _QrScannerDialogState extends State<QrScannerDialog> {
);
}
void _onQRViewCreated(QRViewController controller) {
this.controller = controller;
controller.scannedDataStream.listen((scanData) {
void _handleBarcode(BarcodeCapture barcodes) {
// this.controller = controller;
Barcode? data = barcodes.barcodes.firstOrNull;
if(data == null || isPicked) {
return;
}
// controller.scannedDataStream.listen((scanData) {
setState(() {
result = scanData;
if (!isPicked) {
// result = scanData;
isPicked = true;
Navigator.pop(context, result!.code);
}
Navigator.pop(context, data.displayValue);
});
});
controller.pauseCamera();
controller.resumeCamera();
// });
// controller.pauseCamera();
// controller.resumeCamera();
}
@override
void dispose() {
controller?.dispose();
super.dispose();
}
}

@ -16,11 +16,12 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
# Read more about iOS versioning at
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
#version: 3.3.01+300040
version: 3.6.3+300073
version: 3.6.6+300076
#version: 3.8.999+2
environment:
sdk: ">=2.16.0 <3.5.0"
sdk: ">=3.0.0 <4.0.0"
# Dependencies specify other packages that your package needs in order to work.
# To automatically upgrade your package dependencies to the latest versions
@ -40,17 +41,17 @@ dependencies:
injector: ^2.0.0
provider: ^6.0.1
easy_localization: ^3.0.0
http: ^0.13.4
http: ^1.4.0
permission_handler: ^10.2.0
flutter_svg: any
sizer: ^2.0.15
local_auth: ^2.2.0
fluttertoast: ^8.0.8
syncfusion_flutter_calendar: ^27.2.5
syncfusion_flutter_calendar: ^29.1.38
# flutter_calendar_carousel: ^2.1.0
pie_chart: ^5.1.0
shared_preferences: ^2.0.12
firebase_messaging: ^13.0.4
firebase_messaging: ^15.2.9
shimmer: ^2.0.0
logger: ^1.1.0
flutter_countdown_timer: ^4.1.0
@ -58,20 +59,24 @@ dependencies:
# uuid: ^3.0.6
# device_info_plus: ^4.0.0
# android_id: ^0.1.3+1
platform_device_id: ^1.0.1
# platform_device_id: ^1.0.1
device_info_plus: ^9.0.0
image_picker: ^0.8.5+3
file_picker: 5.2.5
file_picker: 8.1.3
geolocator: ^11.1.0
month_year_picker: ^0.4.0+1
month_picker_dialog: ^3.0.0
geolocator: ^9.0.2
month_picker_dialog: ^6.0.3
# month_picker_dialog: ^6.2.3
# open_file: ^3.2.1
open_filex: ^4.4.0
wifi_iot: ^0.3.19+1
flutter_html: ^3.0.0-alpha.6
mobile_scanner: ^6.0.10
# flutter_barcode_scanner: ^2.0.0
qr_code_scanner: ^1.0.1
# qr_code_scanner: ^1.0.1
# qr_flutter: ^4.0.0
url_launcher: ^6.0.15
share: 2.0.4
share_plus: ^11.0.0
flutter_rating_bar: ^4.0.1
auto_size_text: ^3.0.0
pull_to_refresh: ^2.0.0
@ -84,7 +89,7 @@ dependencies:
safe_device: ^1.1.9
# networkImage
# cached_network_image: ^3.2.2
#Chat
signalr_netcore: ^1.3.3
@ -92,11 +97,11 @@ dependencies:
swipe_to: ^1.0.2
flutter_webrtc: ^0.9.17
camera: ^0.10.3
flutter_local_notifications: ^17.2.1+2
flutter_local_notifications: ^18.0.0
#firebase_analytics: any
#Chat Voice Message Recoding & Play
audio_waveforms: ^0.1.5+1
audio_waveforms: ^1.3.0
rxdart: ^0.27.7
#Encryption
@ -111,17 +116,21 @@ dependencies:
# huawei_hmsavailability: ^6.6.0+300
# huawei_location: 6.0.0+302
huawei_location: ^6.11.0+301
huawei_push: ^6.7.0+300
firebase_crashlytics: ^2.9.0
# huawei_push: ^6.13.0+300
huawei_push:
git:
url: https://github.com/fleoparra/hms-flutter-plugin.git
path: flutter-hms-push
firebase_crashlytics: ^4.3.9
#Items for sale Image Carousel Slider
carousel_slider: ^4.2.1
carousel_slider: ^5.1.1
#Huawei Specified
# store_checker: ^1.1.0
google_api_availability: ^3.0.1
google_api_availability: ^5.0.1
google_maps_flutter_web: ^0.5.4
in_app_update: 4.1.0
in_app_update: 4.2.3
cached_network_image: ^3.3.0 # or newer
flutter_blurhash: ^0.8.0 #
#todo its for temporary purpose, later will remove this.
@ -130,9 +139,9 @@ dependencies:
# saf: ^1.0.3+4
dependency_overrides:
firebase_core_platform_interface: 4.5.1
cached_network_image: ^3.2.0
#dependency_overrides:
# firebase_core_platform_interface: 4.5.1
# cached_network_image: ^3.2.0
dev_dependencies:
flutter_test:

Loading…
Cancel
Save