feat(ios): 添加用药计划Widget小组件支持
- 创建medicineExtension小组件,支持iOS桌面显示用药计划 - 实现App Group数据共享机制,支持主应用与小组件数据同步 - 添加AppGroupUserDefaultsManager原生模块,提供跨应用数据访问能力 - 添加WidgetManager和WidgetCenterHelper,实现小组件刷新控制 - 在medications页面和Redux store中集成小组件数据同步逻辑 - 支持实时同步今日用药状态(待服用/已服用/已错过)到小组件 - 配置App Group entitlements (group.com.anonymous.digitalpilates) - 更新Xcode项目配置,添加WidgetKit和SwiftUI框架支持
This commit is contained in:
55
ios/WidgetManager.m
Normal file
55
ios/WidgetManager.m
Normal file
@@ -0,0 +1,55 @@
|
||||
//
|
||||
// WidgetManager.m
|
||||
// OutLive
|
||||
//
|
||||
// Created by AI Assistant on 2025/11/13.
|
||||
//
|
||||
|
||||
#import "WidgetManager.h"
|
||||
#import "OutLive-Swift.h"
|
||||
|
||||
@implementation WidgetManager
|
||||
|
||||
RCT_EXPORT_MODULE();
|
||||
|
||||
+ (BOOL)requiresMainQueueSetup {
|
||||
return NO;
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(reloadTimelines:(RCTPromiseResolveBlock)resolve
|
||||
rejecter:(RCTPromiseRejectBlock)reject) {
|
||||
|
||||
@try {
|
||||
if (@available(iOS 14.0, *)) {
|
||||
// 刷新所有小组件
|
||||
[WidgetCenterHelper reloadAllTimelinesIfAvailable];
|
||||
|
||||
// 也可以只刷新特定的medicine小组件
|
||||
[WidgetCenterHelper reloadTimelinesIfAvailableOfKind:@"medicine"];
|
||||
|
||||
resolve(@"Widget timelines reloaded successfully");
|
||||
} else {
|
||||
reject(@"IOS_VERSION_ERROR", @"WidgetKit is not available on this iOS version", nil);
|
||||
}
|
||||
} @catch (NSException *exception) {
|
||||
reject(@"RELOAD_TIMELINES_ERROR", exception.reason, nil);
|
||||
}
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(reloadTimeline:(NSString *)widgetKind
|
||||
resolver:(RCTPromiseResolveBlock)resolve
|
||||
rejecter:(RCTPromiseRejectBlock)reject) {
|
||||
|
||||
@try {
|
||||
if (@available(iOS 14.0, *)) {
|
||||
[WidgetCenterHelper reloadTimelinesIfAvailableOfKind:widgetKind];
|
||||
resolve([NSString stringWithFormat:@"Widget timeline reloaded for kind: %@", widgetKind]);
|
||||
} else {
|
||||
reject(@"IOS_VERSION_ERROR", @"WidgetKit is not available on this iOS version", nil);
|
||||
}
|
||||
} @catch (NSException *exception) {
|
||||
reject(@"RELOAD_TIMELINE_ERROR", exception.reason, nil);
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
Reference in New Issue
Block a user