diff --git a/ios/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist
index 1dc6cf7..391a902 100644
--- a/ios/Flutter/AppFrameworkInfo.plist
+++ b/ios/Flutter/AppFrameworkInfo.plist
@@ -20,7 +20,5 @@
????
CFBundleVersion
1.0
- MinimumOSVersion
- 13.0
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
index ff2c23f..526a4e7 100644
--- a/ios/Podfile.lock
+++ b/ios/Podfile.lock
@@ -1,21 +1,104 @@
PODS:
+ - Firebase/CoreOnly (11.15.0):
+ - FirebaseCore (~> 11.15.0)
+ - Firebase/Messaging (11.15.0):
+ - Firebase/CoreOnly
+ - FirebaseMessaging (~> 11.15.0)
+ - firebase_core (3.15.2):
+ - Firebase/CoreOnly (= 11.15.0)
+ - Flutter
+ - firebase_messaging (15.2.10):
+ - Firebase/Messaging (= 11.15.0)
+ - firebase_core
+ - Flutter
+ - FirebaseCore (11.15.0):
+ - FirebaseCoreInternal (~> 11.15.0)
+ - GoogleUtilities/Environment (~> 8.1)
+ - GoogleUtilities/Logger (~> 8.1)
+ - FirebaseCoreInternal (11.15.0):
+ - "GoogleUtilities/NSData+zlib (~> 8.1)"
+ - FirebaseInstallations (11.15.0):
+ - FirebaseCore (~> 11.15.0)
+ - GoogleUtilities/Environment (~> 8.1)
+ - GoogleUtilities/UserDefaults (~> 8.1)
+ - PromisesObjC (~> 2.4)
+ - FirebaseMessaging (11.15.0):
+ - FirebaseCore (~> 11.15.0)
+ - FirebaseInstallations (~> 11.0)
+ - GoogleDataTransport (~> 10.0)
+ - GoogleUtilities/AppDelegateSwizzler (~> 8.1)
+ - GoogleUtilities/Environment (~> 8.1)
+ - GoogleUtilities/Reachability (~> 8.1)
+ - GoogleUtilities/UserDefaults (~> 8.1)
+ - nanopb (~> 3.30910.0)
- Flutter (1.0.0)
- flutter_blue_plus_darwin (0.0.2):
- Flutter
- FlutterMacOS
- flutter_secure_storage (6.0.0):
- Flutter
+ - GoogleDataTransport (10.1.0):
+ - nanopb (~> 3.30910.0)
+ - PromisesObjC (~> 2.4)
+ - GoogleUtilities/AppDelegateSwizzler (8.1.0):
+ - GoogleUtilities/Environment
+ - GoogleUtilities/Logger
+ - GoogleUtilities/Network
+ - GoogleUtilities/Privacy
+ - GoogleUtilities/Environment (8.1.0):
+ - GoogleUtilities/Privacy
+ - GoogleUtilities/Logger (8.1.0):
+ - GoogleUtilities/Environment
+ - GoogleUtilities/Privacy
+ - GoogleUtilities/Network (8.1.0):
+ - GoogleUtilities/Logger
+ - "GoogleUtilities/NSData+zlib"
+ - GoogleUtilities/Privacy
+ - GoogleUtilities/Reachability
+ - "GoogleUtilities/NSData+zlib (8.1.0)":
+ - GoogleUtilities/Privacy
+ - GoogleUtilities/Privacy (8.1.0)
+ - GoogleUtilities/Reachability (8.1.0):
+ - GoogleUtilities/Logger
+ - GoogleUtilities/Privacy
+ - GoogleUtilities/UserDefaults (8.1.0):
+ - GoogleUtilities/Logger
+ - GoogleUtilities/Privacy
+ - nanopb (3.30910.0):
+ - nanopb/decode (= 3.30910.0)
+ - nanopb/encode (= 3.30910.0)
+ - nanopb/decode (3.30910.0)
+ - nanopb/encode (3.30910.0)
- path_provider_foundation (0.0.1):
- Flutter
- FlutterMacOS
+ - PromisesObjC (2.4.0)
DEPENDENCIES:
+ - firebase_core (from `.symlinks/plugins/firebase_core/ios`)
+ - firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`)
- Flutter (from `Flutter`)
- flutter_blue_plus_darwin (from `.symlinks/plugins/flutter_blue_plus_darwin/darwin`)
- flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`)
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
+SPEC REPOS:
+ trunk:
+ - Firebase
+ - FirebaseCore
+ - FirebaseCoreInternal
+ - FirebaseInstallations
+ - FirebaseMessaging
+ - GoogleDataTransport
+ - GoogleUtilities
+ - nanopb
+ - PromisesObjC
+
EXTERNAL SOURCES:
+ firebase_core:
+ :path: ".symlinks/plugins/firebase_core/ios"
+ firebase_messaging:
+ :path: ".symlinks/plugins/firebase_messaging/ios"
Flutter:
:path: Flutter
flutter_blue_plus_darwin:
@@ -26,10 +109,21 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/path_provider_foundation/darwin"
SPEC CHECKSUMS:
+ Firebase: d99ac19b909cd2c548339c2241ecd0d1599ab02e
+ firebase_core: 995454a784ff288be5689b796deb9e9fa3601818
+ firebase_messaging: f4a41dd102ac18b840eba3f39d67e77922d3f707
+ FirebaseCore: efb3893e5b94f32b86e331e3bd6dadf18b66568e
+ FirebaseCoreInternal: 9afa45b1159304c963da48addb78275ef701c6b4
+ FirebaseInstallations: 317270fec08a5d418fdbc8429282238cab3ac843
+ FirebaseMessaging: 3b26e2cee503815e01c3701236b020aa9b576f09
Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467
flutter_blue_plus_darwin: 20a08bfeaa0f7804d524858d3d8744bcc1b6dbc3
flutter_secure_storage: 1ed9476fba7e7a782b22888f956cce43e2c62f13
+ GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7
+ GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1
+ nanopb: fad817b59e0457d11a5dfbde799381cd727c1275
path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
+ PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
PODFILE CHECKSUM: 3c63482e143d1b91d2d2560aee9fb04ecc74ac7e
diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj
index 4db5bcb..8b1bd71 100644
--- a/ios/Runner.xcodeproj/project.pbxproj
+++ b/ios/Runner.xcodeproj/project.pbxproj
@@ -202,6 +202,7 @@
9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
8019B14E73A9D908BAF155A6 /* [CP] Embed Pods Frameworks */,
+ 68446B6605D3E9CBCAE1B8FB /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@@ -312,6 +313,23 @@
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
};
+ 68446B6605D3E9CBCAE1B8FB /* [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;
+ };
8019B14E73A9D908BAF155A6 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift
index 6266644..c30b367 100644
--- a/ios/Runner/AppDelegate.swift
+++ b/ios/Runner/AppDelegate.swift
@@ -2,12 +2,15 @@ import Flutter
import UIKit
@main
-@objc class AppDelegate: FlutterAppDelegate {
+@objc class AppDelegate: FlutterAppDelegate, FlutterImplicitEngineDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
- GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
+
+ func didInitializeImplicitFlutterEngine(_ engineBridge: FlutterImplicitEngineBridge) {
+ GeneratedPluginRegistrant.register(with: engineBridge.pluginRegistry)
+ }
}
diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist
index 52ffd44..eeeaa15 100644
--- a/ios/Runner/Info.plist
+++ b/ios/Runner/Info.plist
@@ -2,6 +2,8 @@
+ CADisableMinimumFrameDurationOnPhone
+
CFBundleDevelopmentRegion
$(DEVELOPMENT_LANGUAGE)
CFBundleDisplayName
@@ -24,6 +26,49 @@
$(FLUTTER_BUILD_NUMBER)
LSRequiresIPhoneOS
+ NSAppTransportSecurity
+
+ NSAllowsLocalNetworking
+
+
+ NSBluetoothAlwaysUsageDescription
+ This app uses Bluetooth to connect to nearby devices.
+ NSBluetoothPeripheralUsageDescription
+ This app requires Bluetooth access.
+ NSBonjourServices
+
+ _dartvm._tcp
+
+ NSLocalNetworkUsageDescription
+ Allow the app to find and connect to the Dart VM for debugging purposes.
+ UIApplicationSceneManifest
+
+ UIApplicationSupportsMultipleScenes
+
+ UISceneConfigurations
+
+ UIWindowSceneSessionRoleApplication
+
+
+ UISceneClassName
+ UIWindowScene
+ UISceneConfigurationName
+ flutter
+ UISceneDelegateClassName
+ FlutterSceneDelegate
+ UISceneStoryboardFile
+ Main
+
+
+
+
+ UIApplicationSupportsIndirectInputEvents
+
+ UIBackgroundModes
+
+ fetch
+ remote-notification
+
UILaunchStoryboardName
LaunchScreen
UIMainStoryboardFile
@@ -41,31 +86,5 @@
UIInterfaceOrientationLandscapeLeft
UIInterfaceOrientationLandscapeRight
- CADisableMinimumFrameDurationOnPhone
-
- UIApplicationSupportsIndirectInputEvents
-
- NSBluetoothAlwaysUsageDescription
- This app uses Bluetooth to connect to nearby devices.
- NSBluetoothPeripheralUsageDescription
- This app requires Bluetooth access.
- NSAppTransportSecurity
-
- NSAllowsLocalNetworking
-
-
- UIBackgroundModes
-
- fetch
- remote-notification
-
-
- NSLocalNetworkUsageDescription
- Allow the app to find and connect to the Dart VM for debugging purposes.
-
- NSBonjourServices
-
- _dartvm._tcp
-
diff --git a/lib/BlindMasterScreens/addingDevices/device_setup.dart b/lib/BlindMasterScreens/addingDevices/device_setup.dart
index 983f028..2a73e6c 100644
--- a/lib/BlindMasterScreens/addingDevices/device_setup.dart
+++ b/lib/BlindMasterScreens/addingDevices/device_setup.dart
@@ -233,7 +233,7 @@ class _DeviceSetupState extends State {
bool ent = isEnterprise(network);
bool open = isOpen(network);
- Map creds = await showDialog(
+ Map? creds = await showDialog(
context: context,
builder: (dialogContext) {
return StatefulBuilder(
@@ -309,6 +309,7 @@ class _DeviceSetupState extends State {
}
);
+ if (creds == null) return;
if (creds["password"] == null && !open) return;
if (creds["uname"] == null && ent) return;
await transmitWiFiDetails(network["ssid"], network["auth"], creds);
diff --git a/lib/BlindMasterScreens/individualControl/peripheral_screen.dart b/lib/BlindMasterScreens/individualControl/peripheral_screen.dart
index fa9ffe3..5cec62d 100644
--- a/lib/BlindMasterScreens/individualControl/peripheral_screen.dart
+++ b/lib/BlindMasterScreens/individualControl/peripheral_screen.dart
@@ -145,6 +145,35 @@ class _PeripheralScreenState extends State {
));
});
+ // Server emits this when the device reports its own calibration state.
+ // When calibrated=false, reset all calibration UI state so the
+ // pre-calibration screen is shown and the user can tap Calibrate.
+ socket?.on("calib_status_changed", (data) {
+ if (data is Map) {
+ if (data['periphID'] == widget.peripheralId) {
+ if (!mounted) return;
+ if (data['calibrated'] == false) {
+ setState(() {
+ calibrated = false;
+ calibrating = false;
+ calibrationStage = 0;
+ });
+ }
+ }
+ }
+ });
+
+ socket?.on("device_pos_report", (data) {
+ if (data is Map) {
+ if (data['periphID'] == widget.peripheralId) {
+ if (!mounted) return;
+ setState(() {
+ _blindPosition = (data['pos'] as int).toDouble();
+ });
+ }
+ }
+ });
+
socket?.on("calib", (periphData) {
if (periphData is Map) {
if (periphData['periphID'] == widget.peripheralId) {
diff --git a/pubspec.lock b/pubspec.lock
index 35efcf1..06043f2 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -308,10 +308,10 @@ packages:
dependency: "direct main"
description:
name: google_fonts
- sha256: ebc94ed30fd13cefd397cb1658b593f21571f014b7d1197eeb41fb95f05d899a
+ sha256: ba03d03bcaa2f6cb7bd920e3b5027181db75ab524f8891c8bc3aa603885b8055
url: "https://pub.dev"
source: hosted
- version: "6.3.1"
+ version: "6.3.3"
http:
dependency: "direct main"
description:
@@ -622,5 +622,5 @@ packages:
source: hosted
version: "6.6.1"
sdks:
- dart: ">=3.9.0-0 <4.0.0"
- flutter: ">=3.29.0"
+ dart: ">=3.9.0 <4.0.0"
+ flutter: ">=3.35.0"