mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-12-06 07:29:42 +00:00
feat(queue): add multi-select and bulk actions to queue
- Add selection mode to PlayerQueue with long-press to select - Disable inner navigation (title/artist) when selecting via TrackTile - Show checkboxes only in selection mode - Add selection AppBar behavior and bottom-sheet menu with: Select all, Add to playlist, Remove selected, Cancel - Reuse existing PlaylistAddTrackDialog for bulk add - Hide drag handle while in selection mode Closes: # (implement multi-select queue feature)
This commit is contained in:
parent
a8f70f201e
commit
1ca39f4e44
22
.vscode/c_cpp_properties.json
vendored
22
.vscode/c_cpp_properties.json
vendored
@ -1,22 +0,0 @@
|
||||
{
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Win32",
|
||||
"includePath": [
|
||||
"${workspaceFolder}/**"
|
||||
],
|
||||
"defines": [
|
||||
"_DEBUG",
|
||||
"UNICODE",
|
||||
"_UNICODE"
|
||||
],
|
||||
"windowsSdkVersion": "10.0.19041.0",
|
||||
"compilerPath": "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.29.30133\\bin\\Hostx64\\x64\\cl.exe",
|
||||
"cStandard": "c17",
|
||||
"cppStandard": "c++17",
|
||||
"intelliSenseMode": "windows-msvc-x64",
|
||||
"configurationProvider": "ms-vscode.makefile-tools"
|
||||
}
|
||||
],
|
||||
"version": 4
|
||||
}
|
||||
58
.vscode/launch.json
vendored
58
.vscode/launch.json
vendored
@ -1,58 +0,0 @@
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "spotube",
|
||||
"type": "dart",
|
||||
"request": "launch",
|
||||
"program": "lib/main.dart",
|
||||
},
|
||||
{
|
||||
"name": "spotube (mobile)",
|
||||
"type": "dart",
|
||||
"request": "launch",
|
||||
"program": "lib/main.dart",
|
||||
"args": [
|
||||
"--flavor",
|
||||
"dev"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "spotube (mobile-skia)",
|
||||
"type": "dart",
|
||||
"request": "launch",
|
||||
"program": "lib/main.dart",
|
||||
"args": [
|
||||
"--flavor",
|
||||
"dev",
|
||||
"--no-enable-impeller"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "spotube (profile)",
|
||||
"type": "dart",
|
||||
"request": "launch",
|
||||
"program": "lib/main.dart",
|
||||
"flutterMode": "profile"
|
||||
},
|
||||
{
|
||||
"name": "spotube (release)",
|
||||
"type": "dart",
|
||||
"request": "launch",
|
||||
"program": "lib/main.dart",
|
||||
"flutterMode": "release"
|
||||
},
|
||||
{
|
||||
"name": "spotube (mobile) (release)",
|
||||
"type": "dart",
|
||||
"request": "launch",
|
||||
"program": "lib/main.dart",
|
||||
"flutterMode": "release",
|
||||
"args": [
|
||||
"--flavor",
|
||||
"dev"
|
||||
]
|
||||
}
|
||||
],
|
||||
"compounds": []
|
||||
}
|
||||
34
.vscode/settings.json
vendored
34
.vscode/settings.json
vendored
@ -1,34 +0,0 @@
|
||||
{
|
||||
"cmake.configureOnOpen": false,
|
||||
"cSpell.words": [
|
||||
"acousticness",
|
||||
"ambiguate",
|
||||
"Amoled",
|
||||
"Buildless",
|
||||
"configurators",
|
||||
"danceability",
|
||||
"fuzzywuzzy",
|
||||
"gapless",
|
||||
"instrumentalness",
|
||||
"isrc",
|
||||
"Mpris",
|
||||
"RGBO",
|
||||
"riverpod",
|
||||
"Scrobblenaut",
|
||||
"shadcn",
|
||||
"skeletonizer",
|
||||
"songlink",
|
||||
"speechiness",
|
||||
"Spotube",
|
||||
"titlebar",
|
||||
"winget"
|
||||
],
|
||||
"editor.formatOnSave": true,
|
||||
"explorer.fileNesting.enabled": true,
|
||||
"explorer.fileNesting.patterns": {
|
||||
"pubspec.yaml": "pubspec.lock,analysis_options.yaml,.packages,.flutter-plugins,.flutter-plugins-dependencies,flutter_launcher_icons*.yaml,flutter_native_splash*.yaml",
|
||||
"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.flutterSdkPath": ".fvm/versions/3.35.2"
|
||||
}
|
||||
170
.vscode/snippets.code-snippets
vendored
170
.vscode/snippets.code-snippets
vendored
@ -1,170 +0,0 @@
|
||||
{
|
||||
"PaginatedState": {
|
||||
"scope": "dart",
|
||||
"prefix": "paginatedState",
|
||||
"description": "Generate a PaginatedState",
|
||||
"body": [
|
||||
"class ${1:Model}State extends PaginatedState<${2:Model}> {",
|
||||
" ${1:Model}State({",
|
||||
" required super.items,",
|
||||
" required super.offset,",
|
||||
" required super.limit,",
|
||||
" required super.hasMore,",
|
||||
" });",
|
||||
" ",
|
||||
" @override",
|
||||
" ${1:Model}State copyWith({",
|
||||
" List<${2:Model}>? items,",
|
||||
" int? offset,",
|
||||
" int? limit,",
|
||||
" bool? hasMore,",
|
||||
" }) {",
|
||||
" return ${1:Model}State(",
|
||||
" items: items ?? this.items,",
|
||||
" offset: offset ?? this.offset,",
|
||||
" limit: limit ?? this.limit,",
|
||||
" hasMore: hasMore ?? this.hasMore,",
|
||||
" );",
|
||||
" }",
|
||||
"}"
|
||||
]
|
||||
},
|
||||
"PaginatedAsyncNotifier": {
|
||||
"scope": "dart",
|
||||
"prefix": "paginatedAsyncNotifier",
|
||||
"description": "Generate a PaginatedAsyncNotifier",
|
||||
"body": [
|
||||
"class ${1:NotifierName}Notifier extends PaginatedAsyncNotifier<${3:Item}, ${2:Model}State> {",
|
||||
" ${1:NotifierName}Notifier() : super();",
|
||||
" ",
|
||||
" @override",
|
||||
" fetch(int offset, int limit) async {",
|
||||
" throw UnimplementedError();",
|
||||
" }",
|
||||
" ",
|
||||
" @override",
|
||||
" build() async {",
|
||||
" throw UnimplementedError();",
|
||||
" }",
|
||||
"}"
|
||||
]
|
||||
},
|
||||
"PaginaitedNotifierWithState": {
|
||||
"scope": "dart",
|
||||
"prefix": "paginatedNotifierWithState",
|
||||
"description": "Generate a PaginatedNotifier with PaginatedState",
|
||||
"body": [
|
||||
"class $1State extends PaginatedState<$2> {",
|
||||
" $1State({",
|
||||
" required super.items,",
|
||||
" required super.offset,",
|
||||
" required super.limit,",
|
||||
" required super.hasMore,",
|
||||
" });",
|
||||
" ",
|
||||
" @override",
|
||||
" $1State copyWith({",
|
||||
" List<$2>? items,",
|
||||
" int? offset,",
|
||||
" int? limit,",
|
||||
" bool? hasMore,",
|
||||
" }) {",
|
||||
" return $1State(",
|
||||
" items: items ?? this.items,",
|
||||
" offset: offset ?? this.offset,",
|
||||
" limit: limit ?? this.limit,",
|
||||
" hasMore: hasMore ?? this.hasMore,",
|
||||
" );",
|
||||
" }",
|
||||
"}",
|
||||
" ",
|
||||
"class $1Notifier",
|
||||
" extends PaginatedAsyncNotifier<$2, $1State> {",
|
||||
" $1Notifier() : super();",
|
||||
" ",
|
||||
" @override",
|
||||
" fetch(int offset, int limit) async {",
|
||||
" throw UnimplementedError();",
|
||||
" }",
|
||||
" ",
|
||||
" @override",
|
||||
" build() async {",
|
||||
" throw UnimplementedError();",
|
||||
" }",
|
||||
"}",
|
||||
" ",
|
||||
"final ${1/(.*)/${1:/camelcase}/}Provider = AsyncNotifierProvider<$1Notifier, $1State>(",
|
||||
" ()=> $1Notifier(),",
|
||||
");"
|
||||
]
|
||||
},
|
||||
"FamilyPaginatedAsyncNotifier": {
|
||||
"scope": "dart",
|
||||
"prefix": "familyPaginatedAsyncNotifier",
|
||||
"description": "Generate a FamilyPaginatedAsyncNotifier",
|
||||
"body": [
|
||||
"class ${1:NotifierName}Notifier extends FamilyPaginatedAsyncNotifier<${3:Item}, ${2:Model}State, {$4:Arg}> {",
|
||||
" ${1:NotifierName}Notifier() : super();",
|
||||
" ",
|
||||
" @override",
|
||||
" fetch(arg, offset, limit) async {",
|
||||
" throw UnimplementedError();",
|
||||
" }",
|
||||
" ",
|
||||
" @override",
|
||||
" build(arg) async {",
|
||||
" throw UnimplementedError();",
|
||||
" }",
|
||||
"}"
|
||||
]
|
||||
},
|
||||
"FamilyPaginaitedNotifierWithState": {
|
||||
"scope": "dart",
|
||||
"prefix": "familyPaginatedNotifierWithState",
|
||||
"description": "Generate a FamilyPaginatedAsyncNotifier with PaginatedState",
|
||||
"body": [
|
||||
"class $1State extends PaginatedState<$2> {",
|
||||
" $1State({",
|
||||
" required super.items,",
|
||||
" required super.offset,",
|
||||
" required super.limit,",
|
||||
" required super.hasMore,",
|
||||
" });",
|
||||
" ",
|
||||
" @override",
|
||||
" $1State copyWith({",
|
||||
" List<$2>? items,",
|
||||
" int? offset,",
|
||||
" int? limit,",
|
||||
" bool? hasMore,",
|
||||
" }) {",
|
||||
" return $1State(",
|
||||
" items: items ?? this.items,",
|
||||
" offset: offset ?? this.offset,",
|
||||
" limit: limit ?? this.limit,",
|
||||
" hasMore: hasMore ?? this.hasMore,",
|
||||
" );",
|
||||
" }",
|
||||
"}",
|
||||
" ",
|
||||
"class $1Notifier",
|
||||
" extends FamilyPaginatedAsyncNotifier<$2, $1State, $3> {",
|
||||
" $1Notifier() : super();",
|
||||
" ",
|
||||
" @override",
|
||||
" fetch(arg, offset, limit) async {",
|
||||
" throw UnimplementedError();",
|
||||
" }",
|
||||
" ",
|
||||
" @override",
|
||||
" build(arg) async {",
|
||||
" throw UnimplementedError();",
|
||||
" }",
|
||||
"}",
|
||||
" ",
|
||||
"final ${1/(.*)/${1:/camelcase}/}Provider = AsyncNotifierProviderFamily<$1Notifier, $1State, $3>(",
|
||||
" ()=> $1Notifier(),",
|
||||
");"
|
||||
]
|
||||
},
|
||||
}
|
||||
4
.vscode/tasks.json
vendored
4
.vscode/tasks.json
vendored
@ -1,4 +0,0 @@
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"tasks": []
|
||||
}
|
||||
@ -69,6 +69,12 @@ android {
|
||||
}
|
||||
|
||||
signingConfigs {
|
||||
debug {
|
||||
storeFile file("${System.getenv("HOME")}/.android/debug.keystore")
|
||||
storePassword "android"
|
||||
keyAlias "androiddebugkey"
|
||||
keyPassword "android"
|
||||
}
|
||||
release {
|
||||
keyAlias keystoreProperties['keyAlias']
|
||||
keyPassword keystoreProperties['keyPassword']
|
||||
@ -82,7 +88,7 @@ android {
|
||||
signingConfig signingConfigs.release
|
||||
}
|
||||
debug {
|
||||
signingConfig signingConfigs.release
|
||||
signingConfig signingConfigs.debug
|
||||
}
|
||||
}
|
||||
|
||||
@ -94,14 +100,14 @@ android {
|
||||
resValue "string", "app_name_en", "Spotube Nightly"
|
||||
applicationIdSuffix ".nightly"
|
||||
versionNameSuffix "-nightly"
|
||||
signingConfig signingConfigs.release
|
||||
signingConfig signingConfigs.debug
|
||||
}
|
||||
dev {
|
||||
dimension "default"
|
||||
resValue "string", "app_name_en", "Spotube Dev"
|
||||
applicationIdSuffix ".dev"
|
||||
versionNameSuffix "-dev"
|
||||
signingConfig signingConfigs.release
|
||||
signingConfig signingConfigs.debug
|
||||
}
|
||||
stable {
|
||||
dimension "default"
|
||||
|
||||
@ -1,3 +1,5 @@
|
||||
// dart format width=80
|
||||
|
||||
/// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
/// *****************************************************
|
||||
/// FlutterGen
|
||||
@ -5,7 +7,7 @@
|
||||
|
||||
// coverage:ignore-file
|
||||
// ignore_for_file: type=lint
|
||||
// ignore_for_file: directives_ordering,unnecessary_import,implicit_dynamic_list_literal,deprecated_member_use
|
||||
// ignore_for_file: deprecated_member_use,directives_ordering,implicit_dynamic_list_literal,unnecessary_import
|
||||
|
||||
import 'package:flutter/widgets.dart';
|
||||
|
||||
@ -84,7 +86,7 @@ class $AssetsImagesLogosGen {
|
||||
}
|
||||
|
||||
class Assets {
|
||||
Assets._();
|
||||
const Assets._();
|
||||
|
||||
static const String license = 'LICENSE';
|
||||
static const $AssetsBrandingGen branding = $AssetsBrandingGen();
|
||||
@ -99,12 +101,14 @@ class AssetGenImage {
|
||||
this._assetName, {
|
||||
this.size,
|
||||
this.flavors = const {},
|
||||
this.animation,
|
||||
});
|
||||
|
||||
final String _assetName;
|
||||
|
||||
final Size? size;
|
||||
final Set<String> flavors;
|
||||
final AssetGenImageAnimation? animation;
|
||||
|
||||
Image image({
|
||||
Key? key,
|
||||
@ -127,7 +131,7 @@ class AssetGenImage {
|
||||
bool gaplessPlayback = true,
|
||||
bool isAntiAlias = false,
|
||||
String? package,
|
||||
FilterQuality filterQuality = FilterQuality.low,
|
||||
FilterQuality filterQuality = FilterQuality.medium,
|
||||
int? cacheWidth,
|
||||
int? cacheHeight,
|
||||
}) {
|
||||
@ -174,3 +178,15 @@ class AssetGenImage {
|
||||
|
||||
String get keyName => _assetName;
|
||||
}
|
||||
|
||||
class AssetGenImageAnimation {
|
||||
const AssetGenImageAnimation({
|
||||
required this.isAnimation,
|
||||
required this.duration,
|
||||
required this.frames,
|
||||
});
|
||||
|
||||
final bool isAnimation;
|
||||
final Duration duration;
|
||||
final int frames;
|
||||
}
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
// dart format width=80
|
||||
/// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
/// *****************************************************
|
||||
/// FlutterGen
|
||||
@ -5,7 +6,7 @@
|
||||
|
||||
// coverage:ignore-file
|
||||
// ignore_for_file: type=lint
|
||||
// ignore_for_file: directives_ordering,unnecessary_import,implicit_dynamic_list_literal,deprecated_member_use
|
||||
// ignore_for_file: deprecated_member_use,directives_ordering,implicit_dynamic_list_literal,unnecessary_import
|
||||
|
||||
class FontFamily {
|
||||
FontFamily._();
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
// dart format width=80
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
// **************************************************************************
|
||||
@ -59,10 +60,7 @@ import 'package:spotube/pages/track/track.dart' as _i35;
|
||||
/// [_i1.AboutSpotubePage]
|
||||
class AboutSpotubeRoute extends _i41.PageRouteInfo<void> {
|
||||
const AboutSpotubeRoute({List<_i41.PageRouteInfo>? children})
|
||||
: super(
|
||||
AboutSpotubeRoute.name,
|
||||
initialChildren: children,
|
||||
);
|
||||
: super(AboutSpotubeRoute.name, initialChildren: children);
|
||||
|
||||
static const String name = 'AboutSpotubeRoute';
|
||||
|
||||
@ -83,15 +81,11 @@ class AlbumRoute extends _i41.PageRouteInfo<AlbumRouteArgs> {
|
||||
required _i43.SpotubeSimpleAlbumObject album,
|
||||
List<_i41.PageRouteInfo>? children,
|
||||
}) : super(
|
||||
AlbumRoute.name,
|
||||
args: AlbumRouteArgs(
|
||||
key: key,
|
||||
id: id,
|
||||
album: album,
|
||||
),
|
||||
rawPathParams: {'id': id},
|
||||
initialChildren: children,
|
||||
);
|
||||
AlbumRoute.name,
|
||||
args: AlbumRouteArgs(key: key, id: id, album: album),
|
||||
rawPathParams: {'id': id},
|
||||
initialChildren: children,
|
||||
);
|
||||
|
||||
static const String name = 'AlbumRoute';
|
||||
|
||||
@ -99,21 +93,13 @@ class AlbumRoute extends _i41.PageRouteInfo<AlbumRouteArgs> {
|
||||
name,
|
||||
builder: (data) {
|
||||
final args = data.argsAs<AlbumRouteArgs>();
|
||||
return _i2.AlbumPage(
|
||||
key: args.key,
|
||||
id: args.id,
|
||||
album: args.album,
|
||||
);
|
||||
return _i2.AlbumPage(key: args.key, id: args.id, album: args.album);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
class AlbumRouteArgs {
|
||||
const AlbumRouteArgs({
|
||||
this.key,
|
||||
required this.id,
|
||||
required this.album,
|
||||
});
|
||||
const AlbumRouteArgs({this.key, required this.id, required this.album});
|
||||
|
||||
final _i42.Key? key;
|
||||
|
||||
@ -135,14 +121,11 @@ class ArtistRoute extends _i41.PageRouteInfo<ArtistRouteArgs> {
|
||||
_i42.Key? key,
|
||||
List<_i41.PageRouteInfo>? children,
|
||||
}) : super(
|
||||
ArtistRoute.name,
|
||||
args: ArtistRouteArgs(
|
||||
artistId: artistId,
|
||||
key: key,
|
||||
),
|
||||
rawPathParams: {'id': artistId},
|
||||
initialChildren: children,
|
||||
);
|
||||
ArtistRoute.name,
|
||||
args: ArtistRouteArgs(artistId: artistId, key: key),
|
||||
rawPathParams: {'id': artistId},
|
||||
initialChildren: children,
|
||||
);
|
||||
|
||||
static const String name = 'ArtistRoute';
|
||||
|
||||
@ -151,20 +134,15 @@ class ArtistRoute extends _i41.PageRouteInfo<ArtistRouteArgs> {
|
||||
builder: (data) {
|
||||
final pathParams = data.inheritedPathParams;
|
||||
final args = data.argsAs<ArtistRouteArgs>(
|
||||
orElse: () => ArtistRouteArgs(artistId: pathParams.getString('id')));
|
||||
return _i3.ArtistPage(
|
||||
args.artistId,
|
||||
key: args.key,
|
||||
orElse: () => ArtistRouteArgs(artistId: pathParams.getString('id')),
|
||||
);
|
||||
return _i3.ArtistPage(args.artistId, key: args.key);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
class ArtistRouteArgs {
|
||||
const ArtistRouteArgs({
|
||||
required this.artistId,
|
||||
this.key,
|
||||
});
|
||||
const ArtistRouteArgs({required this.artistId, this.key});
|
||||
|
||||
final String artistId;
|
||||
|
||||
@ -180,10 +158,7 @@ class ArtistRouteArgs {
|
||||
/// [_i4.BlackListPage]
|
||||
class BlackListRoute extends _i41.PageRouteInfo<void> {
|
||||
const BlackListRoute({List<_i41.PageRouteInfo>? children})
|
||||
: super(
|
||||
BlackListRoute.name,
|
||||
initialChildren: children,
|
||||
);
|
||||
: super(BlackListRoute.name, initialChildren: children);
|
||||
|
||||
static const String name = 'BlackListRoute';
|
||||
|
||||
@ -199,10 +174,7 @@ class BlackListRoute extends _i41.PageRouteInfo<void> {
|
||||
/// [_i5.ConnectControlPage]
|
||||
class ConnectControlRoute extends _i41.PageRouteInfo<void> {
|
||||
const ConnectControlRoute({List<_i41.PageRouteInfo>? children})
|
||||
: super(
|
||||
ConnectControlRoute.name,
|
||||
initialChildren: children,
|
||||
);
|
||||
: super(ConnectControlRoute.name, initialChildren: children);
|
||||
|
||||
static const String name = 'ConnectControlRoute';
|
||||
|
||||
@ -218,10 +190,7 @@ class ConnectControlRoute extends _i41.PageRouteInfo<void> {
|
||||
/// [_i6.ConnectPage]
|
||||
class ConnectRoute extends _i41.PageRouteInfo<void> {
|
||||
const ConnectRoute({List<_i41.PageRouteInfo>? children})
|
||||
: super(
|
||||
ConnectRoute.name,
|
||||
initialChildren: children,
|
||||
);
|
||||
: super(ConnectRoute.name, initialChildren: children);
|
||||
|
||||
static const String name = 'ConnectRoute';
|
||||
|
||||
@ -237,10 +206,7 @@ class ConnectRoute extends _i41.PageRouteInfo<void> {
|
||||
/// [_i7.GettingStartedPage]
|
||||
class GettingStartedRoute extends _i41.PageRouteInfo<void> {
|
||||
const GettingStartedRoute({List<_i41.PageRouteInfo>? children})
|
||||
: super(
|
||||
GettingStartedRoute.name,
|
||||
initialChildren: children,
|
||||
);
|
||||
: super(GettingStartedRoute.name, initialChildren: children);
|
||||
|
||||
static const String name = 'GettingStartedRoute';
|
||||
|
||||
@ -262,15 +228,15 @@ class HomeBrowseSectionItemsRoute
|
||||
required _i43.SpotubeBrowseSectionObject<Object> section,
|
||||
List<_i41.PageRouteInfo>? children,
|
||||
}) : super(
|
||||
HomeBrowseSectionItemsRoute.name,
|
||||
args: HomeBrowseSectionItemsRouteArgs(
|
||||
key: key,
|
||||
sectionId: sectionId,
|
||||
section: section,
|
||||
),
|
||||
rawPathParams: {'sectionId': sectionId},
|
||||
initialChildren: children,
|
||||
);
|
||||
HomeBrowseSectionItemsRoute.name,
|
||||
args: HomeBrowseSectionItemsRouteArgs(
|
||||
key: key,
|
||||
sectionId: sectionId,
|
||||
section: section,
|
||||
),
|
||||
rawPathParams: {'sectionId': sectionId},
|
||||
initialChildren: children,
|
||||
);
|
||||
|
||||
static const String name = 'HomeBrowseSectionItemsRoute';
|
||||
|
||||
@ -310,10 +276,7 @@ class HomeBrowseSectionItemsRouteArgs {
|
||||
/// [_i9.HomePage]
|
||||
class HomeRoute extends _i41.PageRouteInfo<void> {
|
||||
const HomeRoute({List<_i41.PageRouteInfo>? children})
|
||||
: super(
|
||||
HomeRoute.name,
|
||||
initialChildren: children,
|
||||
);
|
||||
: super(HomeRoute.name, initialChildren: children);
|
||||
|
||||
static const String name = 'HomeRoute';
|
||||
|
||||
@ -329,10 +292,7 @@ class HomeRoute extends _i41.PageRouteInfo<void> {
|
||||
/// [_i10.LastFMLoginPage]
|
||||
class LastFMLoginRoute extends _i41.PageRouteInfo<void> {
|
||||
const LastFMLoginRoute({List<_i41.PageRouteInfo>? children})
|
||||
: super(
|
||||
LastFMLoginRoute.name,
|
||||
initialChildren: children,
|
||||
);
|
||||
: super(LastFMLoginRoute.name, initialChildren: children);
|
||||
|
||||
static const String name = 'LastFMLoginRoute';
|
||||
|
||||
@ -348,10 +308,7 @@ class LastFMLoginRoute extends _i41.PageRouteInfo<void> {
|
||||
/// [_i11.LibraryPage]
|
||||
class LibraryRoute extends _i41.PageRouteInfo<void> {
|
||||
const LibraryRoute({List<_i41.PageRouteInfo>? children})
|
||||
: super(
|
||||
LibraryRoute.name,
|
||||
initialChildren: children,
|
||||
);
|
||||
: super(LibraryRoute.name, initialChildren: children);
|
||||
|
||||
static const String name = 'LibraryRoute';
|
||||
|
||||
@ -371,13 +328,10 @@ class LikedPlaylistRoute extends _i41.PageRouteInfo<LikedPlaylistRouteArgs> {
|
||||
required _i43.SpotubeSimplePlaylistObject playlist,
|
||||
List<_i41.PageRouteInfo>? children,
|
||||
}) : super(
|
||||
LikedPlaylistRoute.name,
|
||||
args: LikedPlaylistRouteArgs(
|
||||
key: key,
|
||||
playlist: playlist,
|
||||
),
|
||||
initialChildren: children,
|
||||
);
|
||||
LikedPlaylistRoute.name,
|
||||
args: LikedPlaylistRouteArgs(key: key, playlist: playlist),
|
||||
initialChildren: children,
|
||||
);
|
||||
|
||||
static const String name = 'LikedPlaylistRoute';
|
||||
|
||||
@ -385,19 +339,13 @@ class LikedPlaylistRoute extends _i41.PageRouteInfo<LikedPlaylistRouteArgs> {
|
||||
name,
|
||||
builder: (data) {
|
||||
final args = data.argsAs<LikedPlaylistRouteArgs>();
|
||||
return _i12.LikedPlaylistPage(
|
||||
key: args.key,
|
||||
playlist: args.playlist,
|
||||
);
|
||||
return _i12.LikedPlaylistPage(key: args.key, playlist: args.playlist);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
class LikedPlaylistRouteArgs {
|
||||
const LikedPlaylistRouteArgs({
|
||||
this.key,
|
||||
required this.playlist,
|
||||
});
|
||||
const LikedPlaylistRouteArgs({this.key, required this.playlist});
|
||||
|
||||
final _i42.Key? key;
|
||||
|
||||
@ -419,15 +367,15 @@ class LocalLibraryRoute extends _i41.PageRouteInfo<LocalLibraryRouteArgs> {
|
||||
bool isCache = false,
|
||||
List<_i41.PageRouteInfo>? children,
|
||||
}) : super(
|
||||
LocalLibraryRoute.name,
|
||||
args: LocalLibraryRouteArgs(
|
||||
location: location,
|
||||
key: key,
|
||||
isDownloads: isDownloads,
|
||||
isCache: isCache,
|
||||
),
|
||||
initialChildren: children,
|
||||
);
|
||||
LocalLibraryRoute.name,
|
||||
args: LocalLibraryRouteArgs(
|
||||
location: location,
|
||||
key: key,
|
||||
isDownloads: isDownloads,
|
||||
isCache: isCache,
|
||||
),
|
||||
initialChildren: children,
|
||||
);
|
||||
|
||||
static const String name = 'LocalLibraryRoute';
|
||||
|
||||
@ -471,10 +419,7 @@ class LocalLibraryRouteArgs {
|
||||
/// [_i14.LogsPage]
|
||||
class LogsRoute extends _i41.PageRouteInfo<void> {
|
||||
const LogsRoute({List<_i41.PageRouteInfo>? children})
|
||||
: super(
|
||||
LogsRoute.name,
|
||||
initialChildren: children,
|
||||
);
|
||||
: super(LogsRoute.name, initialChildren: children);
|
||||
|
||||
static const String name = 'LogsRoute';
|
||||
|
||||
@ -490,10 +435,7 @@ class LogsRoute extends _i41.PageRouteInfo<void> {
|
||||
/// [_i15.LyricsPage]
|
||||
class LyricsRoute extends _i41.PageRouteInfo<void> {
|
||||
const LyricsRoute({List<_i41.PageRouteInfo>? children})
|
||||
: super(
|
||||
LyricsRoute.name,
|
||||
initialChildren: children,
|
||||
);
|
||||
: super(LyricsRoute.name, initialChildren: children);
|
||||
|
||||
static const String name = 'LyricsRoute';
|
||||
|
||||
@ -513,13 +455,10 @@ class MiniLyricsRoute extends _i41.PageRouteInfo<MiniLyricsRouteArgs> {
|
||||
required _i44.Size prevSize,
|
||||
List<_i41.PageRouteInfo>? children,
|
||||
}) : super(
|
||||
MiniLyricsRoute.name,
|
||||
args: MiniLyricsRouteArgs(
|
||||
key: key,
|
||||
prevSize: prevSize,
|
||||
),
|
||||
initialChildren: children,
|
||||
);
|
||||
MiniLyricsRoute.name,
|
||||
args: MiniLyricsRouteArgs(key: key, prevSize: prevSize),
|
||||
initialChildren: children,
|
||||
);
|
||||
|
||||
static const String name = 'MiniLyricsRoute';
|
||||
|
||||
@ -527,19 +466,13 @@ class MiniLyricsRoute extends _i41.PageRouteInfo<MiniLyricsRouteArgs> {
|
||||
name,
|
||||
builder: (data) {
|
||||
final args = data.argsAs<MiniLyricsRouteArgs>();
|
||||
return _i16.MiniLyricsPage(
|
||||
key: args.key,
|
||||
prevSize: args.prevSize,
|
||||
);
|
||||
return _i16.MiniLyricsPage(key: args.key, prevSize: args.prevSize);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
class MiniLyricsRouteArgs {
|
||||
const MiniLyricsRouteArgs({
|
||||
this.key,
|
||||
required this.prevSize,
|
||||
});
|
||||
const MiniLyricsRouteArgs({this.key, required this.prevSize});
|
||||
|
||||
final _i44.Key? key;
|
||||
|
||||
@ -555,10 +488,7 @@ class MiniLyricsRouteArgs {
|
||||
/// [_i17.PlayerLyricsPage]
|
||||
class PlayerLyricsRoute extends _i41.PageRouteInfo<void> {
|
||||
const PlayerLyricsRoute({List<_i41.PageRouteInfo>? children})
|
||||
: super(
|
||||
PlayerLyricsRoute.name,
|
||||
initialChildren: children,
|
||||
);
|
||||
: super(PlayerLyricsRoute.name, initialChildren: children);
|
||||
|
||||
static const String name = 'PlayerLyricsRoute';
|
||||
|
||||
@ -574,10 +504,7 @@ class PlayerLyricsRoute extends _i41.PageRouteInfo<void> {
|
||||
/// [_i18.PlayerQueuePage]
|
||||
class PlayerQueueRoute extends _i41.PageRouteInfo<void> {
|
||||
const PlayerQueueRoute({List<_i41.PageRouteInfo>? children})
|
||||
: super(
|
||||
PlayerQueueRoute.name,
|
||||
initialChildren: children,
|
||||
);
|
||||
: super(PlayerQueueRoute.name, initialChildren: children);
|
||||
|
||||
static const String name = 'PlayerQueueRoute';
|
||||
|
||||
@ -593,10 +520,7 @@ class PlayerQueueRoute extends _i41.PageRouteInfo<void> {
|
||||
/// [_i19.PlayerTrackSourcesPage]
|
||||
class PlayerTrackSourcesRoute extends _i41.PageRouteInfo<void> {
|
||||
const PlayerTrackSourcesRoute({List<_i41.PageRouteInfo>? children})
|
||||
: super(
|
||||
PlayerTrackSourcesRoute.name,
|
||||
initialChildren: children,
|
||||
);
|
||||
: super(PlayerTrackSourcesRoute.name, initialChildren: children);
|
||||
|
||||
static const String name = 'PlayerTrackSourcesRoute';
|
||||
|
||||
@ -617,15 +541,11 @@ class PlaylistRoute extends _i41.PageRouteInfo<PlaylistRouteArgs> {
|
||||
required _i43.SpotubeSimplePlaylistObject playlist,
|
||||
List<_i41.PageRouteInfo>? children,
|
||||
}) : super(
|
||||
PlaylistRoute.name,
|
||||
args: PlaylistRouteArgs(
|
||||
key: key,
|
||||
id: id,
|
||||
playlist: playlist,
|
||||
),
|
||||
rawPathParams: {'id': id},
|
||||
initialChildren: children,
|
||||
);
|
||||
PlaylistRoute.name,
|
||||
args: PlaylistRouteArgs(key: key, id: id, playlist: playlist),
|
||||
rawPathParams: {'id': id},
|
||||
initialChildren: children,
|
||||
);
|
||||
|
||||
static const String name = 'PlaylistRoute';
|
||||
|
||||
@ -643,11 +563,7 @@ class PlaylistRoute extends _i41.PageRouteInfo<PlaylistRouteArgs> {
|
||||
}
|
||||
|
||||
class PlaylistRouteArgs {
|
||||
const PlaylistRouteArgs({
|
||||
this.key,
|
||||
required this.id,
|
||||
required this.playlist,
|
||||
});
|
||||
const PlaylistRouteArgs({this.key, required this.id, required this.playlist});
|
||||
|
||||
final _i42.Key? key;
|
||||
|
||||
@ -665,10 +581,7 @@ class PlaylistRouteArgs {
|
||||
/// [_i21.ProfilePage]
|
||||
class ProfileRoute extends _i41.PageRouteInfo<void> {
|
||||
const ProfileRoute({List<_i41.PageRouteInfo>? children})
|
||||
: super(
|
||||
ProfileRoute.name,
|
||||
initialChildren: children,
|
||||
);
|
||||
: super(ProfileRoute.name, initialChildren: children);
|
||||
|
||||
static const String name = 'ProfileRoute';
|
||||
|
||||
@ -684,10 +597,7 @@ class ProfileRoute extends _i41.PageRouteInfo<void> {
|
||||
/// [_i22.RootAppPage]
|
||||
class RootAppRoute extends _i41.PageRouteInfo<void> {
|
||||
const RootAppRoute({List<_i41.PageRouteInfo>? children})
|
||||
: super(
|
||||
RootAppRoute.name,
|
||||
initialChildren: children,
|
||||
);
|
||||
: super(RootAppRoute.name, initialChildren: children);
|
||||
|
||||
static const String name = 'RootAppRoute';
|
||||
|
||||
@ -703,10 +613,7 @@ class RootAppRoute extends _i41.PageRouteInfo<void> {
|
||||
/// [_i23.SearchPage]
|
||||
class SearchRoute extends _i41.PageRouteInfo<void> {
|
||||
const SearchRoute({List<_i41.PageRouteInfo>? children})
|
||||
: super(
|
||||
SearchRoute.name,
|
||||
initialChildren: children,
|
||||
);
|
||||
: super(SearchRoute.name, initialChildren: children);
|
||||
|
||||
static const String name = 'SearchRoute';
|
||||
|
||||
@ -728,14 +635,14 @@ class SettingsMetadataProviderFormRoute
|
||||
required List<_i43.MetadataFormFieldObject> fields,
|
||||
List<_i41.PageRouteInfo>? children,
|
||||
}) : super(
|
||||
SettingsMetadataProviderFormRoute.name,
|
||||
args: SettingsMetadataProviderFormRouteArgs(
|
||||
key: key,
|
||||
title: title,
|
||||
fields: fields,
|
||||
),
|
||||
initialChildren: children,
|
||||
);
|
||||
SettingsMetadataProviderFormRoute.name,
|
||||
args: SettingsMetadataProviderFormRouteArgs(
|
||||
key: key,
|
||||
title: title,
|
||||
fields: fields,
|
||||
),
|
||||
initialChildren: children,
|
||||
);
|
||||
|
||||
static const String name = 'SettingsMetadataProviderFormRoute';
|
||||
|
||||
@ -775,10 +682,7 @@ class SettingsMetadataProviderFormRouteArgs {
|
||||
/// [_i25.SettingsMetadataProviderPage]
|
||||
class SettingsMetadataProviderRoute extends _i41.PageRouteInfo<void> {
|
||||
const SettingsMetadataProviderRoute({List<_i41.PageRouteInfo>? children})
|
||||
: super(
|
||||
SettingsMetadataProviderRoute.name,
|
||||
initialChildren: children,
|
||||
);
|
||||
: super(SettingsMetadataProviderRoute.name, initialChildren: children);
|
||||
|
||||
static const String name = 'SettingsMetadataProviderRoute';
|
||||
|
||||
@ -794,10 +698,7 @@ class SettingsMetadataProviderRoute extends _i41.PageRouteInfo<void> {
|
||||
/// [_i26.SettingsPage]
|
||||
class SettingsRoute extends _i41.PageRouteInfo<void> {
|
||||
const SettingsRoute({List<_i41.PageRouteInfo>? children})
|
||||
: super(
|
||||
SettingsRoute.name,
|
||||
initialChildren: children,
|
||||
);
|
||||
: super(SettingsRoute.name, initialChildren: children);
|
||||
|
||||
static const String name = 'SettingsRoute';
|
||||
|
||||
@ -813,10 +714,7 @@ class SettingsRoute extends _i41.PageRouteInfo<void> {
|
||||
/// [_i27.SettingsScrobblingPage]
|
||||
class SettingsScrobblingRoute extends _i41.PageRouteInfo<void> {
|
||||
const SettingsScrobblingRoute({List<_i41.PageRouteInfo>? children})
|
||||
: super(
|
||||
SettingsScrobblingRoute.name,
|
||||
initialChildren: children,
|
||||
);
|
||||
: super(SettingsScrobblingRoute.name, initialChildren: children);
|
||||
|
||||
static const String name = 'SettingsScrobblingRoute';
|
||||
|
||||
@ -832,10 +730,7 @@ class SettingsScrobblingRoute extends _i41.PageRouteInfo<void> {
|
||||
/// [_i28.StatsAlbumsPage]
|
||||
class StatsAlbumsRoute extends _i41.PageRouteInfo<void> {
|
||||
const StatsAlbumsRoute({List<_i41.PageRouteInfo>? children})
|
||||
: super(
|
||||
StatsAlbumsRoute.name,
|
||||
initialChildren: children,
|
||||
);
|
||||
: super(StatsAlbumsRoute.name, initialChildren: children);
|
||||
|
||||
static const String name = 'StatsAlbumsRoute';
|
||||
|
||||
@ -851,10 +746,7 @@ class StatsAlbumsRoute extends _i41.PageRouteInfo<void> {
|
||||
/// [_i29.StatsArtistsPage]
|
||||
class StatsArtistsRoute extends _i41.PageRouteInfo<void> {
|
||||
const StatsArtistsRoute({List<_i41.PageRouteInfo>? children})
|
||||
: super(
|
||||
StatsArtistsRoute.name,
|
||||
initialChildren: children,
|
||||
);
|
||||
: super(StatsArtistsRoute.name, initialChildren: children);
|
||||
|
||||
static const String name = 'StatsArtistsRoute';
|
||||
|
||||
@ -870,10 +762,7 @@ class StatsArtistsRoute extends _i41.PageRouteInfo<void> {
|
||||
/// [_i30.StatsMinutesPage]
|
||||
class StatsMinutesRoute extends _i41.PageRouteInfo<void> {
|
||||
const StatsMinutesRoute({List<_i41.PageRouteInfo>? children})
|
||||
: super(
|
||||
StatsMinutesRoute.name,
|
||||
initialChildren: children,
|
||||
);
|
||||
: super(StatsMinutesRoute.name, initialChildren: children);
|
||||
|
||||
static const String name = 'StatsMinutesRoute';
|
||||
|
||||
@ -889,10 +778,7 @@ class StatsMinutesRoute extends _i41.PageRouteInfo<void> {
|
||||
/// [_i31.StatsPage]
|
||||
class StatsRoute extends _i41.PageRouteInfo<void> {
|
||||
const StatsRoute({List<_i41.PageRouteInfo>? children})
|
||||
: super(
|
||||
StatsRoute.name,
|
||||
initialChildren: children,
|
||||
);
|
||||
: super(StatsRoute.name, initialChildren: children);
|
||||
|
||||
static const String name = 'StatsRoute';
|
||||
|
||||
@ -908,10 +794,7 @@ class StatsRoute extends _i41.PageRouteInfo<void> {
|
||||
/// [_i32.StatsPlaylistsPage]
|
||||
class StatsPlaylistsRoute extends _i41.PageRouteInfo<void> {
|
||||
const StatsPlaylistsRoute({List<_i41.PageRouteInfo>? children})
|
||||
: super(
|
||||
StatsPlaylistsRoute.name,
|
||||
initialChildren: children,
|
||||
);
|
||||
: super(StatsPlaylistsRoute.name, initialChildren: children);
|
||||
|
||||
static const String name = 'StatsPlaylistsRoute';
|
||||
|
||||
@ -927,10 +810,7 @@ class StatsPlaylistsRoute extends _i41.PageRouteInfo<void> {
|
||||
/// [_i33.StatsStreamFeesPage]
|
||||
class StatsStreamFeesRoute extends _i41.PageRouteInfo<void> {
|
||||
const StatsStreamFeesRoute({List<_i41.PageRouteInfo>? children})
|
||||
: super(
|
||||
StatsStreamFeesRoute.name,
|
||||
initialChildren: children,
|
||||
);
|
||||
: super(StatsStreamFeesRoute.name, initialChildren: children);
|
||||
|
||||
static const String name = 'StatsStreamFeesRoute';
|
||||
|
||||
@ -946,10 +826,7 @@ class StatsStreamFeesRoute extends _i41.PageRouteInfo<void> {
|
||||
/// [_i34.StatsStreamsPage]
|
||||
class StatsStreamsRoute extends _i41.PageRouteInfo<void> {
|
||||
const StatsStreamsRoute({List<_i41.PageRouteInfo>? children})
|
||||
: super(
|
||||
StatsStreamsRoute.name,
|
||||
initialChildren: children,
|
||||
);
|
||||
: super(StatsStreamsRoute.name, initialChildren: children);
|
||||
|
||||
static const String name = 'StatsStreamsRoute';
|
||||
|
||||
@ -969,14 +846,11 @@ class TrackRoute extends _i41.PageRouteInfo<TrackRouteArgs> {
|
||||
required String trackId,
|
||||
List<_i41.PageRouteInfo>? children,
|
||||
}) : super(
|
||||
TrackRoute.name,
|
||||
args: TrackRouteArgs(
|
||||
key: key,
|
||||
trackId: trackId,
|
||||
),
|
||||
rawPathParams: {'id': trackId},
|
||||
initialChildren: children,
|
||||
);
|
||||
TrackRoute.name,
|
||||
args: TrackRouteArgs(key: key, trackId: trackId),
|
||||
rawPathParams: {'id': trackId},
|
||||
initialChildren: children,
|
||||
);
|
||||
|
||||
static const String name = 'TrackRoute';
|
||||
|
||||
@ -985,20 +859,15 @@ class TrackRoute extends _i41.PageRouteInfo<TrackRouteArgs> {
|
||||
builder: (data) {
|
||||
final pathParams = data.inheritedPathParams;
|
||||
final args = data.argsAs<TrackRouteArgs>(
|
||||
orElse: () => TrackRouteArgs(trackId: pathParams.getString('id')));
|
||||
return _i35.TrackPage(
|
||||
key: args.key,
|
||||
trackId: args.trackId,
|
||||
orElse: () => TrackRouteArgs(trackId: pathParams.getString('id')),
|
||||
);
|
||||
return _i35.TrackPage(key: args.key, trackId: args.trackId);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
class TrackRouteArgs {
|
||||
const TrackRouteArgs({
|
||||
this.key,
|
||||
required this.trackId,
|
||||
});
|
||||
const TrackRouteArgs({this.key, required this.trackId});
|
||||
|
||||
final _i44.Key? key;
|
||||
|
||||
@ -1014,10 +883,7 @@ class TrackRouteArgs {
|
||||
/// [_i36.UserAlbumsPage]
|
||||
class UserAlbumsRoute extends _i41.PageRouteInfo<void> {
|
||||
const UserAlbumsRoute({List<_i41.PageRouteInfo>? children})
|
||||
: super(
|
||||
UserAlbumsRoute.name,
|
||||
initialChildren: children,
|
||||
);
|
||||
: super(UserAlbumsRoute.name, initialChildren: children);
|
||||
|
||||
static const String name = 'UserAlbumsRoute';
|
||||
|
||||
@ -1033,10 +899,7 @@ class UserAlbumsRoute extends _i41.PageRouteInfo<void> {
|
||||
/// [_i37.UserArtistsPage]
|
||||
class UserArtistsRoute extends _i41.PageRouteInfo<void> {
|
||||
const UserArtistsRoute({List<_i41.PageRouteInfo>? children})
|
||||
: super(
|
||||
UserArtistsRoute.name,
|
||||
initialChildren: children,
|
||||
);
|
||||
: super(UserArtistsRoute.name, initialChildren: children);
|
||||
|
||||
static const String name = 'UserArtistsRoute';
|
||||
|
||||
@ -1052,10 +915,7 @@ class UserArtistsRoute extends _i41.PageRouteInfo<void> {
|
||||
/// [_i38.UserDownloadsPage]
|
||||
class UserDownloadsRoute extends _i41.PageRouteInfo<void> {
|
||||
const UserDownloadsRoute({List<_i41.PageRouteInfo>? children})
|
||||
: super(
|
||||
UserDownloadsRoute.name,
|
||||
initialChildren: children,
|
||||
);
|
||||
: super(UserDownloadsRoute.name, initialChildren: children);
|
||||
|
||||
static const String name = 'UserDownloadsRoute';
|
||||
|
||||
@ -1071,10 +931,7 @@ class UserDownloadsRoute extends _i41.PageRouteInfo<void> {
|
||||
/// [_i39.UserLocalLibraryPage]
|
||||
class UserLocalLibraryRoute extends _i41.PageRouteInfo<void> {
|
||||
const UserLocalLibraryRoute({List<_i41.PageRouteInfo>? children})
|
||||
: super(
|
||||
UserLocalLibraryRoute.name,
|
||||
initialChildren: children,
|
||||
);
|
||||
: super(UserLocalLibraryRoute.name, initialChildren: children);
|
||||
|
||||
static const String name = 'UserLocalLibraryRoute';
|
||||
|
||||
@ -1090,10 +947,7 @@ class UserLocalLibraryRoute extends _i41.PageRouteInfo<void> {
|
||||
/// [_i40.UserPlaylistsPage]
|
||||
class UserPlaylistsRoute extends _i41.PageRouteInfo<void> {
|
||||
const UserPlaylistsRoute({List<_i41.PageRouteInfo>? children})
|
||||
: super(
|
||||
UserPlaylistsRoute.name,
|
||||
initialChildren: children,
|
||||
);
|
||||
: super(UserPlaylistsRoute.name, initialChildren: children);
|
||||
|
||||
static const String name = 'UserPlaylistsRoute';
|
||||
|
||||
|
||||
@ -39,6 +39,7 @@ class TrackTile extends HookConsumerWidget {
|
||||
final int? index;
|
||||
final SpotubeTrackObject track;
|
||||
final bool selected;
|
||||
final bool selectionMode;
|
||||
final ValueChanged<bool?>? onChanged;
|
||||
final Future<void> Function()? onTap;
|
||||
final VoidCallback? onLongPress;
|
||||
@ -53,6 +54,7 @@ class TrackTile extends HookConsumerWidget {
|
||||
this.index,
|
||||
required this.track,
|
||||
this.selected = false,
|
||||
this.selectionMode = false,
|
||||
required this.playlist,
|
||||
this.onTap,
|
||||
this.onLongPress,
|
||||
@ -81,6 +83,12 @@ class TrackTile extends HookConsumerWidget {
|
||||
[track.album.images],
|
||||
);
|
||||
|
||||
// Treat either explicit selectionMode or presence of onChanged as selection
|
||||
// context. Some lists enable selection by providing `onChanged` without
|
||||
// toggling a dedicated `selectionMode` flag (e.g. playlists), so we must
|
||||
// disable inner navigation in both cases.
|
||||
final effectiveSelection = selectionMode || onChanged != null;
|
||||
|
||||
return LayoutBuilder(builder: (context, constrains) {
|
||||
return Listener(
|
||||
onPointerDown: (event) {
|
||||
@ -222,7 +230,9 @@ class TrackTile extends HookConsumerWidget {
|
||||
children: [
|
||||
Expanded(
|
||||
flex: 6,
|
||||
child: switch (track) {
|
||||
child: AbsorbPointer(
|
||||
absorbing: selectionMode,
|
||||
child: switch (track) {
|
||||
SpotubeLocalTrackObject() => Text(
|
||||
track.name,
|
||||
maxLines: 1,
|
||||
@ -232,15 +242,17 @@ class TrackTile extends HookConsumerWidget {
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Flexible(
|
||||
child: Button(
|
||||
style: ButtonVariance.link.copyWith(
|
||||
padding: (context, states, value) =>
|
||||
EdgeInsets.zero,
|
||||
),
|
||||
onPressed: () {
|
||||
context
|
||||
.navigateTo(TrackRoute(trackId: track.id));
|
||||
},
|
||||
child: Button(
|
||||
style: ButtonVariance.link.copyWith(
|
||||
padding: (context, states, value) =>
|
||||
EdgeInsets.zero,
|
||||
),
|
||||
onPressed: effectiveSelection
|
||||
? null
|
||||
: () {
|
||||
context
|
||||
.navigateTo(TrackRoute(trackId: track.id));
|
||||
},
|
||||
child: Text(
|
||||
track.name,
|
||||
maxLines: 1,
|
||||
@ -251,6 +263,7 @@ class TrackTile extends HookConsumerWidget {
|
||||
],
|
||||
),
|
||||
},
|
||||
),
|
||||
),
|
||||
if (constrains.mdAndUp) ...[
|
||||
const SizedBox(width: 8),
|
||||
@ -281,20 +294,25 @@ class TrackTile extends HookConsumerWidget {
|
||||
),
|
||||
subtitle: Align(
|
||||
alignment: Alignment.centerLeft,
|
||||
child: track is SpotubeLocalTrackObject
|
||||
child: track is SpotubeLocalTrackObject
|
||||
? Text(
|
||||
track.artists.asString(),
|
||||
)
|
||||
: ClipRect(
|
||||
child: ConstrainedBox(
|
||||
constraints: const BoxConstraints(maxHeight: 40),
|
||||
child: ArtistLink(
|
||||
artists: track.artists,
|
||||
onOverflowArtistClick: () {
|
||||
context.navigateTo(
|
||||
TrackRoute(trackId: track.id),
|
||||
);
|
||||
},
|
||||
child: AbsorbPointer(
|
||||
absorbing: effectiveSelection,
|
||||
child: ArtistLink(
|
||||
artists: track.artists,
|
||||
onOverflowArtistClick: effectiveSelection
|
||||
? () {}
|
||||
: () {
|
||||
context.navigateTo(
|
||||
TrackRoute(trackId: track.id),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
@ -112,8 +112,13 @@ mixin _$WebSocketLoadEventData {
|
||||
required TResult orElse(),
|
||||
}) =>
|
||||
throw _privateConstructorUsedError;
|
||||
|
||||
/// Serializes this WebSocketLoadEventData to a JSON map.
|
||||
Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
|
||||
@JsonKey(ignore: true)
|
||||
|
||||
/// Create a copy of WebSocketLoadEventData
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
$WebSocketLoadEventDataCopyWith<WebSocketLoadEventData> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -142,6 +147,8 @@ class _$WebSocketLoadEventDataCopyWithImpl<$Res,
|
||||
// ignore: unused_field
|
||||
final $Res Function($Val) _then;
|
||||
|
||||
/// Create a copy of WebSocketLoadEventData
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
@ -190,6 +197,8 @@ class __$$WebSocketLoadEventDataPlaylistImplCopyWithImpl<$Res>
|
||||
$Res Function(_$WebSocketLoadEventDataPlaylistImpl) _then)
|
||||
: super(_value, _then);
|
||||
|
||||
/// Create a copy of WebSocketLoadEventData
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
@ -213,6 +222,8 @@ class __$$WebSocketLoadEventDataPlaylistImplCopyWithImpl<$Res>
|
||||
));
|
||||
}
|
||||
|
||||
/// Create a copy of WebSocketLoadEventData
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
$SpotubeSimplePlaylistObjectCopyWith<$Res>? get collection {
|
||||
@ -281,12 +292,14 @@ class _$WebSocketLoadEventDataPlaylistImpl
|
||||
other.initialIndex == initialIndex));
|
||||
}
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType,
|
||||
const DeepCollectionEquality().hash(_tracks), collection, initialIndex);
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
/// Create a copy of WebSocketLoadEventData
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$WebSocketLoadEventDataPlaylistImplCopyWith<
|
||||
@ -420,8 +433,11 @@ abstract class WebSocketLoadEventDataPlaylist extends WebSocketLoadEventData {
|
||||
SpotubeSimplePlaylistObject? get collection;
|
||||
@override
|
||||
int? get initialIndex;
|
||||
|
||||
/// Create a copy of WebSocketLoadEventData
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@JsonKey(ignore: true)
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
_$$WebSocketLoadEventDataPlaylistImplCopyWith<
|
||||
_$WebSocketLoadEventDataPlaylistImpl>
|
||||
get copyWith => throw _privateConstructorUsedError;
|
||||
@ -456,6 +472,8 @@ class __$$WebSocketLoadEventDataAlbumImplCopyWithImpl<$Res>
|
||||
$Res Function(_$WebSocketLoadEventDataAlbumImpl) _then)
|
||||
: super(_value, _then);
|
||||
|
||||
/// Create a copy of WebSocketLoadEventData
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
@ -479,6 +497,8 @@ class __$$WebSocketLoadEventDataAlbumImplCopyWithImpl<$Res>
|
||||
));
|
||||
}
|
||||
|
||||
/// Create a copy of WebSocketLoadEventData
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
$SpotubeSimpleAlbumObjectCopyWith<$Res>? get collection {
|
||||
@ -545,12 +565,14 @@ class _$WebSocketLoadEventDataAlbumImpl extends WebSocketLoadEventDataAlbum {
|
||||
other.initialIndex == initialIndex));
|
||||
}
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType,
|
||||
const DeepCollectionEquality().hash(_tracks), collection, initialIndex);
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
/// Create a copy of WebSocketLoadEventData
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$WebSocketLoadEventDataAlbumImplCopyWith<_$WebSocketLoadEventDataAlbumImpl>
|
||||
@ -683,8 +705,11 @@ abstract class WebSocketLoadEventDataAlbum extends WebSocketLoadEventData {
|
||||
SpotubeSimpleAlbumObject? get collection;
|
||||
@override
|
||||
int? get initialIndex;
|
||||
|
||||
/// Create a copy of WebSocketLoadEventData
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@JsonKey(ignore: true)
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
_$$WebSocketLoadEventDataAlbumImplCopyWith<_$WebSocketLoadEventDataAlbumImpl>
|
||||
get copyWith => throw _privateConstructorUsedError;
|
||||
}
|
||||
|
||||
@ -18,15 +18,12 @@ class $AuthenticationTableTable extends AuthenticationTable
|
||||
requiredDuringInsert: false,
|
||||
defaultConstraints:
|
||||
GeneratedColumn.constraintIsAlways('PRIMARY KEY AUTOINCREMENT'));
|
||||
static const VerificationMeta _cookieMeta = const VerificationMeta('cookie');
|
||||
@override
|
||||
late final GeneratedColumnWithTypeConverter<DecryptedText, String> cookie =
|
||||
GeneratedColumn<String>('cookie', aliasedName, false,
|
||||
type: DriftSqlType.string, requiredDuringInsert: true)
|
||||
.withConverter<DecryptedText>(
|
||||
$AuthenticationTableTable.$convertercookie);
|
||||
static const VerificationMeta _accessTokenMeta =
|
||||
const VerificationMeta('accessToken');
|
||||
@override
|
||||
late final GeneratedColumnWithTypeConverter<DecryptedText, String>
|
||||
accessToken = GeneratedColumn<String>('access_token', aliasedName, false,
|
||||
@ -55,8 +52,6 @@ class $AuthenticationTableTable extends AuthenticationTable
|
||||
if (data.containsKey('id')) {
|
||||
context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta));
|
||||
}
|
||||
context.handle(_cookieMeta, const VerificationResult.success());
|
||||
context.handle(_accessTokenMeta, const VerificationResult.success());
|
||||
if (data.containsKey('expiration')) {
|
||||
context.handle(
|
||||
_expirationMeta,
|
||||
@ -301,8 +296,6 @@ class $BlacklistTableTable extends BlacklistTable
|
||||
late final GeneratedColumn<String> name = GeneratedColumn<String>(
|
||||
'name', aliasedName, false,
|
||||
type: DriftSqlType.string, requiredDuringInsert: true);
|
||||
static const VerificationMeta _elementTypeMeta =
|
||||
const VerificationMeta('elementType');
|
||||
@override
|
||||
late final GeneratedColumnWithTypeConverter<BlacklistedType, String>
|
||||
elementType = GeneratedColumn<String>('element_type', aliasedName, false,
|
||||
@ -336,7 +329,6 @@ class $BlacklistTableTable extends BlacklistTable
|
||||
} else if (isInserting) {
|
||||
context.missing(_nameMeta);
|
||||
}
|
||||
context.handle(_elementTypeMeta, const VerificationResult.success());
|
||||
if (data.containsKey('element_id')) {
|
||||
context.handle(_elementIdMeta,
|
||||
elementId.isAcceptableOrUnknown(data['element_id']!, _elementIdMeta));
|
||||
@ -566,8 +558,6 @@ class $PreferencesTableTable extends PreferencesTable
|
||||
requiredDuringInsert: false,
|
||||
defaultConstraints:
|
||||
GeneratedColumn.constraintIsAlways('PRIMARY KEY AUTOINCREMENT'));
|
||||
static const VerificationMeta _audioQualityMeta =
|
||||
const VerificationMeta('audioQuality');
|
||||
@override
|
||||
late final GeneratedColumnWithTypeConverter<SourceQualities, String>
|
||||
audioQuality = GeneratedColumn<String>(
|
||||
@ -647,8 +637,6 @@ class $PreferencesTableTable extends PreferencesTable
|
||||
defaultConstraints: GeneratedColumn.constraintIsAlways(
|
||||
'CHECK ("skip_non_music" IN (0, 1))'),
|
||||
defaultValue: const Constant(false));
|
||||
static const VerificationMeta _closeBehaviorMeta =
|
||||
const VerificationMeta('closeBehavior');
|
||||
@override
|
||||
late final GeneratedColumnWithTypeConverter<CloseBehavior, String>
|
||||
closeBehavior = GeneratedColumn<String>(
|
||||
@ -658,8 +646,6 @@ class $PreferencesTableTable extends PreferencesTable
|
||||
defaultValue: Constant(CloseBehavior.close.name))
|
||||
.withConverter<CloseBehavior>(
|
||||
$PreferencesTableTable.$convertercloseBehavior);
|
||||
static const VerificationMeta _accentColorSchemeMeta =
|
||||
const VerificationMeta('accentColorScheme');
|
||||
@override
|
||||
late final GeneratedColumnWithTypeConverter<SpotubeColor, String>
|
||||
accentColorScheme = GeneratedColumn<String>(
|
||||
@ -669,8 +655,6 @@ class $PreferencesTableTable extends PreferencesTable
|
||||
defaultValue: const Constant("Slate:0xff64748b"))
|
||||
.withConverter<SpotubeColor>(
|
||||
$PreferencesTableTable.$converteraccentColorScheme);
|
||||
static const VerificationMeta _layoutModeMeta =
|
||||
const VerificationMeta('layoutMode');
|
||||
@override
|
||||
late final GeneratedColumnWithTypeConverter<LayoutMode, String> layoutMode =
|
||||
GeneratedColumn<String>('layout_mode', aliasedName, false,
|
||||
@ -679,7 +663,6 @@ class $PreferencesTableTable extends PreferencesTable
|
||||
defaultValue: Constant(LayoutMode.adaptive.name))
|
||||
.withConverter<LayoutMode>(
|
||||
$PreferencesTableTable.$converterlayoutMode);
|
||||
static const VerificationMeta _localeMeta = const VerificationMeta('locale');
|
||||
@override
|
||||
late final GeneratedColumnWithTypeConverter<Locale, String> locale =
|
||||
GeneratedColumn<String>('locale', aliasedName, false,
|
||||
@ -688,7 +671,6 @@ class $PreferencesTableTable extends PreferencesTable
|
||||
defaultValue: const Constant(
|
||||
'{"languageCode":"system","countryCode":"system"}'))
|
||||
.withConverter<Locale>($PreferencesTableTable.$converterlocale);
|
||||
static const VerificationMeta _marketMeta = const VerificationMeta('market');
|
||||
@override
|
||||
late final GeneratedColumnWithTypeConverter<Market, String> market =
|
||||
GeneratedColumn<String>('market', aliasedName, false,
|
||||
@ -696,8 +678,6 @@ class $PreferencesTableTable extends PreferencesTable
|
||||
requiredDuringInsert: false,
|
||||
defaultValue: Constant(Market.US.name))
|
||||
.withConverter<Market>($PreferencesTableTable.$convertermarket);
|
||||
static const VerificationMeta _searchModeMeta =
|
||||
const VerificationMeta('searchMode');
|
||||
@override
|
||||
late final GeneratedColumnWithTypeConverter<SearchMode, String> searchMode =
|
||||
GeneratedColumn<String>('search_mode', aliasedName, false,
|
||||
@ -714,8 +694,6 @@ class $PreferencesTableTable extends PreferencesTable
|
||||
type: DriftSqlType.string,
|
||||
requiredDuringInsert: false,
|
||||
defaultValue: const Constant(""));
|
||||
static const VerificationMeta _localLibraryLocationMeta =
|
||||
const VerificationMeta('localLibraryLocation');
|
||||
@override
|
||||
late final GeneratedColumnWithTypeConverter<List<String>, String>
|
||||
localLibraryLocation = GeneratedColumn<String>(
|
||||
@ -741,8 +719,6 @@ class $PreferencesTableTable extends PreferencesTable
|
||||
type: DriftSqlType.string,
|
||||
requiredDuringInsert: false,
|
||||
defaultValue: const Constant("https://inv.nadeko.net"));
|
||||
static const VerificationMeta _themeModeMeta =
|
||||
const VerificationMeta('themeMode');
|
||||
@override
|
||||
late final GeneratedColumnWithTypeConverter<ThemeMode, String> themeMode =
|
||||
GeneratedColumn<String>('theme_mode', aliasedName, false,
|
||||
@ -750,8 +726,6 @@ class $PreferencesTableTable extends PreferencesTable
|
||||
requiredDuringInsert: false,
|
||||
defaultValue: Constant(ThemeMode.system.name))
|
||||
.withConverter<ThemeMode>($PreferencesTableTable.$converterthemeMode);
|
||||
static const VerificationMeta _audioSourceMeta =
|
||||
const VerificationMeta('audioSource');
|
||||
@override
|
||||
late final GeneratedColumnWithTypeConverter<AudioSource, String> audioSource =
|
||||
GeneratedColumn<String>('audio_source', aliasedName, false,
|
||||
@ -760,8 +734,6 @@ class $PreferencesTableTable extends PreferencesTable
|
||||
defaultValue: Constant(AudioSource.youtube.name))
|
||||
.withConverter<AudioSource>(
|
||||
$PreferencesTableTable.$converteraudioSource);
|
||||
static const VerificationMeta _youtubeClientEngineMeta =
|
||||
const VerificationMeta('youtubeClientEngine');
|
||||
@override
|
||||
late final GeneratedColumnWithTypeConverter<YoutubeClientEngine, String>
|
||||
youtubeClientEngine = GeneratedColumn<String>(
|
||||
@ -771,8 +743,6 @@ class $PreferencesTableTable extends PreferencesTable
|
||||
defaultValue: Constant(YoutubeClientEngine.youtubeExplode.name))
|
||||
.withConverter<YoutubeClientEngine>(
|
||||
$PreferencesTableTable.$converteryoutubeClientEngine);
|
||||
static const VerificationMeta _streamMusicCodecMeta =
|
||||
const VerificationMeta('streamMusicCodec');
|
||||
@override
|
||||
late final GeneratedColumnWithTypeConverter<SourceCodecs, String>
|
||||
streamMusicCodec = GeneratedColumn<String>(
|
||||
@ -782,8 +752,6 @@ class $PreferencesTableTable extends PreferencesTable
|
||||
defaultValue: Constant(SourceCodecs.weba.name))
|
||||
.withConverter<SourceCodecs>(
|
||||
$PreferencesTableTable.$converterstreamMusicCodec);
|
||||
static const VerificationMeta _downloadMusicCodecMeta =
|
||||
const VerificationMeta('downloadMusicCodec');
|
||||
@override
|
||||
late final GeneratedColumnWithTypeConverter<SourceCodecs, String>
|
||||
downloadMusicCodec = GeneratedColumn<String>(
|
||||
@ -887,7 +855,6 @@ class $PreferencesTableTable extends PreferencesTable
|
||||
if (data.containsKey('id')) {
|
||||
context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta));
|
||||
}
|
||||
context.handle(_audioQualityMeta, const VerificationResult.success());
|
||||
if (data.containsKey('album_color_sync')) {
|
||||
context.handle(
|
||||
_albumColorSyncMeta,
|
||||
@ -930,20 +897,12 @@ class $PreferencesTableTable extends PreferencesTable
|
||||
skipNonMusic.isAcceptableOrUnknown(
|
||||
data['skip_non_music']!, _skipNonMusicMeta));
|
||||
}
|
||||
context.handle(_closeBehaviorMeta, const VerificationResult.success());
|
||||
context.handle(_accentColorSchemeMeta, const VerificationResult.success());
|
||||
context.handle(_layoutModeMeta, const VerificationResult.success());
|
||||
context.handle(_localeMeta, const VerificationResult.success());
|
||||
context.handle(_marketMeta, const VerificationResult.success());
|
||||
context.handle(_searchModeMeta, const VerificationResult.success());
|
||||
if (data.containsKey('download_location')) {
|
||||
context.handle(
|
||||
_downloadLocationMeta,
|
||||
downloadLocation.isAcceptableOrUnknown(
|
||||
data['download_location']!, _downloadLocationMeta));
|
||||
}
|
||||
context.handle(
|
||||
_localLibraryLocationMeta, const VerificationResult.success());
|
||||
if (data.containsKey('piped_instance')) {
|
||||
context.handle(
|
||||
_pipedInstanceMeta,
|
||||
@ -956,12 +915,6 @@ class $PreferencesTableTable extends PreferencesTable
|
||||
invidiousInstance.isAcceptableOrUnknown(
|
||||
data['invidious_instance']!, _invidiousInstanceMeta));
|
||||
}
|
||||
context.handle(_themeModeMeta, const VerificationResult.success());
|
||||
context.handle(_audioSourceMeta, const VerificationResult.success());
|
||||
context.handle(
|
||||
_youtubeClientEngineMeta, const VerificationResult.success());
|
||||
context.handle(_streamMusicCodecMeta, const VerificationResult.success());
|
||||
context.handle(_downloadMusicCodecMeta, const VerificationResult.success());
|
||||
if (data.containsKey('discord_presence')) {
|
||||
context.handle(
|
||||
_discordPresenceMeta,
|
||||
@ -2030,8 +1983,6 @@ class $ScrobblerTableTable extends ScrobblerTable
|
||||
late final GeneratedColumn<String> username = GeneratedColumn<String>(
|
||||
'username', aliasedName, false,
|
||||
type: DriftSqlType.string, requiredDuringInsert: true);
|
||||
static const VerificationMeta _passwordHashMeta =
|
||||
const VerificationMeta('passwordHash');
|
||||
@override
|
||||
late final GeneratedColumnWithTypeConverter<DecryptedText, String>
|
||||
passwordHash = GeneratedColumn<String>(
|
||||
@ -2064,7 +2015,6 @@ class $ScrobblerTableTable extends ScrobblerTable
|
||||
} else if (isInserting) {
|
||||
context.missing(_usernameMeta);
|
||||
}
|
||||
context.handle(_passwordHashMeta, const VerificationResult.success());
|
||||
return context;
|
||||
}
|
||||
|
||||
@ -2595,8 +2545,6 @@ class $SourceMatchTableTable extends SourceMatchTable
|
||||
late final GeneratedColumn<String> sourceId = GeneratedColumn<String>(
|
||||
'source_id', aliasedName, false,
|
||||
type: DriftSqlType.string, requiredDuringInsert: true);
|
||||
static const VerificationMeta _sourceTypeMeta =
|
||||
const VerificationMeta('sourceType');
|
||||
@override
|
||||
late final GeneratedColumnWithTypeConverter<SourceType, String> sourceType =
|
||||
GeneratedColumn<String>('source_type', aliasedName, false,
|
||||
@ -2642,7 +2590,6 @@ class $SourceMatchTableTable extends SourceMatchTable
|
||||
} else if (isInserting) {
|
||||
context.missing(_sourceIdMeta);
|
||||
}
|
||||
context.handle(_sourceTypeMeta, const VerificationResult.success());
|
||||
if (data.containsKey('created_at')) {
|
||||
context.handle(_createdAtMeta,
|
||||
createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta));
|
||||
@ -2901,8 +2848,6 @@ class $AudioPlayerStateTableTable extends AudioPlayerStateTable
|
||||
requiredDuringInsert: true,
|
||||
defaultConstraints:
|
||||
GeneratedColumn.constraintIsAlways('CHECK ("playing" IN (0, 1))'));
|
||||
static const VerificationMeta _loopModeMeta =
|
||||
const VerificationMeta('loopMode');
|
||||
@override
|
||||
late final GeneratedColumnWithTypeConverter<PlaylistMode, String> loopMode =
|
||||
GeneratedColumn<String>('loop_mode', aliasedName, false,
|
||||
@ -2918,15 +2863,12 @@ class $AudioPlayerStateTableTable extends AudioPlayerStateTable
|
||||
requiredDuringInsert: true,
|
||||
defaultConstraints:
|
||||
GeneratedColumn.constraintIsAlways('CHECK ("shuffled" IN (0, 1))'));
|
||||
static const VerificationMeta _collectionsMeta =
|
||||
const VerificationMeta('collections');
|
||||
@override
|
||||
late final GeneratedColumnWithTypeConverter<List<String>, String>
|
||||
collections = GeneratedColumn<String>('collections', aliasedName, false,
|
||||
type: DriftSqlType.string, requiredDuringInsert: true)
|
||||
.withConverter<List<String>>(
|
||||
$AudioPlayerStateTableTable.$convertercollections);
|
||||
static const VerificationMeta _tracksMeta = const VerificationMeta('tracks');
|
||||
@override
|
||||
late final GeneratedColumnWithTypeConverter<List<SpotubeTrackObject>, String>
|
||||
tracks = GeneratedColumn<String>('tracks', aliasedName, false,
|
||||
@ -2966,15 +2908,12 @@ class $AudioPlayerStateTableTable extends AudioPlayerStateTable
|
||||
} else if (isInserting) {
|
||||
context.missing(_playingMeta);
|
||||
}
|
||||
context.handle(_loopModeMeta, const VerificationResult.success());
|
||||
if (data.containsKey('shuffled')) {
|
||||
context.handle(_shuffledMeta,
|
||||
shuffled.isAcceptableOrUnknown(data['shuffled']!, _shuffledMeta));
|
||||
} else if (isInserting) {
|
||||
context.missing(_shuffledMeta);
|
||||
}
|
||||
context.handle(_collectionsMeta, const VerificationResult.success());
|
||||
context.handle(_tracksMeta, const VerificationResult.success());
|
||||
if (data.containsKey('current_index')) {
|
||||
context.handle(
|
||||
_currentIndexMeta,
|
||||
@ -3305,7 +3244,6 @@ class $HistoryTableTable extends HistoryTable
|
||||
type: DriftSqlType.dateTime,
|
||||
requiredDuringInsert: false,
|
||||
defaultValue: currentDateAndTime);
|
||||
static const VerificationMeta _typeMeta = const VerificationMeta('type');
|
||||
@override
|
||||
late final GeneratedColumnWithTypeConverter<HistoryEntryType, String> type =
|
||||
GeneratedColumn<String>('type', aliasedName, false,
|
||||
@ -3316,7 +3254,6 @@ class $HistoryTableTable extends HistoryTable
|
||||
late final GeneratedColumn<String> itemId = GeneratedColumn<String>(
|
||||
'item_id', aliasedName, false,
|
||||
type: DriftSqlType.string, requiredDuringInsert: true);
|
||||
static const VerificationMeta _dataMeta = const VerificationMeta('data');
|
||||
@override
|
||||
late final GeneratedColumnWithTypeConverter<Map<String, dynamic>, String>
|
||||
data = GeneratedColumn<String>('data', aliasedName, false,
|
||||
@ -3342,14 +3279,12 @@ class $HistoryTableTable extends HistoryTable
|
||||
context.handle(_createdAtMeta,
|
||||
createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta));
|
||||
}
|
||||
context.handle(_typeMeta, const VerificationResult.success());
|
||||
if (data.containsKey('item_id')) {
|
||||
context.handle(_itemIdMeta,
|
||||
itemId.isAcceptableOrUnknown(data['item_id']!, _itemIdMeta));
|
||||
} else if (isInserting) {
|
||||
context.missing(_itemIdMeta);
|
||||
}
|
||||
context.handle(_dataMeta, const VerificationResult.success());
|
||||
return context;
|
||||
}
|
||||
|
||||
@ -3608,7 +3543,6 @@ class $LyricsTableTable extends LyricsTable
|
||||
late final GeneratedColumn<String> trackId = GeneratedColumn<String>(
|
||||
'track_id', aliasedName, false,
|
||||
type: DriftSqlType.string, requiredDuringInsert: true);
|
||||
static const VerificationMeta _dataMeta = const VerificationMeta('data');
|
||||
@override
|
||||
late final GeneratedColumnWithTypeConverter<SubtitleSimple, String> data =
|
||||
GeneratedColumn<String>('data', aliasedName, false,
|
||||
@ -3635,7 +3569,6 @@ class $LyricsTableTable extends LyricsTable
|
||||
} else if (isInserting) {
|
||||
context.missing(_trackIdMeta);
|
||||
}
|
||||
context.handle(_dataMeta, const VerificationResult.success());
|
||||
return context;
|
||||
}
|
||||
|
||||
@ -3853,15 +3786,12 @@ class $MetadataPluginsTableTable extends MetadataPluginsTable
|
||||
late final GeneratedColumn<String> entryPoint = GeneratedColumn<String>(
|
||||
'entry_point', aliasedName, false,
|
||||
type: DriftSqlType.string, requiredDuringInsert: true);
|
||||
static const VerificationMeta _apisMeta = const VerificationMeta('apis');
|
||||
@override
|
||||
late final GeneratedColumnWithTypeConverter<List<String>, String> apis =
|
||||
GeneratedColumn<String>('apis', aliasedName, false,
|
||||
type: DriftSqlType.string, requiredDuringInsert: true)
|
||||
.withConverter<List<String>>(
|
||||
$MetadataPluginsTableTable.$converterapis);
|
||||
static const VerificationMeta _abilitiesMeta =
|
||||
const VerificationMeta('abilities');
|
||||
@override
|
||||
late final GeneratedColumnWithTypeConverter<List<String>, String> abilities =
|
||||
GeneratedColumn<String>('abilities', aliasedName, false,
|
||||
@ -3954,8 +3884,6 @@ class $MetadataPluginsTableTable extends MetadataPluginsTable
|
||||
} else if (isInserting) {
|
||||
context.missing(_entryPointMeta);
|
||||
}
|
||||
context.handle(_apisMeta, const VerificationResult.success());
|
||||
context.handle(_abilitiesMeta, const VerificationResult.success());
|
||||
if (data.containsKey('selected')) {
|
||||
context.handle(_selectedMeta,
|
||||
selected.isAcceptableOrUnknown(data['selected']!, _selectedMeta));
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -28,8 +28,12 @@ mixin _$TrackSourceQuery {
|
||||
String get isrc => throw _privateConstructorUsedError;
|
||||
bool get explicit => throw _privateConstructorUsedError;
|
||||
|
||||
/// Serializes this TrackSourceQuery to a JSON map.
|
||||
Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
|
||||
@JsonKey(ignore: true)
|
||||
|
||||
/// Create a copy of TrackSourceQuery
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
$TrackSourceQueryCopyWith<TrackSourceQuery> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -60,6 +64,8 @@ class _$TrackSourceQueryCopyWithImpl<$Res, $Val extends TrackSourceQuery>
|
||||
// ignore: unused_field
|
||||
final $Res Function($Val) _then;
|
||||
|
||||
/// Create a copy of TrackSourceQuery
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
@ -130,6 +136,8 @@ class __$$TrackSourceQueryImplCopyWithImpl<$Res>
|
||||
$Res Function(_$TrackSourceQueryImpl) _then)
|
||||
: super(_value, _then);
|
||||
|
||||
/// Create a copy of TrackSourceQuery
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
@ -233,7 +241,7 @@ class _$TrackSourceQueryImpl extends _TrackSourceQuery {
|
||||
other.explicit == explicit));
|
||||
}
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
int get hashCode => Object.hash(
|
||||
runtimeType,
|
||||
@ -245,7 +253,9 @@ class _$TrackSourceQueryImpl extends _TrackSourceQuery {
|
||||
isrc,
|
||||
explicit);
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
/// Create a copy of TrackSourceQuery
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$TrackSourceQueryImplCopyWith<_$TrackSourceQueryImpl> get copyWith =>
|
||||
@ -288,8 +298,11 @@ abstract class _TrackSourceQuery extends TrackSourceQuery {
|
||||
String get isrc;
|
||||
@override
|
||||
bool get explicit;
|
||||
|
||||
/// Create a copy of TrackSourceQuery
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@JsonKey(ignore: true)
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
_$$TrackSourceQueryImplCopyWith<_$TrackSourceQueryImpl> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -307,8 +320,12 @@ mixin _$TrackSourceInfo {
|
||||
String get pageUrl => throw _privateConstructorUsedError;
|
||||
int get durationMs => throw _privateConstructorUsedError;
|
||||
|
||||
/// Serializes this TrackSourceInfo to a JSON map.
|
||||
Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
|
||||
@JsonKey(ignore: true)
|
||||
|
||||
/// Create a copy of TrackSourceInfo
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
$TrackSourceInfoCopyWith<TrackSourceInfo> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -338,6 +355,8 @@ class _$TrackSourceInfoCopyWithImpl<$Res, $Val extends TrackSourceInfo>
|
||||
// ignore: unused_field
|
||||
final $Res Function($Val) _then;
|
||||
|
||||
/// Create a copy of TrackSourceInfo
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
@ -402,6 +421,8 @@ class __$$TrackSourceInfoImplCopyWithImpl<$Res>
|
||||
_$TrackSourceInfoImpl _value, $Res Function(_$TrackSourceInfoImpl) _then)
|
||||
: super(_value, _then);
|
||||
|
||||
/// Create a copy of TrackSourceInfo
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
@ -488,12 +509,14 @@ class _$TrackSourceInfoImpl implements _TrackSourceInfo {
|
||||
other.durationMs == durationMs));
|
||||
}
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
int get hashCode => Object.hash(
|
||||
runtimeType, id, title, artists, thumbnail, pageUrl, durationMs);
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
/// Create a copy of TrackSourceInfo
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$TrackSourceInfoImplCopyWith<_$TrackSourceInfoImpl> get copyWith =>
|
||||
@ -532,8 +555,11 @@ abstract class _TrackSourceInfo implements TrackSourceInfo {
|
||||
String get pageUrl;
|
||||
@override
|
||||
int get durationMs;
|
||||
|
||||
/// Create a copy of TrackSourceInfo
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@JsonKey(ignore: true)
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
_$$TrackSourceInfoImplCopyWith<_$TrackSourceInfoImpl> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -549,8 +575,12 @@ mixin _$TrackSource {
|
||||
SourceCodecs get codec => throw _privateConstructorUsedError;
|
||||
String get bitrate => throw _privateConstructorUsedError;
|
||||
|
||||
/// Serializes this TrackSource to a JSON map.
|
||||
Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
|
||||
@JsonKey(ignore: true)
|
||||
|
||||
/// Create a copy of TrackSource
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
$TrackSourceCopyWith<TrackSource> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -578,6 +608,8 @@ class _$TrackSourceCopyWithImpl<$Res, $Val extends TrackSource>
|
||||
// ignore: unused_field
|
||||
final $Res Function($Val) _then;
|
||||
|
||||
/// Create a copy of TrackSource
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
@ -630,6 +662,8 @@ class __$$TrackSourceImplCopyWithImpl<$Res>
|
||||
_$TrackSourceImpl _value, $Res Function(_$TrackSourceImpl) _then)
|
||||
: super(_value, _then);
|
||||
|
||||
/// Create a copy of TrackSource
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
@ -696,11 +730,13 @@ class _$TrackSourceImpl implements _TrackSource {
|
||||
(identical(other.bitrate, bitrate) || other.bitrate == bitrate));
|
||||
}
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType, url, quality, codec, bitrate);
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
/// Create a copy of TrackSource
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$TrackSourceImplCopyWith<_$TrackSourceImpl> get copyWith =>
|
||||
@ -732,8 +768,11 @@ abstract class _TrackSource implements TrackSource {
|
||||
SourceCodecs get codec;
|
||||
@override
|
||||
String get bitrate;
|
||||
|
||||
/// Create a copy of TrackSource
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@JsonKey(ignore: true)
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
_$$TrackSourceImplCopyWith<_$TrackSourceImpl> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
|
||||
@ -2,6 +2,7 @@ import 'package:auto_size_text/auto_size_text.dart';
|
||||
import 'package:collection/collection.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||
import 'package:flutter/material.dart' show showModalBottomSheet, ListTile, SafeArea, Column, Navigator;
|
||||
import 'package:fuzzywuzzy/fuzzywuzzy.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
|
||||
@ -12,6 +13,7 @@ import 'package:spotube/components/button/back_button.dart';
|
||||
import 'package:spotube/components/fallbacks/not_found.dart';
|
||||
import 'package:spotube/components/inter_scrollbar/inter_scrollbar.dart';
|
||||
import 'package:spotube/components/track_tile/track_tile.dart';
|
||||
import 'package:spotube/components/dialogs/playlist_add_track_dialog.dart';
|
||||
import 'package:spotube/extensions/constrains.dart';
|
||||
import 'package:spotube/extensions/context.dart';
|
||||
import 'package:spotube/hooks/controllers/use_auto_scroll_controller.dart';
|
||||
@ -55,9 +57,12 @@ class PlayerQueue extends HookConsumerWidget {
|
||||
final controller = useAutoScrollController();
|
||||
final searchText = useState('');
|
||||
|
||||
final selectionMode = useState(false);
|
||||
final selectedTrackIds = useState(<String>{});
|
||||
|
||||
final isSearching = useState(false);
|
||||
|
||||
final tracks = playlist.tracks;
|
||||
final tracks = playlist.tracks;
|
||||
|
||||
final filteredTracks = useMemoized(
|
||||
() {
|
||||
@ -132,50 +137,156 @@ class PlayerQueue extends HookConsumerWidget {
|
||||
child: searchBar,
|
||||
)
|
||||
else
|
||||
AppBar(
|
||||
trailingGap: 0,
|
||||
backgroundColor: Colors.transparent,
|
||||
surfaceBlur: 0,
|
||||
surfaceOpacity: 0,
|
||||
title: mediaQuery.mdAndUp || !isSearching.value
|
||||
? SizedBox(
|
||||
selectionMode.value
|
||||
? AppBar(
|
||||
backgroundColor: Colors.transparent,
|
||||
surfaceBlur: 0,
|
||||
surfaceOpacity: 0,
|
||||
leading: [
|
||||
IconButton.ghost(
|
||||
icon: const Icon(SpotubeIcons.close),
|
||||
onPressed: () {
|
||||
selectedTrackIds.value = {};
|
||||
selectionMode.value = false;
|
||||
},
|
||||
)
|
||||
],
|
||||
title: SizedBox(
|
||||
height: 30,
|
||||
child: AutoSizeText(
|
||||
context.l10n.tracks_in_queue(tracks.length),
|
||||
'${selectedTrackIds.value.length} selected',
|
||||
maxLines: 1,
|
||||
),
|
||||
)
|
||||
: null,
|
||||
trailing: [
|
||||
if (mediaQuery.mdAndUp)
|
||||
searchBar
|
||||
else
|
||||
IconButton.ghost(
|
||||
icon: const Icon(SpotubeIcons.filter),
|
||||
onPressed: () {
|
||||
isSearching.value = !isSearching.value;
|
||||
},
|
||||
),
|
||||
if (!isSearching.value) ...[
|
||||
const SizedBox(width: 10),
|
||||
Tooltip(
|
||||
tooltip: TooltipContainer(
|
||||
child: Text(context.l10n.clear_all))
|
||||
.call,
|
||||
child: IconButton.outline(
|
||||
icon: const Icon(SpotubeIcons.playlistRemove),
|
||||
onPressed: () {
|
||||
onStop();
|
||||
closeDrawer(context);
|
||||
},
|
||||
),
|
||||
trailing: [
|
||||
IconButton.ghost(
|
||||
icon: const Icon(SpotubeIcons.moreHorizontal),
|
||||
onPressed: () async {
|
||||
await showModalBottomSheet<void>(
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return SafeArea(
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
ListTile(
|
||||
leading: const Icon(
|
||||
SpotubeIcons.selectionCheck),
|
||||
title: Text(
|
||||
context.l10n.select_all),
|
||||
onTap: () {
|
||||
selectedTrackIds.value =
|
||||
filteredTracks
|
||||
.map((t) => t.id)
|
||||
.toSet();
|
||||
Navigator.pop(context);
|
||||
},
|
||||
),
|
||||
ListTile(
|
||||
leading: const Icon(
|
||||
SpotubeIcons.playlistAdd),
|
||||
title: Text(
|
||||
context.l10n.add_to_playlist),
|
||||
onTap: () async {
|
||||
final selected = filteredTracks
|
||||
.where((t) => selectedTrackIds
|
||||
.value
|
||||
.contains(t.id))
|
||||
.toList();
|
||||
Navigator.pop(context);
|
||||
if (selected.isEmpty) return;
|
||||
final res = await showDialog<
|
||||
bool?>(
|
||||
context: context,
|
||||
builder: (context) =>
|
||||
PlaylistAddTrackDialog(
|
||||
tracks: selected,
|
||||
openFromPlaylist: null,
|
||||
),
|
||||
);
|
||||
if (res == true) {
|
||||
selectedTrackIds.value = {};
|
||||
selectionMode.value = false;
|
||||
}
|
||||
},
|
||||
),
|
||||
ListTile(
|
||||
leading:
|
||||
const Icon(SpotubeIcons.trash),
|
||||
title: Text(
|
||||
context.l10n.remove_from_queue),
|
||||
onTap: () async {
|
||||
final ids = selectedTrackIds
|
||||
.value
|
||||
.toList();
|
||||
Navigator.pop(context);
|
||||
if (ids.isEmpty) return;
|
||||
await Future.wait(ids
|
||||
.map((id) => onRemove(id)));
|
||||
selectedTrackIds.value = {};
|
||||
selectionMode.value = false;
|
||||
},
|
||||
),
|
||||
ListTile(
|
||||
leading: const Icon(
|
||||
SpotubeIcons.close),
|
||||
title: Text(context.l10n.cancel),
|
||||
onTap: () {
|
||||
Navigator.pop(context);
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
},
|
||||
),
|
||||
],
|
||||
)
|
||||
: AppBar(
|
||||
trailingGap: 0,
|
||||
backgroundColor: Colors.transparent,
|
||||
surfaceBlur: 0,
|
||||
surfaceOpacity: 0,
|
||||
title: mediaQuery.mdAndUp || !isSearching.value
|
||||
? SizedBox(
|
||||
height: 30,
|
||||
child: AutoSizeText(
|
||||
context.l10n.tracks_in_queue(tracks.length),
|
||||
maxLines: 1,
|
||||
),
|
||||
)
|
||||
: null,
|
||||
trailing: [
|
||||
if (mediaQuery.mdAndUp) searchBar
|
||||
else
|
||||
IconButton.ghost(
|
||||
icon: const Icon(SpotubeIcons.filter),
|
||||
onPressed: () {
|
||||
isSearching.value = !isSearching.value;
|
||||
},
|
||||
),
|
||||
if (!isSearching.value) ...[
|
||||
const SizedBox(width: 10),
|
||||
Tooltip(
|
||||
tooltip: TooltipContainer(
|
||||
child: Text(context.l10n.clear_all))
|
||||
.call,
|
||||
child: IconButton.outline(
|
||||
icon: const Icon(SpotubeIcons.playlistRemove),
|
||||
onPressed: () {
|
||||
onStop();
|
||||
closeDrawer(context);
|
||||
},
|
||||
),
|
||||
),
|
||||
const Gap(5),
|
||||
if (mediaQuery.smAndDown)
|
||||
const BackButton(icon: SpotubeIcons.angleDown),
|
||||
],
|
||||
],
|
||||
),
|
||||
const Gap(5),
|
||||
if (mediaQuery.smAndDown)
|
||||
const BackButton(icon: SpotubeIcons.angleDown),
|
||||
],
|
||||
],
|
||||
),
|
||||
const Divider(),
|
||||
Expanded(
|
||||
child: InterScrollbar(
|
||||
@ -195,6 +306,20 @@ class PlayerQueue extends HookConsumerWidget {
|
||||
},
|
||||
itemBuilder: (context, i) {
|
||||
final track = filteredTracks.elementAt(i);
|
||||
|
||||
void toggleSelection(String id) {
|
||||
final s = {...selectedTrackIds.value};
|
||||
if (s.contains(id)) {
|
||||
s.remove(id);
|
||||
} else {
|
||||
s.add(id);
|
||||
}
|
||||
selectedTrackIds.value = s;
|
||||
if (selectedTrackIds.value.isEmpty) {
|
||||
selectionMode.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
return AutoScrollTag(
|
||||
key: ValueKey<int>(i),
|
||||
controller: controller,
|
||||
@ -203,15 +328,34 @@ class PlayerQueue extends HookConsumerWidget {
|
||||
playlist: playlist,
|
||||
index: i,
|
||||
track: track,
|
||||
selectionMode: selectionMode.value,
|
||||
selected:
|
||||
selectedTrackIds.value.contains(track.id),
|
||||
onChanged: selectionMode.value
|
||||
? (_) => toggleSelection(track.id)
|
||||
: null,
|
||||
onTap: () async {
|
||||
if (selectionMode.value) {
|
||||
toggleSelection(track.id);
|
||||
return;
|
||||
}
|
||||
if (playlist.activeTrack?.id == track.id) {
|
||||
return;
|
||||
}
|
||||
await onJump(track);
|
||||
},
|
||||
onLongPress: () {
|
||||
if (!selectionMode.value) {
|
||||
selectionMode.value = true;
|
||||
selectedTrackIds.value = {track.id};
|
||||
} else {
|
||||
toggleSelection(track.id);
|
||||
}
|
||||
},
|
||||
leadingActions: [
|
||||
if (!isSearching.value &&
|
||||
searchText.value.isEmpty)
|
||||
searchText.value.isEmpty &&
|
||||
!selectionMode.value)
|
||||
Padding(
|
||||
padding:
|
||||
const EdgeInsets.only(left: 8.0),
|
||||
|
||||
@ -64,7 +64,7 @@ class BlackListPage extends HookConsumerWidget {
|
||||
child: TextField(
|
||||
onChanged: (value) => searchText.value = value,
|
||||
placeholder: Text(context.l10n.search),
|
||||
leading: const Icon(SpotubeIcons.search),
|
||||
// prefixIcon: const Icon(SpotubeIcons.search),
|
||||
),
|
||||
),
|
||||
InterScrollbar(
|
||||
|
||||
@ -27,8 +27,12 @@ mixin _$AudioPlayerState {
|
||||
int get currentIndex => throw _privateConstructorUsedError;
|
||||
List<SpotubeTrackObject> get tracks => throw _privateConstructorUsedError;
|
||||
|
||||
/// Serializes this AudioPlayerState to a JSON map.
|
||||
Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
|
||||
@JsonKey(ignore: true)
|
||||
|
||||
/// Create a copy of AudioPlayerState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
$AudioPlayerStateCopyWith<AudioPlayerState> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -58,6 +62,8 @@ class _$AudioPlayerStateCopyWithImpl<$Res, $Val extends AudioPlayerState>
|
||||
// ignore: unused_field
|
||||
final $Res Function($Val) _then;
|
||||
|
||||
/// Create a copy of AudioPlayerState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
@ -122,6 +128,8 @@ class __$$AudioPlayerStateImplCopyWithImpl<$Res>
|
||||
$Res Function(_$AudioPlayerStateImpl) _then)
|
||||
: super(_value, _then);
|
||||
|
||||
/// Create a copy of AudioPlayerState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
@ -226,7 +234,7 @@ class _$AudioPlayerStateImpl extends _AudioPlayerState {
|
||||
const DeepCollectionEquality().equals(other._tracks, _tracks));
|
||||
}
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
int get hashCode => Object.hash(
|
||||
runtimeType,
|
||||
@ -237,7 +245,9 @@ class _$AudioPlayerStateImpl extends _AudioPlayerState {
|
||||
currentIndex,
|
||||
const DeepCollectionEquality().hash(_tracks));
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
/// Create a copy of AudioPlayerState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$AudioPlayerStateImplCopyWith<_$AudioPlayerStateImpl> get copyWith =>
|
||||
@ -277,8 +287,11 @@ abstract class _AudioPlayerState extends AudioPlayerState {
|
||||
int get currentIndex;
|
||||
@override
|
||||
List<SpotubeTrackObject> get tracks;
|
||||
|
||||
/// Create a copy of AudioPlayerState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@JsonKey(ignore: true)
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
_$$AudioPlayerStateImplCopyWith<_$AudioPlayerStateImpl> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
|
||||
@ -45,6 +45,7 @@ class MetadataPlugin {
|
||||
sharedPreferences,
|
||||
config.slug,
|
||||
),
|
||||
createYoutubeEngine: () => throw UnimplementedError(),
|
||||
onNavigatorPush: (route) {
|
||||
return rootNavigatorKey.currentContext?.router
|
||||
.pushWidget(Builder(builder: (context) {
|
||||
|
||||
@ -30,8 +30,12 @@ mixin _$SongLink {
|
||||
String? get nativeAppUriMobile => throw _privateConstructorUsedError;
|
||||
String? get nativeAppUriDesktop => throw _privateConstructorUsedError;
|
||||
|
||||
/// Serializes this SongLink to a JSON map.
|
||||
Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
|
||||
@JsonKey(ignore: true)
|
||||
|
||||
/// Create a copy of SongLink
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
$SongLinkCopyWith<SongLink> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
@ -63,6 +67,8 @@ class _$SongLinkCopyWithImpl<$Res, $Val extends SongLink>
|
||||
// ignore: unused_field
|
||||
final $Res Function($Val) _then;
|
||||
|
||||
/// Create a copy of SongLink
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
@ -145,6 +151,8 @@ class __$$SongLinkImplCopyWithImpl<$Res>
|
||||
_$SongLinkImpl _value, $Res Function(_$SongLinkImpl) _then)
|
||||
: super(_value, _then);
|
||||
|
||||
/// Create a copy of SongLink
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
@ -261,12 +269,14 @@ class _$SongLinkImpl implements _SongLink {
|
||||
other.nativeAppUriDesktop == nativeAppUriDesktop));
|
||||
}
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType, displayName, linkId, platform,
|
||||
show, uniqueId, country, url, nativeAppUriMobile, nativeAppUriDesktop);
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
/// Create a copy of SongLink
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$SongLinkImplCopyWith<_$SongLinkImpl> get copyWith =>
|
||||
@ -313,8 +323,11 @@ abstract class _SongLink implements SongLink {
|
||||
String? get nativeAppUriMobile;
|
||||
@override
|
||||
String? get nativeAppUriDesktop;
|
||||
|
||||
/// Create a copy of SongLink
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@JsonKey(ignore: true)
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
_$$SongLinkImplCopyWith<_$SongLinkImpl> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
|
||||
@ -11,13 +11,11 @@
|
||||
#include <flutter_secure_storage_linux/flutter_secure_storage_linux_plugin.h>
|
||||
#include <flutter_timezone/flutter_timezone_plugin.h>
|
||||
#include <gtk/gtk_plugin.h>
|
||||
#include <irondash_engine_context/irondash_engine_context_plugin.h>
|
||||
#include <local_notifier/local_notifier_plugin.h>
|
||||
#include <media_kit_libs_linux/media_kit_libs_linux_plugin.h>
|
||||
#include <open_file_linux/open_file_linux_plugin.h>
|
||||
#include <screen_retriever_linux/screen_retriever_linux_plugin.h>
|
||||
#include <sqlite3_flutter_libs/sqlite3_flutter_libs_plugin.h>
|
||||
#include <super_native_extensions/super_native_extensions_plugin.h>
|
||||
#include <system_theme/system_theme_plugin.h>
|
||||
#include <tray_manager/tray_manager_plugin.h>
|
||||
#include <url_launcher_linux/url_launcher_plugin.h>
|
||||
@ -39,9 +37,6 @@ void fl_register_plugins(FlPluginRegistry* registry) {
|
||||
g_autoptr(FlPluginRegistrar) gtk_registrar =
|
||||
fl_plugin_registry_get_registrar_for_plugin(registry, "GtkPlugin");
|
||||
gtk_plugin_register_with_registrar(gtk_registrar);
|
||||
g_autoptr(FlPluginRegistrar) irondash_engine_context_registrar =
|
||||
fl_plugin_registry_get_registrar_for_plugin(registry, "IrondashEngineContextPlugin");
|
||||
irondash_engine_context_plugin_register_with_registrar(irondash_engine_context_registrar);
|
||||
g_autoptr(FlPluginRegistrar) local_notifier_registrar =
|
||||
fl_plugin_registry_get_registrar_for_plugin(registry, "LocalNotifierPlugin");
|
||||
local_notifier_plugin_register_with_registrar(local_notifier_registrar);
|
||||
@ -57,9 +52,6 @@ void fl_register_plugins(FlPluginRegistry* registry) {
|
||||
g_autoptr(FlPluginRegistrar) sqlite3_flutter_libs_registrar =
|
||||
fl_plugin_registry_get_registrar_for_plugin(registry, "Sqlite3FlutterLibsPlugin");
|
||||
sqlite3_flutter_libs_plugin_register_with_registrar(sqlite3_flutter_libs_registrar);
|
||||
g_autoptr(FlPluginRegistrar) super_native_extensions_registrar =
|
||||
fl_plugin_registry_get_registrar_for_plugin(registry, "SuperNativeExtensionsPlugin");
|
||||
super_native_extensions_plugin_register_with_registrar(super_native_extensions_registrar);
|
||||
g_autoptr(FlPluginRegistrar) system_theme_registrar =
|
||||
fl_plugin_registry_get_registrar_for_plugin(registry, "SystemThemePlugin");
|
||||
system_theme_plugin_register_with_registrar(system_theme_registrar);
|
||||
|
||||
@ -8,13 +8,11 @@ list(APPEND FLUTTER_PLUGIN_LIST
|
||||
flutter_secure_storage_linux
|
||||
flutter_timezone
|
||||
gtk
|
||||
irondash_engine_context
|
||||
local_notifier
|
||||
media_kit_libs_linux
|
||||
open_file_linux
|
||||
screen_retriever_linux
|
||||
sqlite3_flutter_libs
|
||||
super_native_extensions
|
||||
system_theme
|
||||
tray_manager
|
||||
url_launcher_linux
|
||||
|
||||
@ -17,7 +17,6 @@ import file_selector_macos
|
||||
import flutter_inappwebview_macos
|
||||
import flutter_secure_storage_macos
|
||||
import flutter_timezone
|
||||
import irondash_engine_context
|
||||
import local_notifier
|
||||
import media_kit_libs_macos_audio
|
||||
import open_file_mac
|
||||
@ -27,7 +26,6 @@ import screen_retriever_macos
|
||||
import shared_preferences_foundation
|
||||
import sqflite_darwin
|
||||
import sqlite3_flutter_libs
|
||||
import super_native_extensions
|
||||
import system_theme
|
||||
import tray_manager
|
||||
import url_launcher_macos
|
||||
@ -46,7 +44,6 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
||||
InAppWebViewFlutterPlugin.register(with: registry.registrar(forPlugin: "InAppWebViewFlutterPlugin"))
|
||||
FlutterSecureStoragePlugin.register(with: registry.registrar(forPlugin: "FlutterSecureStoragePlugin"))
|
||||
FlutterTimezonePlugin.register(with: registry.registrar(forPlugin: "FlutterTimezonePlugin"))
|
||||
IrondashEngineContextPlugin.register(with: registry.registrar(forPlugin: "IrondashEngineContextPlugin"))
|
||||
LocalNotifierPlugin.register(with: registry.registrar(forPlugin: "LocalNotifierPlugin"))
|
||||
MediaKitLibsMacosAudioPlugin.register(with: registry.registrar(forPlugin: "MediaKitLibsMacosAudioPlugin"))
|
||||
OpenFilePlugin.register(with: registry.registrar(forPlugin: "OpenFilePlugin"))
|
||||
@ -56,7 +53,6 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
||||
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
|
||||
SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))
|
||||
Sqlite3FlutterLibsPlugin.register(with: registry.registrar(forPlugin: "Sqlite3FlutterLibsPlugin"))
|
||||
SuperNativeExtensionsPlugin.register(with: registry.registrar(forPlugin: "SuperNativeExtensionsPlugin"))
|
||||
SystemThemePlugin.register(with: registry.registrar(forPlugin: "SystemThemePlugin"))
|
||||
TrayManagerPlugin.register(with: registry.registrar(forPlugin: "TrayManagerPlugin"))
|
||||
UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
|
||||
|
||||
284
pubspec.lock
284
pubspec.lock
@ -230,10 +230,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: build_cli_annotations
|
||||
sha256: b59d2769769efd6c9ff6d4c4cede0be115a566afc591705c2040b707534b1172
|
||||
sha256: e563c2e01de8974566a1998410d3f6f03521788160a02503b0b1f1a46c7b3d95
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.0"
|
||||
version: "2.1.1"
|
||||
build_config:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -246,10 +246,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: build_daemon
|
||||
sha256: "8e928697a82be082206edb0b9c99c5a4ad6bc31c9e9b8b2f291ae65cd4a25daa"
|
||||
sha256: "409002f1adeea601018715d613115cfaf0e31f512cb80ae4534c79867ae2363d"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.0.4"
|
||||
version: "4.1.0"
|
||||
build_resolvers:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -374,10 +374,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: code_builder
|
||||
sha256: "0ec10bf4a89e4c613960bf1e8b42c64127021740fb21640c29c909826a5eea3e"
|
||||
sha256: "11654819532ba94c34de52ff5feb52bd81cba1de00ef2ed622fd50295f9d4243"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.10.1"
|
||||
version: "4.11.0"
|
||||
collection:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -422,10 +422,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: country_flags
|
||||
sha256: "78a7bf8aabd7ae1a90087f0c517471ac9ebfe07addc652692f58da0f0f833196"
|
||||
sha256: "714f2d415e74828eb08787d552a05e94cdf2cbe0607a5656f3e70087cd7bb7e0"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.3.0"
|
||||
version: "4.1.0"
|
||||
coverage:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -438,18 +438,18 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: cross_file
|
||||
sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670"
|
||||
sha256: "942a4791cd385a68ccb3b32c71c427aba508a1bb949b86dff2adbe4049f16239"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.3.4+2"
|
||||
version: "0.3.5"
|
||||
crypto:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: crypto
|
||||
sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855"
|
||||
sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.0.6"
|
||||
version: "3.0.7"
|
||||
csslib:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -470,10 +470,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: dart_mappable
|
||||
sha256: "15f41a35da8ee690bbfa0059fa241edeeaea73f89a2ba685b354ece07cd8ada6"
|
||||
sha256: "0e219930c9f7b9e0f14ae7c1de931c401875110fd5c67975b6b9492a6d3a531b"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.6.0"
|
||||
version: "4.6.1"
|
||||
dart_style:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -577,10 +577,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: drift
|
||||
sha256: "6aaea757f53bb035e8a3baedf3d1d53a79d6549a6c13d84f7546509da9372c7c"
|
||||
sha256: "540cf382a3bfa99b76e51514db5b0ebcd81ce3679b7c1c9cb9478ff3735e47a1"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.28.1"
|
||||
version: "2.28.2"
|
||||
drift_dev:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
@ -617,10 +617,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: envied
|
||||
sha256: "8c22863e9e8e58e3e987d1a6e2797d604d296999125340410ddc44e03e5941d9"
|
||||
sha256: cd95ddf0982e53f0b6664e889d4a9ce678b3907a59a5047923404375ef6dcacc
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.2.1"
|
||||
version: "1.3.1"
|
||||
envied_generator:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
@ -641,10 +641,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: expressions
|
||||
sha256: "308a621b602923dd8a0cf3072793b24850d06453eb49c6b698cbda41a282e904"
|
||||
sha256: f3b0e99563a9a1bde1138e728eb722f292cc7d2aec55d28136c49b1a370306c5
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.2.5+2"
|
||||
version: "0.2.5+3"
|
||||
fake_async:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -689,26 +689,26 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: file_selector
|
||||
sha256: "5019692b593455127794d5718304ff1ae15447dea286cdda9f0db2a796a1b828"
|
||||
sha256: "5f1d15a7f17115038f433d1b0ea57513cc9e29a9d5338d166cb0bef3fa90a7a0"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.0.3"
|
||||
version: "1.0.4"
|
||||
file_selector_android:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: file_selector_android
|
||||
sha256: "4be8ae7374c81daf88e49084a1d68dfe68466ef38a6a3d711cc0b83d53e22465"
|
||||
sha256: "2db9a2d05f66b49a3b45c4a7c2f040dd5fcd457ca30f39df7cdcf80b8cd7f2d4"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.5.1+16"
|
||||
version: "0.5.2+1"
|
||||
file_selector_ios:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: file_selector_ios
|
||||
sha256: fe9f52123af16bba4ad65bd7e03defbbb4b172a38a8e6aaa2a869a0c56a5f5fb
|
||||
sha256: fc3c3fc567cd9bcae784dfeb98d37c46a8ded9e8757d37ea67e975c399bc14e0
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.5.3+2"
|
||||
version: "0.5.3+3"
|
||||
file_selector_linux:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -721,10 +721,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: file_selector_macos
|
||||
sha256: "19124ff4a3d8864fdc62072b6a2ef6c222d55a3404fe14893a3c02744907b60c"
|
||||
sha256: "88707a3bec4b988aaed3b4df5d7441ee4e987f20b286cddca5d6a8270cab23f2"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.9.4+4"
|
||||
version: "0.9.4+5"
|
||||
file_selector_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -837,18 +837,18 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: flutter_gen_core
|
||||
sha256: eda54fdc5de08e7eeea663eb8442aafc8660b5a13fda4e0c9e572c64e50195fb
|
||||
sha256: b6bafbbd981da2f964eb45bcb8b8a7676a281084f8922c0c75de4cfbaa849311
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "5.11.0"
|
||||
version: "5.12.0"
|
||||
flutter_gen_runner:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: flutter_gen_runner
|
||||
sha256: "669bf8b7a9b4acbdcb7fcc5e12bf638aca19acedf43341714cbca3bf3a219521"
|
||||
sha256: c99b10af9d404e3f46fd1927e7d90099779e935e86022674c4c2a9e6c2a93b29
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "5.11.0"
|
||||
version: "5.12.0"
|
||||
flutter_hooks:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -954,16 +954,16 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: flutter_native_splash
|
||||
sha256: "8321a6d11a8d13977fa780c89de8d257cce3d841eecfb7a4cadffcc4f12d82dc"
|
||||
sha256: "4fb9f4113350d3a80841ce05ebf1976a36de622af7d19aca0ca9a9911c7ff002"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.4.6"
|
||||
version: "2.4.7"
|
||||
flutter_new_pipe_extractor:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
path: "."
|
||||
ref: HEAD
|
||||
resolved-ref: "916bde44cbead75125e8db842eb46bdcf211a79a"
|
||||
resolved-ref: b5de415ebb22ec7d4857554b2411893a72fa0026
|
||||
url: "https://github.com/KRTirtho/flutter_new_pipe_extractor.git"
|
||||
source: git
|
||||
version: "0.1.0"
|
||||
@ -971,10 +971,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: flutter_plugin_android_lifecycle
|
||||
sha256: b0694b7fb1689b0e6cc193b3f1fcac6423c4f93c74fb20b806c6b6f196db0c31
|
||||
sha256: "306f0596590e077338312f38837f595c04f28d6cdeeac392d3d74df2f0003687"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.30"
|
||||
version: "2.0.32"
|
||||
flutter_riverpod:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -1052,10 +1052,10 @@ packages:
|
||||
dependency: "direct overridden"
|
||||
description:
|
||||
name: flutter_svg
|
||||
sha256: b9c2ad5872518a27507ab432d1fb97e8813b05f0fc693f9d40fad06d073e0678
|
||||
sha256: "055de8921be7b8e8b98a233c7a5ef84b3a6fcc32f46f1ebf5b9bb3576d108355"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.2.1"
|
||||
version: "2.2.2"
|
||||
flutter_test:
|
||||
dependency: "direct dev"
|
||||
description: flutter
|
||||
@ -1147,10 +1147,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: get_it
|
||||
sha256: a4292e7cf67193f8e7c1258203104eb2a51ec8b3a04baa14695f4064c144297b
|
||||
sha256: ae78de7c3f2304b8d81f2bb6e320833e5e81de942188542328f074978cc0efa9
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "8.2.0"
|
||||
version: "8.3.0"
|
||||
glob:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1163,10 +1163,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: google_fonts
|
||||
sha256: ebc94ed30fd13cefd397cb1658b593f21571f014b7d1197eeb41fb95f05d899a
|
||||
sha256: "517b20870220c48752eafa0ba1a797a092fb22df0d89535fd9991e86ee2cdd9c"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.3.1"
|
||||
version: "6.3.2"
|
||||
graphs:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1221,10 +1221,10 @@ packages:
|
||||
description:
|
||||
path: "."
|
||||
ref: main
|
||||
resolved-ref: "01935a75640092af7947bfb21a497240376f0c83"
|
||||
resolved-ref: "32828156bc111d147709f8d644804227bbdfe8f1"
|
||||
url: "https://github.com/KRTirtho/hetu_spotube_plugin.git"
|
||||
source: git
|
||||
version: "0.0.1"
|
||||
version: "0.0.2"
|
||||
hetu_std:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -1326,10 +1326,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: image_picker_android
|
||||
sha256: "28f3987ca0ec702d346eae1d90eda59603a2101b52f1e234ded62cff1d5cfa6e"
|
||||
sha256: ca2a3b04d34e76157e9ae680ef16014fb4c2d20484e78417eaed6139330056f6
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.8.13+1"
|
||||
version: "0.8.13+7"
|
||||
image_picker_for_web:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1342,10 +1342,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: image_picker_ios
|
||||
sha256: eb06fe30bab4c4497bad449b66448f50edcc695f1c59408e78aa3a8059eb8f0e
|
||||
sha256: e675c22790bcc24e9abd455deead2b7a88de4b79f7327a281812f14de1a56f58
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.8.13"
|
||||
version: "0.8.13+1"
|
||||
image_picker_linux:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1358,18 +1358,18 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: image_picker_macos
|
||||
sha256: d58cd9d67793d52beefd6585b12050af0a7663c0c2a6ece0fb110a35d6955e04
|
||||
sha256: "86f0f15a309de7e1a552c12df9ce5b59fe927e71385329355aec4776c6a8ec91"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.2.2"
|
||||
version: "0.2.2+1"
|
||||
image_picker_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: image_picker_platform_interface
|
||||
sha256: "9f143b0dba3e459553209e20cc425c9801af48e6dfa4f01a0fcf927be3f41665"
|
||||
sha256: "567e056716333a1647c64bb6bd873cff7622233a5c3f694be28a583d4715690c"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.11.0"
|
||||
version: "2.11.1"
|
||||
image_picker_windows:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1403,10 +1403,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: invidious
|
||||
sha256: "27ef3a001df875665de15535dbc9099f44d12a59480018fb1e17377d4af0308d"
|
||||
sha256: "0da8ebc4c4110057f03302bbd54514b10642154d7be569e7994172f2202dcfe8"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.1.1"
|
||||
version: "0.1.2"
|
||||
io:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
@ -1415,30 +1415,14 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.0.5"
|
||||
irondash_engine_context:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: irondash_engine_context
|
||||
sha256: "2bb0bc13dfda9f5aaef8dde06ecc5feb1379f5bb387d59716d799554f3f305d7"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.5.5"
|
||||
irondash_message_channel:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: irondash_message_channel
|
||||
sha256: b4101669776509c76133b8917ab8cfc704d3ad92a8c450b92934dd8884a2f060
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.7.0"
|
||||
jiosaavn:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: jiosaavn
|
||||
sha256: d32b4f43f26488f942f5d7d19d748a1f2664ae3d41ff9c7d50eeb81705174bd2
|
||||
sha256: b6bde15c56398ebfd439825a64fb540a265773d1a518ba103e79988e13d16e1d
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.1.0"
|
||||
version: "0.1.1"
|
||||
jovial_misc:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1451,10 +1435,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: jovial_svg
|
||||
sha256: "6791b1435547bdc0793081a166d41a8a313ebc61e4e5136fb7a3218781fb9e50"
|
||||
sha256: "08dd24b800d48796c9c0227acb96eb00c6cacccb1d7de58d79fc924090049868"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.1.27"
|
||||
version: "1.1.28"
|
||||
js:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1483,10 +1467,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: leak_tracker
|
||||
sha256: "8dcda04c3fc16c14f48a7bb586d4be1f0d1572731b6d81d51772ef47c02081e0"
|
||||
sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "11.0.1"
|
||||
version: "11.0.2"
|
||||
leak_tracker_flutter_testing:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1523,10 +1507,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: logger
|
||||
sha256: "55d6c23a6c15db14920e037fe7e0dc32e7cdaf3b64b4b25df2d541b5b6b81c0c"
|
||||
sha256: a7967e31b703831a893bbc3c3dd11db08126fe5f369b5c648a36f821979f5be3
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.6.1"
|
||||
version: "2.6.2"
|
||||
logging:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -1572,34 +1556,34 @@ packages:
|
||||
description:
|
||||
path: media_kit
|
||||
ref: HEAD
|
||||
resolved-ref: c9617f570b8c0ba02857e721997f78c053a856c1
|
||||
resolved-ref: d310049f24196250d876efb02b9ff56fa9ef5068
|
||||
url: "https://github.com/media-kit/media-kit"
|
||||
source: git
|
||||
version: "1.2.0"
|
||||
version: "1.2.1"
|
||||
media_kit_libs_android_audio:
|
||||
dependency: "direct overridden"
|
||||
description:
|
||||
path: "libs/android/media_kit_libs_android_audio"
|
||||
ref: HEAD
|
||||
resolved-ref: c9617f570b8c0ba02857e721997f78c053a856c1
|
||||
resolved-ref: d310049f24196250d876efb02b9ff56fa9ef5068
|
||||
url: "https://github.com/media-kit/media-kit"
|
||||
source: git
|
||||
version: "1.3.7"
|
||||
version: "1.3.8"
|
||||
media_kit_libs_audio:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
path: "libs/universal/media_kit_libs_audio"
|
||||
ref: HEAD
|
||||
resolved-ref: c9617f570b8c0ba02857e721997f78c053a856c1
|
||||
resolved-ref: d310049f24196250d876efb02b9ff56fa9ef5068
|
||||
url: "https://github.com/media-kit/media-kit"
|
||||
source: git
|
||||
version: "1.0.6"
|
||||
version: "1.0.7"
|
||||
media_kit_libs_ios_audio:
|
||||
dependency: "direct overridden"
|
||||
description:
|
||||
path: "libs/ios/media_kit_libs_ios_audio"
|
||||
ref: HEAD
|
||||
resolved-ref: c9617f570b8c0ba02857e721997f78c053a856c1
|
||||
resolved-ref: d310049f24196250d876efb02b9ff56fa9ef5068
|
||||
url: "https://github.com/media-kit/media-kit"
|
||||
source: git
|
||||
version: "1.1.4"
|
||||
@ -1608,7 +1592,7 @@ packages:
|
||||
description:
|
||||
path: "libs/linux/media_kit_libs_linux"
|
||||
ref: HEAD
|
||||
resolved-ref: c9617f570b8c0ba02857e721997f78c053a856c1
|
||||
resolved-ref: d310049f24196250d876efb02b9ff56fa9ef5068
|
||||
url: "https://github.com/media-kit/media-kit"
|
||||
source: git
|
||||
version: "1.2.1"
|
||||
@ -1617,7 +1601,7 @@ packages:
|
||||
description:
|
||||
path: "libs/macos/media_kit_libs_macos_audio"
|
||||
ref: HEAD
|
||||
resolved-ref: c9617f570b8c0ba02857e721997f78c053a856c1
|
||||
resolved-ref: d310049f24196250d876efb02b9ff56fa9ef5068
|
||||
url: "https://github.com/media-kit/media-kit"
|
||||
source: git
|
||||
version: "1.1.4"
|
||||
@ -1626,7 +1610,7 @@ packages:
|
||||
description:
|
||||
path: "libs/windows/media_kit_libs_windows_audio"
|
||||
ref: HEAD
|
||||
resolved-ref: c9617f570b8c0ba02857e721997f78c053a856c1
|
||||
resolved-ref: d310049f24196250d876efb02b9ff56fa9ef5068
|
||||
url: "https://github.com/media-kit/media-kit"
|
||||
source: git
|
||||
version: "1.0.9"
|
||||
@ -1682,10 +1666,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: oauth2
|
||||
sha256: c84470642cbb2bec450ccab2f8520c079cd1ca546a76ffd5c40589e07f4e8bf4
|
||||
sha256: "890a032ba1b44fa8dcfeba500e613df0ecbe16aeace13bb0fe1d25eb42cda5b8"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.3"
|
||||
version: "2.0.5"
|
||||
octo_image:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1826,18 +1810,18 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: path_provider_android
|
||||
sha256: "993381400e94d18469750e5b9dcb8206f15bc09f9da86b9e44a9b0092a0066db"
|
||||
sha256: e122c5ea805bb6773bb12ce667611265980940145be920cd09a4b0ec0285cb16
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.2.18"
|
||||
version: "2.2.20"
|
||||
path_provider_foundation:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: path_provider_foundation
|
||||
sha256: "16eef174aacb07e09c351502740fa6254c165757638eba1e9116b0a781201bbd"
|
||||
sha256: efaec349ddfc181528345c56f8eda9d6cccd71c177511b132c6a0ddaefaa2738
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.4.2"
|
||||
version: "2.4.3"
|
||||
path_provider_linux:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1914,10 +1898,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: petitparser
|
||||
sha256: "07c8f0b1913bcde1ff0d26e57ace2f3012ccbf2b204e070290dad3bb22797646"
|
||||
sha256: "1a97266a94f7350d30ae522c0af07890c70b8e62c71e8e3920d1db4d23c057d1"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.1.0"
|
||||
version: "7.0.1"
|
||||
phonecodes:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1934,14 +1918,6 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.1.2"
|
||||
pixel_snap:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: pixel_snap
|
||||
sha256: "677410ea37b07cd37ecb6d5e6c0d8d7615a7cf3bd92ba406fd1ac57e937d1fb0"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.1.5"
|
||||
platform:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1970,10 +1946,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: pool
|
||||
sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a"
|
||||
sha256: "978783255c543aa3586a1b3c21f6e9d720eb315376a915872c61ef8b5c20177d"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.5.1"
|
||||
version: "1.5.2"
|
||||
posix:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -2034,10 +2010,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: random_user_agents
|
||||
sha256: "19facde509a2482dababb454faf2aceff797a6ae08e80f91268c0c8a7420f03b"
|
||||
sha256: "95647149687167e82a7b39e1b4616fdebb574981b71b6f0cfca21b69f36293a8"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.0.15"
|
||||
version: "1.0.17"
|
||||
recase:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -2131,10 +2107,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: shadcn_flutter
|
||||
sha256: af83de199b7c3a965ab24e293cfcafe2764c12b7f911f5b1a427c332029262d9
|
||||
sha256: "8c976b6ef980fb107f5f618153185e5a466af5cc12dd02fda1360d84e0e449f2"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.0.44"
|
||||
version: "0.0.46"
|
||||
shared_preferences:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -2147,18 +2123,18 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: shared_preferences_android
|
||||
sha256: a2608114b1ffdcbc9c120eb71a0e207c71da56202852d4aab8a5e30a82269e74
|
||||
sha256: "34266009473bf71d748912da4bf62d439185226c03e01e2d9687bc65bbfcb713"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.4.12"
|
||||
version: "2.4.15"
|
||||
shared_preferences_foundation:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: shared_preferences_foundation
|
||||
sha256: "6a52cfcdaeac77cad8c97b539ff688ccfc458c007b4db12be584fbe5c0e49e03"
|
||||
sha256: "1c33a907142607c40a7542768ec9badfd16293bac51da3a4482623d15845f88b"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.5.4"
|
||||
version: "2.5.5"
|
||||
shared_preferences_linux:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -2332,14 +2308,6 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.10.1"
|
||||
sprintf:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: sprintf
|
||||
sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "7.0.0"
|
||||
sqflite:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -2384,18 +2352,18 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: sqlite3
|
||||
sha256: f393d92c71bdcc118d6203d07c991b9be0f84b1a6f89dd4f7eed348131329924
|
||||
sha256: "3145bd74dcdb4fd6f5c6dda4d4e4490a8087d7f286a14dee5d37087290f0f8a2"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.9.0"
|
||||
version: "2.9.4"
|
||||
sqlite3_flutter_libs:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: sqlite3_flutter_libs
|
||||
sha256: "2b03273e71867a8a4d030861fc21706200debe5c5858a4b9e58f4a1c129586a4"
|
||||
sha256: "69c80d812ef2500202ebd22002cbfc1b6565e9ff56b2f971e757fac5d42294df"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.5.39"
|
||||
version: "0.5.40"
|
||||
sqlparser:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -2452,22 +2420,6 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.0.3"
|
||||
super_clipboard:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: super_clipboard
|
||||
sha256: e73f3bb7e66cc9260efa1dc507f979138e7e106c3521e2dda2d0311f6d728a16
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.9.1"
|
||||
super_native_extensions:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: super_native_extensions
|
||||
sha256: b9611dcb68f1047d6f3ef11af25e4e68a21b1a705bbcc3eb8cb4e9f5c3148569
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.9.1"
|
||||
sync_http:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -2484,14 +2436,6 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.4.0"
|
||||
syntax_highlight:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: syntax_highlight
|
||||
sha256: "4d3ba40658cadba6ba55d697f29f00b43538ebb6eb4a0ca0e895c568eaced138"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.5.0"
|
||||
system_theme:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -2576,10 +2520,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: tray_manager
|
||||
sha256: "537e539f48cd82d8ee2240d4330158c7b44c7e043e8e18b5811f2f8f6b7df25a"
|
||||
sha256: c5fd83b0ae4d80be6eaedfad87aaefab8787b333b8ebd064b0e442a81006035b
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.5.1"
|
||||
version: "0.5.2"
|
||||
type_plus:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -2640,18 +2584,18 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: url_launcher_android
|
||||
sha256: "69ee86740f2847b9a4ba6cffa74ed12ce500bbe2b07f3dc1e643439da60637b7"
|
||||
sha256: "5c8b6c2d89a78f5a1cca70a73d9d5f86c701b36b42f9c9dac7bad592113c28e9"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.3.18"
|
||||
version: "6.3.24"
|
||||
url_launcher_ios:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: url_launcher_ios
|
||||
sha256: d80b3f567a617cb923546034cc94bfe44eb15f989fe670b37f26abdb9d939cb7
|
||||
sha256: "6b63f1441e4f653ae799166a72b50b1767321ecc263a57aadf825a7a2a5477d9"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.3.4"
|
||||
version: "6.3.5"
|
||||
url_launcher_linux:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -2664,10 +2608,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: url_launcher_macos
|
||||
sha256: c043a77d6600ac9c38300567f33ef12b0ef4f4783a2c1f00231d2b1941fea13f
|
||||
sha256: "8262208506252a3ed4ff5c0dc1e973d2c0e0ef337d0a074d35634da5d44397c9"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.2.3"
|
||||
version: "3.2.4"
|
||||
url_launcher_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -2696,10 +2640,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: uuid
|
||||
sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff
|
||||
sha256: a11b666489b1954e01d992f3d601b1804a33937b5a8fe677bd26b8a9f96f96e8
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.5.1"
|
||||
version: "4.5.2"
|
||||
vector_graphics:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -2768,10 +2712,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: watcher
|
||||
sha256: "5bf046f41320ac97a469d506261797f35254fa61c641741ef32dacda98b7d39c"
|
||||
sha256: "592ab6e2892f67760543fb712ff0177f4ec76c031f02f5b4ff8d3fc5eb9fb61a"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.1.3"
|
||||
version: "1.1.4"
|
||||
web:
|
||||
dependency: "direct overridden"
|
||||
description:
|
||||
@ -2824,10 +2768,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: win32
|
||||
sha256: "66814138c3562338d05613a6e368ed8cfb237ad6d64a9e9334be3f309acfca03"
|
||||
sha256: d7cb55e04cd34096cd3a79b3330245f54cb96a370a1c27adb3c84b917de8b08e
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "5.14.0"
|
||||
version: "5.15.0"
|
||||
win32_registry:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -2856,10 +2800,10 @@ packages:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: xml
|
||||
sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226
|
||||
sha256: "971043b3a0d3da28727e40ed3e0b5d18b742fa5a68665cca88e74b7876d5e025"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.5.0"
|
||||
version: "6.6.1"
|
||||
yaml:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -2872,10 +2816,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: youtube_explode_dart
|
||||
sha256: "9ff345caf8351c59eb1b7560837f761e08d2beaea3b4187637942715a31a6f58"
|
||||
sha256: "947ba05e0c4f050743e480e7bca3575ff6427d86cc898c1a69f5e1d188cdc9e0"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.5.2"
|
||||
version: "2.5.3"
|
||||
yt_dlp_dart:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -2887,4 +2831,4 @@ packages:
|
||||
version: "1.0.0"
|
||||
sdks:
|
||||
dart: ">=3.9.0 <4.0.0"
|
||||
flutter: ">=3.35.1"
|
||||
flutter: ">=3.35.0"
|
||||
|
||||
@ -14,13 +14,11 @@
|
||||
#include <flutter_inappwebview_windows/flutter_inappwebview_windows_plugin_c_api.h>
|
||||
#include <flutter_secure_storage_windows/flutter_secure_storage_windows_plugin.h>
|
||||
#include <flutter_timezone/flutter_timezone_plugin_c_api.h>
|
||||
#include <irondash_engine_context/irondash_engine_context_plugin_c_api.h>
|
||||
#include <local_notifier/local_notifier_plugin.h>
|
||||
#include <media_kit_libs_windows_audio/media_kit_libs_windows_audio_plugin_c_api.h>
|
||||
#include <permission_handler_windows/permission_handler_windows_plugin.h>
|
||||
#include <screen_retriever_windows/screen_retriever_windows_plugin_c_api.h>
|
||||
#include <sqlite3_flutter_libs/sqlite3_flutter_libs_plugin.h>
|
||||
#include <super_native_extensions/super_native_extensions_plugin_c_api.h>
|
||||
#include <system_theme/system_theme_plugin.h>
|
||||
#include <tray_manager/tray_manager_plugin.h>
|
||||
#include <url_launcher_windows/url_launcher_windows.h>
|
||||
@ -43,8 +41,6 @@ void RegisterPlugins(flutter::PluginRegistry* registry) {
|
||||
registry->GetRegistrarForPlugin("FlutterSecureStorageWindowsPlugin"));
|
||||
FlutterTimezonePluginCApiRegisterWithRegistrar(
|
||||
registry->GetRegistrarForPlugin("FlutterTimezonePluginCApi"));
|
||||
IrondashEngineContextPluginCApiRegisterWithRegistrar(
|
||||
registry->GetRegistrarForPlugin("IrondashEngineContextPluginCApi"));
|
||||
LocalNotifierPluginRegisterWithRegistrar(
|
||||
registry->GetRegistrarForPlugin("LocalNotifierPlugin"));
|
||||
MediaKitLibsWindowsAudioPluginCApiRegisterWithRegistrar(
|
||||
@ -55,8 +51,6 @@ void RegisterPlugins(flutter::PluginRegistry* registry) {
|
||||
registry->GetRegistrarForPlugin("ScreenRetrieverWindowsPluginCApi"));
|
||||
Sqlite3FlutterLibsPluginRegisterWithRegistrar(
|
||||
registry->GetRegistrarForPlugin("Sqlite3FlutterLibsPlugin"));
|
||||
SuperNativeExtensionsPluginCApiRegisterWithRegistrar(
|
||||
registry->GetRegistrarForPlugin("SuperNativeExtensionsPluginCApi"));
|
||||
SystemThemePluginRegisterWithRegistrar(
|
||||
registry->GetRegistrarForPlugin("SystemThemePlugin"));
|
||||
TrayManagerPluginRegisterWithRegistrar(
|
||||
|
||||
@ -11,13 +11,11 @@ list(APPEND FLUTTER_PLUGIN_LIST
|
||||
flutter_inappwebview_windows
|
||||
flutter_secure_storage_windows
|
||||
flutter_timezone
|
||||
irondash_engine_context
|
||||
local_notifier
|
||||
media_kit_libs_windows_audio
|
||||
permission_handler_windows
|
||||
screen_retriever_windows
|
||||
sqlite3_flutter_libs
|
||||
super_native_extensions
|
||||
system_theme
|
||||
tray_manager
|
||||
url_launcher_windows
|
||||
|
||||
Loading…
Reference in New Issue
Block a user