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

Flutter安卓模拟器出现Out Of Memory Error问题求助

问题分析与解决方案

核心问题:死循环触发内存溢出

你的dateListBuilder函数存在死循环,这是导致Out Of Memory Error的根本原因:

  • 当传入的startDate不是当前日期的0点(即zeroNowDate)时,dateList.last永远不可能等于endDate(当前0点+15天)
  • 循环会持续向列表中插入新日期,直到耗尽应用内存

比如你从Supabase获取的startDate是2024-06-08 00:00:00,而endDate是当前日期加15天,两者永远不会相等,循环会无限执行下去。

修复代码

下面两种方案都能解决问题,选一种即可:

方案1:修正循环判断条件

List<DateTime> dateListBuilder({DateTime? startDate}) {
  final zeroNowDate = DateTime.now().copyWith(
    hour: 0,
    minute: 0,
    second: 0,
    millisecond: 0,
  );
  startDate ??= zeroNowDate;
  final DateTime endDate = zeroNowDate.add(const Duration(days: 15));
  final List<DateTime> dateList = [startDate];

  // 改用"是否早于endDate"作为循环终止条件
  while (dateList.last.isBefore(endDate)) {
    dateList.add(dateList.last.add(const Duration(days: 1)));
  }
  return dateList;
}

方案2:直接计算生成天数(更高效)

List<DateTime> dateListBuilder({DateTime? startDate}) {
  final zeroNowDate = DateTime.now().copyWith(
    hour: 0,
    minute: 0,
    second: 0,
    millisecond: 0,
  );
  startDate ??= zeroNowDate;
  final DateTime endDate = zeroNowDate.add(const Duration(days: 15));
  
  // 计算需要生成的日期总数,直接生成列表
  final int totalDays = endDate.difference(startDate).inDays + 1;
  return List.generate(totalDays, (index) => startDate.add(Duration(days: index)));
}

额外说明

  • Chrome没出现问题是因为桌面浏览器内存上限更高,死循环触发OOM的时间更长,并非逻辑本身没问题
  • 你之前尝试的flutter clean、重装应用等操作,无法解决代码逻辑错误导致的死循环

内容的提问来源于stack exchange,提问作者Nova From OUTER SPACE

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 13:02:19