Overflow Album error fix

playtrack from found song in Search
search on TexField submit
This commit is contained in:
Kingkor Roy Tirtho 2022-01-26 19:42:13 +06:00
parent 79ef853ac9
commit 4f14849502
3 changed files with 58 additions and 33 deletions

View File

@ -4,11 +4,8 @@ import 'package:cached_network_image/cached_network_image.dart';
import 'package:hotkey_manager/hotkey_manager.dart'; import 'package:hotkey_manager/hotkey_manager.dart';
import 'package:just_audio/just_audio.dart'; import 'package:just_audio/just_audio.dart';
import 'package:spotify/spotify.dart'; import 'package:spotify/spotify.dart';
import 'package:spotube/components/Artist/ArtistProfile.dart';
import 'package:spotube/components/Shared/DownloadTrackButton.dart'; import 'package:spotube/components/Shared/DownloadTrackButton.dart';
import 'package:spotube/components/Player/PlayerControls.dart'; import 'package:spotube/components/Player/PlayerControls.dart';
import 'package:spotube/components/Shared/LinkText.dart';
import 'package:spotube/helpers/artist-to-string.dart';
import 'package:spotube/helpers/artists-to-clickable-artists.dart'; import 'package:spotube/helpers/artists-to-clickable-artists.dart';
import 'package:spotube/helpers/image-to-url-string.dart'; import 'package:spotube/helpers/image-to-url-string.dart';
import 'package:spotube/helpers/search-youtube.dart'; import 'package:spotube/helpers/search-youtube.dart';

View File

@ -20,6 +20,7 @@ class Search extends StatefulWidget {
class _SearchState extends State<Search> { class _SearchState extends State<Search> {
late TextEditingController _controller; late TextEditingController _controller;
String searchTerm = ""; String searchTerm = "";
@override @override
@ -43,6 +44,11 @@ class _SearchState extends State<Search> {
child: TextField( child: TextField(
decoration: const InputDecoration(hintText: "Search..."), decoration: const InputDecoration(hintText: "Search..."),
controller: _controller, controller: _controller,
onSubmitted: (value) {
setState(() {
searchTerm = _controller.value.text;
});
},
), ),
), ),
const SizedBox(width: 5), const SizedBox(width: 5),
@ -64,7 +70,7 @@ class _SearchState extends State<Search> {
), ),
FutureBuilder<List<Page>>( FutureBuilder<List<Page>>(
future: searchTerm.isNotEmpty future: searchTerm.isNotEmpty
? spotify.search.get(searchTerm).first(5) ? spotify.search.get(searchTerm).first(10)
: null, : null,
builder: (context, snapshot) { builder: (context, snapshot) {
if (!snapshot.hasData && searchTerm.isNotEmpty) { if (!snapshot.hasData && searchTerm.isNotEmpty) {
@ -116,7 +122,27 @@ class _SearchState extends State<Search> {
duration: duration, duration: duration,
thumbnailUrl: thumbnailUrl:
imageToUrlString(track.value.album?.images), imageToUrlString(track.value.album?.images),
onTrackPlayButtonPressed: (currentTrack) {}, onTrackPlayButtonPressed: (currentTrack) async {
var isPlaylistPlaying =
playback.currentPlaylist?.id != null &&
playback.currentPlaylist?.id ==
currentTrack.id;
if (!isPlaylistPlaying) {
playback.setCurrentPlaylist = CurrentPlaylist(
tracks: [currentTrack],
id: currentTrack.id!,
name: currentTrack.name!,
thumbnail: imageToUrlString(
currentTrack.album?.images),
);
playback.setCurrentTrack = currentTrack;
} else if (isPlaylistPlaying &&
currentTrack.id != null &&
currentTrack.id !=
playback.currentTrack?.id) {
playback.setCurrentTrack = currentTrack;
}
},
); );
}), }),
if (albums.isNotEmpty) if (albums.isNotEmpty)
@ -125,13 +151,15 @@ class _SearchState extends State<Search> {
style: Theme.of(context).textTheme.headline5, style: Theme.of(context).textTheme.headline5,
), ),
const SizedBox(height: 10), const SizedBox(height: 10),
Wrap( Center(
child: Wrap(
spacing: 20, spacing: 20,
runSpacing: 20, runSpacing: 20,
children: albums.map((album) { children: albums.map((album) {
return AlbumCard(simpleAlbumToAlbum(album)); return AlbumCard(simpleAlbumToAlbum(album));
}).toList(), }).toList(),
), ),
),
const SizedBox(height: 20), const SizedBox(height: 20),
if (artists.isNotEmpty) if (artists.isNotEmpty)
Text( Text(
@ -139,13 +167,15 @@ class _SearchState extends State<Search> {
style: Theme.of(context).textTheme.headline5, style: Theme.of(context).textTheme.headline5,
), ),
const SizedBox(height: 10), const SizedBox(height: 10),
Wrap( Center(
child: Wrap(
spacing: 20, spacing: 20,
runSpacing: 20, runSpacing: 20,
children: artists.map((artist) { children: artists.map((artist) {
return ArtistCard(artist); return ArtistCard(artist);
}).toList(), }).toList(),
), ),
),
const SizedBox(height: 20), const SizedBox(height: 20),
if (playlists.isNotEmpty) if (playlists.isNotEmpty)
Text( Text(
@ -153,13 +183,15 @@ class _SearchState extends State<Search> {
style: Theme.of(context).textTheme.headline5, style: Theme.of(context).textTheme.headline5,
), ),
const SizedBox(height: 10), const SizedBox(height: 10),
Wrap( Center(
child: Wrap(
spacing: 20, spacing: 20,
runSpacing: 20, runSpacing: 20,
children: playlists.map((playlist) { children: playlists.map((playlist) {
return PlaylistCard(playlist); return PlaylistCard(playlist);
}).toList(), }).toList(),
), ),
),
], ],
), ),
), ),

View File

@ -81,17 +81,13 @@ class TracksTableView extends StatelessWidget {
), ),
), ),
Expanded( Expanded(
child: Row( child: LinkText(
children: [
LinkText(
track.value.album!.name!, track.value.album!.name!,
MaterialPageRoute( MaterialPageRoute(
builder: (context) => AlbumView(track.value.album!), builder: (context) => AlbumView(track.value.album!),
), ),
overflow: TextOverflow.ellipsis, overflow: TextOverflow.ellipsis,
), ),
],
),
), ),
const SizedBox(width: 10), const SizedBox(width: 10),
Text(duration), Text(duration),