this repo has no description

feat: implement fullscreen avatar display on tap; enhance user interaction with profile avatar

+58 -6
+58 -6
lib/screens/profile_page.dart
··· 106 106 } 107 107 } 108 108 109 + void _showAvatarFullscreen(String avatarUrl) { 110 + showDialog( 111 + context: context, 112 + barrierColor: Colors.black.withOpacity(0.95), 113 + builder: (context) { 114 + final size = MediaQuery.of(context).size; 115 + final diameter = size.width; 116 + return Stack( 117 + children: [ 118 + GestureDetector( 119 + onTap: () => Navigator.of(context).pop(), 120 + child: Center( 121 + child: Hero( 122 + tag: 'profile-avatar', 123 + child: ClipOval( 124 + child: SizedBox( 125 + width: diameter, 126 + height: diameter, 127 + child: AppImage( 128 + url: avatarUrl, 129 + fit: BoxFit.cover, 130 + width: diameter, 131 + height: diameter, 132 + ), 133 + ), 134 + ), 135 + ), 136 + ), 137 + ), 138 + Positioned( 139 + top: 40, 140 + right: 24, 141 + child: SafeArea( 142 + child: IconButton( 143 + icon: Icon(Icons.close_rounded, color: Colors.white, size: 36), 144 + onPressed: () => Navigator.of(context).pop(), 145 + tooltip: 'Close', 146 + ), 147 + ), 148 + ), 149 + ], 150 + ); 151 + }, 152 + ); 153 + } 154 + 109 155 @override 110 156 Widget build(BuildContext context) { 111 157 final theme = Theme.of(context); ··· 170 216 children: [ 171 217 // Avatar 172 218 if (profile.avatar != null) 173 - ClipOval( 174 - child: AppImage( 175 - url: profile.avatar, 176 - width: 64, 177 - height: 64, 178 - fit: BoxFit.cover, 219 + GestureDetector( 220 + onTap: () => _showAvatarFullscreen(profile.avatar!), 221 + child: Hero( 222 + tag: 'profile-avatar', 223 + child: ClipOval( 224 + child: AppImage( 225 + url: profile.avatar, 226 + width: 64, 227 + height: 64, 228 + fit: BoxFit.cover, 229 + ), 230 + ), 179 231 ), 180 232 ) 181 233 else