Fix audio player: use explicit platform-specific imports and dynamic typing
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user