diff --git a/Frontend/android/app/build.gradle b/Frontend/android/app/build.gradle index 9700cd68..897a6253 100644 --- a/Frontend/android/app/build.gradle +++ b/Frontend/android/app/build.gradle @@ -31,17 +31,17 @@ if (keystorePropertiesFile.exists()) { android { namespace "za.co.mzansiinnovationhub.mih" compileSdkVersion flutter.compileSdkVersion - ndkVersion = "27.0.12077973" + // ndkVersion = "27.0.12077973" // ndkVersion flutter.ndkVersion - compileSdkVersion 35 + // compileSdkVersion 35 compileOptions { - sourceCompatibility JavaVersion.VERSION_11 - targetCompatibility JavaVersion.VERSION_11 + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 } kotlinOptions { - jvmTarget = '11' + jvmTarget = '17' } sourceSets { @@ -54,9 +54,10 @@ android { // You can update the following values to match your application needs. // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. minSdkVersion 24 //flutter.minSdkVersion - targetSdkVersion 34 //flutter.targetSdkVersion + targetSdkVersion flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() versionName flutterVersionName + multiDexEnabled true } signingConfigs { @@ -84,8 +85,21 @@ flutter { dependencies { // implementation("com.google.android.material:material:") - implementation("com.google.android.material:material:1.12.0") + implementation "com.google.android.material:material:1.12.0" + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" + implementation(platform("org.jetbrains.kotlin:kotlin-bom:$kotlin_version")) // implementation 'com.huawei.agconnect:agconnect-core:1.5.2.300' } -// apply plugin: 'com.huawei.agconnect' \ No newline at end of file +// apply plugin: 'com.huawei.agconnect' +configurations.all { + resolutionStrategy { + eachDependency { details -> + if (details.requested.group == 'org.jetbrains.kotlin') { + if (!details.requested.version.startsWith(rootProject.ext.kotlin_version)) { + details.useVersion rootProject.ext.kotlin_version + } + } + } + } +} diff --git a/Frontend/android/app/src/main/AndroidManifest.xml b/Frontend/android/app/src/main/AndroidManifest.xml index 9a6761d7..b94bfa1b 100644 --- a/Frontend/android/app/src/main/AndroidManifest.xml +++ b/Frontend/android/app/src/main/AndroidManifest.xml @@ -46,6 +46,10 @@ + + diff --git a/Frontend/android/app/src/main/kotlin/com/example/patient_manager/MainActivity.kt b/Frontend/android/app/src/main/kotlin/za/co/mzansiinnovationhub/mih/MainActivity.kt similarity index 98% rename from Frontend/android/app/src/main/kotlin/com/example/patient_manager/MainActivity.kt rename to Frontend/android/app/src/main/kotlin/za/co/mzansiinnovationhub/mih/MainActivity.kt index 57ffce9d..3ba56267 100644 --- a/Frontend/android/app/src/main/kotlin/com/example/patient_manager/MainActivity.kt +++ b/Frontend/android/app/src/main/kotlin/za/co/mzansiinnovationhub/mih/MainActivity.kt @@ -3,4 +3,4 @@ package za.co.mzansiinnovationhub.mih import io.flutter.embedding.android.FlutterFragmentActivity class MainActivity: FlutterFragmentActivity() { -} +} \ No newline at end of file diff --git a/Frontend/android/build.gradle b/Frontend/android/build.gradle index ed833606..0e62ca7d 100644 --- a/Frontend/android/build.gradle +++ b/Frontend/android/build.gradle @@ -1,5 +1,5 @@ buildscript { - ext.kotlin_version = '2.0.20' + ext.kotlin_version = '2.1.21' repositories { google() mavenCentral() @@ -7,7 +7,7 @@ buildscript { } dependencies { - // classpath "com.android.tools.build:gradle:8.8.0" + classpath "com.android.tools.build:gradle:8.8.1" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // classpath 'com.huawei.agconnect:agcp:1.5.2.300' } @@ -25,9 +25,9 @@ rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" } -subprojects { - project.evaluationDependsOn(':app') -} +//subprojects { +// project.evaluationDependsOn(':app') +//} tasks.register("clean", Delete) { delete rootProject.buildDir diff --git a/Frontend/android/gradle/wrapper/gradle-wrapper.properties b/Frontend/android/gradle/wrapper/gradle-wrapper.properties index df97d72b..79eb9d00 100644 --- a/Frontend/android/gradle/wrapper/gradle-wrapper.properties +++ b/Frontend/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/Frontend/android/settings.gradle b/Frontend/android/settings.gradle index d6f88193..b97b87ee 100644 --- a/Frontend/android/settings.gradle +++ b/Frontend/android/settings.gradle @@ -18,6 +18,7 @@ pluginManagement { plugins { id "dev.flutter.flutter-gradle-plugin" version "1.0.0" apply false + id "org.jetbrains.kotlin.android" version "2.1.21" apply false } } diff --git a/Frontend/ios/Podfile.lock b/Frontend/ios/Podfile.lock index ae6295f1..eca87e34 100644 --- a/Frontend/ios/Podfile.lock +++ b/Frontend/ios/Podfile.lock @@ -47,63 +47,24 @@ PODS: - geolocator_apple (1.2.0): - Flutter - FlutterMacOS - - GoogleDataTransport (10.1.0): - - nanopb (~> 3.30910.0) - - PromisesObjC (~> 2.4) - - GoogleMLKit/BarcodeScanning (7.0.0): - - GoogleMLKit/MLKitCore - - MLKitBarcodeScanning (~> 6.0.0) - - GoogleMLKit/MLKitCore (7.0.0): - - MLKitCommon (~> 12.0.0) - - GoogleToolboxForMac/Defines (4.2.1) - - GoogleToolboxForMac/Logger (4.2.1): - - GoogleToolboxForMac/Defines (= 4.2.1) - - "GoogleToolboxForMac/NSData+zlib (4.2.1)": - - GoogleToolboxForMac/Defines (= 4.2.1) - - GoogleUtilities/Environment (8.0.2): - - GoogleUtilities/Privacy - - GoogleUtilities/Logger (8.0.2): - - GoogleUtilities/Environment - - GoogleUtilities/Privacy - - GoogleUtilities/Privacy (8.0.2) - - GoogleUtilities/UserDefaults (8.0.2): - - GoogleUtilities/Logger - - GoogleUtilities/Privacy - - GTMSessionFetcher/Core (3.5.0) + - Google-Mobile-Ads-SDK (12.2.0): + - GoogleUserMessagingPlatform (>= 1.1) + - google_mobile_ads (6.0.0): + - Flutter + - Google-Mobile-Ads-SDK (~> 12.2.0) + - webview_flutter_wkwebview + - GoogleUserMessagingPlatform (3.0.0) - local_auth_darwin (0.0.1): - Flutter - FlutterMacOS - - MLImage (1.0.0-beta6) - - MLKitBarcodeScanning (6.0.0): - - MLKitCommon (~> 12.0) - - MLKitVision (~> 8.0) - - MLKitCommon (12.0.0): - - GoogleDataTransport (~> 10.0) - - GoogleToolboxForMac/Logger (< 5.0, >= 4.2.1) - - "GoogleToolboxForMac/NSData+zlib (< 5.0, >= 4.2.1)" - - GoogleUtilities/Logger (~> 8.0) - - GoogleUtilities/UserDefaults (~> 8.0) - - GTMSessionFetcher/Core (< 4.0, >= 3.3.2) - - MLKitVision (8.0.0): - - GoogleToolboxForMac/Logger (< 5.0, >= 4.2.1) - - "GoogleToolboxForMac/NSData+zlib (< 5.0, >= 4.2.1)" - - GTMSessionFetcher/Core (< 4.0, >= 3.3.2) - - MLImage (= 1.0.0-beta6) - - MLKitCommon (~> 12.0) - - mobile_scanner (6.0.2): + - mobile_scanner (7.0.0): - Flutter - - GoogleMLKit/BarcodeScanning (~> 7.0.0) - - nanopb (3.30910.0): - - nanopb/decode (= 3.30910.0) - - nanopb/encode (= 3.30910.0) - - nanopb/decode (3.30910.0) - - nanopb/encode (3.30910.0) + - FlutterMacOS - path_provider_foundation (0.0.1): - Flutter - FlutterMacOS - printing (1.0.0): - Flutter - - PromisesObjC (2.4.0) - SDWebImage (5.20.0): - SDWebImage/Core (= 5.20.0) - SDWebImage/Core (5.20.0) @@ -130,8 +91,9 @@ DEPENDENCIES: - flutter_native_splash (from `.symlinks/plugins/flutter_native_splash/ios`) - flutter_tts (from `.symlinks/plugins/flutter_tts/ios`) - geolocator_apple (from `.symlinks/plugins/geolocator_apple/darwin`) + - google_mobile_ads (from `.symlinks/plugins/google_mobile_ads/ios`) - local_auth_darwin (from `.symlinks/plugins/local_auth_darwin/darwin`) - - mobile_scanner (from `.symlinks/plugins/mobile_scanner/ios`) + - mobile_scanner (from `.symlinks/plugins/mobile_scanner/darwin`) - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) - printing (from `.symlinks/plugins/printing/ios`) - share_plus (from `.symlinks/plugins/share_plus/ios`) @@ -144,17 +106,8 @@ SPEC REPOS: trunk: - DKImagePickerController - DKPhotoGallery - - GoogleDataTransport - - GoogleMLKit - - GoogleToolboxForMac - - GoogleUtilities - - GTMSessionFetcher - - MLImage - - MLKitBarcodeScanning - - MLKitCommon - - MLKitVision - - nanopb - - PromisesObjC + - Google-Mobile-Ads-SDK + - GoogleUserMessagingPlatform - SDWebImage - SwiftyGif @@ -175,10 +128,12 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/flutter_tts/ios" geolocator_apple: :path: ".symlinks/plugins/geolocator_apple/darwin" + google_mobile_ads: + :path: ".symlinks/plugins/google_mobile_ads/ios" local_auth_darwin: :path: ".symlinks/plugins/local_auth_darwin/darwin" mobile_scanner: - :path: ".symlinks/plugins/mobile_scanner/ios" + :path: ".symlinks/plugins/mobile_scanner/darwin" path_provider_foundation: :path: ".symlinks/plugins/path_provider_foundation/darwin" printing: @@ -205,26 +160,18 @@ SPEC CHECKSUMS: flutter_native_splash: 35ddbc7228eafcb3969dcc5f1fbbe27c1145a4f0 flutter_tts: b88dbc8655d3dc961bc4a796e4e16a4cc1795833 geolocator_apple: ab36aa0e8b7d7a2d7639b3b4e48308394e8cef5e - GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7 - GoogleMLKit: eff9e23ec1d90ea4157a1ee2e32a4f610c5b3318 - GoogleToolboxForMac: d1a2cbf009c453f4d6ded37c105e2f67a32206d8 - GoogleUtilities: 26a3abef001b6533cf678d3eb38fd3f614b7872d - GTMSessionFetcher: 5aea5ba6bd522a239e236100971f10cb71b96ab6 + Google-Mobile-Ads-SDK: 1dfb0c3cb46c7e2b00b0f4de74a1e06d9ea25d67 + google_mobile_ads: 535223588a6791b7a3cc3513a1bc7b89d12f3e62 + GoogleUserMessagingPlatform: f8d0cdad3ca835406755d0a69aa634f00e76d576 local_auth_darwin: 553ce4f9b16d3fdfeafce9cf042e7c9f77c1c391 - MLImage: 0ad1c5f50edd027672d8b26b0fee78a8b4a0fc56 - MLKitBarcodeScanning: 0a3064da0a7f49ac24ceb3cb46a5bc67496facd2 - MLKitCommon: 07c2c33ae5640e5380beaaa6e4b9c249a205542d - MLKitVision: 45e79d68845a2de77e2dd4d7f07947f0ed157b0e - mobile_scanner: af8f71879eaba2bbcb4d86c6a462c3c0e7f23036 - nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 + mobile_scanner: 9157936403f5a0644ca3779a38ff8404c5434a93 path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564 printing: 54ff03f28fe9ba3aa93358afb80a8595a071dd07 - PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 SDWebImage: 73c6079366fea25fa4bb9640d5fb58f0893facd8 share_plus: 50da8cb520a8f0f65671c6c6a99b3617ed10a58a shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7 SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4 - syncfusion_flutter_pdfviewer: dfb514751af5b6b71e504c9c04a2e4ddbc1dd895 + syncfusion_flutter_pdfviewer: 90dc48305d2e33d4aa20681d1e98ddeda891bc14 url_launcher_ios: 694010445543906933d732453a59da0a173ae33d webview_flutter_wkwebview: 1821ceac936eba6f7984d89a9f3bcb4dea99ebb2 diff --git a/Frontend/ios/Runner.xcodeproj/project.pbxproj b/Frontend/ios/Runner.xcodeproj/project.pbxproj index 338810dc..c9660c5a 100644 --- a/Frontend/ios/Runner.xcodeproj/project.pbxproj +++ b/Frontend/ios/Runner.xcodeproj/project.pbxproj @@ -198,7 +198,7 @@ 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, CD2265EBFCCA7833EF5BB6D4 /* [CP] Embed Pods Frameworks */, - 74234597279ED22D9553D74E /* [CP] Copy Pods Resources */, + DB0F489F4E77F5797F339DD3 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -308,23 +308,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 74234597279ED22D9553D74E /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -379,6 +362,23 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; + DB0F489F4E77F5797F339DD3 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ diff --git a/Frontend/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/Frontend/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 15cada48..e3773d42 100644 --- a/Frontend/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/Frontend/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -26,6 +26,7 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit" shouldUseLaunchSchemeArgsEnv = "YES"> + GADApplicationIdentifier + ca-app-pub-4781880856775334~6935644635 CADisableMinimumFrameDurationOnPhone CFBundleDevelopmentRegion diff --git a/Frontend/lib/main_dev.dart b/Frontend/lib/main_dev.dart index 94fcf9db..914f8e33 100644 --- a/Frontend/lib/main_dev.dart +++ b/Frontend/lib/main_dev.dart @@ -1,20 +1,41 @@ +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_native_splash/flutter_native_splash.dart'; +import 'package:google_mobile_ads/google_mobile_ads.dart'; import 'package:pwa_install/pwa_install.dart'; import 'mih_config/mih_env.dart'; import '../../main.dart'; import 'package:supertokens_flutter/supertokens.dart'; // import 'package:flutter_web_plugins/flutter_web_plugins.dart'; +// void main() async { +// WidgetsBinding widgetsBinding = WidgetsFlutterBinding.ensureInitialized(); +// FlutterNativeSplash.preserve(widgetsBinding: widgetsBinding); +// AppEnviroment.setupEnv(Enviroment.dev); +// SuperTokens.init( +// apiDomain: AppEnviroment.baseApiUrl, +// apiBasePath: "/auth", +// ); +// // setUrlStrategy(PathUrlStrategy()); +// MobileAds.instance.initialize(); +// PWAInstall().setup(installCallback: () { +// debugPrint('APP INSTALLED!'); +// }); +// FlutterNativeSplash.remove(); +// runApp(const MzanziInnovationHub()); +// } + void main() async { WidgetsBinding widgetsBinding = WidgetsFlutterBinding.ensureInitialized(); FlutterNativeSplash.preserve(widgetsBinding: widgetsBinding); - AppEnviroment.setupEnv(Enviroment.dev); + await AppEnviroment.setupEnv(Enviroment.dev); SuperTokens.init( apiDomain: AppEnviroment.baseApiUrl, apiBasePath: "/auth", ); - // setUrlStrategy(PathUrlStrategy()); + if (!kIsWeb) { + MobileAds.instance.initialize(); + } PWAInstall().setup(installCallback: () { debugPrint('APP INSTALLED!'); }); diff --git a/Frontend/lib/main_prod.dart b/Frontend/lib/main_prod.dart index 30cb9c95..eac1ff86 100644 --- a/Frontend/lib/main_prod.dart +++ b/Frontend/lib/main_prod.dart @@ -1,23 +1,45 @@ +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_native_splash/flutter_native_splash.dart'; +import 'package:google_mobile_ads/google_mobile_ads.dart'; import 'package:pwa_install/pwa_install.dart'; import 'mih_config/mih_env.dart'; import '../../main.dart'; import 'package:supertokens_flutter/supertokens.dart'; // import 'package:flutter_web_plugins/flutter_web_plugins.dart'; +// void main() async { +// WidgetsBinding widgetsBinding = WidgetsFlutterBinding.ensureInitialized(); +// FlutterNativeSplash.preserve(widgetsBinding: widgetsBinding); +// AppEnviroment.setupEnv(Enviroment.prod); +// SuperTokens.init( +// apiDomain: AppEnviroment.baseApiUrl, +// apiBasePath: "/auth", +// ); +// // setUrlStrategy(PathUrlStrategy()); +// if (!kIsWeb) { +// MobileAds.instance.initialize(); +// } +// FlutterNativeSplash.remove(); +// PWAInstall().setup(installCallback: () { +// debugPrint('APP INSTALLED!'); +// }); +// runApp(const MzanziInnovationHub()); +// } void main() async { WidgetsBinding widgetsBinding = WidgetsFlutterBinding.ensureInitialized(); FlutterNativeSplash.preserve(widgetsBinding: widgetsBinding); - AppEnviroment.setupEnv(Enviroment.prod); + await AppEnviroment.setupEnv(Enviroment.dev); SuperTokens.init( apiDomain: AppEnviroment.baseApiUrl, apiBasePath: "/auth", ); - // setUrlStrategy(PathUrlStrategy()); - FlutterNativeSplash.remove(); + if (!kIsWeb) { + MobileAds.instance.initialize(); + } PWAInstall().setup(installCallback: () { debugPrint('APP INSTALLED!'); }); + FlutterNativeSplash.remove(); runApp(const MzanziInnovationHub()); } diff --git a/Frontend/lib/mih_components/mih_package_components/Example/package_tools/package_tool_one.dart b/Frontend/lib/mih_components/mih_package_components/Example/package_tools/package_tool_one.dart index 2b653fc2..ebc87c96 100644 --- a/Frontend/lib/mih_components/mih_package_components/Example/package_tools/package_tool_one.dart +++ b/Frontend/lib/mih_components/mih_package_components/Example/package_tools/package_tool_one.dart @@ -2,6 +2,7 @@ import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:mzansi_innovation_hub/main.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_banner_ad.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; @@ -164,6 +165,30 @@ class _PackageToolOneState extends State { ], ), const SizedBox(height: 20), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + "Ad Test", + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: MzanziInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + ), + ], + ), + MihBannerAd(), + const SizedBox(height: 10), + Divider( + color: + MzanziInnovationHub.of(context)!.theme.secondaryColor(), + thickness: 2, + ), + const SizedBox(height: 10), MihForm( formKey: _formKey, formFields: [ diff --git a/Frontend/lib/mih_components/mih_package_components/mih_banner_ad.dart b/Frontend/lib/mih_components/mih_package_components/mih_banner_ad.dart new file mode 100644 index 00000000..95a43efb --- /dev/null +++ b/Frontend/lib/mih_components/mih_package_components/mih_banner_ad.dart @@ -0,0 +1,67 @@ +import 'package:flutter/material.dart'; +import 'package:google_mobile_ads/google_mobile_ads.dart'; +import 'package:mzansi_innovation_hub/mih_config/mih_env.dart'; + +class MihBannerAd extends StatefulWidget { + const MihBannerAd({super.key}); + + @override + State createState() => _MihBannerAdState(); +} + +class _MihBannerAdState extends State { + BannerAd? _bannerAd; + bool _isBannerAdLoaded = false; + final adUnitId = AppEnviroment.bannerAdUnitId; + + void _loadBannerAd() { + _bannerAd = BannerAd( + adUnitId: adUnitId, + request: const AdRequest(), + size: AdSize.banner, + listener: BannerAdListener( + onAdLoaded: (ad) { + debugPrint('$ad loaded.'); + setState(() { + _isBannerAdLoaded = true; + }); + }, + onAdFailedToLoad: (ad, err) { + debugPrint('BannerAd failed to load: $err'); + ad.dispose(); // Dispose the ad to free resources + }, + onAdOpened: (Ad ad) => debugPrint('$ad opened.'), + onAdClosed: (Ad ad) => debugPrint('$ad closed.'), + onAdImpression: (Ad ad) => debugPrint('$ad impression.'), + ), + ); + + _bannerAd!.load(); + } + + @override + void dispose() { + _bannerAd?.dispose(); // Dispose the ad when the widget is removed + super.dispose(); + } + + @override + void initState() { + super.initState(); + _loadBannerAd(); + } + + @override + Widget build(BuildContext context) { + return Column( + children: [ + _bannerAd != null && _isBannerAdLoaded + ? SizedBox( + width: _bannerAd!.size.width.toDouble(), + height: _bannerAd!.size.height.toDouble(), + child: AdWidget(ad: _bannerAd!)) + : SizedBox(), + ], + ); + } +} diff --git a/Frontend/lib/mih_config/mih_env.dart b/Frontend/lib/mih_config/mih_env.dart index 842552b8..87fa0aca 100644 --- a/Frontend/lib/mih_config/mih_env.dart +++ b/Frontend/lib/mih_config/mih_env.dart @@ -1,3 +1,5 @@ +import 'dart:io'; + enum Enviroment { dev, prod } // @@ -5,6 +7,7 @@ abstract class AppEnviroment { static late String baseApiUrl; static late String baseAiUrl; static late String baseFileUrl; + static late String bannerAdUnitId; static late String whatsappAccessToken; static late String fingerPrintPluginKey; static late Enviroment _enviroment; @@ -18,10 +21,12 @@ abstract class AppEnviroment { baseApiUrl = "http://10.0.2.2:8080"; baseFileUrl = "http://10.0.2.2:9000"; baseAiUrl = "http://10.0.2.2:11434"; - //================= Web Dev Urls ================= + bannerAdUnitId = 'ca-app-pub-3940256099942544/9214589741'; + //================= Web & iOS Dev Urls ================= // baseApiUrl = "http://localhost:8080"; // baseFileUrl = "http://localhost:9000"; // baseAiUrl = "http://localhost:11434"; + // bannerAdUnitId = 'ca-app-pub-3940256099942544/2435281174'; break; } case Enviroment.prod: @@ -29,6 +34,9 @@ abstract class AppEnviroment { baseApiUrl = "https://api.mzansi-innovation-hub.co.za"; baseFileUrl = "https://minio.mzansi-innovation-hub.co.za"; baseAiUrl = "https://ai.mzansi-innovation-hub.co.za"; + bannerAdUnitId = Platform.isAndroid + ? 'ca-app-pub-4781880856775334/8868663088' // Android + : 'ca-app-pub-4781880856775334/6640324682'; // iOS //fingerPrintPluginKey = 'h5X7a5j14iUZCobI1ZeX'; break; } diff --git a/Frontend/lib/mih_packages/calculator/package_tools/currency_exchange_rate.dart b/Frontend/lib/mih_packages/calculator/package_tools/currency_exchange_rate.dart index 7982cc89..3f9ac59b 100644 --- a/Frontend/lib/mih_packages/calculator/package_tools/currency_exchange_rate.dart +++ b/Frontend/lib/mih_packages/calculator/package_tools/currency_exchange_rate.dart @@ -1,6 +1,7 @@ import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:mzansi_innovation_hub/main.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_banner_ad.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_dropdwn_field.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_form.dart'; @@ -152,6 +153,8 @@ class _CurrencyExchangeRateState extends State { ), ], ), + SizedBox(height: 10), + MihBannerAd(), ], ), ), diff --git a/Frontend/lib/mih_packages/calculator/package_tools/tip_calc.dart b/Frontend/lib/mih_packages/calculator/package_tools/tip_calc.dart index 0e0793bc..59e4c45f 100644 --- a/Frontend/lib/mih_packages/calculator/package_tools/tip_calc.dart +++ b/Frontend/lib/mih_packages/calculator/package_tools/tip_calc.dart @@ -1,4 +1,5 @@ import 'package:mzansi_innovation_hub/main.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_banner_ad.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart'; @@ -173,7 +174,7 @@ class _TipCalcState extends State { color: MzanziInnovationHub.of(context)!.theme.secondaryColor(), ), ), - const Divider(), + if (splitBillController.text == "Yes") const Divider(), if (splitBillController.text == "Yes") Row( crossAxisAlignment: CrossAxisAlignment.center, @@ -221,6 +222,8 @@ class _TipCalcState extends State { MzanziInnovationHub.of(context)!.theme.secondaryColor(), ), ), + SizedBox(height: 10), + MihBannerAd(), // if (splitBillController.text == "Yes") const Divider(), ], ), diff --git a/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart b/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart index 56c5ea89..5a05bb6d 100644 --- a/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart +++ b/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart @@ -1,5 +1,6 @@ import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:mzansi_innovation_hub/main.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_banner_ad.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_wallet_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart'; @@ -448,7 +449,9 @@ class _BuildLoyaltyCardListState extends State { ), ], ), - ) + ), + SizedBox(height: 10), + MihBannerAd(), ], ), ), diff --git a/Frontend/pubspec.lock b/Frontend/pubspec.lock index ea7062b7..7c4863e1 100644 --- a/Frontend/pubspec.lock +++ b/Frontend/pubspec.lock @@ -5,26 +5,18 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: ae92f5d747aee634b87f89d9946000c2de774be1d6ac3e58268224348cd0101a + sha256: e55636ed79578b9abca5fecf9437947798f5ef7456308b5cb85720b793eac92f url: "https://pub.dev" source: hosted - version: "61.0.0" + version: "82.0.0" analyzer: dependency: transitive description: name: analyzer - sha256: ea3d8652bda62982addfd92fdc2d0214e5f82e43325104990d4f4c4a2a313562 + sha256: "904ae5bb474d32c38fb9482e2d925d5454cda04ddd0e55d2e6826bc72f6ba8c0" url: "https://pub.dev" source: hosted - version: "5.13.0" - animated_button: - dependency: "direct main" - description: - name: animated_button - sha256: "238e093023955b3a21b14d230baeecb94fc796379e3dd8ee534c158838f24024" - url: "https://pub.dev" - source: hosted - version: "0.3.1" + version: "7.4.5" ansicolor: dependency: transitive description: @@ -45,26 +37,26 @@ packages: dependency: transitive description: name: archive - sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d + sha256: "2fde1607386ab523f7a36bb3e7edb43bd58e6edaf2ffb29d8a6d578b297fdbbd" url: "https://pub.dev" source: hosted - version: "3.6.1" + version: "4.0.7" args: dependency: "direct main" description: name: args - sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" + sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04 url: "https://pub.dev" source: hosted - version: "2.5.0" + version: "2.7.0" async: dependency: transitive description: name: async - sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63 + sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb" url: "https://pub.dev" source: hosted - version: "2.12.0" + version: "2.13.0" barcode: dependency: transitive description: @@ -85,18 +77,18 @@ packages: dependency: transitive description: name: bazel_worker - sha256: "57035594b87d9f5af99f1a80e1edf5411dadbdf5acfc4f90403e3849f57dd0f0" + sha256: "373a6ef07caa6c674c1cf144a5fe1e0f712c040552031ce669f298e35f7e110a" url: "https://pub.dev" source: hosted - version: "1.1.2" + version: "1.1.3" bidi: dependency: transitive description: name: bidi - sha256: "9a712c7ddf708f7c41b1923aa83648a3ed44cfd75b04f72d598c45e5be287f9d" + sha256: "77f475165e94b261745cf1032c751e2032b8ed92ccb2bf5716036db79320637d" url: "https://pub.dev" source: hosted - version: "2.0.12" + version: "2.0.13" boolean_selector: dependency: transitive description: @@ -105,22 +97,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.2" - buffer: - dependency: transitive - description: - name: buffer - sha256: "389da2ec2c16283c8787e0adaede82b1842102f8c8aae2f49003a766c5c6b3d1" - url: "https://pub.dev" - source: hosted - version: "1.2.3" build: dependency: transitive description: name: build - sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" + sha256: cef23f1eda9b57566c81e2133d196f8e3df48f244b317368d65c5943d91148f0 url: "https://pub.dev" source: hosted - version: "2.4.1" + version: "2.4.2" build_config: dependency: transitive description: @@ -141,42 +125,42 @@ packages: dependency: transitive description: name: build_modules - sha256: d02a5b40720692c8c4c385741afb1cc50b53f192a33fa5da1f2bdaec3ec6db3e + sha256: b1fc29a603669b25a5d95cc9610ed649e9f00e6075e5b6b721aa1a095cff13de url: "https://pub.dev" source: hosted - version: "4.0.7" + version: "5.0.13" build_resolvers: dependency: transitive description: name: build_resolvers - sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a" + sha256: b9e4fda21d846e192628e7a4f6deda6888c36b5b69ba02ff291a01fd529140f0 url: "https://pub.dev" source: hosted - version: "2.4.2" + version: "2.4.4" build_runner: dependency: "direct dev" description: name: build_runner - sha256: "028819cfb90051c6b5440c7e574d1896f8037e3c96cf17aaeb054c9311cfbf4d" + sha256: "058fe9dce1de7d69c4b84fada934df3e0153dd000758c4d65964d0166779aa99" url: "https://pub.dev" source: hosted - version: "2.4.13" + version: "2.4.15" build_runner_core: dependency: transitive description: name: build_runner_core - sha256: f8126682b87a7282a339b871298cc12009cb67109cfa1614d6436fb0289193e0 + sha256: "22e3aa1c80e0ada3722fe5b63fd43d9c8990759d0a2cf489c8c5d7b2bdebc021" url: "https://pub.dev" source: hosted - version: "7.3.2" + version: "8.0.0" build_web_compilers: dependency: "direct dev" description: name: build_web_compilers - sha256: ee45348ba9c2dfd2e165c0adf69311970fa620c6669c345ab533e16d0d119e3d + sha256: f9b8e84dbfa7688221c2376e6f68ffd796597785a0a5b1e8cd2516a92fdc0a3c url: "https://pub.dev" source: hosted - version: "3.2.7" + version: "4.1.5" built_collection: dependency: transitive description: @@ -189,10 +173,10 @@ packages: dependency: transitive description: name: built_value - sha256: ea90e81dc4a25a043d9bee692d20ed6d1c4a1662a28c03a96417446c093ed6b4 + sha256: "082001b5c3dc495d4a42f1d5789990505df20d8547d42507c29050af6933ee27" url: "https://pub.dev" source: hosted - version: "8.9.5" + version: "8.10.1" characters: dependency: transitive description: @@ -213,10 +197,10 @@ packages: dependency: transitive description: name: checked_yaml - sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff + sha256: "959525d3162f249993882720d52b7e0c833978df229be20702b33d48d91de70f" url: "https://pub.dev" source: hosted - version: "2.0.3" + version: "2.0.4" cli_util: dependency: transitive description: @@ -281,30 +265,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.2" - cupertino_icons: - dependency: "direct main" - description: - name: cupertino_icons - sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 - url: "https://pub.dev" - source: hosted - version: "1.0.8" dart_style: dependency: transitive description: name: dart_style - sha256: "1efa911ca7086affd35f463ca2fc1799584fb6aa89883cf0af8e3664d6a02d55" + sha256: "5b236382b47ee411741447c1f1e111459c941ea1b3f2b540dde54c210a3662af" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "3.1.0" device_info_plus: dependency: transitive description: name: device_info_plus - sha256: "72d146c6d7098689ff5c5f66bcf593ac11efc530095385356e131070333e64da" + sha256: "0c6396126421b590089447154c5f98a5de423b70cfb15b1578fd018843ee6f53" url: "https://pub.dev" source: hosted - version: "11.3.0" + version: "11.4.0" device_info_plus_platform_interface: dependency: transitive description: @@ -349,34 +325,34 @@ packages: dependency: transitive description: name: fake_async - sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc" + sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" url: "https://pub.dev" source: hosted - version: "1.3.2" + version: "1.3.3" fetch_api: dependency: transitive description: name: fetch_api - sha256: "97f46c25b480aad74f7cc2ad7ccba2c5c6f08d008e68f95c1077286ce243d0e6" + sha256: "24cbd5616f3d4008c335c197bb90bfa0eb43b9e55c6de5c60d1f805092636034" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.3.1" fetch_client: dependency: transitive description: name: fetch_client - sha256: "9666ee14536778474072245ed5cba07db81ae8eb5de3b7bf4a2d1e2c49696092" + sha256: "375253f4efe64303c793fb17fe90771c591320b2ae11fb29cb5b406cc8533c00" url: "https://pub.dev" source: hosted - version: "1.1.2" + version: "1.1.4" ffi: dependency: transitive description: name: ffi - sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6" + sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418" url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "2.1.4" file: dependency: transitive description: @@ -389,10 +365,10 @@ packages: dependency: "direct main" description: name: file_picker - sha256: "8d938fd5c11dc81bf1acd4f7f0486c683fe9e79a0b13419e27730f9ce4d8a25b" + sha256: "77f8e81d22d2a07d0dee2c62e1dda71dc1da73bf43bb2d45af09727406167964" url: "https://pub.dev" source: hosted - version: "9.2.1" + version: "10.1.9" fixnum: dependency: transitive description: @@ -434,10 +410,10 @@ packages: dependency: "direct main" description: name: flutter_launcher_icons - sha256: "526faf84284b86a4cb36d20a5e45147747b7563d921373d4ee0559c54fcdbcea" + sha256: "10f13781741a2e3972126fae08393d3c4e01fa4cd7473326b94b72cf594195e7" url: "https://pub.dev" source: hosted - version: "0.13.1" + version: "0.14.4" flutter_link_previewer: dependency: transitive description: @@ -458,10 +434,10 @@ packages: dependency: "direct dev" description: name: flutter_lints - sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04 + sha256: "3105dc8492f6183fb076ccf1f351ac3d60564bff92e20bfc4af9cc1651f4e7e1" url: "https://pub.dev" source: hosted - version: "2.0.3" + version: "6.0.0" flutter_native_splash: dependency: "direct main" description: @@ -482,10 +458,10 @@ packages: dependency: transitive description: name: flutter_plugin_android_lifecycle - sha256: "5a1e6fb2c0561958d7e4c33574674bda7b77caaca7a33b758876956f2902eea3" + sha256: f948e346c12f8d5480d2825e03de228d0eb8c3a737e4cdaa122267b89c022b5e url: "https://pub.dev" source: hosted - version: "2.0.27" + version: "2.0.28" flutter_speed_dial: dependency: "direct main" description: @@ -494,14 +470,6 @@ packages: url: "https://pub.dev" source: hosted version: "7.0.0" - flutter_swipe_detector: - dependency: "direct main" - description: - name: flutter_swipe_detector - sha256: ae6fe331de414632c0122a7047d64dfe2332c95b3f06a05118a7ea538ff19eda - url: "https://pub.dev" - source: hosted - version: "2.0.0" flutter_test: dependency: "direct dev" description: flutter @@ -511,10 +479,10 @@ packages: dependency: "direct main" description: name: flutter_tts - sha256: baa3cb6b4990318460fe28bfa8c7869399e97223971532c02bd97c5e876aa3c5 + sha256: bdf2fc4483e74450dc9fc6fe6a9b6a5663e108d4d0dad3324a22c8e26bf48af4 url: "https://pub.dev" source: hosted - version: "4.2.2" + version: "4.2.3" flutter_web_plugins: dependency: "direct main" description: flutter @@ -548,18 +516,18 @@ packages: dependency: "direct main" description: name: geolocator - sha256: afebc912cbe6496e8823e064ca519afb5610072bb9c4a9feea715f6feb4f7f28 + sha256: ee2212a3df8292ec4c90b91183b8001d3f5a800823c974b570c5f9344ca320dc url: "https://pub.dev" source: hosted - version: "13.0.3" + version: "14.0.1" geolocator_android: dependency: transitive description: name: geolocator_android - sha256: fcb1760a50d7500deca37c9a666785c047139b5f9ee15aa5469fae7dbbe3170d + sha256: "114072db5d1dce0ec0b36af2697f55c133bc89a2c8dd513e137c0afe59696ed4" url: "https://pub.dev" source: hosted - version: "4.6.2" + version: "5.0.1+1" geolocator_apple: dependency: transitive description: @@ -580,26 +548,26 @@ packages: dependency: transitive description: name: geolocator_web - sha256: e54434b2ce9c677759a188d7e32e950802f79a9e9f45728239404bece0f1bd8d + sha256: b1ae9bdfd90f861fde8fd4f209c37b953d65e92823cb73c7dee1fa021b06f172 url: "https://pub.dev" source: hosted - version: "4.1.2" + version: "4.1.3" geolocator_windows: dependency: transitive description: name: geolocator_windows - sha256: "4862e798b8a84ec300531888e7acd137b74637636069df230d79fabd110e2734" + sha256: "175435404d20278ffd220de83c2ca293b73db95eafbdc8131fe8609be1421eb6" url: "https://pub.dev" source: hosted - version: "0.2.4" + version: "0.2.5" gif_view: dependency: "direct main" description: name: gif_view - sha256: "7665fe9ba03ffcad823c13564baed36513143403dc9b68f89adc9f8d7cbdb384" + sha256: "4c7e17c134719531dabab54af121e4600d63283f56f3aff57c16db54766b67bc" url: "https://pub.dev" source: hosted - version: "1.0.1" + version: "1.0.3" glob: dependency: transitive description: @@ -608,14 +576,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.3" - google_nav_bar: + google_mobile_ads: dependency: "direct main" description: - name: google_nav_bar - sha256: bb12dd21514ee1b041ab3127673e2fd85e693337df308f7f2b75cd1e8e92eaf4 + name: google_mobile_ads + sha256: a4f59019f2c32769fb6c60ed8aa321e9c21a36297e2c4f23452b3e779a3e7a26 url: "https://pub.dev" source: hosted - version: "5.0.7" + version: "6.0.0" graphs: dependency: transitive description: @@ -628,18 +596,18 @@ packages: dependency: transitive description: name: html - sha256: "1fc58edeaec4307368c60d59b7e15b9d658b57d7f3125098b6294153c75337ec" + sha256: "6d1264f2dffa1b1101c25a91dff0dc2daee4c18e87cd8538729773c073dbf602" url: "https://pub.dev" source: hosted - version: "0.15.5" + version: "0.15.6" http: dependency: "direct main" description: name: http - sha256: fe7ab022b76f3034adc518fb6ea04a82387620e19977665ea18d30a1cf43442f + sha256: "2c11f3f94c687ee9bad77c171151672986360b2b001d109814ee7140b2cf261b" url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.4.0" http_multi_server: dependency: transitive description: @@ -660,18 +628,18 @@ packages: dependency: transitive description: name: image - sha256: f31d52537dc417fdcde36088fdf11d191026fd5e4fae742491ebd40e5a8bea7d + sha256: "4e973fcf4caae1a4be2fa0a13157aa38a8f9cb049db6529aa00b4d71abc4d928" url: "https://pub.dev" source: hosted - version: "4.3.0" + version: "4.5.4" intl: dependency: "direct main" description: name: intl - sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf + sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5" url: "https://pub.dev" source: hosted - version: "0.19.0" + version: "0.20.2" io: dependency: transitive description: @@ -684,10 +652,10 @@ packages: dependency: transitive description: name: js - sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 + sha256: "53385261521cc4a0c4658fd0ad07a7d14591cf8fc33abbceae306ddb974888dc" url: "https://pub.dev" source: hosted - version: "0.6.7" + version: "0.7.2" json_annotation: dependency: transitive description: @@ -700,10 +668,10 @@ packages: dependency: transitive description: name: leak_tracker - sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec + sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0" url: "https://pub.dev" source: hosted - version: "10.0.8" + version: "10.0.9" leak_tracker_flutter_testing: dependency: transitive description: @@ -732,10 +700,10 @@ packages: dependency: transitive description: name: lints - sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452" + sha256: a5e2b223cb7c9c8efdc663ef484fdd95bb243bff242ef5b13e26883547fce9a0 url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "6.0.0" local_auth: dependency: "direct main" description: @@ -748,10 +716,10 @@ packages: dependency: transitive description: name: local_auth_android - sha256: "0abe4e72f55c785b28900de52a2522c86baba0988838b5dc22241b072ecccd74" + sha256: "63ad7ca6396290626dc0cb34725a939e4cfe965d80d36112f08d49cf13a8136e" url: "https://pub.dev" source: hosted - version: "1.0.48" + version: "1.0.49" local_auth_darwin: dependency: transitive description: @@ -804,10 +772,10 @@ packages: dependency: "direct main" description: name: math_expressions - sha256: e32d803d758ace61cc6c4bdfed1226ff60a6a23646b35685670d28b5616139f8 + sha256: "218dc65bed4726562bb31c53d8daa3cc824664b26fb72d77bc592757edf74ba0" url: "https://pub.dev" source: hosted - version: "2.6.0" + version: "2.7.0" meta: dependency: transitive description: @@ -828,10 +796,10 @@ packages: dependency: "direct main" description: name: mobile_scanner - sha256: "9cb9e371ee9b5b548714f9ab5fd33b530d799745c83d5729ecd1e8ab2935dbd1" + sha256: "54005bdea7052d792d35b4fef0f84ec5ddc3a844b250ecd48dc192fb9b4ebc95" url: "https://pub.dev" source: hosted - version: "6.0.7" + version: "7.0.1" mutex: dependency: transitive description: @@ -840,14 +808,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.1.0" - mysql_client: - dependency: "direct main" - description: - name: mysql_client - sha256: "6a0fdcbe3e0721c637f97ad24649be2f70dbce2b21ede8f962910e640f753fc2" - url: "https://pub.dev" - source: hosted - version: "0.0.27" ollama_dart: dependency: "direct main" description: @@ -892,10 +852,10 @@ packages: dependency: transitive description: name: path_provider_android - sha256: "0ca7359dad67fd7063cb2892ab0c0737b2daafd807cf1acecd62374c8fae6c12" + sha256: d0d310befe2c8ab9e7f393288ccbb11b60c019c6b5afc21973eeee4dda2b35e9 url: "https://pub.dev" source: hosted - version: "2.2.16" + version: "2.2.17" path_provider_foundation: dependency: transitive description: @@ -929,7 +889,7 @@ packages: source: hosted version: "2.3.0" pdf: - dependency: "direct main" + dependency: transitive description: name: pdf sha256: "28eacad99bffcce2e05bba24e50153890ad0255294f4dd78a17075a2ba5c8416" @@ -948,10 +908,10 @@ packages: dependency: transitive description: name: petitparser - sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 + sha256: "07c8f0b1913bcde1ff0d26e57ace2f3012ccbf2b204e070290dad3bb22797646" url: "https://pub.dev" source: hosted - version: "6.0.2" + version: "6.1.0" photo_view: dependency: transitive description: @@ -984,6 +944,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.5.1" + posix: + dependency: transitive + description: + name: posix + sha256: f0d7856b6ca1887cfa6d1d394056a296ae33489db914e365e2044fdada449e62 + url: "https://pub.dev" + source: hosted + version: "6.0.2" printing: dependency: "direct main" description: @@ -996,10 +964,10 @@ packages: dependency: transitive description: name: protobuf - sha256: "68645b24e0716782e58948f8467fd42a880f255096a821f9e7d0ec625b00c84d" + sha256: "579fe5557eae58e3adca2e999e38f02441d8aa908703854a9e0a0f47fa857731" url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "4.1.0" pub_semver: dependency: transitive description: @@ -1016,6 +984,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.5.0" + pwa_install: + dependency: "direct main" + description: + name: pwa_install + sha256: "77fbb93d064d0cda0657f61386958562a13a7e57a2ce2a8b6da707d3bcef43c5" + url: "https://pub.dev" + source: hosted + version: "0.0.6" qr: dependency: transitive description: @@ -1044,34 +1020,34 @@ packages: dependency: "direct main" description: name: share_plus - sha256: fce43200aa03ea87b91ce4c3ac79f0cecd52e2a7a56c7a4185023c271fbfa6da + sha256: b2961506569e28948d75ec346c28775bb111986bb69dc6a20754a457e3d97fa0 url: "https://pub.dev" source: hosted - version: "10.1.4" + version: "11.0.0" share_plus_platform_interface: dependency: transitive description: name: share_plus_platform_interface - sha256: cc012a23fc2d479854e6c80150696c4a5f5bb62cb89af4de1c505cf78d0a5d0b + sha256: "1032d392bc5d2095a77447a805aa3f804d2ae6a4d5eef5e6ebb3bd94c1bc19ef" url: "https://pub.dev" source: hosted - version: "5.0.2" + version: "6.0.0" shared_preferences: dependency: transitive description: name: shared_preferences - sha256: "846849e3e9b68f3ef4b60c60cf4b3e02e9321bc7f4d8c4692cf87ffa82fc8a3a" + sha256: "6e8bf70b7fef813df4e9a36f658ac46d107db4b4cfe1048b477d4e453a8159f5" url: "https://pub.dev" source: hosted - version: "2.5.2" + version: "2.5.3" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - sha256: "3ec7210872c4ba945e3244982918e502fa2bfb5230dff6832459ca0e1879b7ad" + sha256: "20cbd561f743a342c76c151d6ddb93a9ce6005751e7aa458baad3858bfbfb6ac" url: "https://pub.dev" source: hosted - version: "2.4.8" + version: "2.4.10" shared_preferences_foundation: dependency: transitive description: @@ -1124,10 +1100,10 @@ packages: dependency: transitive description: name: shelf_web_socket - sha256: cc36c297b52866d203dbf9332263c94becc2fe0ceaa9681d07b6ef9807023b67 + sha256: "3632775c8e90d6c9712f883e633716432a27758216dfb61bd86a8321c0580925" url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.0.0" simple_gesture_detector: dependency: transitive description: @@ -1209,74 +1185,74 @@ packages: dependency: "direct main" description: name: syncfusion_flutter_core - sha256: f1d2b52697543e13bdefdc62d15868124a265987577f53224a7dbe176c8448f0 + sha256: "0e1e1f50edca35bf1a36c75ebd9c4bef722d3ff9998dac9cee3bf11745639d6a" url: "https://pub.dev" source: hosted - version: "28.2.12" + version: "29.2.10" syncfusion_flutter_pdf: dependency: transitive description: name: syncfusion_flutter_pdf - sha256: f5e02ac4264bc69eeffa3ec54c9c0ad6e8a9f9161b105451b4a83dd1a317eaf9 + sha256: "7610e12ef69a072705d051f506751518aff91fd76d581d3fbde73fd776ca003c" url: "https://pub.dev" source: hosted - version: "28.2.12" + version: "29.2.10" syncfusion_flutter_pdfviewer: dependency: "direct main" description: name: syncfusion_flutter_pdfviewer - sha256: "95e678444ff9571c4d33b8443037cdcc9e34faf1c53af7724043266b2d2df5df" + sha256: e656bda13b923bd0abaaec826990e57f404c865e13f805f210d50a9c96fc8202 url: "https://pub.dev" source: hosted - version: "28.2.12" + version: "29.2.10" syncfusion_flutter_signaturepad: dependency: transitive description: name: syncfusion_flutter_signaturepad - sha256: "30de4c9f77d1b75850697262bf9ce30b46a8d4401cec91dae95c4ee4e589d857" + sha256: "65f812d4e8f54fde8e262c7936627488a9aea294ec4dcc11ac1ddbf147ea0b86" url: "https://pub.dev" source: hosted - version: "28.2.12" + version: "29.2.10" syncfusion_pdfviewer_macos: dependency: transitive description: name: syncfusion_pdfviewer_macos - sha256: c76af8dc3e8df38be3f5d7a78f4bae5ff9f5d73706da997d8428e087af418102 + sha256: "1cba449d5695044d1ced21cbc1e5c45553d5f3523ad3e8842e0cdd7ccf6d35be" url: "https://pub.dev" source: hosted - version: "28.2.12" + version: "29.2.10" syncfusion_pdfviewer_platform_interface: dependency: transitive description: name: syncfusion_pdfviewer_platform_interface - sha256: a9c102d1edd68fbe449e37021f5b82a8e32339023112807a828fb4e585e077cc + sha256: "93244ccbb1f7663fa9988f8c22845f7106e28eccff83685825302c8ddded0861" url: "https://pub.dev" source: hosted - version: "28.2.12" + version: "29.2.10" syncfusion_pdfviewer_web: dependency: transitive description: name: syncfusion_pdfviewer_web - sha256: "6f2bf5c385e003e8f7312c445240c8648045400de9d7050df9d9a4b191c02568" + sha256: "25e5a91a04a2016907e17552b0581f58d401489d8d5ad9cdefd5be74c0f6ab1d" url: "https://pub.dev" source: hosted - version: "28.2.12" + version: "29.2.10" syncfusion_pdfviewer_windows: dependency: transitive description: name: syncfusion_pdfviewer_windows - sha256: cf638a7d64bdd4120a8e27d944cb966a05a409ee3d0c24fa63e83341a535d6fb + sha256: "6dbc08118892a77a269a73f20074093dd3f5e47af5125a296e4080e0858b1a56" url: "https://pub.dev" source: hosted - version: "28.2.12" + version: "29.2.10" table_calendar: dependency: "direct main" description: name: table_calendar - sha256: b2896b7c86adf3a4d9c911d860120fe3dbe03c85db43b22fd61f14ee78cdbb63 + sha256: "0c0c6219878b363a2d5f40c7afb159d845f253d061dc3c822aa0d5fe0f721982" url: "https://pub.dev" source: hosted - version: "3.1.3" + version: "3.2.0" term_glyph: dependency: transitive description: @@ -1301,14 +1277,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.2" - tuple: - dependency: transitive - description: - name: tuple - sha256: a97ce2013f240b2f3807bcbaf218765b6f301c3eff91092bcfa23a039e7dd151 - url: "https://pub.dev" - source: hosted - version: "2.0.2" typed_data: dependency: transitive description: @@ -1345,18 +1313,18 @@ packages: dependency: transitive description: name: url_launcher_android - sha256: "1d0eae19bd7606ef60fe69ef3b312a437a16549476c42321d5dc1506c9ca3bf4" + sha256: "8582d7f6fe14d2652b4c45c9b6c14c0b678c2af2d083a11b604caeba51930d79" url: "https://pub.dev" source: hosted - version: "6.3.15" + version: "6.3.16" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: "16a513b6c12bb419304e72ea0ae2ab4fed569920d1c7cb850263fe3acc824626" + sha256: "7f2022359d4c099eea7df3fdf739f7d3d3b9faf3166fb1dd390775176e0b76cb" url: "https://pub.dev" source: hosted - version: "6.3.2" + version: "6.3.3" url_launcher_linux: dependency: transitive description: @@ -1385,10 +1353,10 @@ packages: dependency: transitive description: name: url_launcher_web - sha256: "3ba963161bd0fe395917ba881d320b9c4f6dd3c4a233da62ab18a5025c85f1e9" + sha256: "4bd2b7b4dc4d4d0b94e5babfffbca8eac1a126c7f3d6ecbc1a11013faa3abba2" url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.4.1" url_launcher_windows: dependency: transitive description: @@ -1425,10 +1393,10 @@ packages: dependency: transitive description: name: vm_service - sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14" + sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02 url: "https://pub.dev" source: hosted - version: "14.3.1" + version: "15.0.0" watcher: dependency: transitive description: @@ -1449,66 +1417,66 @@ packages: dependency: transitive description: name: web_socket - sha256: "3c12d96c0c9a4eec095246debcea7b86c0324f22df69893d538fcc6f1b8cce83" + sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c" url: "https://pub.dev" source: hosted - version: "0.1.6" + version: "1.0.1" web_socket_channel: dependency: transitive description: name: web_socket_channel - sha256: "0b8e2457400d8a859b7b2030786835a28a8e80836ef64402abef392ff4f1d0e5" + sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8 url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "3.0.3" webview_flutter: dependency: transitive description: name: webview_flutter - sha256: "889a0a678e7c793c308c68739996227c9661590605e70b1f6cf6b9a6634f7aec" + sha256: c3e4fe614b1c814950ad07186007eff2f2e5dd2935eba7b9a9a1af8e5885f1ba url: "https://pub.dev" source: hosted - version: "4.10.0" + version: "4.13.0" webview_flutter_android: dependency: transitive description: name: webview_flutter_android - sha256: e09150b28a07933839adef0e4a088bb43e8c8d9e6b93025b01882d4067a58ab0 + sha256: f6e6afef6e234801da77170f7a1847ded8450778caf2fe13979d140484be3678 url: "https://pub.dev" source: hosted - version: "4.3.4" + version: "4.7.0" webview_flutter_platform_interface: dependency: transitive description: name: webview_flutter_platform_interface - sha256: d937581d6e558908d7ae3dc1989c4f87b786891ab47bb9df7de548a151779d8d + sha256: f0dc2dc3a2b1e3a6abdd6801b9355ebfeb3b8f6cde6b9dc7c9235909c4a1f147 url: "https://pub.dev" source: hosted - version: "2.10.0" + version: "2.13.1" webview_flutter_wkwebview: dependency: transitive description: name: webview_flutter_wkwebview - sha256: c49a98510080378b1525132f407a92c3dcd3b7145bef04fb8137724aadcf1cf0 + sha256: a3d461fe3467014e05f3ac4962e5fdde2a4bf44c561cb53e9ae5c586600fdbc3 url: "https://pub.dev" source: hosted - version: "3.18.4" + version: "3.22.0" win32: dependency: transitive description: name: win32 - sha256: daf97c9d80197ed7b619040e86c8ab9a9dad285e7671ee7390f9180cc828a51e + sha256: "329edf97fdd893e0f1e3b9e88d6a0e627128cc17cc316a8d67fda8f1451178ba" url: "https://pub.dev" source: hosted - version: "5.10.1" + version: "5.13.0" win32_registry: dependency: transitive description: name: win32_registry - sha256: "21ec76dfc731550fd3e2ce7a33a9ea90b828fdf19a5c3bcf556fa992cfa99852" + sha256: "6f1b564492d0147b330dd794fee8f512cec4977957f310f9951b5f9d83618dae" url: "https://pub.dev" source: hosted - version: "1.1.5" + version: "2.1.0" xdg_directories: dependency: transitive description: @@ -1550,5 +1518,5 @@ packages: source: hosted version: "3.1.1" sdks: - dart: ">=3.7.0-0 <3.9.0" - flutter: ">=3.27.0" + dart: ">=3.8.0 <3.9.0" + flutter: ">=3.29.0" diff --git a/Frontend/pubspec.yaml b/Frontend/pubspec.yaml index 70270e1a..45e03da6 100644 --- a/Frontend/pubspec.yaml +++ b/Frontend/pubspec.yaml @@ -43,6 +43,7 @@ dependencies: share_plus: ^11.0.0 app_settings: ^6.1.1 pwa_install: ^0.0.6 + google_mobile_ads: ^6.0.0 dev_dependencies: flutter_test: diff --git a/backend/requirements.txt b/backend/requirements.txt index 694a5bb0..d0594fd5 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -7,4 +7,4 @@ requests watchfiles python-multipart xlrd -supertokens-python \ No newline at end of file +supertokens-python==0.29.2 \ No newline at end of file