✨ iOS check in widget
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import Flutter
|
||||
import WidgetKit
|
||||
import UIKit
|
||||
import WatchConnectivity
|
||||
|
||||
@@ -12,6 +13,7 @@ import WatchConnectivity
|
||||
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
|
||||
) -> Bool {
|
||||
syncDefaultsToGroup()
|
||||
WidgetCenter.shared.reloadAllTimelines()
|
||||
|
||||
UNUserNotificationCenter.current().delegate = notifyDelegate
|
||||
|
||||
@@ -31,6 +33,9 @@ import WatchConnectivity
|
||||
|
||||
GeneratedPluginRegistrant.register(with: self)
|
||||
|
||||
// Setup widget sync method channel
|
||||
setupWidgetSyncChannel()
|
||||
|
||||
// Always initialize and retain a strong reference
|
||||
if WCSession.isSupported() {
|
||||
AppDelegate.sharedWatchConnectivityService = WatchConnectivityService.shared
|
||||
@@ -40,6 +45,30 @@ import WatchConnectivity
|
||||
|
||||
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
|
||||
}
|
||||
|
||||
private func setupWidgetSyncChannel() {
|
||||
let controller = window?.rootViewController as? FlutterViewController
|
||||
let channel = FlutterMethodChannel(name: "dev.solsynth.solian/widget", binaryMessenger: controller!.binaryMessenger)
|
||||
|
||||
channel.setMethodCallHandler { [weak self] (call, result) in
|
||||
if call.method == "syncToWidget" {
|
||||
syncDefaultsToGroup()
|
||||
WidgetCenter.shared.reloadAllTimelines()
|
||||
result(true)
|
||||
} else {
|
||||
result(FlutterMethodNotImplemented)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override func applicationDidEnterBackground(_ application: UIApplication) {
|
||||
syncDefaultsToGroup()
|
||||
WidgetCenter.shared.reloadAllTimelines()
|
||||
}
|
||||
|
||||
override func applicationWillTerminate(_ application: UIApplication) {
|
||||
syncDefaultsToGroup()
|
||||
}
|
||||
}
|
||||
|
||||
final class WatchConnectivityService: NSObject, WCSessionDelegate {
|
||||
|
||||
@@ -10,26 +10,32 @@ import Foundation
|
||||
private let flutterKeyPrefix = "flutter."
|
||||
|
||||
private let flutterKeysToSync: [String] = [
|
||||
"dyn_user_tk"
|
||||
"dyn_user_tk",
|
||||
"app_server_url"
|
||||
]
|
||||
|
||||
func syncDefaultsToGroup() {
|
||||
print("[iOS] syncDefaultsToGroup() called")
|
||||
|
||||
let standard = UserDefaults.standard
|
||||
let shared = UserDefaults(suiteName: "dev.solsynth.solian")
|
||||
|
||||
let shared = UserDefaults(suiteName: "group.solsynth.solian")
|
||||
|
||||
guard let shared else {
|
||||
print("[iOS] App Group UserDefaults not available")
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
for key in flutterKeysToSync {
|
||||
guard key.hasPrefix(flutterKeyPrefix) else { continue }
|
||||
|
||||
if let value = standard.object(forKey: key) {
|
||||
print("[iOS] Syncing key to App Group: \(key)")
|
||||
shared.set(value, forKey: key)
|
||||
let prefixedKey = key.starts(with: flutterKeyPrefix) ? key : flutterKeyPrefix + key
|
||||
|
||||
if let value = standard.object(forKey: prefixedKey) {
|
||||
print("[iOS] Syncing key to App Group: \(prefixedKey)")
|
||||
shared.set(value, forKey: prefixedKey)
|
||||
} else {
|
||||
print("[iOS] Key \(prefixedKey) was not found in the app data, skipping...")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
shared.synchronize()
|
||||
print("[iOS] Sync completed")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user