perf: add memCacheWidth/memCacheHeight to all thumbnail images

All CachedNetworkImage instances in list/card contexts now decode at
2x rendered size instead of full resolution. A 3000x2000 event photo
previously decoded to ~24MB in GPU memory even when shown at 96px —
now decodes to <1MB.

Affected screens (16 CachedNetworkImage instances total):
- home_screen.dart: hero (800w), top card (300w), stacked (192w),
  horizontal (440x360), full-width (800x400), search (112x112),
  filter sheet (160x160), type icons (112x112)
- home_desktop_screen.dart: mini (128x128), grid (600x280), horiz (600x296)
- calendar_screen.dart: event card (400x300)
- profile_screen.dart: avatar (size*2), event tile (120x120)

learn_more_screen.dart intentionally unchanged — full-res for detail view.

Estimated memory reduction: ~500MB → ~30MB for a typical home screen.
This commit is contained in:
2026-03-20 22:26:52 +05:30
parent 6d29b95118
commit 0c4e62d00e
5 changed files with 37 additions and 0 deletions

View File

@@ -515,6 +515,8 @@ class _CalendarScreenState extends State<CalendarScreen> {
child: imgUrl != null
? CachedNetworkImage(
imageUrl: imgUrl,
memCacheWidth: 400,
memCacheHeight: 300,
height: 150,
width: double.infinity,
fit: BoxFit.cover,

View File

@@ -777,6 +777,8 @@ class _HomeDesktopScreenState extends State<HomeDesktopScreen> with SingleTicker
child: img != null
? CachedNetworkImage(
imageUrl: img,
memCacheWidth: 128,
memCacheHeight: 128,
width: 64,
height: 64,
fit: BoxFit.cover,
@@ -833,6 +835,8 @@ class _HomeDesktopScreenState extends State<HomeDesktopScreen> with SingleTicker
child: img != null
? CachedNetworkImage(
imageUrl: img,
memCacheWidth: 600,
memCacheHeight: 280,
width: double.infinity,
height: imageHeight,
fit: BoxFit.cover,
@@ -944,6 +948,8 @@ class _HomeDesktopScreenState extends State<HomeDesktopScreen> with SingleTicker
child: img != null
? CachedNetworkImage(
imageUrl: img,
memCacheWidth: 600,
memCacheHeight: 296,
width: width,
height: imageHeight,
fit: BoxFit.cover,

View File

@@ -170,6 +170,8 @@ class _HomeScreenState extends State<HomeScreen> with SingleTickerProviderStateM
borderRadius: BorderRadius.circular(12),
child: CachedNetworkImage(
imageUrl: imageUrl,
memCacheWidth: 112,
memCacheHeight: 112,
fit: BoxFit.contain,
placeholder: (_, __) => Icon(
icon ?? Icons.category,
@@ -343,6 +345,8 @@ class _HomeScreenState extends State<HomeScreen> with SingleTickerProviderStateM
borderRadius: BorderRadius.circular(8),
child: CachedNetworkImage(
imageUrl: img,
memCacheWidth: 112,
memCacheHeight: 112,
width: 56,
height: 56,
fit: BoxFit.cover,
@@ -714,6 +718,8 @@ class _HomeScreenState extends State<HomeScreen> with SingleTickerProviderStateM
borderRadius: BorderRadius.circular(12),
child: CachedNetworkImage(
imageUrl: imageUrl,
memCacheWidth: 160,
memCacheHeight: 160,
width: 80,
height: 80,
fit: BoxFit.cover,
@@ -1236,6 +1242,7 @@ class _HomeScreenState extends State<HomeScreen> with SingleTickerProviderStateM
img != null && img.isNotEmpty
? CachedNetworkImage(
imageUrl: img,
memCacheWidth: 800,
fit: BoxFit.cover,
placeholder: (_, __) => const _HeroShimmer(radius: radius),
errorWidget: (_, __, ___) =>
@@ -1597,6 +1604,7 @@ class _HomeScreenState extends State<HomeScreen> with SingleTickerProviderStateM
img != null && img.isNotEmpty
? CachedNetworkImage(
imageUrl: img,
memCacheWidth: 300,
fit: BoxFit.cover,
width: double.infinity,
height: double.infinity,
@@ -1790,6 +1798,7 @@ class _HomeScreenState extends State<HomeScreen> with SingleTickerProviderStateM
child: img != null && img.isNotEmpty
? CachedNetworkImage(
imageUrl: img,
memCacheWidth: 192,
width: 96,
height: double.infinity,
fit: BoxFit.cover,
@@ -1855,6 +1864,8 @@ class _HomeScreenState extends State<HomeScreen> with SingleTickerProviderStateM
child: img != null && img.isNotEmpty
? CachedNetworkImage(
imageUrl: img,
memCacheWidth: 440,
memCacheHeight: 360,
width: 220,
height: 180,
fit: BoxFit.cover,
@@ -2026,6 +2037,8 @@ class _HomeScreenState extends State<HomeScreen> with SingleTickerProviderStateM
child: img != null && img.isNotEmpty
? CachedNetworkImage(
imageUrl: img,
memCacheWidth: 800,
memCacheHeight: 400,
width: double.infinity,
height: 200,
fit: BoxFit.cover,

View File

@@ -430,6 +430,8 @@ class _ProfileScreenState extends State<ProfileScreen>
return ClipOval(
child: CachedNetworkImage(
imageUrl: path,
memCacheWidth: (size * 2).toInt(),
memCacheHeight: (size * 2).toInt(),
width: size,
height: size,
fit: BoxFit.cover,
@@ -502,6 +504,8 @@ class _ProfileScreenState extends State<ProfileScreen>
borderRadius: BorderRadius.circular(12),
child: CachedNetworkImage(
imageUrl: imageUrl,
memCacheWidth: 120,
memCacheHeight: 120,
width: 60,
height: 60,
fit: BoxFit.cover,