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

Flutter如何处理时间触发事件?看完激励视频后如何3天内隐藏对应广告组件?

需求可行性确认

该需求完全可以实现,核心逻辑是持久化存储用户完成激励视频观看的时间,每次加载对应组件时校验时间差是否超过3天即可。

核心实现思路
  • 选择合适的本地持久化存储方案,轻量场景优先使用shared_preferences,无需复杂配置即可实现键值对数据的持久化存储,应用卸载后数据才会清除。
  • 监听激励视频的播放完成回调,用户成功看完视频后,将当前时间的毫秒级时间戳(或直接计算3天后的时间戳)写入本地存储。
  • 每次需要渲染广告组件前,先读取本地存储的时间戳做校验:
    • 若本地无存储记录、或当前时间减去存储的观看时间戳大于3天对应的毫秒数(3*24*60*60*1000),说明有效期已过,正常展示广告组件
    • 若时间差小于3天,直接隐藏广告组件即可
  • 如果对防作弊有要求,建议搭配服务端返回的时间戳做存储和校验,避免用户修改本地系统时间绕过限制
代码实现参考

首先在pubspec.yaml中引入依赖:

dependencies:
  flutter:
    sdk: flutter
  shared_preferences: ^2.2.2 # 可替换为最新稳定版

核心逻辑代码示例:

import 'package:shared_preferences/shared_preferences.dart';

/// 判断当前是否需要展示广告组件
Future<bool> shouldShowRewardAd() async {
  final SharedPreferences prefs = await SharedPreferences.getInstance();
  // 读取存储的3天禁用到期时间戳,无记录时默认返回0
  final int adDisableEndTime = prefs.getInt('reward_ad_disable_end') ?? 0;
  // 获取当前时间戳(如果用服务端时间替换此处即可)
  final int currentTime = DateTime.now().millisecondsSinceEpoch;
  // 当前时间超过禁用到期时间就需要展示广告
  return currentTime > adDisableEndTime;
}

/// 看完激励视频后调用,设置广告3天不展示
Future<void> disableRewardAdFor3Days() async {
  final SharedPreferences prefs = await SharedPreferences.getInstance();
  // 计算3天后的到期时间戳
  final int disableEndTime = DateTime.now().millisecondsSinceEpoch + 3 * 24 * 60 * 60 * 1000;
  await prefs.setInt('reward_ad_disable_end', disableEndTime);
}

在组件中使用时可以搭配FutureBuilder做异步判断,控制组件是否渲染即可。

内容的提问来源于stack exchange,提问作者user3697484

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 01:45:04