diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
index dcb10469..98cce616 100644
--- a/.github/FUNDING.yml
+++ b/.github/FUNDING.yml
@@ -1,2 +1,5 @@
open_collective: spotube
-ko_fi: krtirtho
\ No newline at end of file
+ko_fi: krtirtho
+patreon: krtirtho
+custom:
+ - "https://www.buymeacoffee.com/krtirtho"
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6c6aa75f..9235d6c9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,14 @@
+# v2.2.1
+
+### Improved
+- Page transitions defaulted to material you design
+
+### Bug fixes
+- Mini Player flickering on random state updates
+- Track More Options not showing when not logged in
+- Wrong link to Client ID & Client Secret tutorial in Login page
+- Changing preferences in Settings resets the entire Playback
+
# v2.2.0
### New
diff --git a/README.md b/README.md
index 8b2bbe17..41117801 100644
--- a/README.md
+++ b/README.md
@@ -44,7 +44,13 @@ Following are the features that currently spotube offers:
- Synced Lyrics
- Downloadable track
-
+# Support this project
+
+
+
+[](https://opencollective.com/spotube)
+[](https://www.buymeacoffee.com/krtirtho)
+
# Installation
@@ -84,23 +90,12 @@ Get the latest nightly builds of Spotube [here](https://nightly.link/KRTirtho/sp
- **MOST IMPORTANT:** Give the app a name & description. Then Edit settings & add `http://localhost:4304/auth/spotify/callback` as **Redirect URI** for the app. Its important for authenticating
-
+
+
- Click on **SHOW CLIENT SECRET** to reveal the **clientSecret**. Then copy the **clientID**, **clientSecret** & paste in the **Spotube's** respective fields
-### Setup Genius Lyrics
-
-- Signup/Login into [genius](https://genius.com/signup) for **lyrics**
-- Go To [Genius Developer Portal](https://genius.com/api-clients/new) for creating an API client
-
-- Generate & copy access token
-
-- Paste the copied access token in Spotube's Settings
-
-
-> **Note!**: No personal data or any kind of sensitive information won't be collected from spotify. Don't believe? See the code for yourself
-
# TODO:
- [x] Compile, Debug & Build for **MacOS**
@@ -151,6 +146,8 @@ Bu why? You can learn about it [here](https://dev.to/krtirtho/choosing-open-sour
- [marquee](https://github.com/MarcelGarus/marquee) - ⏩ A Flutter widget that scrolls text infinitely. Provides many customizations including custom scroll directions, durations, curves as well as pauses after every round
- [scroll_to_index](https://github.com/quire-io/scroll-to-index) - scroll to index with fixed/variable row height inside Flutter scrollable widget
- [package_info_plus](https://github.com/fluttercommunity/plus_plugins/tree/main/packages/) - This Flutter plugin provides an API for querying information about an application package.
+- [version](https://github.com/dartninja/version) - A dart library providing a Version class
+- [audio_service](https://github.com/ryanheise/audio_service) - Flutter plugin to play audio in the background while the screen is off.
# Social handlers
@@ -169,4 +166,4 @@ Follow me on [Twitter](https://twitter.com/@krtirtho) for newer updates about th
[mac-dlink]: https://github.com/KRTirtho/spotube/releases/latest/download/Spotube-macos-x86_64.dmg
[android-dlink]: https://github.com/KRTirtho/spotube/releases/latest/download/Spotube-android-all-arch.apk
-[wiki-installation-instructions]: https://github.com/KRTirtho/spotube/wiki/Installation-Instrcutions
\ No newline at end of file
+[wiki-installation-instructions]: https://github.com/KRTirtho/spotube/wiki/Installation-Instrcutions
diff --git a/assets/empty_box.png b/assets/empty_box.png
new file mode 100644
index 00000000..24e95b23
Binary files /dev/null and b/assets/empty_box.png differ
diff --git a/lib/components/Album/AlbumView.dart b/lib/components/Album/AlbumView.dart
index f9243009..a6f927db 100644
--- a/lib/components/Album/AlbumView.dart
+++ b/lib/components/Album/AlbumView.dart
@@ -1,9 +1,10 @@
import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:spotify/spotify.dart';
import 'package:spotube/components/Shared/HeartButton.dart';
-import 'package:spotube/components/Shared/PageWindowTitleBar.dart';
-import 'package:spotube/components/Shared/TracksTableView.dart';
+import 'package:spotube/components/Shared/TrackCollectionView.dart';
import 'package:spotube/helpers/image-to-url-string.dart';
import 'package:spotube/helpers/simple-track-to-track.dart';
import 'package:spotube/models/CurrentPlaylist.dart';
@@ -40,7 +41,6 @@ class AlbumView extends HookConsumerWidget {
Widget build(BuildContext context, ref) {
Playback playback = ref.watch(playbackProvider);
- final isPlaylistPlaying = playback.currentPlaylist?.id == album.id;
final SpotifyApi spotify = ref.watch(spotifyProvider);
final Auth auth = ref.watch(authProvider);
@@ -48,85 +48,60 @@ class AlbumView extends HookConsumerWidget {
final albumSavedSnapshot =
ref.watch(albumIsSavedForCurrentUserQuery(album.id!));
- return SafeArea(
- child: Scaffold(
- body: Column(
- children: [
- PageWindowTitleBar(
- leading: Row(
- children: [
- // nav back
- const BackButton(),
- // heart playlist
- if (auth.isLoggedIn)
- albumSavedSnapshot.when(
- data: (isSaved) {
- return HeartButton(
- isLiked: isSaved,
- onPressed: () {
- (isSaved
- ? spotify.me.removeAlbums(
- [album.id!],
- )
- : spotify.me.saveAlbums(
- [album.id!],
- ))
- .whenComplete(() {
- ref.refresh(
- albumIsSavedForCurrentUserQuery(
- album.id!,
- ),
- );
- ref.refresh(currentUserAlbumsQuery);
- });
- },
- );
- },
- error: (error, _) => Text("Error $error"),
- loading: () => const CircularProgressIndicator()),
- // play playlist
- IconButton(
- icon: Icon(
- isPlaylistPlaying
- ? Icons.stop_rounded
- : Icons.play_arrow_rounded,
- ),
- onPressed: tracksSnapshot.asData?.value != null
- ? () => playPlaylist(
- playback,
- tracksSnapshot.asData!.value.map((trackSmp) {
- return simpleTrackToTrack(trackSmp, album);
- }).toList(),
- )
- : null,
- )
- ],
- ),
- ),
- Center(
- child: Text(album.name!,
- style: Theme.of(context).textTheme.headline4),
- ),
- tracksSnapshot.when(
- data: (data) {
- List