Compare commits

...

3 Commits

Author SHA1 Message Date
23d6cd5fdb Add a bottom bar for single page viewer 2025-09-28 21:21:52 +08:00
8d9fe6a2e3 Update deps 2025-09-28 20:04:52 +08:00
0303a9366d Update 2025-09-28 19:53:07 +08:00
5 changed files with 339 additions and 145 deletions

View File

@@ -37,6 +37,11 @@
"asc": "Ascending",
"desc": "Descending",
"saveAs": "Save As",
"scrollDirection": "Scroll direction",
"scrollDirectionDefault": "Left to right",
"scrollDirectionRtl": "Right to left",
"scrollDirectionDown": "Top to bottom",
"scrollDirectionUp": "Bottom to top",
"posted": "Posted",
"visible": "Visible",
"yes": "Yes",

View File

@@ -37,6 +37,11 @@
"asc": "升序",
"desc": "降序",
"saveAs": "另存为",
"scrollDirection": "滚动方向",
"scrollDirectionDefault": "从左往右",
"scrollDirectionRtl": "从右往左",
"scrollDirectionDown": "从上往下",
"scrollDirectionUp": "从下往上",
"posted": "上传时间",
"visible": "可见性",
"yes": "是",

View File

@@ -62,9 +62,158 @@ class _SinglePageViewer extends State<SinglePageViewer>
Object? _error;
bool _inited = false;
bool _showMenu = false;
int _scrollMethod = 0;
double? _sliderValue;
late PhotoViewController _photoViewController;
final LruMap<int, (Uint8List, String?, String)> _imgData =
LruMap(maximumSize: 20);
Axis get _scrollAxis => _scrollMethod >= 2 ? Axis.vertical : Axis.horizontal;
bool get _isReverseScroll => _scrollMethod == 1 || _scrollMethod == 3;
void _showPageSettings(BuildContext context) {
final i18n = AppLocalizations.of(context)!;
final options = [
MapEntry(0, i18n.scrollDirectionDefault),
MapEntry(1, i18n.scrollDirectionRtl),
MapEntry(2, i18n.scrollDirectionDown),
MapEntry(3, i18n.scrollDirectionUp)
];
showModalBottomSheet(
context: context,
builder: (sheetContext) {
var selected = _scrollMethod;
return StatefulBuilder(builder: (context, setSheetState) {
return SafeArea(
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
ListTile(
dense: true,
title: Text(i18n.scrollDirection),
),
for (final entry in options)
RadioListTile<int>(
title: Text(entry.value),
value: entry.key,
groupValue: selected,
onChanged: (value) async {
if (value == null) return;
setSheetState(() {
selected = value;
});
Navigator.of(sheetContext).pop();
final saved =
await prefs.setInt("single_viewer_scroll_method", value);
if (!saved) {
_log.warning(
"Failed to save single_viewer_scroll_method.");
return;
}
if (!mounted) return;
setState(() {
_scrollMethod = value;
});
})
]));
});
});
}
Widget _buildBottomBar(BuildContext context) {
if (!_showMenu || _pages == null) return Container();
final theme = Theme.of(context);
final textStyle = theme.textTheme.bodyMedium;
final pagesCount = _pages!.length;
if (pagesCount == 0) return Container();
final double maxPage = (pagesCount - 1).toDouble();
final double currentValue =
(_sliderValue ?? _index.toDouble()).clamp(0.0, maxPage).toDouble();
final displayIndex = currentValue.round().clamp(0, pagesCount - 1);
Slider buildSlider() {
return Slider(
value: currentValue,
min: 0,
max: maxPage,
divisions: pagesCount - 1,
onChanged: (value) {
setState(() {
_sliderValue = value;
});
},
onChangeEnd: (value) {
final target = value.round().clamp(0, pagesCount - 1);
if (target != _index) {
_pageController.animateToPage(target,
duration: const Duration(milliseconds: 200),
curve: Curves.easeInOut);
}
setState(() {
_sliderValue = target.toDouble();
});
},
);
}
return Positioned(
left: 0,
right: 0,
bottom: 0,
child: SafeArea(
minimum: const EdgeInsets.all(16),
child: LayoutBuilder(builder: (context, constraints) {
final isWide = constraints.maxWidth > 480;
return Container(
padding: const EdgeInsets.symmetric(
horizontal: 16, vertical: 12),
decoration: BoxDecoration(
color: theme.colorScheme.surface.withOpacity(0.9),
borderRadius: BorderRadius.circular(16)),
child: isWide
? Row(children: [
Text(
"${displayIndex + 1} / $pagesCount",
style: textStyle,
),
if (pagesCount > 1) ...[
const SizedBox(width: 16),
Expanded(child: buildSlider()),
const SizedBox(width: 16),
] else ...[
const Spacer(),
const SizedBox(width: 16),
],
IconButton(
onPressed: () {
_showPageSettings(context);
},
icon: const Icon(Icons.settings))
])
: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
if (pagesCount > 1) ...[
buildSlider(),
const SizedBox(height: 12),
],
Row(children: [
Text(
"${displayIndex + 1} / $pagesCount",
style: textStyle,
),
const Spacer(),
IconButton(
onPressed: () {
_showPageSettings(context);
},
icon: const Icon(Icons.settings))
])
],
));
})));
}
void _updatePages() {
if (_data == null) return;
final displayAd = prefs.getBool("displayAd") ?? false;
@@ -76,6 +225,7 @@ class _SinglePageViewer extends State<SinglePageViewer>
_pageController = PageController(initialPage: _index);
_inited = true;
}
_sliderValue = _index.toDouble();
}
@override
@@ -84,6 +234,7 @@ class _SinglePageViewer extends State<SinglePageViewer>
_updatePages();
_files = widget.files;
_back = "/gallery/${widget.gid}";
_scrollMethod = prefs.getInt("single_viewer_scroll_method") ?? 0;
_photoViewController = PhotoViewController();
super.initState();
}
@@ -139,6 +290,8 @@ class _SinglePageViewer extends State<SinglePageViewer>
scrollPhysics: const BouncingScrollPhysics(),
pageController: _pageController,
itemCount: _pages!.length,
scrollDirection: _scrollAxis,
reverse: _isReverseScroll,
builder: (BuildContext context, int index) {
final data = _pages![index];
final f = _files!.files[data.token]!.first;
@@ -160,7 +313,10 @@ class _SinglePageViewer extends State<SinglePageViewer>
);
},
onPageChanged: (index) {
_index = index;
setState(() {
_index = index;
_sliderValue = index.toDouble();
});
SchedulerBinding.instance.addPostFrameCallback((_) {
_onPageChanged(context);
});
@@ -170,26 +326,55 @@ class _SinglePageViewer extends State<SinglePageViewer>
Widget _buildWithKeyboardSupport(BuildContext context,
{required Widget child}) {
void goPrevious() {
if (_index > 0) {
_pageController.previousPage(
duration: const Duration(milliseconds: 200),
curve: Curves.easeInOut);
}
}
void goNext() {
if (_index < _pages!.length - 1) {
_pageController.nextPage(
duration: const Duration(milliseconds: 200),
curve: Curves.easeInOut);
}
}
final bindings = <KeyAction>[];
if (_scrollAxis == Axis.horizontal) {
if (_isReverseScroll) {
bindings.add(KeyAction(
LogicalKeyboardKey.arrowLeft, "next page", () => goNext()));
bindings.add(KeyAction(
LogicalKeyboardKey.arrowRight, "previous page", () => goPrevious()));
} else {
bindings.add(KeyAction(
LogicalKeyboardKey.arrowLeft, "previous page", () => goPrevious()));
bindings.add(KeyAction(
LogicalKeyboardKey.arrowRight, "next page", () => goNext()));
}
} else {
if (_isReverseScroll) {
bindings.add(KeyAction(
LogicalKeyboardKey.arrowUp, "next page", () => goNext()));
bindings.add(KeyAction(
LogicalKeyboardKey.arrowDown, "previous page", () => goPrevious()));
} else {
bindings.add(KeyAction(
LogicalKeyboardKey.arrowUp, "previous page", () => goPrevious()));
bindings.add(KeyAction(
LogicalKeyboardKey.arrowDown, "next page", () => goNext()));
}
}
bindings.add(KeyAction(LogicalKeyboardKey.backspace, "back", () {
context.canPop() ? context.pop() : context.go(_back);
}));
return KeyboardWidget(
bindings: [
KeyAction(LogicalKeyboardKey.arrowLeft, "previous page", () {
if (_index > 0) {
_pageController.previousPage(
duration: const Duration(milliseconds: 200),
curve: Curves.easeInOut);
}
}),
KeyAction(LogicalKeyboardKey.arrowRight, "next page", () {
if (_index < _pages!.length - 1) {
_pageController.nextPage(
duration: const Duration(milliseconds: 200),
curve: Curves.easeInOut);
}
}),
KeyAction(LogicalKeyboardKey.backspace, "back", () {
context.canPop() ? context.pop() : context.go(_back);
}),
],
bindings: bindings,
child: child,
);
}
@@ -254,11 +439,11 @@ class _SinglePageViewer extends State<SinglePageViewer>
title: i18n.saveAs,
callback: () {
try {
platformPath.saveFile(
basenameWithoutExtension(_pages![_index].name),
fmt.toMimeType(),
data,
dir: isAndroid ? widget.gid!.toString() : "");
platformPath.saveFile(
basenameWithoutExtension(_pages![_index].name),
fmt.toMimeType(),
data,
dir: isAndroid ? widget.gid.toString() : "");
} catch (err, stack) {
_log.warning("Failed to save image: $err\n$stack");
}
@@ -360,6 +545,7 @@ class _SinglePageViewer extends State<SinglePageViewer>
body: Stack(children: [
_buildViewer(context),
_buildTopAppBar(context),
_buildBottomBar(context),
]),
);
}

View File

@@ -5,7 +5,6 @@
import FlutterMacOS
import Foundation
import cryptography_flutter
import device_info_plus
import irondash_engine_context
import package_info_plus
@@ -17,7 +16,6 @@ import super_native_extensions
import window_manager
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
CryptographyFlutterPlugin.register(with: registry.registrar(forPlugin: "CryptographyFlutterPlugin"))
DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin"))
IrondashEngineContextPlugin.register(with: registry.registrar(forPlugin: "IrondashEngineContextPlugin"))
FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin"))

View File

@@ -29,18 +29,18 @@ packages:
dependency: transitive
description:
name: archive
sha256: "6199c74e3db4fbfbd04f66d739e72fe11c8a8957d5f219f1f4482dbde6420b5a"
sha256: "2fde1607386ab523f7a36bb3e7edb43bd58e6edaf2ffb29d8a6d578b297fdbbd"
url: "https://pub.dev"
source: hosted
version: "4.0.2"
version: "4.0.7"
args:
dependency: transitive
description:
name: args
sha256: bf9f5caeea8d8fe6721a9c358dd8a5c1947b27f1cfaa18b39c301273594919e6
sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04
url: "https://pub.dev"
source: hosted
version: "2.6.0"
version: "2.7.0"
async:
dependency: transitive
description:
@@ -69,18 +69,18 @@ packages:
dependency: transitive
description:
name: build_config
sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1
sha256: "4ae2de3e1e67ea270081eaee972e1bd8f027d459f249e0f1186730784c2e7e33"
url: "https://pub.dev"
source: hosted
version: "1.1.1"
version: "1.1.2"
build_daemon:
dependency: transitive
description:
name: build_daemon
sha256: "79b2aef6ac2ed00046867ed354c88778c9c0f029df8a20fe10b5436826721ef9"
sha256: "8e928697a82be082206edb0b9c99c5a4ad6bc31c9e9b8b2f291ae65cd4a25daa"
url: "https://pub.dev"
source: hosted
version: "4.0.2"
version: "4.0.4"
build_resolvers:
dependency: transitive
description:
@@ -93,18 +93,18 @@ packages:
dependency: "direct dev"
description:
name: build_runner
sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7"
sha256: "028819cfb90051c6b5440c7e574d1896f8037e3c96cf17aaeb054c9311cfbf4d"
url: "https://pub.dev"
source: hosted
version: "2.4.11"
version: "2.4.13"
build_runner_core:
dependency: transitive
description:
name: build_runner_core
sha256: e3c79f69a64bdfcd8a776a3c28db4eb6e3fb5356d013ae5eb2e52007706d5dbe
sha256: f8126682b87a7282a339b871298cc12009cb67109cfa1614d6436fb0289193e0
url: "https://pub.dev"
source: hosted
version: "7.3.1"
version: "7.3.2"
built_collection:
dependency: transitive
description:
@@ -117,10 +117,10 @@ packages:
dependency: transitive
description:
name: built_value
sha256: "28a712df2576b63c6c005c465989a348604960c0958d28be5303ba9baa841ac2"
sha256: a30f0a0e38671e89a492c44d005b5545b830a961575bbd8336d42869ff71066d
url: "https://pub.dev"
source: hosted
version: "8.9.3"
version: "8.12.0"
characters:
dependency: transitive
description:
@@ -133,10 +133,10 @@ packages:
dependency: transitive
description:
name: checked_yaml
sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff
sha256: "959525d3162f249993882720d52b7e0c833978df229be20702b33d48d91de70f"
url: "https://pub.dev"
source: hosted
version: "2.0.3"
version: "2.0.4"
clock:
dependency: transitive
description:
@@ -149,10 +149,10 @@ packages:
dependency: transitive
description:
name: code_builder
sha256: f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37
sha256: "11654819532ba94c34de52ff5feb52bd81cba1de00ef2ed622fd50295f9d4243"
url: "https://pub.dev"
source: hosted
version: "4.10.0"
version: "4.11.0"
collection:
dependency: transitive
description:
@@ -223,34 +223,34 @@ packages:
dependency: transitive
description:
name: device_info_plus_platform_interface
sha256: "0b04e02b30791224b31969eb1b50d723498f402971bff3630bca2ba839bd1ed2"
sha256: e1ea89119e34903dca74b883d0dd78eb762814f97fb6c76f35e9ff74d261a18f
url: "https://pub.dev"
source: hosted
version: "7.0.2"
version: "7.0.3"
dio:
dependency: "direct main"
description:
name: dio
sha256: "5598aa796bbf4699afd5c67c0f5f6e2ed542afc956884b9cd58c306966efc260"
sha256: d90ee57923d1828ac14e492ca49440f65477f4bb1263575900be731a3dac66a9
url: "https://pub.dev"
source: hosted
version: "5.7.0"
version: "5.9.0"
dio_cookie_manager:
dependency: "direct main"
description:
name: dio_cookie_manager
sha256: e79498b0f632897ff0c28d6e8178b4bc6e9087412401f618c31fa0904ace050d
sha256: d39c16abcc711c871b7b29bd51c6b5f3059ef39503916c6a9df7e22c4fc595e0
url: "https://pub.dev"
source: hosted
version: "3.1.1"
version: "3.3.0"
dio_web_adapter:
dependency: transitive
description:
name: dio_web_adapter
sha256: "33259a9276d6cea88774a0000cfae0d861003497755969c92faa223108620dc8"
sha256: "7586e476d70caecaf1686d21eee7247ea43ef5c345eab9e0cc3583ff13378d78"
url: "https://pub.dev"
source: hosted
version: "2.0.0"
version: "2.1.1"
enum_flag:
dependency: "direct main"
description:
@@ -279,10 +279,10 @@ packages:
dependency: transitive
description:
name: ffi
sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6"
sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418"
url: "https://pub.dev"
source: hosted
version: "2.1.3"
version: "2.1.4"
file:
dependency: "direct main"
description:
@@ -363,18 +363,18 @@ packages:
dependency: transitive
description:
name: glob
sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63"
sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de
url: "https://pub.dev"
source: hosted
version: "2.1.2"
version: "2.1.3"
go_router:
dependency: "direct main"
description:
name: go_router
sha256: "2fd11229f59e23e967b0775df8d5948a519cd7e1e8b6e849729e010587b46539"
sha256: f02fd7d2a4dc512fec615529824fdd217fecb3a3d3de68360293a551f21634b3
url: "https://pub.dev"
source: hosted
version: "14.6.2"
version: "14.8.1"
graphs:
dependency: transitive
description:
@@ -387,10 +387,10 @@ packages:
dependency: transitive
description:
name: http
sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010
sha256: bb2ce4590bc2667c96f318d68cac1b5a7987ec819351d32b1c987239a815e007
url: "https://pub.dev"
source: hosted
version: "1.2.2"
version: "1.5.0"
http_multi_server:
dependency: transitive
description:
@@ -403,18 +403,18 @@ packages:
dependency: transitive
description:
name: http_parser
sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b"
sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571"
url: "https://pub.dev"
source: hosted
version: "4.0.2"
version: "4.1.2"
image:
dependency: "direct main"
description:
name: image
sha256: "8346ad4b5173924b5ddddab782fc7d8a6300178c8b1dc427775405a01701c4a6"
sha256: "4e973fcf4caae1a4be2fa0a13157aa38a8f9cb049db6529aa00b4d71abc4d928"
url: "https://pub.dev"
source: hosted
version: "4.5.2"
version: "4.5.4"
infinite_scroll_pagination:
dependency: "direct main"
description:
@@ -443,10 +443,10 @@ packages:
dependency: transitive
description:
name: irondash_engine_context
sha256: cd7b769db11a2b5243b037c8a9b1ecaef02e1ae27a2d909ffa78c1dad747bb10
sha256: "2bb0bc13dfda9f5aaef8dde06ecc5feb1379f5bb387d59716d799554f3f305d7"
url: "https://pub.dev"
source: hosted
version: "0.5.4"
version: "0.5.5"
irondash_message_channel:
dependency: transitive
description:
@@ -491,26 +491,26 @@ packages:
dependency: transitive
description:
name: leak_tracker
sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0"
sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
url: "https://pub.dev"
source: hosted
version: "10.0.9"
version: "11.0.2"
leak_tracker_flutter_testing:
dependency: transitive
description:
name: leak_tracker_flutter_testing
sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573
sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
url: "https://pub.dev"
source: hosted
version: "3.0.9"
version: "3.0.10"
leak_tracker_testing:
dependency: transitive
description:
name: leak_tracker_testing
sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
url: "https://pub.dev"
source: hosted
version: "3.0.1"
version: "3.0.2"
lints:
dependency: transitive
description:
@@ -531,10 +531,10 @@ packages:
dependency: transitive
description:
name: markdown
sha256: ef2a1298144e3f985cc736b22e0ccdaf188b5b3970648f2d9dc13efd1d9df051
sha256: "935e23e1ff3bc02d390bad4d4be001208ee92cc217cb5b5a6c19bc14aaa318c1"
url: "https://pub.dev"
source: hosted
version: "7.2.2"
version: "7.3.0"
matcher:
dependency: transitive
description:
@@ -571,10 +571,10 @@ packages:
dependency: transitive
description:
name: mime
sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a"
sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6"
url: "https://pub.dev"
source: hosted
version: "1.0.6"
version: "2.0.0"
mutex:
dependency: "direct main"
description:
@@ -587,34 +587,34 @@ packages:
dependency: transitive
description:
name: package_config
sha256: "92d4488434b520a62570293fbd33bb556c7d49230791c1b4bbd973baf6d2dc67"
sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc
url: "https://pub.dev"
source: hosted
version: "2.1.1"
version: "2.2.0"
package_info_plus:
dependency: "direct main"
description:
name: package_info_plus
sha256: "70c421fe9d9cc1a9a7f3b05ae56befd469fe4f8daa3b484823141a55442d858d"
sha256: "16eee997588c60225bda0488b6dcfac69280a6b7a3cf02c741895dd370a02968"
url: "https://pub.dev"
source: hosted
version: "8.1.2"
version: "8.3.1"
package_info_plus_platform_interface:
dependency: transitive
description:
name: package_info_plus_platform_interface
sha256: a5ef9986efc7bf772f2696183a3992615baa76c1ffb1189318dd8803778fb05b
sha256: "202a487f08836a592a6bd4f901ac69b3a8f146af552bbd14407b6b41e1c3f086"
url: "https://pub.dev"
source: hosted
version: "3.0.2"
version: "3.2.1"
palette_generator:
dependency: "direct main"
description:
name: palette_generator
sha256: "0b20245c451f14a5ca0818ab7a377765162389f8e8f0db361cceabf0fed9d1ea"
sha256: "4420f7ccc3f0a4a906144e73f8b6267cd940b64f57a7262e95cb8cec3a8ae0ed"
url: "https://pub.dev"
source: hosted
version: "0.3.3+5"
version: "0.3.3+7"
path:
dependency: "direct main"
description:
@@ -635,18 +635,18 @@ packages:
dependency: transitive
description:
name: path_provider_android
sha256: "6f01f8e37ec30b07bc424b4deabac37cacb1bc7e2e515ad74486039918a37eb7"
sha256: "993381400e94d18469750e5b9dcb8206f15bc09f9da86b9e44a9b0092a0066db"
url: "https://pub.dev"
source: hosted
version: "2.2.10"
version: "2.2.18"
path_provider_foundation:
dependency: transitive
description:
name: path_provider_foundation
sha256: "4843174df4d288f5e29185bd6e72a6fbdf5a4a4602717eed565497429f179942"
sha256: "16eef174aacb07e09c351502740fa6254c165757638eba1e9116b0a781201bbd"
url: "https://pub.dev"
source: hosted
version: "2.4.1"
version: "2.4.2"
path_provider_linux:
dependency: transitive
description:
@@ -675,18 +675,18 @@ packages:
dependency: "direct main"
description:
name: percent_indicator
sha256: "0d77d5c6fa9b7f60202cedf748b568ba9ba38d3f30405d6ceae4da76f5185462"
sha256: "157d29133bbc6ecb11f923d36e7960a96a3f28837549a20b65e5135729f0f9fd"
url: "https://pub.dev"
source: hosted
version: "4.2.4"
version: "4.2.5"
petitparser:
dependency: transitive
description:
name: petitparser
sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27
sha256: "1a97266a94f7350d30ae522c0af07890c70b8e62c71e8e3920d1db4d23c057d1"
url: "https://pub.dev"
source: hosted
version: "6.0.2"
version: "7.0.1"
photo_view:
dependency: "direct main"
description:
@@ -723,18 +723,18 @@ 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:
name: posix
sha256: a0117dc2167805aa9125b82eee515cc891819bac2f538c83646d355b16f58b9a
sha256: "6323a5b0fa688b6a010df4905a56b00181479e6d10534cecfecede2aa55add61"
url: "https://pub.dev"
source: hosted
version: "6.0.1"
version: "6.0.3"
protobuf:
dependency: transitive
description:
@@ -747,18 +747,18 @@ packages:
dependency: transitive
description:
name: pub_semver
sha256: "7b3cfbf654f3edd0c6298ecd5be782ce997ddf0e00531b9464b55245185bbbbd"
sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585"
url: "https://pub.dev"
source: hosted
version: "2.1.5"
version: "2.2.0"
pubspec_parse:
dependency: transitive
description:
name: pubspec_parse
sha256: "81876843eb50dc2e1e5b151792c9a985c5ed2536914115ed04e9c8528f6647b0"
sha256: "0560ba233314abbed0a48a2956f7f022cce7c3e1e73df540277da7544cad4082"
url: "https://pub.dev"
source: hosted
version: "1.4.0"
version: "1.5.0"
quiver:
dependency: "direct main"
description:
@@ -771,10 +771,10 @@ packages:
dependency: "direct main"
description:
name: retrofit
sha256: "3c9885ef3dbc5dc4b3fb0a40c972ab52e4dad04d52dac9bba24dfa76cf100451"
sha256: "699cf44ec6c7fc7d248740932eca75d334e36bdafe0a8b3e9ff93100591c8a25"
url: "https://pub.dev"
source: hosted
version: "4.4.1"
version: "4.7.2"
retrofit_generator:
dependency: "direct dev"
description:
@@ -795,18 +795,18 @@ packages:
dependency: "direct main"
description:
name: shared_preferences
sha256: "95f9997ca1fb9799d494d0cb2a780fd7be075818d59f00c43832ed112b158a82"
sha256: "6e8bf70b7fef813df4e9a36f658ac46d107db4b4cfe1048b477d4e453a8159f5"
url: "https://pub.dev"
source: hosted
version: "2.3.3"
version: "2.5.3"
shared_preferences_android:
dependency: transitive
description:
name: shared_preferences_android
sha256: "480ba4345773f56acda9abf5f50bd966f581dac5d514e5fc4a18c62976bbba7e"
sha256: bd14436108211b0d4ee5038689a56d4ae3620fd72fd6036e113bf1345bc74d9e
url: "https://pub.dev"
source: hosted
version: "2.3.2"
version: "2.4.13"
shared_preferences_foundation:
dependency: transitive
description:
@@ -835,10 +835,10 @@ packages:
dependency: transitive
description:
name: shared_preferences_web
sha256: d2ca4132d3946fec2184261726b355836a82c33d7d5b67af32692aff18a4684e
sha256: c49bd060261c9a3f0ff445892695d6212ff603ef3115edbb448509d407600019
url: "https://pub.dev"
source: hosted
version: "2.4.2"
version: "2.4.3"
shared_preferences_windows:
dependency: transitive
description:
@@ -851,10 +851,10 @@ packages:
dependency: transitive
description:
name: shelf
sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4
sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12
url: "https://pub.dev"
source: hosted
version: "1.4.1"
version: "1.4.2"
shelf_web_socket:
dependency: transitive
description:
@@ -912,34 +912,34 @@ packages:
dependency: transitive
description:
name: sqflite_common
sha256: "3da423ce7baf868be70e2c0976c28a1bb2f73644268b7ffa7d2e08eab71f16a4"
sha256: "6ef422a4525ecc601db6c0a2233ff448c731307906e92cabc9ba292afaae16a6"
url: "https://pub.dev"
source: hosted
version: "2.5.4"
version: "2.5.6"
sqflite_common_ffi:
dependency: "direct main"
description:
name: sqflite_common_ffi
sha256: "4d6137c29e930d6e4a8ff373989dd9de7bac12e3bc87bce950f6e844e8ad3bb5"
sha256: "9faa2fedc5385ef238ce772589f7718c24cdddd27419b609bb9c6f703ea27988"
url: "https://pub.dev"
source: hosted
version: "2.3.3"
version: "2.3.6"
sqlite3:
dependency: transitive
description:
name: sqlite3
sha256: bb174b3ec2527f9c5f680f73a89af8149dd99782fbb56ea88ad0807c5638f2ed
sha256: f393d92c71bdcc118d6203d07c991b9be0f84b1a6f89dd4f7eed348131329924
url: "https://pub.dev"
source: hosted
version: "2.4.7"
version: "2.9.0"
sqlite3_flutter_libs:
dependency: "direct main"
description:
name: sqlite3_flutter_libs
sha256: "73016db8419f019e807b7a5e5fbf2a7bd45c165fed403b8e7681230f3a102785"
sha256: "2b03273e71867a8a4d030861fc21706200debe5c5858a4b9e58f4a1c129586a4"
url: "https://pub.dev"
source: hosted
version: "0.5.28"
version: "0.5.39"
stack_trace:
dependency: transitive
description:
@@ -1000,10 +1000,10 @@ packages:
dependency: transitive
description:
name: synchronized
sha256: "539ef412b170d65ecdafd780f924e5be3f60032a1128df156adad6c5b373d558"
sha256: c254ade258ec8282947a0acbbc90b9575b4f19673533ee46f2f6e9b3aeefd7c0
url: "https://pub.dev"
source: hosted
version: "3.1.0+1"
version: "3.4.0"
term_glyph:
dependency: transitive
description:
@@ -1016,10 +1016,10 @@ packages:
dependency: transitive
description:
name: test_api
sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00"
url: "https://pub.dev"
source: hosted
version: "0.7.4"
version: "0.7.6"
timing:
dependency: transitive
description:
@@ -1040,10 +1040,10 @@ packages:
dependency: transitive
description:
name: typed_data
sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c
sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
url: "https://pub.dev"
source: hosted
version: "1.3.2"
version: "1.4.0"
ua_parser_js:
dependency: "direct main"
description:
@@ -1064,10 +1064,10 @@ packages:
dependency: "direct main"
description:
name: user_agent_analyzer
sha256: "2fd1f488837eaacfe86c3bdffa13166fe446c9b5e68f95afe72e0bc57fe5f394"
sha256: "144cae40229715985cb37799913cc25917df33a92be8469daa55e1e4aada4aa6"
url: "https://pub.dev"
source: hosted
version: "5.2.0"
version: "5.4.0"
uuid:
dependency: transitive
description:
@@ -1080,58 +1080,58 @@ packages:
dependency: transitive
description:
name: vector_math
sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
url: "https://pub.dev"
source: hosted
version: "2.1.4"
version: "2.2.0"
vm_service:
dependency: transitive
description:
name: vm_service
sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02
sha256: "45caa6c5917fa127b5dbcfbd1fa60b14e583afdc08bfc96dda38886ca252eb60"
url: "https://pub.dev"
source: hosted
version: "15.0.0"
version: "15.0.2"
watcher:
dependency: transitive
description:
name: watcher
sha256: "69da27e49efa56a15f8afe8f4438c4ec02eff0a117df1b22ea4aad194fe1c104"
sha256: "5bf046f41320ac97a469d506261797f35254fa61c641741ef32dacda98b7d39c"
url: "https://pub.dev"
source: hosted
version: "1.1.1"
version: "1.1.3"
web:
dependency: "direct main"
description:
name: web
sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb
sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a"
url: "https://pub.dev"
source: hosted
version: "1.1.0"
version: "1.1.1"
web_socket:
dependency: transitive
description:
name: web_socket
sha256: "3c12d96c0c9a4eec095246debcea7b86c0324f22df69893d538fcc6f1b8cce83"
sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c"
url: "https://pub.dev"
source: hosted
version: "0.1.6"
version: "1.0.1"
web_socket_channel:
dependency: "direct main"
description:
name: web_socket_channel
sha256: "9f187088ed104edd8662ca07af4b124465893caf063ba29758f97af57e61da8f"
sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8
url: "https://pub.dev"
source: hosted
version: "3.0.1"
version: "3.0.3"
win32:
dependency: transitive
description:
name: win32
sha256: "68d1e89a91ed61ad9c370f9f8b6effed9ae5e0ede22a270bdfa6daf79fc2290a"
sha256: "66814138c3562338d05613a6e368ed8cfb237ad6d64a9e9334be3f309acfca03"
url: "https://pub.dev"
source: hosted
version: "5.5.4"
version: "5.14.0"
win32_registry:
dependency: transitive
description:
@@ -1160,10 +1160,10 @@ packages:
dependency: transitive
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:
@@ -1173,5 +1173,5 @@ packages:
source: hosted
version: "3.1.3"
sdks:
dart: ">=3.7.0-0 <4.0.0"
flutter: ">=3.22.0"
dart: ">=3.8.0 <4.0.0"
flutter: ">=3.29.0"