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