Untitled
unknown
plain_text
a year ago
6.3 kB
8
Indexable
import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:just_audio/just_audio.dart';
import 'package:audio_service/audio_service.dart';
class JustMusicPlay extends StatefulWidget {
final String audioLink;
final String thumbnailLink;
final String headingName;
final String albumName;
final String heroTag;
final AudioPlayer audioPlayer;
const JustMusicPlay({
super.key,
required this.audioLink,
required this.thumbnailLink,
required this.headingName,
required this.heroTag,
required this.audioPlayer,
required this.albumName,
});
@override
State<JustMusicPlay> createState() => _JustMusicPlayState();
}
class _JustMusicPlayState extends State<JustMusicPlay> {
bool isPlaying = false;
bool isBuffering = false;
late PlayerState _playerState;
@override
void initState() {
super.initState();
_playerState = widget.audioPlayer.playerState;
widget.audioPlayer.playbackEventStream.listen((event) {
if (event.processingState == ProcessingState.buffering ||
event.processingState == ProcessingState.loading) {
// Show buffering dialog
setState(() {
isBuffering = true;
});
_showBufferingDialog();
} else if (event.processingState == ProcessingState.ready) {
// Dismiss buffering dialog when ready
if (isBuffering) {
Navigator.of(context).pop(); // Close the dialog
setState(() {
isBuffering = false;
});
}
} else if (event.processingState == ProcessingState.completed) {
// Handle completion if needed
} else if (event.processingState == ProcessingState.idle) {
// Handle error if needed
}
});
WidgetsBinding.instance.addPostFrameCallback((_) {
playSongs();
});
}
void _showBufferingDialog() {
showDialog(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
return const AlertDialog(
content: Row(
children: [
CircularProgressIndicator(),
SizedBox(width: 20),
Text("Buffering..."),
],
),
);
},
);
}
playSongs() async {
try {
widget.audioPlayer.setAudioSource(
AudioSource.uri(
Uri.parse(widget.audioLink),
tag: newMethod(),
),
);
if (widget.audioPlayer.playing) {
setState(() {
widget.audioPlayer.stop();
});
}
widget.audioPlayer.play();
widget.audioPlayer.playingStream.listen((playerState) {
if (mounted) {
setState(() {
isPlaying = playerState;
});
}
});
isPlaying = true;
print("audio link --------- ${widget.audioLink}");
print("thumbnail --------- ${widget.thumbnailLink}");
print("heading --------- ${widget.headingName}");
print("HERO TAG --------- ${widget.heroTag}");
} on Exception {
log("ERROR PARSING DATA");
Navigator.of(context).pop();
}
}
MediaItem newMethod() {
return MediaItem(
id: widget.headingName,
album: widget.albumName,
title: widget.headingName,
artUri: Uri.parse(widget.thumbnailLink),
);
}
@override
Widget build(BuildContext context) {
print(widget.audioLink);
return Scaffold(
backgroundColor: Colors.black,
appBar: AppBar(
title: Text(widget.headingName, style: TextStyle(fontSize: 18.h)),
backgroundColor: Colors.transparent,
leading: IconButton(
icon: const Icon(Icons.arrow_back_sharp),
color: Colors.white,
onPressed: () {
Navigator.pop(context);
},
),
actions: [
IconButton(
icon: const Icon(Icons.share),
onPressed: () {},
),
],
),
body: Column(
children: [
Padding(
padding: const EdgeInsets.only(top: 20.0, left: 20.0, right: 20.0),
child: ClipRRect(
borderRadius: const BorderRadius.all(Radius.circular(10.0)),
child: Hero(
tag: widget.heroTag,
child: Image.network(
(widget.thumbnailLink),
height: 300.h,
width: 440.w,
fit: BoxFit.cover,
))),
),
const SizedBox(
height: 20,
),
Center(
child: Column(
children: [
Text(
widget.headingName,
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 22.sp,
color: Colors.white,
),
),
const SizedBox(
height: 10,
),
Text(
widget.albumName,
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 18.sp,
color: const Color(0xFFEAFF01),
),
),
const SizedBox(
height: 20,
),
IconButton(
onPressed: () {
if (isPlaying) {
widget.audioPlayer.pause();
} else {
widget.audioPlayer.play();
}
setState(() {
isPlaying = !isPlaying;
});
},
iconSize: 75,
icon: widget.audioPlayer.playing
? const Icon(
Icons.pause_circle,
color: Colors.white,
)
: const Icon(
Icons.play_circle,
color: Colors.white,
),
),
],
),
),
],
),
);
}
}
Editor is loading...
Leave a Comment