Fix audio player: use explicit platform-specific imports and dynamic typing

This commit is contained in:
Leon Bösche
2026-01-25 01:59:46 +01:00
parent aa0983eba3
commit 132f0cae6c

View File

@@ -6,8 +6,8 @@ import '../theme/app_theme.dart';
import '../theme/modern_glass_button.dart';
// Conditional imports for audio
import 'package:just_audio/just_audio.dart'
if (dart.library.html) 'web_audio_player.dart';
import 'package:just_audio/just_audio.dart' as just_audio;
import 'web_audio_player.dart' as web_audio;
class AudioPlayerBar extends StatefulWidget {
final String fileName;
@@ -29,7 +29,7 @@ class AudioPlayerBar extends StatefulWidget {
class _AudioPlayerBarState extends State<AudioPlayerBar>
with SingleTickerProviderStateMixin {
late AudioPlayer _audioPlayer;
dynamic _audioPlayer;
late AnimationController _iconController;
Duration _duration = Duration.zero;
Duration _position = Duration.zero;
@@ -43,7 +43,7 @@ class _AudioPlayerBarState extends State<AudioPlayerBar>
@override
void initState() {
super.initState();
_audioPlayer = AudioPlayer();
_audioPlayer = kIsWeb ? web_audio.AudioPlayer() : just_audio.AudioPlayer();
_iconController = AnimationController(
vsync: this,
duration: const Duration(milliseconds: 250),
@@ -67,7 +67,7 @@ class _AudioPlayerBarState extends State<AudioPlayerBar>
try {
if (kIsWeb) {
// Web implementation
await (_audioPlayer as dynamic).setUrl(
await _audioPlayer.setUrl(
widget.fileUrl,
mimeType: widget.mimeType,
);
@@ -109,10 +109,7 @@ class _AudioPlayerBarState extends State<AudioPlayerBar>
} else {
// Mobile implementation (just_audio)
await _audioPlayer.setAudioSource(
// ignore: undefined_method
AudioSource.uri(
Uri.parse(widget.fileUrl),
), // ignore: undefined_getter
just_audio.AudioSource.uri(Uri.parse(widget.fileUrl)),
);
_audioPlayer.durationStream.firstWhere((d) => d != null).then((
d,