chore: fix connect freezed model not working

This commit is contained in:
Kingkor Roy Tirtho 2025-06-19 15:52:05 +06:00
parent 1eb0b5f847
commit 86e55f7a3d
7 changed files with 202 additions and 92 deletions

View File

@ -33,36 +33,62 @@ WebSocketLoadEventData _$WebSocketLoadEventDataFromJson(
/// @nodoc
mixin _$WebSocketLoadEventData {
List<dynamic> get tracks => throw _privateConstructorUsedError;
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> get tracks => throw _privateConstructorUsedError;
Object? get collection => throw _privateConstructorUsedError;
int? get initialIndex => throw _privateConstructorUsedError;
@optionalTypeArgs
TResult when<TResult extends Object?>({
required TResult Function(List<SpotubeFullTrackObject> tracks,
SpotubeSimplePlaylistObject? collection, int? initialIndex)
required TResult Function(
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimplePlaylistObject? collection,
int? initialIndex)
playlist,
required TResult Function(List<SpotubeFullTrackObject> tracks,
SpotubeSimpleAlbumObject? collection, int? initialIndex)
required TResult Function(
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimpleAlbumObject? collection,
int? initialIndex)
album,
}) =>
throw _privateConstructorUsedError;
@optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>({
TResult? Function(List<SpotubeFullTrackObject> tracks,
SpotubeSimplePlaylistObject? collection, int? initialIndex)?
TResult? Function(
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimplePlaylistObject? collection,
int? initialIndex)?
playlist,
TResult? Function(List<SpotubeFullTrackObject> tracks,
SpotubeSimpleAlbumObject? collection, int? initialIndex)?
TResult? Function(
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimpleAlbumObject? collection,
int? initialIndex)?
album,
}) =>
throw _privateConstructorUsedError;
@optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({
TResult Function(List<SpotubeFullTrackObject> tracks,
SpotubeSimplePlaylistObject? collection, int? initialIndex)?
TResult Function(
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimplePlaylistObject? collection,
int? initialIndex)?
playlist,
TResult Function(List<SpotubeFullTrackObject> tracks,
SpotubeSimpleAlbumObject? collection, int? initialIndex)?
TResult Function(
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimpleAlbumObject? collection,
int? initialIndex)?
album,
required TResult orElse(),
}) =>
@ -103,7 +129,11 @@ abstract class $WebSocketLoadEventDataCopyWith<$Res> {
$Res Function(WebSocketLoadEventData) then) =
_$WebSocketLoadEventDataCopyWithImpl<$Res, WebSocketLoadEventData>;
@useResult
$Res call({List<dynamic> tracks, int? initialIndex});
$Res call(
{@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
int? initialIndex});
}
/// @nodoc
@ -129,7 +159,7 @@ class _$WebSocketLoadEventDataCopyWithImpl<$Res,
tracks: null == tracks
? _value.tracks
: tracks // ignore: cast_nullable_to_non_nullable
as List<dynamic>,
as List<SpotubeTrackObject>,
initialIndex: freezed == initialIndex
? _value.initialIndex
: initialIndex // ignore: cast_nullable_to_non_nullable
@ -148,7 +178,9 @@ abstract class _$$WebSocketLoadEventDataPlaylistImplCopyWith<$Res>
@override
@useResult
$Res call(
{List<SpotubeFullTrackObject> tracks,
{@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimplePlaylistObject? collection,
int? initialIndex});
@ -178,7 +210,7 @@ class __$$WebSocketLoadEventDataPlaylistImplCopyWithImpl<$Res>
tracks: null == tracks
? _value._tracks
: tracks // ignore: cast_nullable_to_non_nullable
as List<SpotubeFullTrackObject>,
as List<SpotubeTrackObject>,
collection: freezed == collection
? _value.collection
: collection // ignore: cast_nullable_to_non_nullable
@ -211,7 +243,9 @@ class __$$WebSocketLoadEventDataPlaylistImplCopyWithImpl<$Res>
class _$WebSocketLoadEventDataPlaylistImpl
extends WebSocketLoadEventDataPlaylist {
_$WebSocketLoadEventDataPlaylistImpl(
{required final List<SpotubeFullTrackObject> tracks,
{@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
required final List<SpotubeTrackObject> tracks,
this.collection,
this.initialIndex,
final String? $type})
@ -223,9 +257,11 @@ class _$WebSocketLoadEventDataPlaylistImpl
Map<String, dynamic> json) =>
_$$WebSocketLoadEventDataPlaylistImplFromJson(json);
final List<SpotubeFullTrackObject> _tracks;
final List<SpotubeTrackObject> _tracks;
@override
List<SpotubeFullTrackObject> get tracks {
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> get tracks {
if (_tracks is EqualUnmodifiableListView) return _tracks;
// ignore: implicit_dynamic_type
return EqualUnmodifiableListView(_tracks);
@ -274,11 +310,19 @@ class _$WebSocketLoadEventDataPlaylistImpl
@override
@optionalTypeArgs
TResult when<TResult extends Object?>({
required TResult Function(List<SpotubeFullTrackObject> tracks,
SpotubeSimplePlaylistObject? collection, int? initialIndex)
required TResult Function(
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimplePlaylistObject? collection,
int? initialIndex)
playlist,
required TResult Function(List<SpotubeFullTrackObject> tracks,
SpotubeSimpleAlbumObject? collection, int? initialIndex)
required TResult Function(
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimpleAlbumObject? collection,
int? initialIndex)
album,
}) {
return playlist(tracks, collection, initialIndex);
@ -287,11 +331,19 @@ class _$WebSocketLoadEventDataPlaylistImpl
@override
@optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>({
TResult? Function(List<SpotubeFullTrackObject> tracks,
SpotubeSimplePlaylistObject? collection, int? initialIndex)?
TResult? Function(
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimplePlaylistObject? collection,
int? initialIndex)?
playlist,
TResult? Function(List<SpotubeFullTrackObject> tracks,
SpotubeSimpleAlbumObject? collection, int? initialIndex)?
TResult? Function(
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimpleAlbumObject? collection,
int? initialIndex)?
album,
}) {
return playlist?.call(tracks, collection, initialIndex);
@ -300,11 +352,19 @@ class _$WebSocketLoadEventDataPlaylistImpl
@override
@optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({
TResult Function(List<SpotubeFullTrackObject> tracks,
SpotubeSimplePlaylistObject? collection, int? initialIndex)?
TResult Function(
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimplePlaylistObject? collection,
int? initialIndex)?
playlist,
TResult Function(List<SpotubeFullTrackObject> tracks,
SpotubeSimpleAlbumObject? collection, int? initialIndex)?
TResult Function(
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimpleAlbumObject? collection,
int? initialIndex)?
album,
required TResult orElse(),
}) {
@ -355,7 +415,9 @@ class _$WebSocketLoadEventDataPlaylistImpl
abstract class WebSocketLoadEventDataPlaylist extends WebSocketLoadEventData {
factory WebSocketLoadEventDataPlaylist(
{required final List<SpotubeFullTrackObject> tracks,
{@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
required final List<SpotubeTrackObject> tracks,
final SpotubeSimplePlaylistObject? collection,
final int? initialIndex}) = _$WebSocketLoadEventDataPlaylistImpl;
WebSocketLoadEventDataPlaylist._() : super._();
@ -364,7 +426,9 @@ abstract class WebSocketLoadEventDataPlaylist extends WebSocketLoadEventData {
_$WebSocketLoadEventDataPlaylistImpl.fromJson;
@override
List<SpotubeFullTrackObject> get tracks;
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> get tracks;
@override
SpotubeSimplePlaylistObject? get collection;
@override
@ -389,7 +453,9 @@ abstract class _$$WebSocketLoadEventDataAlbumImplCopyWith<$Res>
@override
@useResult
$Res call(
{List<SpotubeFullTrackObject> tracks,
{@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimpleAlbumObject? collection,
int? initialIndex});
@ -419,7 +485,7 @@ class __$$WebSocketLoadEventDataAlbumImplCopyWithImpl<$Res>
tracks: null == tracks
? _value._tracks
: tracks // ignore: cast_nullable_to_non_nullable
as List<SpotubeFullTrackObject>,
as List<SpotubeTrackObject>,
collection: freezed == collection
? _value.collection
: collection // ignore: cast_nullable_to_non_nullable
@ -450,7 +516,9 @@ class __$$WebSocketLoadEventDataAlbumImplCopyWithImpl<$Res>
@JsonSerializable()
class _$WebSocketLoadEventDataAlbumImpl extends WebSocketLoadEventDataAlbum {
_$WebSocketLoadEventDataAlbumImpl(
{required final List<SpotubeFullTrackObject> tracks,
{@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
required final List<SpotubeTrackObject> tracks,
this.collection,
this.initialIndex,
final String? $type})
@ -462,9 +530,11 @@ class _$WebSocketLoadEventDataAlbumImpl extends WebSocketLoadEventDataAlbum {
Map<String, dynamic> json) =>
_$$WebSocketLoadEventDataAlbumImplFromJson(json);
final List<SpotubeFullTrackObject> _tracks;
final List<SpotubeTrackObject> _tracks;
@override
List<SpotubeFullTrackObject> get tracks {
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> get tracks {
if (_tracks is EqualUnmodifiableListView) return _tracks;
// ignore: implicit_dynamic_type
return EqualUnmodifiableListView(_tracks);
@ -512,11 +582,19 @@ class _$WebSocketLoadEventDataAlbumImpl extends WebSocketLoadEventDataAlbum {
@override
@optionalTypeArgs
TResult when<TResult extends Object?>({
required TResult Function(List<SpotubeFullTrackObject> tracks,
SpotubeSimplePlaylistObject? collection, int? initialIndex)
required TResult Function(
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimplePlaylistObject? collection,
int? initialIndex)
playlist,
required TResult Function(List<SpotubeFullTrackObject> tracks,
SpotubeSimpleAlbumObject? collection, int? initialIndex)
required TResult Function(
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimpleAlbumObject? collection,
int? initialIndex)
album,
}) {
return album(tracks, collection, initialIndex);
@ -525,11 +603,19 @@ class _$WebSocketLoadEventDataAlbumImpl extends WebSocketLoadEventDataAlbum {
@override
@optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>({
TResult? Function(List<SpotubeFullTrackObject> tracks,
SpotubeSimplePlaylistObject? collection, int? initialIndex)?
TResult? Function(
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimplePlaylistObject? collection,
int? initialIndex)?
playlist,
TResult? Function(List<SpotubeFullTrackObject> tracks,
SpotubeSimpleAlbumObject? collection, int? initialIndex)?
TResult? Function(
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimpleAlbumObject? collection,
int? initialIndex)?
album,
}) {
return album?.call(tracks, collection, initialIndex);
@ -538,11 +624,19 @@ class _$WebSocketLoadEventDataAlbumImpl extends WebSocketLoadEventDataAlbum {
@override
@optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({
TResult Function(List<SpotubeFullTrackObject> tracks,
SpotubeSimplePlaylistObject? collection, int? initialIndex)?
TResult Function(
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimplePlaylistObject? collection,
int? initialIndex)?
playlist,
TResult Function(List<SpotubeFullTrackObject> tracks,
SpotubeSimpleAlbumObject? collection, int? initialIndex)?
TResult Function(
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimpleAlbumObject? collection,
int? initialIndex)?
album,
required TResult orElse(),
}) {
@ -593,7 +687,9 @@ class _$WebSocketLoadEventDataAlbumImpl extends WebSocketLoadEventDataAlbum {
abstract class WebSocketLoadEventDataAlbum extends WebSocketLoadEventData {
factory WebSocketLoadEventDataAlbum(
{required final List<SpotubeFullTrackObject> tracks,
{@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
required final List<SpotubeTrackObject> tracks,
final SpotubeSimpleAlbumObject? collection,
final int? initialIndex}) = _$WebSocketLoadEventDataAlbumImpl;
WebSocketLoadEventDataAlbum._() : super._();
@ -602,7 +698,9 @@ abstract class WebSocketLoadEventDataAlbum extends WebSocketLoadEventData {
_$WebSocketLoadEventDataAlbumImpl.fromJson;
@override
List<SpotubeFullTrackObject> get tracks;
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> get tracks;
@override
SpotubeSimpleAlbumObject? get collection;
@override

View File

@ -10,7 +10,7 @@ _$WebSocketLoadEventDataPlaylistImpl
_$$WebSocketLoadEventDataPlaylistImplFromJson(Map json) =>
_$WebSocketLoadEventDataPlaylistImpl(
tracks: (json['tracks'] as List<dynamic>)
.map((e) => SpotubeFullTrackObject.fromJson(
.map((e) => SpotubeTrackObject.fromJson(
Map<String, dynamic>.from(e as Map)))
.toList(),
collection: json['collection'] == null
@ -34,8 +34,8 @@ _$WebSocketLoadEventDataAlbumImpl _$$WebSocketLoadEventDataAlbumImplFromJson(
Map json) =>
_$WebSocketLoadEventDataAlbumImpl(
tracks: (json['tracks'] as List<dynamic>)
.map((e) => SpotubeFullTrackObject.fromJson(
Map<String, dynamic>.from(e as Map)))
.map((e) =>
SpotubeTrackObject.fromJson(Map<String, dynamic>.from(e as Map)))
.toList(),
collection: json['collection'] == null
? null

View File

@ -5,13 +5,21 @@ class WebSocketLoadEventData with _$WebSocketLoadEventData {
const WebSocketLoadEventData._();
factory WebSocketLoadEventData.playlist({
required List<SpotubeFullTrackObject> tracks,
@Assert(
"tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject",
)
required List<SpotubeTrackObject> tracks,
SpotubeSimplePlaylistObject? collection,
int? initialIndex,
}) = WebSocketLoadEventDataPlaylist;
factory WebSocketLoadEventData.album({
required List<SpotubeFullTrackObject> tracks,
@Assert(
"tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject",
)
required List<SpotubeTrackObject> tracks,
SpotubeSimpleAlbumObject? collection,
int? initialIndex,
}) = WebSocketLoadEventDataAlbum;

View File

@ -73,7 +73,7 @@ class TrackSource with _$TrackSource {
}
@JsonSerializable()
abstract class BasicSourcedTrack {
class BasicSourcedTrack {
final TrackSourceQuery query;
final AudioSource source;
final TrackSourceInfo info;

View File

@ -7,7 +7,6 @@ import 'package:shadcn_flutter/shadcn_flutter.dart' hide Image;
import 'package:shadcn_flutter/shadcn_flutter_extension.dart';
import 'package:spotube/collections/assets.gen.dart';
import 'package:spotube/collections/routes.gr.dart';
import 'package:spotube/collections/spotube_icons.dart';
import 'package:spotube/components/playbutton_view/playbutton_view.dart';
import 'package:spotube/models/metadata/metadata.dart';
@ -61,14 +60,12 @@ class UserPlaylistsPage extends HookConsumerWidget {
if (searchText.value.isEmpty) {
return [
if (likedTracksPlaylist != null) likedTracksPlaylist,
...?playlistsQuery.asData?.value.items
as List<SpotubeSimplePlaylistObject>?,
...?playlistsQuery.asData?.value.items,
];
}
return [
if (likedTracksPlaylist != null) likedTracksPlaylist,
...?playlistsQuery.asData?.value.items
as List<SpotubeSimplePlaylistObject>?,
...?playlistsQuery.asData?.value.items,
]
.map((e) => (weightedRatio(e.name, searchText.value), e))
.sorted((a, b) => b.$1.compareTo(a.$1))
@ -116,19 +113,19 @@ class UserPlaylistsPage extends HookConsumerWidget {
SliverPadding(
padding: const EdgeInsets.symmetric(horizontal: 8),
sliver: PlaybuttonView(
leading: Expanded(
leading: const Expanded(
child: Row(
children: [
const PlaylistCreateDialogButton(),
const Gap(10),
Button.primary(
leading: const Icon(SpotubeIcons.magic),
child: Text(context.l10n.generate),
onPressed: () {
context.navigateTo(const PlaylistGeneratorRoute());
},
),
const Gap(10),
PlaylistCreateDialogButton(),
// const Gap(10),
// Button.primary(
// leading: const Icon(SpotubeIcons.magic),
// child: Text(context.l10n.generate),
// onPressed: () {
// context.navigateTo(const PlaylistGeneratorRoute());
// },
// ),
// const Gap(10),
],
),
),

View File

@ -983,34 +983,35 @@ packages:
dependency: "direct main"
description:
name: flutter_secure_storage
sha256: "165164745e6afb5c0e3e3fcc72a012fb9e58496fb26ffb92cf22e16a821e85d0"
sha256: "9cad52d75ebc511adfae3d447d5d13da15a55a92c9410e50f67335b6d21d16ea"
url: "https://pub.dev"
source: hosted
version: "9.2.2"
version: "9.2.4"
flutter_secure_storage_linux:
dependency: transitive
dependency: "direct overridden"
description:
name: flutter_secure_storage_linux
sha256: "4d91bfc23047422cbcd73ac684bc169859ee766482517c22172c86596bf1464b"
url: "https://pub.dev"
source: hosted
version: "1.2.1"
path: flutter_secure_storage_linux
ref: patch-2
resolved-ref: f076cbb65b075afd6e3b648122987a67306dc298
url: "https://github.com/m-berto/flutter_secure_storage.git"
source: git
version: "2.0.1"
flutter_secure_storage_macos:
dependency: transitive
description:
name: flutter_secure_storage_macos
sha256: "1693ab11121a5f925bbea0be725abfcfbbcf36c1e29e571f84a0c0f436147a81"
sha256: "6c0a2795a2d1de26ae202a0d78527d163f4acbb11cde4c75c670f3a0fc064247"
url: "https://pub.dev"
source: hosted
version: "3.1.2"
version: "3.1.3"
flutter_secure_storage_platform_interface:
dependency: transitive
dependency: "direct overridden"
description:
name: flutter_secure_storage_platform_interface
sha256: cf91ad32ce5adef6fba4d736a542baca9daf3beac4db2d04be350b87f69ac4a8
sha256: b8337d3d52e429e6c0a7710e38cf9742a3bb05844bd927450eb94f80c11ef85d
url: "https://pub.dev"
source: hosted
version: "1.1.2"
version: "2.0.0"
flutter_secure_storage_web:
dependency: transitive
description:
@ -2516,10 +2517,10 @@ packages:
dependency: "direct main"
description:
name: tray_manager
sha256: c2da0f0f1ddb455e721cf68d05d1281fec75cf5df0a1d3cb67b6ca0bdfd5709d
sha256: ad18c4cd73003097d182884bacb0578ad2865f3ab842a0ad00f6d043ed49eaf0
url: "https://pub.dev"
source: hosted
version: "0.4.0"
version: "0.5.0"
type_plus:
dependency: transitive
description:

View File

@ -62,7 +62,7 @@ dependencies:
sdk: flutter
flutter_native_splash: ^2.4.6
flutter_riverpod: ^2.5.1
flutter_secure_storage: ^9.0.0
flutter_secure_storage: ^9.2.4
flutter_sharing_intent: ^1.1.0
flutter_undraw: ^0.2.1
form_builder_validators: ^11.1.1
@ -119,7 +119,7 @@ dependencies:
test: ^1.25.7
timezone: ^0.10.0
titlebar_buttons: ^1.0.0
tray_manager: ^0.4.0
tray_manager: ^0.5.0
url_launcher: ^6.2.6
uuid: ^4.4.0
version: ^3.0.2
@ -187,6 +187,12 @@ dependency_overrides:
flutter_svg: ^2.0.17
intl: any
collection: any
flutter_secure_storage_linux:
git:
url: https://github.com/m-berto/flutter_secure_storage.git
ref: patch-2
path: flutter_secure_storage_linux
flutter_secure_storage_platform_interface: 2.0.0
flutter:
generate: true