fix lyrics button not showing
This commit is contained in:
parent
070ab2d6f2
commit
cf3829e103
|
@ -60,8 +60,8 @@ class Track extends DeezerMediaItem {
|
||||||
int? trackNumber;
|
int? trackNumber;
|
||||||
@HiveField(7)
|
@HiveField(7)
|
||||||
bool? offline;
|
bool? offline;
|
||||||
@HiveField(8)
|
//@HiveField(8)
|
||||||
Lyrics? lyrics;
|
//Lyrics? lyrics;
|
||||||
@HiveField(9)
|
@HiveField(9)
|
||||||
bool? favorite;
|
bool? favorite;
|
||||||
@HiveField(10)
|
@HiveField(10)
|
||||||
|
@ -78,6 +78,8 @@ class Track extends DeezerMediaItem {
|
||||||
|
|
||||||
@HiveField(13)
|
@HiveField(13)
|
||||||
List<dynamic>? playbackDetails;
|
List<dynamic>? playbackDetails;
|
||||||
|
@HiveField(14, defaultValue: false)
|
||||||
|
bool hasLyrics;
|
||||||
|
|
||||||
Track({
|
Track({
|
||||||
required this.id,
|
required this.id,
|
||||||
|
@ -89,7 +91,7 @@ class Track extends DeezerMediaItem {
|
||||||
this.artists,
|
this.artists,
|
||||||
this.trackNumber,
|
this.trackNumber,
|
||||||
this.offline,
|
this.offline,
|
||||||
this.lyrics,
|
this.hasLyrics = false,
|
||||||
this.favorite,
|
this.favorite,
|
||||||
this.diskNumber,
|
this.diskNumber,
|
||||||
this.explicit,
|
this.explicit,
|
||||||
|
@ -123,7 +125,7 @@ class Track extends DeezerMediaItem {
|
||||||
extras: {
|
extras: {
|
||||||
"playbackDetails": jsonEncode(playbackDetails),
|
"playbackDetails": jsonEncode(playbackDetails),
|
||||||
"thumb": albumArt!.thumb,
|
"thumb": albumArt!.thumb,
|
||||||
"lyrics": jsonEncode(lyrics!.toJson()),
|
"hasLyrics": hasLyrics,
|
||||||
"albumId": album!.id,
|
"albumId": album!.id,
|
||||||
"trackToken": trackToken,
|
"trackToken": trackToken,
|
||||||
"trackTokenExpiration": trackTokenExpiration,
|
"trackTokenExpiration": trackTokenExpiration,
|
||||||
|
@ -162,14 +164,14 @@ class Track extends DeezerMediaItem {
|
||||||
albumArt: DeezerImageDetails.fromUrl(mi.artUri.toString()),
|
albumArt: DeezerImageDetails.fromUrl(mi.artUri.toString()),
|
||||||
duration: mi.duration!,
|
duration: mi.duration!,
|
||||||
playbackDetails: playbackDetails,
|
playbackDetails: playbackDetails,
|
||||||
lyrics: mi.extras?['lyrics'] == null
|
hasLyrics: mi.extras?['hasLyrics'] ?? false,
|
||||||
? null
|
);
|
||||||
: Lyrics.fromJson(jsonDecode(mi.extras!['lyrics'])));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//JSON
|
//JSON
|
||||||
factory Track.fromPrivateJson(Map<dynamic, dynamic> json,
|
factory Track.fromPrivateJson(Map<dynamic, dynamic> json,
|
||||||
{bool favorite = false}) {
|
{bool favorite = false}) {
|
||||||
|
print('TRACK JSON: $json');
|
||||||
String? title = json['SNG_TITLE'];
|
String? title = json['SNG_TITLE'];
|
||||||
if (json['VERSION'] != null && json['VERSION'] != '') {
|
if (json['VERSION'] != null && json['VERSION'] != '') {
|
||||||
title = "${json['SNG_TITLE']} ${json['VERSION']}";
|
title = "${json['SNG_TITLE']} ${json['VERSION']}";
|
||||||
|
@ -185,13 +187,14 @@ class Track extends DeezerMediaItem {
|
||||||
.toList(),
|
.toList(),
|
||||||
trackNumber: int.parse((json['TRACK_NUMBER'] ?? '0').toString()),
|
trackNumber: int.parse((json['TRACK_NUMBER'] ?? '0').toString()),
|
||||||
playbackDetails: [json['MD5_ORIGIN'], json['MEDIA_VERSION']],
|
playbackDetails: [json['MD5_ORIGIN'], json['MEDIA_VERSION']],
|
||||||
lyrics: Lyrics(id: json['LYRICS_ID'].toString()),
|
|
||||||
favorite: favorite,
|
favorite: favorite,
|
||||||
diskNumber: int.parse(json['DISK_NUMBER'] ?? '1'),
|
diskNumber: int.parse(json['DISK_NUMBER'] ?? '1'),
|
||||||
explicit: (json['EXPLICIT_LYRICS'].toString() == '1') ? true : false,
|
explicit: (json['EXPLICIT_LYRICS'].toString() == '1') ? true : false,
|
||||||
addedDate: json['DATE_ADD'],
|
addedDate: json['DATE_ADD'],
|
||||||
trackToken: json['TRACK_TOKEN'],
|
trackToken: json['TRACK_TOKEN'],
|
||||||
trackTokenExpiration: json['TRACK_TOKEN_EXPIRE'],
|
trackTokenExpiration: json['TRACK_TOKEN_EXPIRE'],
|
||||||
|
hasLyrics: json['HAS_LYRICS'] ??
|
||||||
|
(json['LYRICS_ID'] != null && json['LYRICS_ID'] != 0),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
Map<String, dynamic> toSQL({off = false}) => {
|
Map<String, dynamic> toSQL({off = false}) => {
|
||||||
|
@ -203,7 +206,7 @@ class Track extends DeezerMediaItem {
|
||||||
'albumArt': albumArt!.full,
|
'albumArt': albumArt!.full,
|
||||||
'trackNumber': trackNumber,
|
'trackNumber': trackNumber,
|
||||||
'offline': off ? 1 : 0,
|
'offline': off ? 1 : 0,
|
||||||
'lyrics': jsonEncode(lyrics!.toJson()),
|
'hasLyrics': hasLyrics ? 1 : 0,
|
||||||
'favorite': (favorite ?? false) ? 1 : 0,
|
'favorite': (favorite ?? false) ? 1 : 0,
|
||||||
'diskNumber': diskNumber,
|
'diskNumber': diskNumber,
|
||||||
'explicit': (explicit ?? false) ? 1 : 0,
|
'explicit': (explicit ?? false) ? 1 : 0,
|
||||||
|
@ -219,7 +222,7 @@ class Track extends DeezerMediaItem {
|
||||||
artists: List<Artist>.generate(data['artists'].split(',').length,
|
artists: List<Artist>.generate(data['artists'].split(',').length,
|
||||||
(i) => Artist(id: data['artists'].split(',')[i])),
|
(i) => Artist(id: data['artists'].split(',')[i])),
|
||||||
offline: (data['offline'] == 1) ? true : false,
|
offline: (data['offline'] == 1) ? true : false,
|
||||||
lyrics: Lyrics.fromJson(jsonDecode(data['lyrics'])),
|
hasLyrics: data['hasLyrics'] == 1,
|
||||||
favorite: (data['favorite'] == 1) ? true : false,
|
favorite: (data['favorite'] == 1) ? true : false,
|
||||||
diskNumber: data['diskNumber'],
|
diskNumber: data['diskNumber'],
|
||||||
explicit: (data['explicit'] == 1) ? true : false,
|
explicit: (data['explicit'] == 1) ? true : false,
|
||||||
|
@ -746,7 +749,7 @@ class Lyrics {
|
||||||
|
|
||||||
bool sync;
|
bool sync;
|
||||||
|
|
||||||
Lyrics({this.id, this.writers, this.lyrics, this.sync = true});
|
Lyrics({this.id, this.writers, required this.lyrics, this.sync = true});
|
||||||
|
|
||||||
static error() => Lyrics(id: null, writers: null, lyrics: [
|
static error() => Lyrics(id: null, writers: null, lyrics: [
|
||||||
Lyric(
|
Lyric(
|
||||||
|
|
|
@ -52,7 +52,6 @@ class Track {
|
||||||
..albumArt = DeezerImageDetails.from(t.albumArt!)
|
..albumArt = DeezerImageDetails.from(t.albumArt!)
|
||||||
..trackNumber = t.trackNumber
|
..trackNumber = t.trackNumber
|
||||||
..offline = t.offline ?? false
|
..offline = t.offline ?? false
|
||||||
..lyrics = t.lyrics == null ? null : Lyrics.from(t.lyrics!)
|
|
||||||
..favorite = t.favorite ?? false
|
..favorite = t.favorite ?? false
|
||||||
..diskNumber = t.diskNumber
|
..diskNumber = t.diskNumber
|
||||||
..explicit = t.explicit ?? false;
|
..explicit = t.explicit ?? false;
|
||||||
|
@ -68,7 +67,6 @@ class Track {
|
||||||
albumArt: albumArt.to(),
|
albumArt: albumArt.to(),
|
||||||
trackNumber: trackNumber,
|
trackNumber: trackNumber,
|
||||||
offline: offline,
|
offline: offline,
|
||||||
lyrics: lyrics?.to(),
|
|
||||||
favorite: favorite,
|
favorite: favorite,
|
||||||
diskNumber: diskNumber,
|
diskNumber: diskNumber,
|
||||||
explicit: explicit,
|
explicit: explicit,
|
||||||
|
|
|
@ -50,6 +50,7 @@ class PipeAPI {
|
||||||
_jwtExpiration = jwtData['exp'];
|
_jwtExpiration = jwtData['exp'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Make a call to the Pipe GraphQL API
|
||||||
Future<Map<dynamic, dynamic>> callApi(
|
Future<Map<dynamic, dynamic>> callApi(
|
||||||
String operationName, String query, Map<String, dynamic> variables,
|
String operationName, String query, Map<String, dynamic> variables,
|
||||||
{CancelToken? cancelToken}) async {
|
{CancelToken? cancelToken}) async {
|
||||||
|
@ -67,7 +68,7 @@ class PipeAPI {
|
||||||
return res.data;
|
return res.data;
|
||||||
}
|
}
|
||||||
|
|
||||||
// -- Not working --
|
/// -- Not working --
|
||||||
Future<(String, int)> getTrackToken(String trackId) async {
|
Future<(String, int)> getTrackToken(String trackId) async {
|
||||||
final data = await callApi(
|
final data = await callApi(
|
||||||
'TrackMediaToken',
|
'TrackMediaToken',
|
||||||
|
|
|
@ -56,9 +56,12 @@ class BackgroundProvider extends ChangeNotifier {
|
||||||
final imageProvider = CachedNetworkImageProvider(
|
final imageProvider = CachedNetworkImageProvider(
|
||||||
mediaItem.extras!['thumb'] ?? mediaItem.artUri.toString(),
|
mediaItem.extras!['thumb'] ?? mediaItem.artUri.toString(),
|
||||||
cacheManager: cacheManager);
|
cacheManager: cacheManager);
|
||||||
|
print(mediaItem.extras!['thumb'] ?? mediaItem.artUri.toString());
|
||||||
//Run in isolate
|
//Run in isolate
|
||||||
_palette = await PaletteGenerator.fromImageProvider(imageProvider);
|
_palette = await PaletteGenerator.fromImageProvider(imageProvider);
|
||||||
_dominantColor = _palette!.dominantColor!.color;
|
_dominantColor = _palette!.dominantColor?.color ??
|
||||||
|
_palette!.lightVibrantColor?.color ??
|
||||||
|
_palette!.colors.firstOrNull;
|
||||||
_imageProvider = settings.blurPlayerBackground ? imageProvider : null;
|
_imageProvider = settings.blurPlayerBackground ? imageProvider : null;
|
||||||
if (!_isDisposed) notifyListeners();
|
if (!_isDisposed) notifyListeners();
|
||||||
}
|
}
|
||||||
|
@ -170,8 +173,12 @@ class PlayerScreenBackground extends StatelessWidget {
|
||||||
child: provider.imageProvider != null
|
child: provider.imageProvider != null
|
||||||
? DecoratedBox(
|
? DecoratedBox(
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
color: Color.lerp(provider.dominantColor,
|
color: provider.dominantColor == null
|
||||||
isLightMode ? Colors.white : Colors.black, 0.75)),
|
? Theme.of(context).colorScheme.surface
|
||||||
|
: Color.lerp(
|
||||||
|
provider.dominantColor,
|
||||||
|
isLightMode ? Colors.white : Colors.black,
|
||||||
|
0.75)),
|
||||||
child: ImageFiltered(
|
child: ImageFiltered(
|
||||||
imageFilter: ImageFilter.blur(
|
imageFilter: ImageFilter.blur(
|
||||||
tileMode: TileMode.decal,
|
tileMode: TileMode.decal,
|
||||||
|
@ -194,12 +201,17 @@ class PlayerScreenBackground extends StatelessWidget {
|
||||||
begin: Alignment.topCenter,
|
begin: Alignment.topCenter,
|
||||||
end: Alignment.bottomCenter,
|
end: Alignment.bottomCenter,
|
||||||
colors: [
|
colors: [
|
||||||
if (provider.dominantColor != null)
|
provider.dominantColor == null
|
||||||
Color.lerp(provider.dominantColor,
|
? Theme.of(context).colorScheme.surface
|
||||||
isLightMode ? Colors.white : Colors.black, 0.5)!,
|
: Color.lerp(
|
||||||
Theme.of(context).colorScheme.background,
|
provider.dominantColor,
|
||||||
|
isLightMode ? Colors.white : Colors.black,
|
||||||
|
0.5)!,
|
||||||
|
Theme.of(context).colorScheme.surface,
|
||||||
],
|
],
|
||||||
stops: const [0.0, 0.6],
|
stops: provider.dominantColor == null
|
||||||
|
? null
|
||||||
|
: const [0.0, 0.6],
|
||||||
)),
|
)),
|
||||||
)),
|
)),
|
||||||
child,
|
child,
|
||||||
|
@ -1057,12 +1069,7 @@ class _BigAlbumArtState extends State<BigAlbumArt> with WidgetsBindingObserver {
|
||||||
return const SizedBox.shrink();
|
return const SizedBox.shrink();
|
||||||
}
|
}
|
||||||
|
|
||||||
final l = snapshot.data!.extras?['lyrics'] == null
|
if (snapshot.data!.extras?['hasLyrics'] ?? false) {
|
||||||
? null
|
|
||||||
: Lyrics.fromJson(
|
|
||||||
jsonDecode(snapshot.data!.extras!['lyrics']));
|
|
||||||
|
|
||||||
if (l == null || l.id == null || l.id == '0') {
|
|
||||||
return const SizedBox.shrink();
|
return const SizedBox.shrink();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
51
pubspec.lock
51
pubspec.lock
|
@ -261,10 +261,10 @@ packages:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: country_pickers
|
name: country_pickers
|
||||||
sha256: a71df4a061b25f07b202a881c43a057edc842a30b3410d511382103c68afebc2
|
sha256: b10f6618fa64fbba02ffc4ad1b84dc0ca071cc206e5376de1698bddd980b355a
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "3.0.1"
|
||||||
cross_file:
|
cross_file:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -374,10 +374,10 @@ packages:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: fading_edge_scrollview
|
name: fading_edge_scrollview
|
||||||
sha256: c25c2231652ce774cc31824d0112f11f653881f43d7f5302c05af11942052031
|
sha256: "1f84fe3ea8e251d00d5735e27502a6a250e4aa3d3b330d3fdcb475af741464ef"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.0"
|
version: "4.1.1"
|
||||||
fake_async:
|
fake_async:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -707,10 +707,10 @@ packages:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: i18n_extension
|
name: i18n_extension
|
||||||
sha256: "514fca4f34e8eb73cd29d2938225bf139b1ff3cede462c0b2875f60f470e64b2"
|
sha256: "296f7b091b9feb7f682360cece9c335f5b0b35121c31bd1993bbdcf1985c272e"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "11.0.12"
|
version: "12.0.1"
|
||||||
i18n_extension_core:
|
i18n_extension_core:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -747,10 +747,10 @@ packages:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: intl
|
name: intl
|
||||||
sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d"
|
sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.18.1"
|
version: "0.19.0"
|
||||||
io:
|
io:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -843,26 +843,26 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: leak_tracker
|
name: leak_tracker
|
||||||
sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa"
|
sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "10.0.0"
|
version: "10.0.4"
|
||||||
leak_tracker_flutter_testing:
|
leak_tracker_flutter_testing:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: leak_tracker_flutter_testing
|
name: leak_tracker_flutter_testing
|
||||||
sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0
|
sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.1"
|
version: "3.0.3"
|
||||||
leak_tracker_testing:
|
leak_tracker_testing:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: leak_tracker_testing
|
name: leak_tracker_testing
|
||||||
sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47
|
sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.1"
|
version: "3.0.1"
|
||||||
lints:
|
lints:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -882,10 +882,11 @@ packages:
|
||||||
marquee:
|
marquee:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: marquee
|
path: "."
|
||||||
sha256: "4b5243d2804373bdc25fc93d42c3b402d6ec1f4ee8d0bb72276edd04ae7addb8"
|
ref: "support-flutter-3.22.0"
|
||||||
url: "https://pub.dev"
|
resolved-ref: "620dec0fd2ce24801fa8f08c5e04280fc4bb75b6"
|
||||||
source: hosted
|
url: "https://github.com/abisoftinc/marquee.git"
|
||||||
|
source: git
|
||||||
version: "2.2.3"
|
version: "2.2.3"
|
||||||
matcher:
|
matcher:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
|
@ -939,10 +940,10 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: meta
|
name: meta
|
||||||
sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04
|
sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.11.0"
|
version: "1.12.0"
|
||||||
mime:
|
mime:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -1466,10 +1467,10 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: test_api
|
name: test_api
|
||||||
sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b"
|
sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.6.1"
|
version: "0.7.0"
|
||||||
time:
|
time:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -1650,10 +1651,10 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: vm_service
|
name: vm_service
|
||||||
sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957
|
sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "13.0.0"
|
version: "14.2.1"
|
||||||
wakelock_plus:
|
wakelock_plus:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -1775,5 +1776,5 @@ packages:
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.1.2"
|
version: "3.1.2"
|
||||||
sdks:
|
sdks:
|
||||||
dart: ">=3.3.0 <4.0.0"
|
dart: ">=3.4.0 <4.0.0"
|
||||||
flutter: ">=3.19.2"
|
flutter: ">=3.19.2"
|
||||||
|
|
15
pubspec.yaml
15
pubspec.yaml
|
@ -21,20 +21,23 @@ dependencies:
|
||||||
path: ^1.6.4
|
path: ^1.6.4
|
||||||
sqflite: ^2.0.0+3
|
sqflite: ^2.0.0+3
|
||||||
permission_handler: ^11.2.0
|
permission_handler: ^11.2.0
|
||||||
intl: ^0.18.1
|
intl: ^0.19.0
|
||||||
filesize: ^2.0.1
|
filesize: ^2.0.1
|
||||||
fluttertoast: ^8.0.8
|
fluttertoast: ^8.0.8
|
||||||
palette_generator: ^0.3.0
|
palette_generator: ^0.3.3+3
|
||||||
flutter_material_color_picker: ^1.0.5
|
flutter_material_color_picker: ^1.0.5
|
||||||
country_pickers: ^2.0.0
|
country_pickers: ^3.0.1
|
||||||
flutter_local_notifications: ^17.1.0
|
flutter_local_notifications: ^17.1.0
|
||||||
collection: ^1.17.1
|
collection: ^1.17.1
|
||||||
html: ^0.15.4
|
html: ^0.15.4
|
||||||
flutter_screenutil: ^5.0.0+2
|
flutter_screenutil: ^5.0.0+2
|
||||||
marquee: ^2.2.0
|
marquee:
|
||||||
|
git:
|
||||||
|
url: https://github.com/abisoftinc/marquee.git
|
||||||
|
ref: 'support-flutter-3.22.0'
|
||||||
flutter_cache_manager: ^3.3.2
|
flutter_cache_manager: ^3.3.2
|
||||||
cached_network_image: ^3.1.0
|
cached_network_image: ^3.1.0
|
||||||
i18n_extension: ^11.0.12
|
i18n_extension: ^12.0.1
|
||||||
url_launcher: ^6.0.5
|
url_launcher: ^6.0.5
|
||||||
uni_links: ^0.5.1
|
uni_links: ^0.5.1
|
||||||
numberpicker: ^2.1.1
|
numberpicker: ^2.1.1
|
||||||
|
@ -99,7 +102,7 @@ dependencies:
|
||||||
^2.4.1
|
^2.4.1
|
||||||
mini_music_visualizer:
|
mini_music_visualizer:
|
||||||
git: https://github.com/Pato05/mini_music_visualizer.git
|
git: https://github.com/Pato05/mini_music_visualizer.git
|
||||||
fading_edge_scrollview: ^3.0.0
|
fading_edge_scrollview: ^4.1.1
|
||||||
scroll_to_index: ^3.0.1
|
scroll_to_index: ^3.0.1
|
||||||
#deezcryptor:
|
#deezcryptor:
|
||||||
#path: deezcryptor/
|
#path: deezcryptor/
|
||||||
|
|
Loading…
Reference in a new issue