refactor: 重构项目目录结构与路径引用
1. 调整工具类、平台相关代码的目录组织,将原有根目录下的工具类迁移到`data/`和`platform/`子目录 2. 统一修复全项目的文件导入路径,匹配新的目录结构 3. 新增Web端平台适配的Stub实现,包括Isolate、path_provider、platform_io等 4. 删除旧的单文件平台适配实现,替换为分平台的目录结构实现 5. 移除旧的iOS Widget入口文件,新增Widget Extension的权限配置 6. 调整部分组件的目录位置,统一widget的分类组织 7. 修复部分硬编码文本和废弃的正则表达式逻辑
This commit is contained in:
@@ -18,7 +18,7 @@ import '../../router/app_router.dart';
|
||||
import 'notification_center.dart';
|
||||
import '../../storage/app_kv_store.dart';
|
||||
import '../../utils/logger.dart';
|
||||
import '../../utils/platform_utils.dart' as pu;
|
||||
import '../../utils/platform/platform_utils.dart' as pu;
|
||||
import 'notification_init_stub.dart';
|
||||
|
||||
class LocalNotificationService {
|
||||
@@ -59,20 +59,23 @@ class LocalNotificationService {
|
||||
requestSoundPermission: false,
|
||||
);
|
||||
|
||||
// 通过桥接方法构建 InitializationSettings
|
||||
// 官方SDK:不含ohos参数;鸿蒙端:动态注入ohos参数
|
||||
final settings = buildNotificationInitSettings(
|
||||
androidSettings: androidSettings,
|
||||
iosSettings: iosSettings,
|
||||
);
|
||||
|
||||
await _plugin.initialize(
|
||||
settings: settings,
|
||||
onDidReceiveNotificationResponse: _onNotificationTapped,
|
||||
);
|
||||
|
||||
_initialized = true;
|
||||
Log.i('本地通知服务初始化完成 (权限延迟到用户开启通知时申请)');
|
||||
try {
|
||||
await _plugin
|
||||
.initialize(
|
||||
settings: settings,
|
||||
onDidReceiveNotificationResponse: _onNotificationTapped,
|
||||
)
|
||||
.timeout(const Duration(seconds: 5));
|
||||
_initialized = true;
|
||||
Log.i('本地通知服务初始化完成 (权限延迟到用户开启通知时申请)');
|
||||
} catch (e, st) {
|
||||
Log.e('本地通知服务初始化失败', e, st);
|
||||
}
|
||||
}
|
||||
|
||||
static Future<bool> requestPermission() async {
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/// 创建时间: 2026-05-22
|
||||
/// 更新时间: 2026-05-22
|
||||
/// 作用: 合并 NotificationScheduler + DailyNotifyService,统一管理所有本地通知调度
|
||||
/// 上次更新: 初始版本,合并每日推荐/签到/节气/运势/学习进度/稍后读通知
|
||||
/// 上次更新: 修复Readlater开关未触发configureAll的问题
|
||||
/// ============================================================
|
||||
|
||||
import 'local_notification_service.dart';
|
||||
@@ -138,6 +138,7 @@ class NotificationCenter {
|
||||
|
||||
static Future<void> setReadlaterEnabled(bool v) async {
|
||||
await AppKVStore.setBool(_keyReadlaterEnabled, v);
|
||||
await configureAll();
|
||||
}
|
||||
|
||||
// ── 核心调度 ──
|
||||
@@ -275,29 +276,197 @@ class NotificationCenter {
|
||||
}
|
||||
|
||||
static final List<Map<String, dynamic>> _solarTerms2026 = [
|
||||
{'year': 2026, 'month': 1, 'day': 5, 'name': '小寒', 'emoji': '❄️', 'poem': '小寒连大吕,欢鹊垒新巢'},
|
||||
{'year': 2026, 'month': 1, 'day': 20, 'name': '大寒', 'emoji': '🧊', 'poem': '大寒须守火,无事不出门'},
|
||||
{'year': 2026, 'month': 2, 'day': 4, 'name': '立春', 'emoji': '🌱', 'poem': '春风如贵客,一到便繁华'},
|
||||
{'year': 2026, 'month': 2, 'day': 18, 'name': '雨水', 'emoji': '🌧️', 'poem': '好雨知时节,当春乃发生'},
|
||||
{'year': 2026, 'month': 3, 'day': 5, 'name': '惊蛰', 'emoji': '⚡', 'poem': '微雨众卉新,一雷惊蛰始'},
|
||||
{'year': 2026, 'month': 3, 'day': 20, 'name': '春分', 'emoji': '🌸', 'poem': '雪入春分省见稀,半开桃李不胜威'},
|
||||
{'year': 2026, 'month': 4, 'day': 5, 'name': '清明', 'emoji': '🍃', 'poem': '清明时节雨纷纷,路上行人欲断魂'},
|
||||
{'year': 2026, 'month': 4, 'day': 20, 'name': '谷雨', 'emoji': '🌾', 'poem': '谷雨如丝复似尘,煮瓶浮蜡正尝新'},
|
||||
{'year': 2026, 'month': 5, 'day': 5, 'name': '立夏', 'emoji': '☀️', 'poem': '绿树阴浓夏日长,楼台倒影入池塘'},
|
||||
{'year': 2026, 'month': 5, 'day': 21, 'name': '小满', 'emoji': '🌿', 'poem': '夜莺啼绿柳,皓月醒长空'},
|
||||
{'year': 2026, 'month': 6, 'day': 5, 'name': '芒种', 'emoji': '🌻', 'poem': '时雨及芒种,四野皆插秧'},
|
||||
{'year': 2026, 'month': 6, 'day': 21, 'name': '夏至', 'emoji': '🌞', 'poem': '昼晷已云极,宵漏自此长'},
|
||||
{'year': 2026, 'month': 7, 'day': 7, 'name': '小暑', 'emoji': '🌡️', 'poem': '倏忽温风至,因循小暑来'},
|
||||
{'year': 2026, 'month': 7, 'day': 22, 'name': '大暑', 'emoji': '🔥', 'poem': '大暑三秋近,林钟九夏移'},
|
||||
{'year': 2026, 'month': 8, 'day': 7, 'name': '立秋', 'emoji': '🍂', 'poem': '乳鸦啼散玉屏空,一枕新凉一扇风'},
|
||||
{'year': 2026, 'month': 8, 'day': 23, 'name': '处暑', 'emoji': '🎐', 'poem': '处暑无三日,新凉直万金'},
|
||||
{'year': 2026, 'month': 9, 'day': 7, 'name': '白露', 'emoji': '💎', 'poem': '露从今夜白,月是故乡明'},
|
||||
{'year': 2026, 'month': 9, 'day': 23, 'name': '秋分', 'emoji': '🍁', 'poem': '金气秋分,风清露冷秋期半'},
|
||||
{'year': 2026, 'month': 10, 'day': 8, 'name': '寒露', 'emoji': '💧', 'poem': '袅袅凉风动,凄凄寒露零'},
|
||||
{'year': 2026, 'month': 10, 'day': 23, 'name': '霜降', 'emoji': '🧊', 'poem': '霜降碧天静,秋事促西风'},
|
||||
{'year': 2026, 'month': 11, 'day': 7, 'name': '立冬', 'emoji': '🧣', 'poem': '冻笔新诗懒写,寒炉美酒时温'},
|
||||
{'year': 2026, 'month': 11, 'day': 22, 'name': '小雪', 'emoji': '🌨️', 'poem': '片片互玲珑,飞扬玉漏终'},
|
||||
{'year': 2026, 'month': 12, 'day': 7, 'name': '大雪', 'emoji': '❄️', 'poem': '大雪江南见未曾,今年方始是严凝'},
|
||||
{'year': 2026, 'month': 12, 'day': 21, 'name': '冬至', 'emoji': '🥟', 'poem': '天时人事日相催,冬至阳生春又来'},
|
||||
{
|
||||
'year': 2026,
|
||||
'month': 1,
|
||||
'day': 5,
|
||||
'name': '小寒',
|
||||
'emoji': '❄️',
|
||||
'poem': '小寒连大吕,欢鹊垒新巢',
|
||||
},
|
||||
{
|
||||
'year': 2026,
|
||||
'month': 1,
|
||||
'day': 20,
|
||||
'name': '大寒',
|
||||
'emoji': '🧊',
|
||||
'poem': '大寒须守火,无事不出门',
|
||||
},
|
||||
{
|
||||
'year': 2026,
|
||||
'month': 2,
|
||||
'day': 4,
|
||||
'name': '立春',
|
||||
'emoji': '🌱',
|
||||
'poem': '春风如贵客,一到便繁华',
|
||||
},
|
||||
{
|
||||
'year': 2026,
|
||||
'month': 2,
|
||||
'day': 18,
|
||||
'name': '雨水',
|
||||
'emoji': '🌧️',
|
||||
'poem': '好雨知时节,当春乃发生',
|
||||
},
|
||||
{
|
||||
'year': 2026,
|
||||
'month': 3,
|
||||
'day': 5,
|
||||
'name': '惊蛰',
|
||||
'emoji': '⚡',
|
||||
'poem': '微雨众卉新,一雷惊蛰始',
|
||||
},
|
||||
{
|
||||
'year': 2026,
|
||||
'month': 3,
|
||||
'day': 20,
|
||||
'name': '春分',
|
||||
'emoji': '🌸',
|
||||
'poem': '雪入春分省见稀,半开桃李不胜威',
|
||||
},
|
||||
{
|
||||
'year': 2026,
|
||||
'month': 4,
|
||||
'day': 5,
|
||||
'name': '清明',
|
||||
'emoji': '🍃',
|
||||
'poem': '清明时节雨纷纷,路上行人欲断魂',
|
||||
},
|
||||
{
|
||||
'year': 2026,
|
||||
'month': 4,
|
||||
'day': 20,
|
||||
'name': '谷雨',
|
||||
'emoji': '🌾',
|
||||
'poem': '谷雨如丝复似尘,煮瓶浮蜡正尝新',
|
||||
},
|
||||
{
|
||||
'year': 2026,
|
||||
'month': 5,
|
||||
'day': 5,
|
||||
'name': '立夏',
|
||||
'emoji': '☀️',
|
||||
'poem': '绿树阴浓夏日长,楼台倒影入池塘',
|
||||
},
|
||||
{
|
||||
'year': 2026,
|
||||
'month': 5,
|
||||
'day': 21,
|
||||
'name': '小满',
|
||||
'emoji': '🌿',
|
||||
'poem': '夜莺啼绿柳,皓月醒长空',
|
||||
},
|
||||
{
|
||||
'year': 2026,
|
||||
'month': 6,
|
||||
'day': 5,
|
||||
'name': '芒种',
|
||||
'emoji': '🌻',
|
||||
'poem': '时雨及芒种,四野皆插秧',
|
||||
},
|
||||
{
|
||||
'year': 2026,
|
||||
'month': 6,
|
||||
'day': 21,
|
||||
'name': '夏至',
|
||||
'emoji': '🌞',
|
||||
'poem': '昼晷已云极,宵漏自此长',
|
||||
},
|
||||
{
|
||||
'year': 2026,
|
||||
'month': 7,
|
||||
'day': 7,
|
||||
'name': '小暑',
|
||||
'emoji': '🌡️',
|
||||
'poem': '倏忽温风至,因循小暑来',
|
||||
},
|
||||
{
|
||||
'year': 2026,
|
||||
'month': 7,
|
||||
'day': 22,
|
||||
'name': '大暑',
|
||||
'emoji': '🔥',
|
||||
'poem': '大暑三秋近,林钟九夏移',
|
||||
},
|
||||
{
|
||||
'year': 2026,
|
||||
'month': 8,
|
||||
'day': 7,
|
||||
'name': '立秋',
|
||||
'emoji': '🍂',
|
||||
'poem': '乳鸦啼散玉屏空,一枕新凉一扇风',
|
||||
},
|
||||
{
|
||||
'year': 2026,
|
||||
'month': 8,
|
||||
'day': 23,
|
||||
'name': '处暑',
|
||||
'emoji': '🎐',
|
||||
'poem': '处暑无三日,新凉直万金',
|
||||
},
|
||||
{
|
||||
'year': 2026,
|
||||
'month': 9,
|
||||
'day': 7,
|
||||
'name': '白露',
|
||||
'emoji': '💎',
|
||||
'poem': '露从今夜白,月是故乡明',
|
||||
},
|
||||
{
|
||||
'year': 2026,
|
||||
'month': 9,
|
||||
'day': 23,
|
||||
'name': '秋分',
|
||||
'emoji': '🍁',
|
||||
'poem': '金气秋分,风清露冷秋期半',
|
||||
},
|
||||
{
|
||||
'year': 2026,
|
||||
'month': 10,
|
||||
'day': 8,
|
||||
'name': '寒露',
|
||||
'emoji': '💧',
|
||||
'poem': '袅袅凉风动,凄凄寒露零',
|
||||
},
|
||||
{
|
||||
'year': 2026,
|
||||
'month': 10,
|
||||
'day': 23,
|
||||
'name': '霜降',
|
||||
'emoji': '🧊',
|
||||
'poem': '霜降碧天静,秋事促西风',
|
||||
},
|
||||
{
|
||||
'year': 2026,
|
||||
'month': 11,
|
||||
'day': 7,
|
||||
'name': '立冬',
|
||||
'emoji': '🧣',
|
||||
'poem': '冻笔新诗懒写,寒炉美酒时温',
|
||||
},
|
||||
{
|
||||
'year': 2026,
|
||||
'month': 11,
|
||||
'day': 22,
|
||||
'name': '小雪',
|
||||
'emoji': '🌨️',
|
||||
'poem': '片片互玲珑,飞扬玉漏终',
|
||||
},
|
||||
{
|
||||
'year': 2026,
|
||||
'month': 12,
|
||||
'day': 7,
|
||||
'name': '大雪',
|
||||
'emoji': '❄️',
|
||||
'poem': '大雪江南见未曾,今年方始是严凝',
|
||||
},
|
||||
{
|
||||
'year': 2026,
|
||||
'month': 12,
|
||||
'day': 21,
|
||||
'name': '冬至',
|
||||
'emoji': '🥟',
|
||||
'poem': '天时人事日相催,冬至阳生春又来',
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/// ============================================================
|
||||
/// ============================================================
|
||||
/// 闲言APP — 通知初始化桥接
|
||||
/// 创建时间: 2026-05-22
|
||||
/// 更新时间: 2026-05-22
|
||||
@@ -7,7 +7,7 @@
|
||||
/// ============================================================
|
||||
|
||||
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
|
||||
import 'package:xianyan/core/utils/platform_utils.dart' as pu;
|
||||
import 'package:xianyan/core/utils/platform/platform_utils.dart' as pu;
|
||||
|
||||
/// 构建通知初始化设置
|
||||
///
|
||||
@@ -48,6 +48,7 @@ InitializationSettings buildNotificationInitSettings({
|
||||
ohosDefaultIcon,
|
||||
);
|
||||
if (ohosSettings != null) {
|
||||
// ignore: avoid_dynamic_calls
|
||||
settings.ohos = ohosSettings;
|
||||
}
|
||||
} catch (_) {
|
||||
@@ -90,6 +91,7 @@ Future<bool> requestOhosNotificationPermission(
|
||||
final dynamic ohosPlugin =
|
||||
plugin.resolvePlatformSpecificImplementation();
|
||||
final dynamic result =
|
||||
// ignore: avoid_dynamic_calls
|
||||
await ohosPlugin?.requestNotificationsPermission();
|
||||
return result as bool? ?? false;
|
||||
} catch (e) {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/// ============================================================
|
||||
/// ============================================================
|
||||
/// 闲言APP — 本地通知服务
|
||||
/// 创建时间: 2026-05-10
|
||||
/// 更新时间: 2026-05-17
|
||||
@@ -13,7 +13,7 @@ import 'package:flutter_local_notifications/flutter_local_notifications.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:timezone/data/latest_all.dart' as tz;
|
||||
import 'package:timezone/timezone.dart' as tz;
|
||||
import 'package:xianyan/core/utils/platform_utils.dart' as pu;
|
||||
import 'package:xianyan/core/utils/platform/platform_utils.dart' as pu;
|
||||
|
||||
import '../../utils/logger.dart';
|
||||
import 'notification_init_stub.dart';
|
||||
|
||||
Reference in New Issue
Block a user