diff --git a/mobile/android/app/build.gradle b/mobile/android/app/build.gradle
index 4d3d96942..83eb22840 100644
--- a/mobile/android/app/build.gradle
+++ b/mobile/android/app/build.gradle
@@ -4,6 +4,24 @@ plugins {
id "dev.flutter.flutter-gradle-plugin"
}
+def localProperties = new Properties()
+def localPropertiesFile = rootProject.file('local.properties')
+if (localPropertiesFile.exists()) {
+ localPropertiesFile.withReader('UTF-8') { reader ->
+ localProperties.load(reader)
+ }
+}
+
+def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
+if (flutterVersionCode == null) {
+ flutterVersionCode = '1'
+}
+
+def flutterVersionName = localProperties.getProperty('flutter.versionName')
+if (flutterVersionName == null) {
+ flutterVersionName = '1.0'
+}
+
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
def hasKeystore = false
@@ -49,8 +67,8 @@ android {
applicationId "am.sure.mobile"
minSdkVersion 24
targetSdkVersion flutter.targetSdkVersion
- versionCode 1
- versionName "1.0.0"
+ versionCode flutterVersionCode.toInteger()
+ versionName flutterVersionName
}
buildTypes {
diff --git a/mobile/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java b/mobile/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java
index ba9a79390..a345a0caa 100644
--- a/mobile/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java
+++ b/mobile/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java
@@ -30,6 +30,11 @@ public final class GeneratedPluginRegistrant {
} catch (Exception e) {
Log.e(TAG, "Error registering plugin flutter_secure_storage, com.it_nomads.fluttersecurestorage.FlutterSecureStoragePlugin", e);
}
+ try {
+ flutterEngine.getPlugins().add(new dev.fluttercommunity.plus.packageinfo.PackageInfoPlugin());
+ } catch (Exception e) {
+ Log.e(TAG, "Error registering plugin package_info_plus, dev.fluttercommunity.plus.packageinfo.PackageInfoPlugin", e);
+ }
try {
flutterEngine.getPlugins().add(new io.flutter.plugins.pathprovider.PathProviderPlugin());
} catch (Exception e) {
diff --git a/mobile/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/mobile/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 000000000..919434a62
--- /dev/null
+++ b/mobile/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/mobile/ios/Runner/GeneratedPluginRegistrant.m b/mobile/ios/Runner/GeneratedPluginRegistrant.m
index 5705b470d..5c010e574 100644
--- a/mobile/ios/Runner/GeneratedPluginRegistrant.m
+++ b/mobile/ios/Runner/GeneratedPluginRegistrant.m
@@ -24,6 +24,12 @@
@import flutter_secure_storage_darwin;
#endif
+#if __has_include()
+#import
+#else
+@import package_info_plus;
+#endif
+
#if __has_include()
#import
#else
@@ -54,6 +60,7 @@
[AppLinksIosPlugin registerWithRegistrar:[registry registrarForPlugin:@"AppLinksIosPlugin"]];
[ConnectivityPlusPlugin registerWithRegistrar:[registry registrarForPlugin:@"ConnectivityPlusPlugin"]];
[FlutterSecureStorageDarwinPlugin registerWithRegistrar:[registry registrarForPlugin:@"FlutterSecureStorageDarwinPlugin"]];
+ [FPPPackageInfoPlusPlugin registerWithRegistrar:[registry registrarForPlugin:@"FPPPackageInfoPlusPlugin"]];
[PathProviderPlugin registerWithRegistrar:[registry registrarForPlugin:@"PathProviderPlugin"]];
[SharedPreferencesPlugin registerWithRegistrar:[registry registrarForPlugin:@"SharedPreferencesPlugin"]];
[SqflitePlugin registerWithRegistrar:[registry registrarForPlugin:@"SqflitePlugin"]];
diff --git a/mobile/lib/screens/settings_screen.dart b/mobile/lib/screens/settings_screen.dart
index bf2518e4d..16a51fc77 100644
--- a/mobile/lib/screens/settings_screen.dart
+++ b/mobile/lib/screens/settings_screen.dart
@@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
+import 'package:package_info_plus/package_info_plus.dart';
import 'package:provider/provider.dart';
import '../providers/auth_provider.dart';
import '../services/offline_storage_service.dart';
@@ -14,11 +15,20 @@ class SettingsScreen extends StatefulWidget {
class _SettingsScreenState extends State {
bool _groupByType = false;
+ String? _appVersion;
@override
void initState() {
super.initState();
_loadPreferences();
+ _loadAppVersion();
+ }
+
+ Future _loadAppVersion() async {
+ final packageInfo = await PackageInfo.fromPlatform();
+ if (mounted) {
+ setState(() => _appVersion = packageInfo.version);
+ }
}
Future _loadPreferences() async {
@@ -179,7 +189,7 @@ class _SettingsScreenState extends State {
// App version
ListTile(
leading: const Icon(Icons.info_outline),
- title: const Text('App Version: 0.6.8'),
+ title: Text('App Version: ${_appVersion ?? '…'}'),
subtitle: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
diff --git a/mobile/lib/services/device_service.dart b/mobile/lib/services/device_service.dart
index 22b9ccbef..6a45cb2ce 100644
--- a/mobile/lib/services/device_service.dart
+++ b/mobile/lib/services/device_service.dart
@@ -1,5 +1,6 @@
import 'dart:io';
import 'package:flutter/foundation.dart';
+import 'package:package_info_plus/package_info_plus.dart';
import 'package:shared_preferences/shared_preferences.dart';
class DeviceService {
@@ -7,20 +8,21 @@ class DeviceService {
Future