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:
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user