import 'dart:math'; import 'dart:ui'; import 'package:flutter/material.dart'; import 'package:music_web_player/api.dart'; import 'package:music_web_player/ui/cover_image.dart'; class MusicPlayer extends StatefulWidget { final MusicsList musicsList; const MusicPlayer({Key? key, required this.musicsList}) : super(key: key); @override State createState() => _MusicPlayerState(); } class _MusicPlayerState extends State { final rng = Random(); final List stack = []; int currMusicPos = 0; MusicEntry get currMusic { if (currMusicPos < 0) currMusicPos = 0; // Automatically choose next music if required if (currMusicPos >= stack.length) { var nextId = rng.nextInt(widget.musicsList.length); stack.add(widget.musicsList[nextId]); } return stack[currMusicPos]; } @override Widget build(BuildContext context) { return LayoutBuilder( builder: (context, constraints) => Stack( children: [ // Background image CoverImage( music: currMusic, width: constraints.maxWidth, height: constraints.maxHeight, fit: BoxFit.cover, ), ClipRRect( // Clip it cleanly. child: BackdropFilter( filter: ImageFilter.blur(sigmaX: 10, sigmaY: 10), child: Container( color: Colors.black.withOpacity(0.8), alignment: Alignment.center, child: SizedBox( width: constraints.maxWidth, height: constraints.maxHeight, ), ), )), _buildFront(), ], ), ); } Widget _buildFront() { return Text(currMusic.artist + " - " + currMusic.title); } }