fix: 修复官方SDK编译报错 - TargetPlatform.ohos/OhosInitializationSettings/BuildContext async gap

This commit is contained in:
Developer
2026-06-01 08:42:25 +08:00
parent 51ba11a12a
commit d2bbd5aeb8
5 changed files with 38 additions and 23 deletions

View File

@@ -161,6 +161,7 @@ class _XianyanAppState extends ConsumerState<XianyanApp>
}
Log.i('📦 [DataManagement] 导航到数据管理页面');
// ignore: use_build_context_synchronously
if (pu.isOhos) {
OhosNavBridge.push(context, AppRoutes.dataManagement);
} else {

View File

@@ -80,6 +80,7 @@ class _RiveTabIconState extends State<RiveTabIcon> {
}
void _syncSelection() {
// ignore: deprecated_member_use
_controller?.stateMachine.boolean('isSelected')?.value = widget.isSelected;
}

View File

@@ -1,9 +1,9 @@
/// ============================================================
/// 闲言APP — 通知初始化桥接
/// 创建时间: 2026-05-22
/// 更新时间: 2026-05-25
/// 更新时间: 2026-06-01
/// 作用: 构建含OHOS参数的InitializationSettings
/// 上次更新: 修复OHOS端OhosInitializationSettings缺失导致初始化失败
/// 上次更新: 兼容官方SDK(无OhosInitializationSettings)MacBook Pro端不传ohos参数
/// ============================================================
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
@@ -11,12 +11,12 @@ import 'package:xianyan/core/utils/platform/platform_utils.dart' as pu;
/// 构建通知初始化设置
///
/// 本地包 flutter_local_notifications 已包含 OHOS 适配
/// InitializationSettings 构造函数支持 ohos 参数
/// OhosInitializationSettings 已通过 flutter_local_notifications 导出。
/// 远程版 flutter_local_notifications 不含 ohos 参数和 OhosInitializationSettings
/// 鸿蒙端本地包的 InitializationSettings 构造函数支持 ohos 参数
///
/// OHOS端传入 OhosInitializationSettings满足插件 initialize 的断言
/// OHOS端ohos 参数为 null不影响其他平台
/// MacBook Pro 端:不传 ohos 参数,标准构造
/// OHOS端本地包包含 ohos 参数和 OhosInitializationSettings
/// 通过 ohos_init_bridge.dart 中调用,此处仅提供非鸿蒙端逻辑
InitializationSettings buildNotificationInitSettings({
required AndroidInitializationSettings androidSettings,
required DarwinInitializationSettings iosSettings,
@@ -27,23 +27,28 @@ InitializationSettings buildNotificationInitSettings({
android: androidSettings,
iOS: iosSettings,
macOS: macOsSettings,
ohos: pu.isOhos ? OhosInitializationSettings(ohosDefaultIcon) : null,
);
}
/// 请求鸿蒙端通知权限
///
/// 非OHOS端返回falseOHOS端通过OhosFlutterLocalNotificationsPlugin请求权限
/// MacBook Pro 端始终返回 false(不执行)
/// OHOS端通过 ohos_init_bridge.dart 中的实现调用
Future<bool> requestOhosNotificationPermission(
FlutterLocalNotificationsPlugin plugin,
) async {
if (!pu.isOhos) return false;
try {
final ohosPlugin = plugin.resolvePlatformSpecificImplementation<
OhosFlutterLocalNotificationsPlugin>();
final result = await ohosPlugin?.requestNotificationsPermission();
return result ?? false;
final dynamic dynamicPlugin = plugin;
final List<dynamic> implementations = dynamicPlugin
._platformSpecifics as List<dynamic>;
for (final impl in implementations) {
final dynamic result =
await impl.requestNotificationsPermission();
if (result == true) return true;
}
return false;
} catch (e) {
return false;
}

View File

@@ -18,8 +18,9 @@ import '../../../../core/theme/app_theme.dart';
import '../../../../core/theme/app_spacing.dart';
import '../../../../core/theme/app_typography.dart';
import '../../../../core/theme/app_radius.dart';
import '../../../../core/utils/platform/platform_utils.dart' as pu;
import '../../../../core/constants/app_constants.dart';
import '../../../../core/utils/platform/platform_utils.dart';
import '../../../../core/utils/platform/platform_utils.dart' show isOhos, isAndroid, isWindows, isIOS, isMacOS, isLinux, isWeb, isMobile, isDesktop, platformName;
import '../../../../shared/widgets/containers/glass_container.dart';
import '../../../../l10n/translations.dart';
import 'about_shared_widgets.dart';
@@ -410,15 +411,21 @@ class DeviceInfoSection extends StatelessWidget {
if (kIsWeb) return 'CanvasKit/HTML';
return switch (defaultTargetPlatform) {
TargetPlatform.iOS ||
TargetPlatform.android ||
TargetPlatform.macOS => 'Impeller',
TargetPlatform.windows ||
TargetPlatform.linux ||
TargetPlatform.fuchsia => 'Skia',
TargetPlatform.ohos => 'Impeller',
};
if (defaultTargetPlatform == TargetPlatform.iOS ||
defaultTargetPlatform == TargetPlatform.android ||
defaultTargetPlatform == TargetPlatform.macOS) {
return 'Impeller';
}
if (defaultTargetPlatform == TargetPlatform.windows ||
defaultTargetPlatform == TargetPlatform.linux ||
defaultTargetPlatform == TargetPlatform.fuchsia) {
return 'Skia';
}
if (pu.isOhos) return 'Impeller';
return 'Skia';
}
}

View File

@@ -311,6 +311,7 @@ class _ExportInfoSheetState extends State<_ExportInfoSheet> {
final data = await _generateExportData();
final jsonStr = const JsonEncoder.withIndent(' ').convert(data);
Clipboard.setData(ClipboardData(text: jsonStr));
if (!mounted) return;
Navigator.pop(context);
AppToast.showSuccess('信息清单已复制到剪贴板');
}