This commit is contained in:
Leon Bösche
2026-01-31 21:58:28 +01:00
parent 80841e409f
commit ae100c0b34

View File

@@ -5,7 +5,6 @@ import 'dart:async';
import '../theme/app_theme.dart';
import '../theme/modern_glass_button.dart';
// Conditional imports for audio
import 'package:just_audio/just_audio.dart' as just_audio;
import 'web_audio_player.dart' as web_audio;
@@ -66,7 +65,6 @@ class _AudioPlayerBarState extends State<AudioPlayerBar>
Future<void> _initAudio() async {
try {
if (kIsWeb) {
// Web implementation
await _audioPlayer.setUrl(widget.fileUrl, mimeType: widget.mimeType);
_durationSubscription = _audioPlayer.durationStream.listen((d) {
if (d != null) {
@@ -101,10 +99,8 @@ class _AudioPlayerBarState extends State<AudioPlayerBar>
});
});
// Auto-play for web
await _audioPlayer.play();
} else {
// Mobile implementation (just_audio)
await _audioPlayer.setAudioSource(
just_audio.AudioSource.uri(Uri.parse(widget.fileUrl)),
);
@@ -116,10 +112,9 @@ class _AudioPlayerBarState extends State<AudioPlayerBar>
_isLoading = false;
});
try {
await _audioPlayer.play(); // Start playback automatically
// For mobile, check playing state after a short delay
await _audioPlayer.play();
Future.delayed(const Duration(milliseconds: 100), () {
// Use dynamic access to avoid compilation issues with conditional imports
final player = _audioPlayer as dynamic;
if (player.playerState?.playing == true) {
if (mounted) _iconController.forward();
@@ -141,7 +136,7 @@ class _AudioPlayerBarState extends State<AudioPlayerBar>
_position = pos;
});
});
// Use dynamic access to avoid compilation issues with conditional imports
final player = _audioPlayer as dynamic;
player.playerStateStream.listen((state) {
setState(() {
@@ -199,11 +194,10 @@ class _AudioPlayerBarState extends State<AudioPlayerBar>
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
// Play/Pause button (AnimatedIcon)
ModernGlassButton(
onPressed: _isLoading ? () {} : _handlePlayPause,
child: Transform.translate(
offset: const Offset(0, -4), // Move icon up by 4px
offset: const Offset(0, -4),
child: AnimatedIcon(
icon: AnimatedIcons.play_pause,
progress: _iconController,
@@ -278,7 +272,7 @@ class _AudioPlayerBarState extends State<AudioPlayerBar>
),
),
const SizedBox(width: 10),
// Time
Text(
'${_formatDuration(_position)} / ${_formatDuration(_duration)}',
style: const TextStyle(
@@ -287,7 +281,7 @@ class _AudioPlayerBarState extends State<AudioPlayerBar>
fontWeight: FontWeight.w500,
),
),
// Close button (simple small x)
if (widget.onClose != null)
Padding(
padding: const EdgeInsets.only(left: 8.0),