mirror of
https://github.com/zarzet/SpotiFLAC-Mobile.git
synced 2026-07-04 11:48:00 +02:00
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:
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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 ??
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user