refactor: hoist lossless labels before async convert paths

Capture lossless conversion labels before await boundaries in queue,
downloaded album, and track metadata flows to avoid BuildContext usage
across async gaps.
This commit is contained in:
zarzet
2026-06-30 06:20:57 +07:00
parent c2b38a7c5a
commit c0c1d745f3
4 changed files with 30 additions and 35 deletions
+4 -5
View File
@@ -1199,6 +1199,7 @@ class _DownloadedAlbumScreenState extends ConsumerState<DownloadedAlbumScreen> {
}
final isLossless = isLosslessConversionTarget(targetFormat);
final losslessLabels = context.l10n.losslessConversionLabels;
final confirmed = await showDialog<bool>(
context: context,
builder: (ctx) => AlertDialog(
@@ -1210,10 +1211,8 @@ class _DownloadedAlbumScreenState extends ConsumerState<DownloadedAlbumScreen> {
targetFormat,
losslessQualityLabel(
losslessQuality,
originalLabel:
context.l10n.losslessConversionLabels.original,
originalQualityLabel:
context.l10n.losslessConversionLabels.originalQuality,
originalLabel: losslessLabels.original,
originalQualityLabel: losslessLabels.originalQuality,
),
)
: isLossless
@@ -1367,7 +1366,7 @@ class _DownloadedAlbumScreenState extends ConsumerState<DownloadedAlbumScreen> {
final newQuality = convertedAudioQualityLabel(
targetFormat: targetFormat,
bitrate: bitrate,
labels: context.l10n.losslessConversionLabels,
labels: losslessLabels,
losslessQuality: losslessQuality,
actualBitDepth: convertedBitDepth,
actualSampleRate: convertedSampleRate,
+4 -5
View File
@@ -5642,6 +5642,7 @@ class _QueueTabState extends ConsumerState<QueueTab> {
}
final isLossless = isLosslessConversionTarget(targetFormat);
final losslessLabels = context.l10n.losslessConversionLabels;
final confirmed = await showDialog<bool>(
context: context,
builder: (ctx) => AlertDialog(
@@ -5653,10 +5654,8 @@ class _QueueTabState extends ConsumerState<QueueTab> {
targetFormat,
losslessQualityLabel(
losslessQuality,
originalLabel:
context.l10n.losslessConversionLabels.original,
originalQualityLabel:
context.l10n.losslessConversionLabels.originalQuality,
originalLabel: losslessLabels.original,
originalQualityLabel: losslessLabels.originalQuality,
),
)
: isLossless
@@ -5819,7 +5818,7 @@ class _QueueTabState extends ConsumerState<QueueTab> {
final newQuality = convertedAudioQualityLabel(
targetFormat: targetFormat,
bitrate: bitrate,
labels: context.l10n.losslessConversionLabels,
labels: losslessLabels,
losslessQuality: losslessQuality,
actualBitDepth: convertedBitDepth,
actualSampleRate: convertedSampleRate,
+5 -13
View File
@@ -1309,10 +1309,7 @@ class _EditMetadataSheetState extends State<_EditMetadataSheet> {
],
),
),
Divider(
height: 1,
color: cs.outlineVariant.withValues(alpha: 0.5),
),
Divider(height: 1, color: cs.outlineVariant.withValues(alpha: 0.5)),
Expanded(
child: ListView(
controller: scrollController,
@@ -1325,10 +1322,7 @@ class _EditMetadataSheetState extends State<_EditMetadataSheet> {
title: context.l10n.trackMetadata,
children: [
_field(context.l10n.editMetadataFieldTitle, _titleCtrl),
_field(
context.l10n.editMetadataFieldArtist,
_artistCtrl,
),
_field(context.l10n.editMetadataFieldArtist, _artistCtrl),
_field(context.l10n.editMetadataFieldAlbum, _albumCtrl),
_field(
context.l10n.editMetadataFieldAlbumArtist,
@@ -1401,10 +1395,7 @@ class _EditMetadataSheetState extends State<_EditMetadataSheet> {
expanded: _showAdvanced,
children: [
if (_showAdvanced) ...[
_field(
context.l10n.editMetadataFieldLabel,
_labelCtrl,
),
_field(context.l10n.editMetadataFieldLabel, _labelCtrl),
_field(
context.l10n.editMetadataFieldCopyright,
_copyrightCtrl,
@@ -1632,7 +1623,8 @@ class _EditMetadataSheetState extends State<_EditMetadataSheet> {
child: _buildCoverPreviewTile(
cs: cs,
path: _selectedCoverPath!,
label: _selectedCoverName ==
label:
_selectedCoverName ==
_EditMetadataSheet._onlineCoverSentinel
? context.l10n.trackCoverOnline
: (_selectedCoverName ??
+17 -12
View File
@@ -4105,17 +4105,20 @@ class _TrackMetadataScreenState extends ConsumerState<TrackMetadataScreen> {
selectedMaxBitDepth == null &&
selectedMaxSampleRate == null
? context.l10n.trackConvertLosslessHint
: context.l10n.trackConvertLosslessOutputWithCap(
losslessQualityLabel(
LosslessConversionQuality(
maxBitDepth: selectedMaxBitDepth,
maxSampleRate: selectedMaxSampleRate,
: context.l10n
.trackConvertLosslessOutputWithCap(
losslessQualityLabel(
LosslessConversionQuality(
maxBitDepth:
selectedMaxBitDepth,
maxSampleRate:
selectedMaxSampleRate,
),
originalLabel: labels.original,
originalQualityLabel:
labels.originalQuality,
),
),
originalLabel: labels.original,
originalQualityLabel:
labels.originalQuality,
),
),
style: Theme.of(context).textTheme.bodySmall
?.copyWith(color: colorScheme.primary),
),
@@ -4159,7 +4162,8 @@ class _TrackMetadataScreenState extends ConsumerState<TrackMetadataScreen> {
maxSampleRate: selectedMaxSampleRate,
),
originalLabel: labels.original,
originalQualityLabel: labels.originalQuality,
originalQualityLabel:
labels.originalQuality,
),
)
: context.l10n.trackConvertActionLabelLossy(
@@ -4701,6 +4705,7 @@ class _TrackMetadataScreenState extends ConsumerState<TrackMetadataScreen> {
}) async {
if (_isConverting) return;
setState(() => _isConverting = true);
final losslessLabels = context.l10n.losslessConversionLabels;
try {
ScaffoldMessenger.of(context).showSnackBar(
@@ -4819,7 +4824,7 @@ class _TrackMetadataScreenState extends ConsumerState<TrackMetadataScreen> {
final newQuality = convertedAudioQualityLabel(
targetFormat: targetFormat,
bitrate: bitrate,
labels: context.l10n.losslessConversionLabels,
labels: losslessLabels,
losslessQuality: losslessQuality,
actualBitDepth: convertedBitDepth,
actualSampleRate: convertedSampleRate,