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
相关产品推荐
相关产品推荐

