You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter 中结合 Firestore 检测新日期到来并触发指定函数的实现方法

Flutter Firestore 零点自动触发函数实现方案

方案1:Cloud Firestore 云函数定时触发(最稳定,优先推荐)

该方案为服务端触发,不依赖前端App运行状态,不会出现漏执行情况,可保证数据全局一致性:

  • 基于Cloud Functions for Firebase的定时触发器,直接设定每天指定时区的零点执行即可,参考代码:
const functions = require("firebase-functions");
const admin = require("firebase-admin");
admin.initializeApp();

// 时区参数根据你的业务区域调整,中国区设为Asia/Shanghai
exports.dailyDataShift = functions.pubsub.schedule('0 0 * * *')
.timeZone('Asia/Shanghai') 
.onRun(async (context) => {
  const db = admin.firestore();
  // 此处直接调用你已开发完成的数值下移逻辑即可
  console.log('每日零点任务执行完成');
  return null;
});

方案2:Flutter 前端端内触发(仅适合用户打开App时才需要同步的场景)

如果你的逻辑仅需用户在端内操作时同步更新,不需要后台静默执行,可以用该方案:

  • 第一步:在Firestore新增global_config集合,存储last_executed_date字段作为全局标记,记录上次任务执行的日期,格式为YYYY-MM-DD
  • 第二步:在Flutter应用启动、切回前台时触发日期校验逻辑,对比当前日期和上次执行日期,不一致则执行你的业务函数,参考Dart代码:
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:intl/intl.dart';

Future<void> checkDailyTask() async {
  String currentDate = DateFormat('yyyy-MM-dd').format(DateTime.now());
  final taskDoc = await FirebaseFirestore.instance.collection('global_config').doc('daily_task').get();
  String lastExecutedDate = taskDoc.data()?['last_executed_date'] ?? '';
  
  if (currentDate != lastExecutedDate) {
    // 调用你已开发完成的数值下移函数
    await yourCustomShiftFunction();
    // 更新全局执行标记
    await FirebaseFirestore.instance.collection('global_config').doc('daily_task').set({
      'last_executed_date': currentDate
    }, SetOptions(merge: true));
  }
}
  • 第三步:如果需要App前台运行时到点自动触发,可以新增零点定时监听:
void registerMidnightListener() {
  final now = DateTime.now();
  final nextMidnight = DateTime(now.year, now.month, now.day + 1);
  final timeToMidnight = nextMidnight.difference(now);
  
  Timer(timeToMidnight, () {
    checkDailyTask();
    // 执行完成后重新注册下一天的定时
    registerMidnightListener();
  });
}
  • 注意:该方案需要额外增加并发锁逻辑,避免多个用户同时打开App时重复触发任务。

触发效果参考

11:59 PM 未触发状态
11:59 PM界面示意图
12:00 AM 触发完成后状态
12:00 AM界面示意图

内容的提问来源于stack exchange,提问作者Mohammad Abd-Elmoniem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 06:09:05