Commit 54f62f826b7b66ea9b2232bc3470bec2c0e97fb8

Authored by 吴启风
1 parent 9475aa49

fix: 自适应视频标题高度避免文字裁切

lib/pages/video/zone/video_zone_page.dart
@@ -83,11 +83,19 @@ class _VideoZonePageState extends State<VideoZonePage> { @@ -83,11 +83,19 @@ class _VideoZonePageState extends State<VideoZonePage> {
83 builder: (context, constraints) { 83 builder: (context, constraints) {
84 final horizontalPadding = 30.w; 84 final horizontalPadding = 30.w;
85 final crossAxisSpacing = 12.w; 85 final crossAxisSpacing = 12.w;
  86 + final titleStyle = _VideoCard.createTitleStyle(context);
  87 + final titlePainter = TextPainter(
  88 + text: TextSpan(text: '视频标题', style: titleStyle),
  89 + maxLines: 1,
  90 + textDirection: Directionality.of(context),
  91 + textScaler: MediaQuery.textScalerOf(context),
  92 + )..layout();
86 final cardWidth = (constraints.maxWidth - 93 final cardWidth = (constraints.maxWidth -
87 horizontalPadding * 2 - 94 horizontalPadding * 2 -
88 crossAxisSpacing * 2) / 95 crossAxisSpacing * 2) /
89 3; 96 3;
90 - final cardHeight = cardWidth * 9 / 16 + 5.h + 24.h; 97 + final cardHeight =
  98 + cardWidth * 9 / 16 + 5.h + titlePainter.height;
91 return GridView.builder( 99 return GridView.builder(
92 physics: const AlwaysScrollableScrollPhysics(), 100 physics: const AlwaysScrollableScrollPhysics(),
93 padding: EdgeInsets.fromLTRB( 101 padding: EdgeInsets.fromLTRB(
@@ -106,6 +114,7 @@ class _VideoZonePageState extends State<VideoZonePage> { @@ -106,6 +114,7 @@ class _VideoZonePageState extends State<VideoZonePage> {
106 itemBuilder: (context, index) => _VideoCard( 114 itemBuilder: (context, index) => _VideoCard(
107 item: items[index], 115 item: items[index],
108 onTap: () => _openVideo(items, index), 116 onTap: () => _openVideo(items, index),
  117 + titleStyle: titleStyle,
109 ), 118 ),
110 ); 119 );
111 }, 120 },
@@ -169,10 +178,22 @@ class _VideoLoadError extends StatelessWidget { @@ -169,10 +178,22 @@ class _VideoLoadError extends StatelessWidget {
169 } 178 }
170 179
171 class _VideoCard extends StatelessWidget { 180 class _VideoCard extends StatelessWidget {
172 - const _VideoCard({required this.item, required this.onTap}); 181 + const _VideoCard({
  182 + required this.item,
  183 + required this.onTap,
  184 + required this.titleStyle,
  185 + });
173 186
174 final VideoZoneItem item; 187 final VideoZoneItem item;
175 final VoidCallback onTap; 188 final VoidCallback onTap;
  189 + final TextStyle titleStyle;
  190 +
  191 + static TextStyle createTitleStyle(BuildContext context) => TextStyle(
  192 + color: const Color(0xFF222222),
  193 + fontFamily: null,
  194 + fontSize: 17.sp,
  195 + fontWeight: FontWeight.w500,
  196 + );
176 197
177 @override 198 @override
178 Widget build(BuildContext context) { 199 Widget build(BuildContext context) {
@@ -202,22 +223,11 @@ class _VideoCard extends StatelessWidget { @@ -202,22 +223,11 @@ class _VideoCard extends StatelessWidget {
202 ), 223 ),
203 ), 224 ),
204 SizedBox(height: 5.h), 225 SizedBox(height: 5.h),
205 - SizedBox(  
206 - height: 24.h,  
207 - child: Align(  
208 - alignment: Alignment.centerLeft,  
209 - child: Text(  
210 - item.title,  
211 - maxLines: 1,  
212 - overflow: TextOverflow.ellipsis,  
213 - style: TextStyle(  
214 - color: const Color(0xFF222222),  
215 - fontFamily: null,  
216 - fontSize: 17.sp,  
217 - fontWeight: FontWeight.w500,  
218 - ),  
219 - ),  
220 - ), 226 + Text(
  227 + item.title,
  228 + maxLines: 1,
  229 + overflow: TextOverflow.ellipsis,
  230 + style: titleStyle,
221 ), 231 ),
222 ], 232 ],
223 ), 233 ),