chore: introduce breakpoint enum for constrains

This commit is contained in:
Kingkor Roy Tirtho 2024-06-07 22:00:16 +06:00
parent 63bf694d5c
commit f81219e83e
2 changed files with 36 additions and 2 deletions

View File

@ -3,7 +3,6 @@ import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:fuzzywuzzy/fuzzywuzzy.dart'; import 'package:fuzzywuzzy/fuzzywuzzy.dart';
import 'package:collection/collection.dart'; import 'package:collection/collection.dart';
import 'package:gap/gap.dart'; import 'package:gap/gap.dart';
import 'package:go_router/go_router.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:skeletonizer/skeletonizer.dart'; import 'package:skeletonizer/skeletonizer.dart';
@ -17,9 +16,11 @@ import 'package:spotube/components/playlist/playlist_card.dart';
import 'package:spotube/components/shared/waypoint.dart'; import 'package:spotube/components/shared/waypoint.dart';
import 'package:spotube/extensions/constrains.dart'; import 'package:spotube/extensions/constrains.dart';
import 'package:spotube/extensions/context.dart'; import 'package:spotube/extensions/context.dart';
import 'package:spotube/pages/library/playlist_generate/playlist_generate.dart';
import 'package:spotube/provider/authentication_provider.dart'; import 'package:spotube/provider/authentication_provider.dart';
import 'package:spotube/provider/spotify/spotify.dart'; import 'package:spotube/provider/spotify/spotify.dart';
import 'package:spotube/utils/platform.dart'; import 'package:spotube/utils/platform.dart';
import 'package:spotube/utils/service_utils.dart';
class UserPlaylists extends HookConsumerWidget { class UserPlaylists extends HookConsumerWidget {
const UserPlaylists({super.key}); const UserPlaylists({super.key});
@ -110,7 +111,8 @@ class UserPlaylists extends HookConsumerWidget {
icon: const Icon(SpotubeIcons.magic), icon: const Icon(SpotubeIcons.magic),
label: Text(context.l10n.generate_playlist), label: Text(context.l10n.generate_playlist),
onPressed: () { onPressed: () {
GoRouter.of(context).push("/library/generate"); ServiceUtils.pushNamed(
context, PlaylistGeneratorPage.name);
}, },
), ),
const Gap(10), const Gap(10),

View File

@ -1,6 +1,20 @@
import 'package:flutter/rendering.dart'; import 'package:flutter/rendering.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
enum Breakpoint {
xs,
sm,
md,
lg,
xl,
xxl;
bool operator <=(Breakpoint other) => index <= other.index;
bool operator <(Breakpoint other) => index < other.index;
bool operator >(Breakpoint other) => index > other.index;
bool operator >=(Breakpoint other) => index >= other.index;
}
// ignore: constant_identifier_names // ignore: constant_identifier_names
const Breakpoints = ( const Breakpoints = (
xs: 480.0, xs: 480.0,
@ -22,6 +36,15 @@ extension SliverBreakpoints on SliverConstraints {
crossAxisExtent > Breakpoints.lg && crossAxisExtent <= Breakpoints.xl; crossAxisExtent > Breakpoints.lg && crossAxisExtent <= Breakpoints.xl;
bool get is2Xl => crossAxisExtent > Breakpoints.xl; bool get is2Xl => crossAxisExtent > Breakpoints.xl;
Breakpoint get breakpoint {
if (isXs) return Breakpoint.xs;
if (isSm) return Breakpoint.sm;
if (isMd) return Breakpoint.md;
if (isLg) return Breakpoint.lg;
if (isXl) return Breakpoint.xl;
return Breakpoint.xxl;
}
bool get smAndUp => isSm || isMd || isLg || isXl || is2Xl; bool get smAndUp => isSm || isMd || isLg || isXl || is2Xl;
bool get mdAndUp => isMd || isLg || isXl || is2Xl; bool get mdAndUp => isMd || isLg || isXl || is2Xl;
bool get lgAndUp => isLg || isXl || is2Xl; bool get lgAndUp => isLg || isXl || is2Xl;
@ -45,6 +68,15 @@ extension ContainerBreakpoints on BoxConstraints {
biggest.width > Breakpoints.lg && biggest.width <= Breakpoints.xl; biggest.width > Breakpoints.lg && biggest.width <= Breakpoints.xl;
bool get is2Xl => biggest.width > Breakpoints.xl; bool get is2Xl => biggest.width > Breakpoints.xl;
Breakpoint get breakpoint {
if (isXs) return Breakpoint.xs;
if (isSm) return Breakpoint.sm;
if (isMd) return Breakpoint.md;
if (isLg) return Breakpoint.lg;
if (isXl) return Breakpoint.xl;
return Breakpoint.xxl;
}
bool get smAndUp => isSm || isMd || isLg || isXl || is2Xl; bool get smAndUp => isSm || isMd || isLg || isXl || is2Xl;
bool get mdAndUp => isMd || isLg || isXl || is2Xl; bool get mdAndUp => isMd || isLg || isXl || is2Xl;
bool get lgAndUp => isLg || isXl || is2Xl; bool get lgAndUp => isLg || isXl || is2Xl;