如何在flutter_local_notification中生成无限可用的通知ID?
Flutter闹钟应用通知ID生成方案
针对flutter_local_notifications触发通知必须传入唯一int类型ID的要求,结合闹钟应用用户可自由新增闹钟的场景,可参考以下几种成熟的ID生成方案:
方案1:数据库自增主键绑定(最推荐)
- 本地存储闹钟数据时(可使用
sqflite等本地数据库库),给闹钟表设置自增整型主键字段,该主键直接作为对应闹钟的通知ID - 优势:实现逻辑最简单,天然保证ID唯一,无需额外处理冲突问题;ID上限为
2^31-1 = 2147483647,正常用户就算每天新增10个闹钟,完全用完所有ID需要近60万年,完全能满足所有使用需求
方案2:特征值组合生成
如果不想绑定数据库主键,可通过闹钟的特征参数组合生成ID:
- 取闹钟的触发时间戳
DateTime.millisecondsSinceEpoch的后28位,拼接闹钟重复周期的编码值,生成唯一ID - 生成后需提前和本地已存的闹钟ID做校验,若出现重复则追加1位随机偏移量即可
注意事项
- 用户修改、删除闹钟时,必须先调用
flutter_local_notifications的cancel(int id)方法取消对应ID的旧通知,避免无效通知残留 - 若单个闹钟需要设置多个关联提醒(比如提前5分钟提醒、正点响铃、重复周提醒等),可给主闹钟ID增加固定偏移量生成子ID,比如主ID为10,提前提醒的ID为
10 * 10 + 1,正点响铃ID为10 * 10 + 2,避免和其他闹钟的ID冲突
内容的提问来源于stack exchange,提问作者Shashwat Singh
相关产品推荐
相关产品推荐

