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