mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-09-14 16:25:16 +00:00
fix: horizontal infinite lists doesn't fill the screen
This commit is contained in:
parent
067e9ac53e
commit
69995bea1c
@ -50,24 +50,25 @@ class ArtistAlbumList extends HookConsumerWidget {
|
|||||||
child: Scrollbar(
|
child: Scrollbar(
|
||||||
interactive: false,
|
interactive: false,
|
||||||
controller: scrollController,
|
controller: scrollController,
|
||||||
|
child: Waypoint(
|
||||||
|
controller: scrollController,
|
||||||
|
onTouchEdge: () {
|
||||||
|
albumsQuery.fetchNextPage();
|
||||||
|
},
|
||||||
child: ListView.builder(
|
child: ListView.builder(
|
||||||
itemCount: albums.length,
|
itemCount: albums.length,
|
||||||
controller: scrollController,
|
controller: scrollController,
|
||||||
scrollDirection: Axis.horizontal,
|
scrollDirection: Axis.horizontal,
|
||||||
itemBuilder: (context, index) {
|
itemBuilder: (context, index) {
|
||||||
if (index == albums.length - 1 && hasNextPage) {
|
if (index == albums.length - 1 && hasNextPage) {
|
||||||
return Waypoint(
|
return const ShimmerPlaybuttonCard(count: 1);
|
||||||
onEnter: () {
|
|
||||||
albumsQuery.fetchNextPage();
|
|
||||||
},
|
|
||||||
child: const ShimmerPlaybuttonCard(count: 1),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
return AlbumCard(albums[index]);
|
return AlbumCard(albums[index]);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -66,21 +66,22 @@ class CategoryCard extends HookConsumerWidget {
|
|||||||
child: Scrollbar(
|
child: Scrollbar(
|
||||||
controller: scrollController,
|
controller: scrollController,
|
||||||
interactive: false,
|
interactive: false,
|
||||||
child: ListView.builder(
|
child: Waypoint(
|
||||||
scrollDirection: Axis.horizontal,
|
controller: scrollController,
|
||||||
shrinkWrap: true,
|
onTouchEdge: () {
|
||||||
itemCount: playlists.length,
|
|
||||||
itemBuilder: (context, index) {
|
|
||||||
if (index == playlists.length - 1 && hasNextPage) {
|
|
||||||
return Waypoint(
|
|
||||||
onEnter: () {
|
|
||||||
playlistQuery.fetchNextPage();
|
playlistQuery.fetchNextPage();
|
||||||
},
|
},
|
||||||
child: const ShimmerPlaybuttonCard(count: 1),
|
child: ListView(
|
||||||
);
|
scrollDirection: Axis.horizontal,
|
||||||
}
|
shrinkWrap: true,
|
||||||
return PlaylistCard(playlists[index]);
|
controller: scrollController,
|
||||||
},
|
children: [
|
||||||
|
...playlists
|
||||||
|
.map((playlist) => PlaylistCard(playlist)),
|
||||||
|
if (hasNextPage)
|
||||||
|
const ShimmerPlaybuttonCard(count: 1),
|
||||||
|
],
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -18,6 +18,7 @@ class Genres extends HookConsumerWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, ref) {
|
Widget build(BuildContext context, ref) {
|
||||||
|
final scrollController = useScrollController();
|
||||||
final spotify = ref.watch(spotifyProvider);
|
final spotify = ref.watch(spotifyProvider);
|
||||||
final recommendationMarket = ref.watch(
|
final recommendationMarket = ref.watch(
|
||||||
userPreferencesProvider.select((s) => s.recommendationMarket),
|
userPreferencesProvider.select((s) => s.recommendationMarket),
|
||||||
@ -45,24 +46,26 @@ class Genres extends HookConsumerWidget {
|
|||||||
|
|
||||||
return PlatformScaffold(
|
return PlatformScaffold(
|
||||||
appBar: kIsDesktop ? PageWindowTitleBar() : null,
|
appBar: kIsDesktop ? PageWindowTitleBar() : null,
|
||||||
body: ListView.builder(
|
body: Waypoint(
|
||||||
|
onTouchEdge: () {
|
||||||
|
if (categoriesQuery.hasNextPage) {
|
||||||
|
categoriesQuery.fetchNextPage();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
controller: scrollController,
|
||||||
|
child: ListView.builder(
|
||||||
|
controller: scrollController,
|
||||||
itemCount: categories.length,
|
itemCount: categories.length,
|
||||||
itemBuilder: (context, index) {
|
itemBuilder: (context, index) {
|
||||||
final category = categories[index];
|
final category = categories[index];
|
||||||
if (category == null) return Container();
|
if (category == null) return Container();
|
||||||
if (index == categories.length - 1) {
|
if (index == categories.length - 1) {
|
||||||
return Waypoint(
|
return const ShimmerCategories();
|
||||||
onEnter: () {
|
|
||||||
if (categoriesQuery.hasNextPage) {
|
|
||||||
categoriesQuery.fetchNextPage();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
child: const ShimmerCategories(),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
return CategoryCard(category);
|
return CategoryCard(category);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -49,15 +49,19 @@ class UserArtists extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
padding: const EdgeInsets.all(10),
|
padding: const EdgeInsets.all(10),
|
||||||
itemBuilder: (context, index) {
|
itemBuilder: (context, index) {
|
||||||
|
return HookBuilder(builder: (context) {
|
||||||
if (index == artists.length - 1 && hasNextPage) {
|
if (index == artists.length - 1 && hasNextPage) {
|
||||||
return Waypoint(
|
return Waypoint(
|
||||||
onEnter: () {
|
controller: useScrollController(),
|
||||||
|
isGrid: true,
|
||||||
|
onTouchEdge: () {
|
||||||
artistQuery.fetchNextPage();
|
artistQuery.fetchNextPage();
|
||||||
},
|
},
|
||||||
child: ArtistCard(artists[index]),
|
child: ArtistCard(artists[index]),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return ArtistCard(artists[index]);
|
return ArtistCard(artists[index]);
|
||||||
|
});
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
@ -200,16 +200,9 @@ class Search extends HookConsumerWidget {
|
|||||||
if (playlists.isNotEmpty)
|
if (playlists.isNotEmpty)
|
||||||
PlatformText.headline("Playlists"),
|
PlatformText.headline("Playlists"),
|
||||||
const SizedBox(height: 10),
|
const SizedBox(height: 10),
|
||||||
if (searchPlaylist.isLoading &&
|
|
||||||
!searchPlaylist.isFetchingNextPage)
|
|
||||||
const PlatformCircularProgressIndicator()
|
|
||||||
else if (searchPlaylist.hasError)
|
|
||||||
PlatformText(searchPlaylist
|
|
||||||
.error?[searchPlaylist.pageParams.last])
|
|
||||||
else
|
|
||||||
ScrollConfiguration(
|
ScrollConfiguration(
|
||||||
behavior: ScrollConfiguration.of(context)
|
behavior:
|
||||||
.copyWith(
|
ScrollConfiguration.of(context).copyWith(
|
||||||
dragDevices: {
|
dragDevices: {
|
||||||
PointerDeviceKind.touch,
|
PointerDeviceKind.touch,
|
||||||
PointerDeviceKind.mouse,
|
PointerDeviceKind.mouse,
|
||||||
@ -221,6 +214,11 @@ class Search extends HookConsumerWidget {
|
|||||||
? ScrollbarOrientation.bottom
|
? ScrollbarOrientation.bottom
|
||||||
: ScrollbarOrientation.top,
|
: ScrollbarOrientation.top,
|
||||||
controller: playlistController,
|
controller: playlistController,
|
||||||
|
child: Waypoint(
|
||||||
|
onTouchEdge: () {
|
||||||
|
searchPlaylist.fetchNextPage();
|
||||||
|
},
|
||||||
|
controller: playlistController,
|
||||||
child: SingleChildScrollView(
|
child: SingleChildScrollView(
|
||||||
scrollDirection: Axis.horizontal,
|
scrollDirection: Axis.horizontal,
|
||||||
controller: playlistController,
|
controller: playlistController,
|
||||||
@ -231,15 +229,8 @@ class Search extends HookConsumerWidget {
|
|||||||
if (i == playlists.length - 1 &&
|
if (i == playlists.length - 1 &&
|
||||||
searchPlaylist
|
searchPlaylist
|
||||||
.hasNextPage) {
|
.hasNextPage) {
|
||||||
return Waypoint(
|
return const ShimmerPlaybuttonCard(
|
||||||
onEnter: () {
|
count: 1);
|
||||||
searchPlaylist
|
|
||||||
.fetchNextPage();
|
|
||||||
},
|
|
||||||
child:
|
|
||||||
const ShimmerPlaybuttonCard(
|
|
||||||
count: 1),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
return PlaylistCard(playlist);
|
return PlaylistCard(playlist);
|
||||||
},
|
},
|
||||||
@ -249,20 +240,20 @@ class Search extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
),
|
||||||
|
if (searchPlaylist.isLoading &&
|
||||||
|
!searchPlaylist.isFetchingNextPage)
|
||||||
|
const PlatformCircularProgressIndicator(),
|
||||||
|
if (searchPlaylist.hasError)
|
||||||
|
PlatformText(searchPlaylist
|
||||||
|
.error?[searchPlaylist.pageParams.last]),
|
||||||
const SizedBox(height: 20),
|
const SizedBox(height: 20),
|
||||||
if (artists.isNotEmpty)
|
if (artists.isNotEmpty)
|
||||||
PlatformText.headline("Artists"),
|
PlatformText.headline("Artists"),
|
||||||
const SizedBox(height: 10),
|
const SizedBox(height: 10),
|
||||||
if (searchArtist.isLoading &&
|
|
||||||
!searchArtist.isFetchingNextPage)
|
|
||||||
const PlatformCircularProgressIndicator()
|
|
||||||
else if (searchArtist.hasError)
|
|
||||||
PlatformText(searchArtist
|
|
||||||
.error?[searchArtist.pageParams.last])
|
|
||||||
else
|
|
||||||
ScrollConfiguration(
|
ScrollConfiguration(
|
||||||
behavior: ScrollConfiguration.of(context)
|
behavior:
|
||||||
.copyWith(
|
ScrollConfiguration.of(context).copyWith(
|
||||||
dragDevices: {
|
dragDevices: {
|
||||||
PointerDeviceKind.touch,
|
PointerDeviceKind.touch,
|
||||||
PointerDeviceKind.mouse,
|
PointerDeviceKind.mouse,
|
||||||
@ -270,6 +261,11 @@ class Search extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
child: Scrollbar(
|
child: Scrollbar(
|
||||||
controller: artistController,
|
controller: artistController,
|
||||||
|
child: Waypoint(
|
||||||
|
controller: artistController,
|
||||||
|
onTouchEdge: () {
|
||||||
|
searchArtist.fetchNextPage();
|
||||||
|
},
|
||||||
child: SingleChildScrollView(
|
child: SingleChildScrollView(
|
||||||
scrollDirection: Axis.horizontal,
|
scrollDirection: Axis.horizontal,
|
||||||
controller: artistController,
|
controller: artistController,
|
||||||
@ -279,15 +275,8 @@ class Search extends HookConsumerWidget {
|
|||||||
(i, artist) {
|
(i, artist) {
|
||||||
if (i == artists.length - 1 &&
|
if (i == artists.length - 1 &&
|
||||||
searchArtist.hasNextPage) {
|
searchArtist.hasNextPage) {
|
||||||
return Waypoint(
|
return const ShimmerPlaybuttonCard(
|
||||||
onEnter: () {
|
count: 1);
|
||||||
searchArtist
|
|
||||||
.fetchNextPage();
|
|
||||||
},
|
|
||||||
child:
|
|
||||||
const ShimmerPlaybuttonCard(
|
|
||||||
count: 1),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
return Container(
|
return Container(
|
||||||
margin: const EdgeInsets
|
margin: const EdgeInsets
|
||||||
@ -302,6 +291,13 @@ class Search extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
),
|
||||||
|
if (searchArtist.isLoading &&
|
||||||
|
!searchArtist.isFetchingNextPage)
|
||||||
|
const PlatformCircularProgressIndicator(),
|
||||||
|
if (searchArtist.hasError)
|
||||||
|
PlatformText(searchArtist
|
||||||
|
.error?[searchArtist.pageParams.last]),
|
||||||
const SizedBox(height: 20),
|
const SizedBox(height: 20),
|
||||||
if (albums.isNotEmpty)
|
if (albums.isNotEmpty)
|
||||||
PlatformText(
|
PlatformText(
|
||||||
@ -310,16 +306,9 @@ class Search extends HookConsumerWidget {
|
|||||||
Theme.of(context).textTheme.headline5,
|
Theme.of(context).textTheme.headline5,
|
||||||
),
|
),
|
||||||
const SizedBox(height: 10),
|
const SizedBox(height: 10),
|
||||||
if (searchAlbum.isLoading &&
|
|
||||||
!searchAlbum.isFetchingNextPage)
|
|
||||||
const PlatformCircularProgressIndicator()
|
|
||||||
else if (searchAlbum.hasError)
|
|
||||||
PlatformText(searchAlbum
|
|
||||||
.error?[searchAlbum.pageParams.last])
|
|
||||||
else
|
|
||||||
ScrollConfiguration(
|
ScrollConfiguration(
|
||||||
behavior: ScrollConfiguration.of(context)
|
behavior:
|
||||||
.copyWith(
|
ScrollConfiguration.of(context).copyWith(
|
||||||
dragDevices: {
|
dragDevices: {
|
||||||
PointerDeviceKind.touch,
|
PointerDeviceKind.touch,
|
||||||
PointerDeviceKind.mouse,
|
PointerDeviceKind.mouse,
|
||||||
@ -327,6 +316,11 @@ class Search extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
child: Scrollbar(
|
child: Scrollbar(
|
||||||
controller: albumController,
|
controller: albumController,
|
||||||
|
child: Waypoint(
|
||||||
|
controller: albumController,
|
||||||
|
onTouchEdge: () {
|
||||||
|
searchAlbum.fetchNextPage();
|
||||||
|
},
|
||||||
child: SingleChildScrollView(
|
child: SingleChildScrollView(
|
||||||
scrollDirection: Axis.horizontal,
|
scrollDirection: Axis.horizontal,
|
||||||
controller: albumController,
|
controller: albumController,
|
||||||
@ -335,14 +329,8 @@ class Search extends HookConsumerWidget {
|
|||||||
...albums.mapIndexed((i, album) {
|
...albums.mapIndexed((i, album) {
|
||||||
if (i == albums.length - 1 &&
|
if (i == albums.length - 1 &&
|
||||||
searchAlbum.hasNextPage) {
|
searchAlbum.hasNextPage) {
|
||||||
return Waypoint(
|
return const ShimmerPlaybuttonCard(
|
||||||
onEnter: () {
|
count: 1);
|
||||||
searchAlbum.fetchNextPage();
|
|
||||||
},
|
|
||||||
child:
|
|
||||||
const ShimmerPlaybuttonCard(
|
|
||||||
count: 1),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
return AlbumCard(
|
return AlbumCard(
|
||||||
TypeConversionUtils
|
TypeConversionUtils
|
||||||
@ -356,6 +344,13 @@ class Search extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
),
|
||||||
|
if (searchAlbum.isLoading &&
|
||||||
|
!searchAlbum.isFetchingNextPage)
|
||||||
|
const PlatformCircularProgressIndicator(),
|
||||||
|
if (searchAlbum.hasError)
|
||||||
|
PlatformText(searchAlbum
|
||||||
|
.error?[searchAlbum.pageParams.last]),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -1,18 +1,27 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:fluent_ui/fluent_ui.dart';
|
||||||
|
import 'package:go_router/go_router.dart';
|
||||||
|
import 'package:platform_ui/platform_ui.dart';
|
||||||
|
|
||||||
class SpotubePageRoute extends PageRouteBuilder {
|
class SpotubePage extends CustomTransitionPage {
|
||||||
final Widget child;
|
SpotubePage({
|
||||||
SpotubePageRoute({required this.child})
|
required super.child,
|
||||||
: super(
|
}) : super(
|
||||||
pageBuilder: (context, animation, secondaryAnimation) => child,
|
transitionsBuilder: (context, animation, secondaryAnimation, child) {
|
||||||
settings: RouteSettings(
|
return child;
|
||||||
name: child.key.toString(),
|
},
|
||||||
),
|
);
|
||||||
|
|
||||||
|
@override
|
||||||
|
Route createRoute(BuildContext context) {
|
||||||
|
if (platform == TargetPlatform.windows) {
|
||||||
|
return FluentPageRoute(
|
||||||
|
builder: (context) => child,
|
||||||
|
settings: this,
|
||||||
|
maintainState: maintainState,
|
||||||
|
barrierLabel: barrierLabel,
|
||||||
|
fullscreenDialog: fullscreenDialog,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
return super.createRoute(context);
|
||||||
class SpotubePage extends MaterialPage {
|
}
|
||||||
const SpotubePage({
|
|
||||||
required Widget child,
|
|
||||||
}) : super(child: child);
|
|
||||||
}
|
}
|
||||||
|
@ -1,29 +1,57 @@
|
|||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||||
import 'package:visibility_detector/visibility_detector.dart';
|
import 'package:visibility_detector/visibility_detector.dart';
|
||||||
|
|
||||||
class Waypoint extends StatelessWidget {
|
class Waypoint extends HookWidget {
|
||||||
final void Function()? onEnter;
|
final void Function()? onTouchEdge;
|
||||||
final void Function()? onLeave;
|
|
||||||
final Widget? child;
|
final Widget? child;
|
||||||
|
final ScrollController controller;
|
||||||
|
final bool isGrid;
|
||||||
|
|
||||||
const Waypoint({
|
const Waypoint({
|
||||||
Key? key,
|
Key? key,
|
||||||
this.onEnter,
|
required this.controller,
|
||||||
this.onLeave,
|
this.isGrid = false,
|
||||||
|
this.onTouchEdge,
|
||||||
this.child,
|
this.child,
|
||||||
}) : super(key: key);
|
}) : super(key: key);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
useEffect(() {
|
||||||
|
if (isGrid) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
listener() {
|
||||||
|
// nextPageTrigger will have a value equivalent to 80% of the list size.
|
||||||
|
final nextPageTrigger = 0.8 * controller.position.maxScrollExtent;
|
||||||
|
|
||||||
|
// scrollController fetches the next paginated data when the current postion of the user on the screen has surpassed
|
||||||
|
if (controller.position.pixels >= nextPageTrigger) {
|
||||||
|
onTouchEdge?.call();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (controller.hasClients) {
|
||||||
|
listener();
|
||||||
|
}
|
||||||
|
|
||||||
|
controller.addListener(listener);
|
||||||
|
return () => controller.removeListener(listener);
|
||||||
|
}, [controller, onTouchEdge]);
|
||||||
|
|
||||||
|
if (isGrid) {
|
||||||
return VisibilityDetector(
|
return VisibilityDetector(
|
||||||
key: const Key("waypoint"),
|
key: const Key("waypoint"),
|
||||||
onVisibilityChanged: (info) {
|
onVisibilityChanged: (info) {
|
||||||
if (info.visibleFraction == 0) {
|
if (info.visibleFraction > 0) {
|
||||||
onLeave?.call();
|
onTouchEdge?.call();
|
||||||
} else if (info.visibleFraction > 0) {
|
|
||||||
onEnter?.call();
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
child: child ?? Container(),
|
child: child ?? Container(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return child ?? Container();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,28 +28,28 @@ final router = GoRouter(
|
|||||||
routes: [
|
routes: [
|
||||||
GoRoute(
|
GoRoute(
|
||||||
path: "/",
|
path: "/",
|
||||||
pageBuilder: (context, state) => const SpotubePage(child: Genres()),
|
pageBuilder: (context, state) => SpotubePage(child: const Genres()),
|
||||||
),
|
),
|
||||||
GoRoute(
|
GoRoute(
|
||||||
path: "/search",
|
path: "/search",
|
||||||
name: "Search",
|
name: "Search",
|
||||||
pageBuilder: (context, state) => const SpotubePage(child: Search()),
|
pageBuilder: (context, state) => SpotubePage(child: const Search()),
|
||||||
),
|
),
|
||||||
GoRoute(
|
GoRoute(
|
||||||
path: "/library",
|
path: "/library",
|
||||||
name: "Library",
|
name: "Library",
|
||||||
pageBuilder: (context, state) =>
|
pageBuilder: (context, state) =>
|
||||||
const SpotubePage(child: UserLibrary()),
|
SpotubePage(child: const UserLibrary()),
|
||||||
),
|
),
|
||||||
GoRoute(
|
GoRoute(
|
||||||
path: "/lyrics",
|
path: "/lyrics",
|
||||||
name: "Lyrics",
|
name: "Lyrics",
|
||||||
pageBuilder: (context, state) => const SpotubePage(child: Lyrics()),
|
pageBuilder: (context, state) => SpotubePage(child: const Lyrics()),
|
||||||
),
|
),
|
||||||
GoRoute(
|
GoRoute(
|
||||||
path: "/settings",
|
path: "/settings",
|
||||||
pageBuilder: (context, state) => const SpotubePage(
|
pageBuilder: (context, state) => SpotubePage(
|
||||||
child: Settings(),
|
child: const Settings(),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
GoRoute(
|
GoRoute(
|
||||||
@ -87,16 +87,16 @@ final router = GoRouter(
|
|||||||
GoRoute(
|
GoRoute(
|
||||||
path: "/login-tutorial",
|
path: "/login-tutorial",
|
||||||
parentNavigatorKey: rootNavigatorKey,
|
parentNavigatorKey: rootNavigatorKey,
|
||||||
pageBuilder: (context, state) => const SpotubePage(
|
pageBuilder: (context, state) => SpotubePage(
|
||||||
child: LoginTutorial(),
|
child: const LoginTutorial(),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
GoRoute(
|
GoRoute(
|
||||||
path: "/player",
|
path: "/player",
|
||||||
parentNavigatorKey: rootNavigatorKey,
|
parentNavigatorKey: rootNavigatorKey,
|
||||||
pageBuilder: (context, state) {
|
pageBuilder: (context, state) {
|
||||||
return const SpotubePage(
|
return SpotubePage(
|
||||||
child: PlayerView(),
|
child: const PlayerView(),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
@ -1050,11 +1050,9 @@ packages:
|
|||||||
platform_ui:
|
platform_ui:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
path: "."
|
path: "../platform_ui"
|
||||||
ref: bf42bc4caf9cb382f5215ea2db711adbf2a99f4b
|
relative: true
|
||||||
resolved-ref: bf42bc4caf9cb382f5215ea2db711adbf2a99f4b
|
source: path
|
||||||
url: "https://github.com/KRTirtho/platform_ui.git"
|
|
||||||
source: git
|
|
||||||
version: "0.1.0"
|
version: "0.1.0"
|
||||||
plugin_platform_interface:
|
plugin_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
|
@ -63,9 +63,7 @@ dependencies:
|
|||||||
tuple: ^2.0.1
|
tuple: ^2.0.1
|
||||||
uuid: ^3.0.6
|
uuid: ^3.0.6
|
||||||
platform_ui:
|
platform_ui:
|
||||||
git:
|
path: ../platform_ui
|
||||||
url: https://github.com/KRTirtho/platform_ui.git
|
|
||||||
ref: bf42bc4caf9cb382f5215ea2db711adbf2a99f4b
|
|
||||||
fluent_ui: ^4.0.3
|
fluent_ui: ^4.0.3
|
||||||
macos_ui: ^1.7.5
|
macos_ui: ^1.7.5
|
||||||
libadwaita: ^1.2.5
|
libadwaita: ^1.2.5
|
||||||
|
Loading…
Reference in New Issue
Block a user