From bdb10a2ae6cb597cc64c752ac0914ad7973d581e Mon Sep 17 00:00:00 2001 From: zarzet Date: Wed, 19 Aug 2026 11:59:28 +0700 Subject: [PATCH] chore(deps): update Flutter and Go dependencies --- go_backend/go.mod | 20 +-- go_backend/go.sum | 40 +++--- lib/screens/library_tracks_folder_screen.dart | 38 ++++- lib/screens/settings/backup_restore_page.dart | 9 +- lib/screens/settings/extensions_page.dart | 62 +++++--- lib/screens/track_metadata_edit_sheet.dart | 6 +- lib/screens/track_metadata_screen.dart | 1 + lib/services/csv_import_service.dart | 11 +- pubspec.lock | 132 ++++++++++++------ pubspec.yaml | 4 +- 10 files changed, 209 insertions(+), 114 deletions(-) diff --git a/go_backend/go.mod b/go_backend/go.mod index 524b33da..bfc7ff86 100644 --- a/go_backend/go.mod +++ b/go_backend/go.mod @@ -6,25 +6,25 @@ module github.com/zarz/spotiflac_android/go_backend go 1.26.5 require ( - github.com/dop251/goja v0.0.0-20260723142020-b4aef50fa347 + github.com/dop251/goja v0.0.0-20260806115107-493f22071ef6 github.com/go-flac/flacpicture/v2 v2.0.2 github.com/go-flac/flacvorbis/v2 v2.0.2 github.com/go-flac/go-flac/v2 v2.0.4 github.com/refraction-networking/utls v1.8.2 - golang.org/x/crypto v0.54.0 - golang.org/x/mobile v0.0.0-20260730202154-c700fe717e6e - golang.org/x/net v0.57.0 - golang.org/x/text v0.40.0 + golang.org/x/crypto v0.55.0 + golang.org/x/mobile v0.0.0-20260818145002-f020ddb2de58 + golang.org/x/net v0.58.0 + golang.org/x/text v0.41.0 ) require ( github.com/andybalholm/brotli v1.2.2 // indirect - github.com/dlclark/regexp2/v2 v2.5.2 // indirect + github.com/dlclark/regexp2/v2 v2.7.1 // indirect github.com/go-sourcemap/sourcemap v2.1.4+incompatible // indirect - github.com/google/pprof v0.0.0-20260709232956-b9395ee17fa0 // indirect - github.com/klauspost/compress v1.19.1 // indirect - golang.org/x/mod v0.38.0 // indirect + github.com/google/pprof v0.0.0-20260802141513-ef3492d7dac3 // indirect + github.com/klauspost/compress v1.19.2 // indirect + golang.org/x/mod v0.40.0 // indirect golang.org/x/sync v0.22.0 // indirect golang.org/x/sys v0.47.0 // indirect - golang.org/x/tools v0.48.0 // indirect + golang.org/x/tools v0.49.0 // indirect ) diff --git a/go_backend/go.sum b/go_backend/go.sum index 45bb16be..de198843 100644 --- a/go_backend/go.sum +++ b/go_backend/go.sum @@ -4,10 +4,10 @@ github.com/andybalholm/brotli v1.2.2 h1:HzTuoo2ErYQqf5qvcJInB8uvqSVxRttzkFexPWtn github.com/andybalholm/brotli v1.2.2/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dlclark/regexp2/v2 v2.5.2 h1:HAsucWRhsqcDzl6Ua9aR8JwYOTzrZyPrF0/FNxJVAI0= -github.com/dlclark/regexp2/v2 v2.5.2/go.mod h1:avUrQvPaLz2DrFNHJF0taWAFFX2C1GMSSoeiqFjcBmU= -github.com/dop251/goja v0.0.0-20260723142020-b4aef50fa347 h1:RZr+96+PKQjn444QL1K9MtncwJ/PwfE+3TJLCYJL8es= -github.com/dop251/goja v0.0.0-20260723142020-b4aef50fa347/go.mod h1:LiIEzozrcvNXorsG/3+ypGqdTUAqZryhzSsqi0oU/Qg= +github.com/dlclark/regexp2/v2 v2.7.1 h1:yqDtwI1ptXXvEUNpYTk2lad4jLtAcKqkzepn4savSk4= +github.com/dlclark/regexp2/v2 v2.7.1/go.mod h1:avUrQvPaLz2DrFNHJF0taWAFFX2C1GMSSoeiqFjcBmU= +github.com/dop251/goja v0.0.0-20260806115107-493f22071ef6 h1:Oh2rRG1un7tLlC3/NJDzKppZ4CeZGkVFJCUOTRwLpfw= +github.com/dop251/goja v0.0.0-20260806115107-493f22071ef6/go.mod h1:LiIEzozrcvNXorsG/3+ypGqdTUAqZryhzSsqi0oU/Qg= github.com/go-flac/flacpicture/v2 v2.0.2 h1:HCaJIVZpxnpdWs6G3ECEVRelzqS5xOi1Ba1AGmtXbzE= github.com/go-flac/flacpicture/v2 v2.0.2/go.mod h1:DMZBPWPAmdLqNhqFSy5ZBs9wyBzOekXutGfP7/TFCuo= github.com/go-flac/flacvorbis/v2 v2.0.2 h1:xCL3OhxrxWkHrbWUBvGNe+6FQ03yLmBbz0v5z4V2PoQ= @@ -20,10 +20,10 @@ github.com/goccy/go-yaml v1.19.2 h1:PmFC1S6h8ljIz6gMRBopkjP1TVT7xuwrButHID66PoM= github.com/goccy/go-yaml v1.19.2/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/pprof v0.0.0-20260709232956-b9395ee17fa0 h1:du0WGc8xSKq/++e0cglxhS/mXVqsR7+c7jLEi5Vqduw= -github.com/google/pprof v0.0.0-20260709232956-b9395ee17fa0/go.mod h1:MxpfABSjhmINe3F1It9d+8exIHFvUqtLIRCdOGNXqiI= -github.com/klauspost/compress v1.19.1 h1:VsB4HPswih7mmZ8WleSFQ75c/Ui1M4trX5oAsJnhSlk= -github.com/klauspost/compress v1.19.1/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= +github.com/google/pprof v0.0.0-20260802141513-ef3492d7dac3 h1:LMLX+LgTNWpfvCBdFebv6EsYotImrt/Ppc5cXIriCSo= +github.com/google/pprof v0.0.0-20260802141513-ef3492d7dac3/go.mod h1:jl5iWTm0/hd5PjEYEOuwAJ57L/CibdZfrqZ5XA5GrCk= +github.com/klauspost/compress v1.19.2 h1:hMRETovs/pu/dVWN7zIT1PGG8t509MwT6bO7XSi26R8= +github.com/klauspost/compress v1.19.2/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/refraction-networking/utls v1.8.2 h1:j4Q1gJj0xngdeH+Ox/qND11aEfhpgoEvV+S9iJ2IdQo= @@ -32,21 +32,21 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU= github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= -golang.org/x/crypto v0.54.0 h1:YLIA59K4fiNzHzjnZt2tUJQjQtUWfWbeHBqKtk3eScw= -golang.org/x/crypto v0.54.0/go.mod h1:KWL8ny2AZdGR2cWmzeHrp2azQPGogOv+HeQaVEXC2dk= -golang.org/x/mobile v0.0.0-20260730202154-c700fe717e6e h1:v5PGTbI7uer7FhpDeGryGytfbI8t7CDWkKukozvIsNU= -golang.org/x/mobile v0.0.0-20260730202154-c700fe717e6e/go.mod h1:YX+n47s+53POxN3dx9cIGxG3hGUm/lD64hvrRJFbcSA= -golang.org/x/mod v0.38.0 h1:MECBjubtXD7yj4HrhIUcywNaGeNVUdfVnxmPajOk4yk= -golang.org/x/mod v0.38.0/go.mod h1:V6Xz0pq8TQ3dGqVQ1FVHuelZpAL0uNhSkk9ogYP3c40= -golang.org/x/net v0.57.0 h1:K5+3DljvIuDG9/Jv9rvyMywYNFCQ9RSUY6OOTTkT+tE= -golang.org/x/net v0.57.0/go.mod h1:KpXc8iv+r3XplLAG/f7Jsf9RPszJzdR0f58q9vGOuEU= +golang.org/x/crypto v0.55.0 h1:+KWHjbgOaAQ66dh/YlkZKHlz9ZUlq61AFirAR9ntP8M= +golang.org/x/crypto v0.55.0/go.mod h1:uq0V9dE/fzQuJtbnL+2EhWOE63vo164FY8xqEnV9xis= +golang.org/x/mobile v0.0.0-20260818145002-f020ddb2de58 h1:Ka3QB8ttuiqyuUvt2VJ2B0llDuKpshFzLn+bk97+X4M= +golang.org/x/mobile v0.0.0-20260818145002-f020ddb2de58/go.mod h1:jMwjxoDSx9jqhNaZqPnr6nnKzb7cs+Dy1Czk7wdX+R8= +golang.org/x/mod v0.40.0 h1:hUv+3cXcdRHz08UmSiOob7sadHig73uo5bkXxQ/tvUs= +golang.org/x/mod v0.40.0/go.mod h1:0/weTWkPWGBikyTWAX3dkjVztMmBA5hM0DH6BElSupE= +golang.org/x/net v0.58.0 h1:ynWG7rqYi4ccpTEuPZ2QGWHktVEM9DMCj9yzDE0Q7To= +golang.org/x/net v0.58.0/go.mod h1:YwCddHnFlT7eLQqVprV19OnhLGtc5xOKgE0RyqgfWAU= golang.org/x/sync v0.22.0 h1:SZjpbeLmrCk4xhRSZFNZW5gFUeCeFgjekvI/+gfScek= golang.org/x/sync v0.22.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs= golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/text v0.40.0 h1:Ub2Z6/xjgF1WrYQz2nuITOEegKFtiIy+rieRJ5lHZKs= -golang.org/x/text v0.40.0/go.mod h1:hpnzDAfGV753zIKo+wk3u1bVKCGPbrnF7+7LBF/UHVY= -golang.org/x/tools v0.48.0 h1:3+hClM1aLL5mjMKm5ovokw9epgRXPuu2tILgismM6RE= -golang.org/x/tools v0.48.0/go.mod h1:08xX0orndb/F7jJxGDicx061tyd5pcMto75YMAXr6lk= +golang.org/x/text v0.41.0 h1:vz/seA0lnX87Othu2f/0L24RcgrXD9/YFTSuGjj3rH8= +golang.org/x/text v0.41.0/go.mod h1:jvf1O8ajNzZqhSrQBPbutR/EB83Cc0CFrezNQIwbb5M= +golang.org/x/tools v0.49.0 h1:3NI7VXzL9+1WZD52Dx2ttoPwD5DWrFGpl9mFZDlmisI= +golang.org/x/tools v0.49.0/go.mod h1:SJNXV9DBKT0UbdttsQjbfJlAE/q+y36++zo3uL3N0Oo= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/lib/screens/library_tracks_folder_screen.dart b/lib/screens/library_tracks_folder_screen.dart index ff46a27b..2061ae88 100644 --- a/lib/screens/library_tracks_folder_screen.dart +++ b/lib/screens/library_tracks_folder_screen.dart @@ -2,6 +2,7 @@ import 'dart:io'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; +import 'package:path/path.dart' as p; import 'package:spotiflac_android/widgets/collection_scaffold.dart'; import 'package:spotiflac_android/theme/app_tokens.dart'; import 'package:spotiflac_android/widgets/track_card.dart'; @@ -463,12 +464,39 @@ class _LibraryTracksFolderScreenState final picked = await FilePicker.pickFile(type: FileType.image); if (picked == null) return; - final path = picked.path; - if (path == null || path.isEmpty) return; + Directory? materializedDir; + try { + var sourcePath = picked.path; + if (sourcePath == null || sourcePath.isEmpty) { + materializedDir = await Directory.systemTemp.createTemp( + 'spotiflac_playlist_cover_', + ); + final pickedExtension = p.extension(picked.name); + final materializedFile = File( + p.join( + materializedDir.path, + 'selected_cover${pickedExtension.isEmpty ? '.img' : pickedExtension}', + ), + ); + await materializedFile.writeAsBytes( + await picked.readAsBytes(), + flush: true, + ); + sourcePath = materializedFile.path; + } - await ref - .read(libraryCollectionsProvider.notifier) - .setPlaylistCover(playlistId, path); + await ref + .read(libraryCollectionsProvider.notifier) + .setPlaylistCover(playlistId, sourcePath); + } finally { + try { + if (materializedDir != null && await materializedDir.exists()) { + await materializedDir.delete(recursive: true); + } + } catch (_) { + // The cover has already been normalized into app storage. + } + } } Future _removeCoverImage() async { diff --git a/lib/screens/settings/backup_restore_page.dart b/lib/screens/settings/backup_restore_page.dart index 8223cd29..e9550be5 100644 --- a/lib/screens/settings/backup_restore_page.dart +++ b/lib/screens/settings/backup_restore_page.dart @@ -1,4 +1,4 @@ -import 'dart:io'; +import 'dart:convert'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; @@ -76,13 +76,12 @@ class _BackupRestorePageState extends ConsumerState { String? content; try { - final result = await FilePicker.pickFiles( + final picked = await FilePicker.pickFile( type: FileType.custom, allowedExtensions: ['json', BackupService.fileExtension], ); - final path = result?.files.single.path; - if (path == null) return; - content = await File(path).readAsString(); + if (picked == null) return; + content = utf8.decode(await picked.readAsBytes()); } catch (e) { _log.e('Failed to read backup file: $e'); messenger.showSnackBar(SnackBar(content: Text(l10n.backupInvalidFile))); diff --git a/lib/screens/settings/extensions_page.dart b/lib/screens/settings/extensions_page.dart index 8ae02351..90054368 100644 --- a/lib/screens/settings/extensions_page.dart +++ b/lib/screens/settings/extensions_page.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:spotiflac_android/widgets/extension_row.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:file_picker/file_picker.dart'; +import 'package:path/path.dart' as p; import 'package:path_provider/path_provider.dart'; import 'package:spotiflac_android/l10n/l10n.dart'; import 'package:spotiflac_android/models/settings.dart'; @@ -217,26 +218,45 @@ class _ExtensionsPageState extends ConsumerState { } Future _installExtension() async { - final result = await FilePicker.pickFiles(type: FileType.any); + final selectedFiles = await FilePicker.pickFiles(type: FileType.any); + if (selectedFiles.isEmpty) return; - if (result != null && result.files.isNotEmpty) { - final selectedPaths = result.files - .map((file) => file.path) - .whereType() - .toList(); - final extensionPaths = selectedPaths.where((path) { - final lowerPath = path.toLowerCase(); - return lowerPath.endsWith('.spotiflac-ext') || - lowerPath.endsWith('.sflx'); - }).toList(); + final hasInvalidFile = selectedFiles.any((file) { + final lowerName = file.name.toLowerCase(); + return !lowerName.endsWith('.spotiflac-ext') && + !lowerName.endsWith('.sflx'); + }); + if (hasInvalidFile) { + if (mounted) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text(context.l10n.snackbarSelectExtFile)), + ); + } + return; + } - if (extensionPaths.length != selectedPaths.length) { - if (mounted) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(context.l10n.snackbarSelectExtFile)), - ); + Directory? materializedDir; + try { + final extensionPaths = []; + for (final selectedFile in selectedFiles) { + final localPath = selectedFile.path; + if (localPath != null && localPath.isNotEmpty) { + extensionPaths.add(localPath); + continue; } - return; + + materializedDir ??= await Directory.systemTemp.createTemp( + 'spotiflac_extension_import_', + ); + final safeName = p.basename(selectedFile.name); + final materializedFile = File( + p.join(materializedDir.path, '${extensionPaths.length}_$safeName'), + ); + await materializedFile.writeAsBytes( + await selectedFile.readAsBytes(), + flush: true, + ); + extensionPaths.add(materializedFile.path); } final installResult = await ref @@ -251,6 +271,14 @@ class _ExtensionsPageState extends ConsumerState { context, ).showSnackBar(SnackBar(content: Text(message))); } + } finally { + try { + if (materializedDir != null && await materializedDir.exists()) { + await materializedDir.delete(recursive: true); + } + } catch (_) { + // The extension has already been copied into app storage. + } } } diff --git a/lib/screens/track_metadata_edit_sheet.dart b/lib/screens/track_metadata_edit_sheet.dart index 9c0a3e12..f56b0658 100644 --- a/lib/screens/track_metadata_edit_sheet.dart +++ b/lib/screens/track_metadata_edit_sheet.dart @@ -746,13 +746,13 @@ class _EditMetadataSheetState extends State<_EditMetadataSheet> { if (picked == null) return; final sourcePath = picked.path; + final pickedExtension = p.extension(picked.name).replaceFirst('.', ''); Uint8List? bytes; - final needsByteFallback = - !_hasValue(sourcePath) && !_hasValue(picked.extension); + final needsByteFallback = !_hasValue(sourcePath); if (needsByteFallback) { bytes = await picked.readAsBytes(); } - final extension = _resolveImageExtension(picked.extension, bytes); + final extension = _resolveImageExtension(pickedExtension, bytes); final tempDir = await Directory.systemTemp.createTemp('edit_cover_'); final tempPath = diff --git a/lib/screens/track_metadata_screen.dart b/lib/screens/track_metadata_screen.dart index e84b159f..1358fecf 100644 --- a/lib/screens/track_metadata_screen.dart +++ b/lib/screens/track_metadata_screen.dart @@ -6,6 +6,7 @@ import 'package:spotiflac_android/widgets/app_bottom_sheet.dart'; import 'package:flutter/services.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:file_picker/file_picker.dart'; +import 'package:path/path.dart' as p; import 'package:spotiflac_android/services/conversion_library_service.dart'; import 'package:spotiflac_android/services/library_database.dart'; import 'package:spotiflac_android/utils/file_access.dart'; diff --git a/lib/services/csv_import_service.dart b/lib/services/csv_import_service.dart index 89f15395..1c6b08e4 100644 --- a/lib/services/csv_import_service.dart +++ b/lib/services/csv_import_service.dart @@ -1,4 +1,4 @@ -import 'dart:io'; +import 'dart:convert'; import 'package:file_picker/file_picker.dart'; import 'package:path/path.dart' as p; import 'package:spotiflac_android/models/track.dart'; @@ -14,15 +14,14 @@ class CsvImportService { void Function(int current, int total)? onProgress, }) async { try { - final FilePickerResult? result = await FilePicker.pickFiles( + final picked = await FilePicker.pickFile( type: FileType.custom, allowedExtensions: ['csv', 'm3u', 'm3u8'], ); - if (result != null && result.files.single.path != null) { - final file = File(result.files.single.path!); - final content = await file.readAsString(); - final extension = p.extension(file.path).toLowerCase(); + if (picked != null) { + final content = utf8.decode(await picked.readAsBytes()); + final extension = p.extension(picked.name).toLowerCase(); final tracks = (extension == '.m3u' || extension == '.m3u8') ? M3uPlaylistService.parseM3u(content) : _parseCsv(content); diff --git a/pubspec.lock b/pubspec.lock index 85666b7a..b5a20eb0 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -41,14 +41,22 @@ packages: url: "https://pub.dev" source: hosted version: "0.14.8" + android_file_picker: + dependency: transitive + description: + name: android_file_picker + sha256: "665a5a57dfca27f91a715d300e4852a784f9f98e503dcff281bec9afb55767be" + url: "https://pub.dev" + source: hosted + version: "1.0.1" archive: dependency: transitive description: name: archive - sha256: a96e8b390886ee8abb49b7bd3ac8df6f451c621619f52a26e815fdcf568959ff + sha256: be169cf6ac481e052c4538715d88841d567150dfe1df38aaec76461a4e7b39f2 url: "https://pub.dev" source: hosted - version: "4.0.9" + version: "4.1.0" args: dependency: transitive description: @@ -181,10 +189,10 @@ packages: dependency: transitive description: name: build_daemon - sha256: "8c0535c3b2f625619f4dd1036ef1127f2e77bfedf89ed2eb2676ef076e0b6712" + sha256: "79e05eaf15a48d7230b053a4363b8eaac0cc234bbd0134c3229455481f55cbc6" url: "https://pub.dev" source: hosted - version: "4.1.3" + version: "4.1.5" build_runner: dependency: "direct dev" description: @@ -205,10 +213,10 @@ packages: dependency: transitive description: name: built_value - sha256: "34e4067d30ce212937df995f03b69992eea683539ceeac7f679a1f1eba055b56" + sha256: "31b24be6615ec7fcf70b3aa5a7469fe35826485e639a16dd7eb83ba30e4cc6a8" url: "https://pub.dev" source: hosted - version: "8.12.6" + version: "8.12.7" cached_network_image: dependency: "direct main" description: @@ -381,10 +389,10 @@ packages: dependency: "direct main" description: name: dynamic_color - sha256: "43a5a6679649a7731ab860334a5812f2067c2d9ce6452cf069c5e0c25336c17c" + sha256: "4aeb76de323e8eb660bab5557d826ad7ebbf1434a598f0c6aa8a11a9696a6757" url: "https://pub.dev" source: hosted - version: "1.8.1" + version: "1.9.0" fake_async: dependency: transitive description: @@ -437,10 +445,42 @@ packages: dependency: "direct main" description: name: file_picker - sha256: fdc6a37f715d19f35b131decf1ce39242eeed5ddae18c0818c3eccb731ab76be + sha256: afbaa8015d9efabd224f41084ed9fdeddfa65389ebd7cd3a9eb1476aca66b46d url: "https://pub.dev" source: hosted - version: "12.0.0-beta.7" + version: "12.0.0" + file_picker_darwin: + dependency: transitive + description: + name: file_picker_darwin + sha256: "5d87d156c1d63920447a662b7117d3498c67e3444a44d2cb01ed955d6efa62ef" + url: "https://pub.dev" + source: hosted + version: "1.0.1" + file_picker_linux: + dependency: transitive + description: + name: file_picker_linux + sha256: "93d3f62f97c657053e7b184fe0f5e22347d85067c053640a30b1ac8ad7844e3b" + url: "https://pub.dev" + source: hosted + version: "1.0.1" + file_picker_platform_interface: + dependency: transitive + description: + name: file_picker_platform_interface + sha256: "9e7a7e01e179929241f0afeb2c8c69ac95e29e17c0abea36ed193881c6bef90c" + url: "https://pub.dev" + source: hosted + version: "3.0.1" + file_picker_web: + dependency: transitive + description: + name: file_picker_web + sha256: f1af38b3c91fafe0ca97f659b5c6818a057473ef09bb8b722f9f3f5364aa7eed + url: "https://pub.dev" + source: hosted + version: "3.0.1" fixnum: dependency: transitive description: @@ -482,10 +522,10 @@ packages: dependency: "direct main" description: name: flutter_local_notifications - sha256: "9375211fd7df9c070504ac4db7047c7fae857e238291433b770cfe696b5c357a" + sha256: "1447ba911c60f2ba3f25dae1af151ec187162566b0f57e37771bf0b400f013ad" url: "https://pub.dev" source: hosted - version: "22.2.0" + version: "22.3.0" flutter_local_notifications_linux: dependency: transitive description: @@ -498,10 +538,10 @@ packages: dependency: transitive description: name: flutter_local_notifications_platform_interface - sha256: "945a438a4779f3aca3a948718d8a4048cbe9f9c8c797492c00abd5d39112bf37" + sha256: "43c3761d916c9bd3d5c7ebbc44d82f4990329840c0c5d62ad5260cc1b5d399bd" url: "https://pub.dev" source: hosted - version: "12.1.0" + version: "12.2.0" flutter_local_notifications_web: dependency: transitive description: @@ -523,14 +563,6 @@ packages: description: flutter source: sdk version: "0.0.0" - flutter_plugin_android_lifecycle: - dependency: transitive - description: - name: flutter_plugin_android_lifecycle - sha256: "3854fe5e3bff0b113c658f260b90c95dea17c92db0f2addeac2e343dd9969785" - url: "https://pub.dev" - source: hosted - version: "2.0.35" flutter_riverpod: dependency: "direct main" description: @@ -543,34 +575,34 @@ packages: dependency: "direct main" description: name: flutter_secure_storage - sha256: "7686b1d6a29985dcbb808c59518226e603e3bfa7c0ddfd1a0d00e4cda77c868e" + sha256: "15e8c8fe269fdf7d469b23008ab3df521c8b826ed345820532364c31bdebace6" url: "https://pub.dev" source: hosted - version: "10.3.1" + version: "11.0.0" flutter_secure_storage_darwin: dependency: transitive description: name: flutter_secure_storage_darwin - sha256: "82329fa5cdf343773b1b6897dea959105a29f092454259edff92f9f6637e8149" + sha256: ac6d76a752de0cd738334eb4b21743fc4943f449f5b6e308f18838b048c02ac0 url: "https://pub.dev" source: hosted - version: "0.3.2" + version: "0.4.0" flutter_secure_storage_linux: dependency: transitive description: name: flutter_secure_storage_linux - sha256: a5f35ddab43cf5c8215d2feb4ce1957851f28c5c37e6f04335066a0602087bf5 + sha256: "76fa9c841b3b1619fc5b5bc36efc7d158fa2356f223b6caeb1d0c80a54168546" url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "3.0.2" flutter_secure_storage_platform_interface: dependency: transitive description: name: flutter_secure_storage_platform_interface - sha256: "06686df417f34fe9f963ed217b7fdce250e2f637ddd6c374d7eb054549770633" + sha256: "788060052712555182aba55ecb5f8b6e5cb9cfe8f776c83249a61fe3ce877db4" url: "https://pub.dev" source: hosted - version: "2.0.2" + version: "2.0.3" flutter_secure_storage_web: dependency: transitive description: @@ -625,10 +657,10 @@ packages: dependency: "direct main" description: name: go_router - sha256: "5922b2861e2235a3504896f0d6fa07d84141b480cf52eecd2f42cd25585a9e8a" + sha256: d7a3576cb312649eaa51f2356450aed686085fb58fcdebda5b359aa951eef7ea url: "https://pub.dev" source: hosted - version: "17.3.0" + version: "17.5.0" graphs: dependency: transitive description: @@ -681,10 +713,10 @@ packages: dependency: transitive description: name: image - sha256: "6300175e00616bbc832e2fc91bfa4d776af5402c81c7151bee6905bb08473c52" + sha256: "1976370a4df3091bb0f72409c187ad1f9132a818bc6b95ca59c0bae1c75c688e" url: "https://pub.dev" source: hosted - version: "4.9.1" + version: "4.9.2" intl: dependency: "direct main" description: @@ -937,10 +969,10 @@ packages: dependency: "direct main" description: name: permission_handler - sha256: "06149cba29bc46206f8b54b56065fe74b07602d2454a281287685ae66b5ab7b5" + sha256: e7317eb2eb611d1bf0386b6b974be9c50449f975f19a90a7b8ea013550302b30 url: "https://pub.dev" source: hosted - version: "13.0.0" + version: "13.0.1" permission_handler_android: dependency: transitive description: @@ -953,10 +985,10 @@ packages: dependency: transitive description: name: permission_handler_apple - sha256: "11b7e94a9d2fbee23c27f0cae0105c6266c03fd83b9a2eda6cf09141fc82624b" + sha256: f49cb15a064ea9d974fc7fbb302099353b7b170d07284e86e264561579e5bcf8 url: "https://pub.dev" source: hosted - version: "9.5.0" + version: "9.6.1" permission_handler_html: dependency: transitive description: @@ -1318,10 +1350,10 @@ packages: dependency: transitive description: name: synchronized - sha256: "61894a1956de6b4fc1aefd0892e109514a1a706cbece3ac59decd90ff5a7a423" + sha256: "3a7b5d17422dd0f8d5c6c14feaa5a1c65638b9455f871a96f08437562c046931" url: "https://pub.dev" source: hosted - version: "3.4.1+1" + version: "3.4.1+2" term_glyph: dependency: transitive description: @@ -1454,10 +1486,10 @@ packages: dependency: "direct main" description: name: video_player - sha256: "20ef311160e2ced020a62f38e4cc399a1bf289e722fc5fe37c9d7b18e44c9e8d" + sha256: "8c837b570dccb9ae6ff73d2e0b03c7e708bfefd3bd1194faa7f3e7f200dfc399" url: "https://pub.dev" source: hosted - version: "2.13.0" + version: "2.14.0" video_player_android: dependency: transitive description: @@ -1494,10 +1526,10 @@ packages: dependency: transitive description: name: vm_service - sha256: "0016aef94fc66495ac78af5859181e3f3bf2026bd8eecc72b9565601e19ab360" + sha256: "5f37239c4851efcef929cea7824e76df7f2f0970aef85d66bbc430afa40e72f0" url: "https://pub.dev" source: hosted - version: "15.2.0" + version: "15.3.0" watcher: dependency: transitive description: @@ -1542,10 +1574,10 @@ packages: dependency: transitive description: name: win32 - sha256: ba6f4bba816c8d7e3c1580e170f3786d216951cc6b94babc3b814c08d2cb2738 + sha256: a0b93865d5644f11cf6a8c3f6db909f1ec168958b5805f6cc684adea957cd63d url: "https://pub.dev" source: hosted - version: "6.3.0" + version: "6.4.0" win32_registry: dependency: transitive description: @@ -1554,6 +1586,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.3" + windows_file_picker: + dependency: transitive + description: + name: windows_file_picker + sha256: "72cf23466e146f2c0f19e1d78be97ff6409dc15b0c090f8eb284f94f4a33de26" + url: "https://pub.dev" + source: hosted + version: "1.0.1" xdg_directories: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 5fb293af..58ca3b91 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -23,7 +23,7 @@ dependencies: # Storage & Persistence shared_preferences: ^2.5.5 - flutter_secure_storage: ^10.3.1 + flutter_secure_storage: ^11.0.0 path_provider: ^2.1.6 path: ^1.9.1 sqflite: ^2.4.3 @@ -43,7 +43,7 @@ dependencies: permission_handler: ^13.0.0 # File Picker - file_picker: 12.0.0-beta.7 + file_picker: ^12.0.0 # JSON Serialization json_annotation: ^4.12.0