playing_control.dart 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import 'package:assets_audio_player/assets_audio_player.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:flutter/painting.dart';
  4. class PlayingControls extends StatelessWidget {
  5. final bool isPlaying;
  6. final LoopMode loopMode;
  7. final bool isPlaylist;
  8. final Function() onPrevious;
  9. final Function() onPlay;
  10. final Function() onNext;
  11. final Function() toggleLoop;
  12. final Function() onStop;
  13. PlayingControls({
  14. @required this.isPlaying,
  15. this.isPlaylist = false,
  16. this.loopMode,
  17. this.toggleLoop,
  18. this.onPrevious,
  19. @required this.onPlay,
  20. this.onNext,
  21. this.onStop,
  22. });
  23. Widget _loopIcon(BuildContext context) {
  24. final iconSize = 24.0;
  25. if( loopMode == LoopMode.none) {
  26. return Icon(Icons.loop,size: iconSize,color: Colors.white,);
  27. } else if(loopMode == LoopMode.playlist) {
  28. return Icon(Icons.loop,size: iconSize,color: Colors.white,);
  29. } else {
  30. return Stack(
  31. alignment: Alignment.center,
  32. children: [
  33. Icon(Icons.loop,size: iconSize,color: Colors.white,),
  34. Center(
  35. child: Text('1',style: TextStyle(fontSize: 9,fontWeight: FontWeight.bold,color: Colors.white),),
  36. )
  37. ],
  38. );
  39. }
  40. return Radio(
  41. value: LoopMode.playlist,
  42. groupValue: this.loopMode,
  43. onChanged: (newValue) {
  44. toggleLoop();
  45. }
  46. );
  47. }
  48. @override
  49. Widget build(BuildContext context) {
  50. return Row(
  51. mainAxisAlignment: MainAxisAlignment.center,
  52. children: [
  53. GestureDetector(
  54. onTap: (){
  55. toggleLoop();
  56. },
  57. child: _loopIcon(context),
  58. ),
  59. SizedBox(width: 10,),
  60. IconButton(
  61. icon: Icon(isPlaying ? Icons.pause : Icons.play_arrow,size: 24,color: Colors.white,),
  62. onPressed: this.onPlay
  63. ),
  64. if( onStop != null )
  65. IconButton(
  66. icon: Icon(Icons.stop,size: 24,color: Colors.white,),
  67. onPressed: this.onStop
  68. )
  69. ],
  70. );
  71. }
  72. }