// Author: fruit.com.cn import 'package:flutter/material.dart'; import '../../../core/theme/app_colors.dart'; import '../../../l10n/app_localizations.dart'; /// 清晰度档位面板:展示后端下发档位;HLS 多码率由播放器自动切换。 class QualitySheet extends StatelessWidget { const QualitySheet({ super.key, required this.qualities, this.selected = autoQuality, }); static const String autoQuality = 'AUTO'; final List qualities; final String selected; @override Widget build(BuildContext context) { final l10n = AppLocalizations.of(context)!; return SafeArea( child: Column( key: const Key('player-quality-sheet'), mainAxisSize: MainAxisSize.min, children: [ _header(l10n), for (final quality in qualities) _qualityTile(l10n, quality), _hint(l10n), ], ), ); } Widget _header(AppLocalizations l10n) { return Padding( padding: const EdgeInsets.fromLTRB(20, 2, 20, 8), child: Align( alignment: Alignment.centerLeft, child: Text( l10n.playbackQuality, style: const TextStyle( color: AppColors.onSurface, fontSize: 14, fontWeight: FontWeight.w700, ), ), ), ); } Widget _qualityTile(AppLocalizations l10n, String quality) { final active = quality == selected; return ListTile( key: Key('player-quality-$quality'), dense: true, title: Text( _label(l10n, quality), style: TextStyle( color: active ? AppColors.blue : AppColors.cream, fontSize: 13, fontWeight: active ? FontWeight.w700 : FontWeight.w500, ), ), trailing: active ? const Icon(Icons.check_rounded, color: AppColors.blue, size: 18) : null, ); } Widget _hint(AppLocalizations l10n) { return Padding( padding: const EdgeInsets.fromLTRB(20, 6, 20, 14), child: Text( l10n.qualityAutoHint, style: const TextStyle(color: AppColors.muted, fontSize: 11), ), ); } String _label(AppLocalizations l10n, String quality) => quality == autoQuality ? l10n.qualityAuto : quality; }