Compare commits

...

6 Commits

Author SHA1 Message Date
Richard Hajek
1705028915
Merge 42e954428b into 4072531c62 2025-03-09 10:10:39 +06:00
Kingkor Roy Tirtho
4072531c62 fix(android): navigation overlaying in app navigation 2025-03-09 10:05:02 +06:00
Richard Hajek
42e954428b feat: added filtering duplicates in recent 2025-01-18 18:01:26 +01:00
Kingkor Roy Tirtho
8c1337d1fc
Merge pull request #2118 from KRTirtho/dev
chore: release 3.9.0
2024-12-09 00:04:29 +06:00
Kingkor Roy Tirtho
94e704087f Merge branch 'dev' 2024-10-09 16:38:23 +06:00
Kingkor Roy Tirtho
8e287ab1e5
Merge pull request #1981 from KRTirtho/dev
Release 3.8.3
2024-10-09 15:39:31 +06:00
7 changed files with 29 additions and 21 deletions

View File

@ -1,3 +1,3 @@
{ {
"flutterSdkVersion": "3.29.0" "flutterSdkVersion": "3.29.1"
} }

2
.fvmrc
View File

@ -1,4 +1,4 @@
{ {
"flutter": "3.29.0", "flutter": "3.29.1",
"flavors": {} "flavors": {}
} }

View File

@ -28,5 +28,5 @@
"README.md": "LICENSE,CODE_OF_CONDUCT.md,CONTRIBUTING.md,SECURITY.md,CONTRIBUTION.md,CHANGELOG.md,PRIVACY_POLICY.md", "README.md": "LICENSE,CODE_OF_CONDUCT.md,CONTRIBUTING.md,SECURITY.md,CONTRIBUTION.md,CHANGELOG.md,PRIVACY_POLICY.md",
"*.dart": "${capture}.g.dart,${capture}.freezed.dart" "*.dart": "${capture}.g.dart,${capture}.freezed.dart"
}, },
"dart.flutterSdkPath": ".fvm/versions/3.29.0" "dart.flutterSdkPath": ".fvm/versions/3.29.1"
} }

View File

@ -25,9 +25,9 @@
android:requestLegacyExternalStorage="true" android:requestLegacyExternalStorage="true"
android:usesCleartextTraffic="true"> android:usesCleartextTraffic="true">
<!-- Enable Impeller --> <!-- Enable Impeller -->
<!-- <meta-data <meta-data
android:name="io.flutter.embedding.android.EnableImpeller" android:name="io.flutter.embedding.android.EnableImpeller"
android:value="false" /> --> android:value="false" />
<activity <activity
android:name="com.ryanheise.audioservice.AudioServiceActivity" android:name="com.ryanheise.audioservice.AudioServiceActivity"

View File

@ -9,7 +9,7 @@ import 'package:spotube/provider/history/recent.dart';
class HomeRecentlyPlayedSection extends HookConsumerWidget { class HomeRecentlyPlayedSection extends HookConsumerWidget {
const HomeRecentlyPlayedSection({super.key}); const HomeRecentlyPlayedSection({super.key});
@override @override
Widget build(BuildContext context, ref) { Widget build(BuildContext context, ref) {
final history = ref.watch(recentlyPlayedItems); final history = ref.watch(recentlyPlayedItems);
@ -20,17 +20,20 @@ class HomeRecentlyPlayedSection extends HookConsumerWidget {
return const SizedBox(); return const SizedBox();
} }
final uniqueItems = <dynamic>{};
final filteredItems = [
for (final item in historyData)
if (item.playlist != null && item.playlist?.id != null && uniqueItems.add(item.playlist!.id!))
item.playlist
else if (item.album != null && item.album?.id != null && uniqueItems.add(item.album?.id))
item.album
];
return Skeletonizer( return Skeletonizer(
enabled: history.isLoading, enabled: history.isLoading,
child: HorizontalPlaybuttonCardView( child: HorizontalPlaybuttonCardView(
title: Text(context.l10n.recently_played), title: Text(context.l10n.recently_played),
items: [ items: filteredItems,
for (final item in historyData)
if (item.playlist != null)
item.playlist
else if (item.album != null)
item.album
],
hasNextPage: false, hasNextPage: false,
isLoadingNextPage: false, isLoadingNextPage: false,
onFetchMore: () {}, onFetchMore: () {},

View File

@ -48,7 +48,7 @@ class PlayerView extends HookConsumerWidget {
ref.watch(audioPlayerProvider.select((s) => s.activeTrack)); ref.watch(audioPlayerProvider.select((s) => s.activeTrack));
final currentTrack = sourcedCurrentTrack ?? currentActiveTrack; final currentTrack = sourcedCurrentTrack ?? currentActiveTrack;
final isLocalTrack = currentTrack is LocalTrack; final isLocalTrack = currentTrack is LocalTrack;
final mediaQuery = MediaQuery.of(context); final mediaQuery = MediaQuery.sizeOf(context);
final shouldHide = useState(true); final shouldHide = useState(true);
@ -101,6 +101,8 @@ class PlayerView extends HookConsumerWidget {
backgroundColor: Colors.transparent, backgroundColor: Colors.transparent,
headers: [ headers: [
SafeArea( SafeArea(
minimum: const EdgeInsets.only(top: 80),
bottom: false,
child: TitleBar( child: TitleBar(
surfaceOpacity: 0, surfaceOpacity: 0,
surfaceBlur: 0, surfaceBlur: 0,

View File

@ -43,13 +43,16 @@ class RootAppPage extends HookConsumerWidget {
final scaffold = MediaQuery.removeViewInsets( final scaffold = MediaQuery.removeViewInsets(
context: context, context: context,
removeBottom: true, removeBottom: true,
child: const Scaffold( child: const SafeArea(
footers: [ top: false,
BottomPlayer(), child: Scaffold(
SpotubeNavigationBar(), footers: [
], BottomPlayer(),
floatingFooter: true, SpotubeNavigationBar(),
child: Sidebar(child: AutoRouter()), ],
floatingFooter: true,
child: Sidebar(child: AutoRouter()),
),
), ),
); );