diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index a0977c8..047540a 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -424,5 +424,10 @@ "moveItemToCartTitle": "Move to Cart", "moveItemToCartSubtitle": "Mark item as in-cart, so others know, you bought it", "removeItemFromCartTitle": "Remove from Cart", - "removeItemFromCartSubtitle": "Remove item from shopping cart, so others know, that you still need it" + "removeItemFromCartSubtitle": "Remove item from shopping cart, so others know, that you still need it", + + "newItemQueryEmpty": "Type to show quick access buttons", + "newItemQueryHint": "Type item or product name", + "newItemQuickAccessPrefix": "Create:", + "newItemQuickProduct": "product: {text}" } diff --git a/lib/main.dart b/lib/main.dart index a6f161c..c8f6444 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -6,6 +6,7 @@ import 'package:outbag_app/backend/user.dart'; import 'package:outbag_app/backend/request.dart'; import 'package:outbag_app/screens/room/categories/edit.dart'; import 'package:outbag_app/screens/room/items/edit.dart'; +import 'package:outbag_app/screens/room/items/new.dart'; import 'package:outbag_app/screens/room/products/edit.dart'; import 'package:outbag_app/screens/room/products/view.dart'; @@ -306,7 +307,7 @@ class _OutbagAppState extends State { GoRoute( name: 'new-item', path: 'new-item', - builder: (context, state) => EditItemPage( + builder: (context, state) => NewItemPage( server: state.params['server'] ?? '', room: state.params['id'] ?? '', diff --git a/lib/screens/room/items/edit.dart b/lib/screens/room/items/edit.dart index d95c857..79717dd 100644 --- a/lib/screens/room/items/edit.dart +++ b/lib/screens/room/items/edit.dart @@ -14,10 +14,13 @@ class EditItemPage extends StatefulWidget { final String room; final String server; - final int? item; + final int item; const EditItemPage( - {super.key, required this.room, required this.server, this.item}); + {super.key, + required this.room, + required this.server, + required this.item}); @override State createState() => _EditItemPageState(); @@ -31,6 +34,7 @@ class _EditItemPageState extends State { int _ctrUnit = 0; String _ctrValue = ''; int? _ctrLink; + int _ctrState = 0; // data cache List categories = []; @@ -100,6 +104,13 @@ class _EditItemPageState extends State { final resp = RoomItem.fromJSON(body['data']); setState(() { item = resp; + _ctrName.text = resp.name; + _ctrDescription.text = resp.description; + _ctrValue = resp.value; + _ctrCategory = resp.category; + _ctrLink = resp.link; + _ctrUnit = resp.unit; + _ctrState = resp.state; }); }); } @@ -112,9 +123,7 @@ class _EditItemPageState extends State { fetchCategories(); fetchProducts(); - if (widget.item != null) { - fetchItem(); - } + fetchItem(); }); } @@ -122,9 +131,7 @@ class _EditItemPageState extends State { Widget build(BuildContext context) { return Scaffold( appBar: AppBar( - title: Text((widget.item == null) - ? AppLocalizations.of(context)!.createItem - : AppLocalizations.of(context)!.editItem), + title: Text(AppLocalizations.of(context)!.editItem), ), body: SingleChildScrollView( child: Center( @@ -227,52 +234,29 @@ class _EditItemPageState extends State { final user = context.read(); - if (widget.item == null) { - doNetworkRequest(scaffMgr, - req: () => postWithCreadentials( - credentials: user, - target: user.server, - path: 'addItem', - body: { - 'room': widget.room, - 'server': widget.server, - 'state': 0, - 'title': _ctrName.text, - 'description': _ctrDescription.text, - 'listCatID': _ctrCategory, - 'unit': _ctrUnit, - 'value': _ctrValue, - 'listProdID': _ctrLink - }), - onOK: (_) async { - nav.pop(); - }); - } else { - doNetworkRequest(scaffMgr, - req: () => postWithCreadentials( - credentials: user, - target: user.server, - path: 'changeItem', - body: { - 'listItemID': widget.item, - 'room': widget.room, - 'server': widget.server, - 'title': _ctrName.text, - 'description': _ctrDescription.text, - 'listCatID': _ctrCategory, - 'defUnit': _ctrUnit, - 'defValue': _ctrValue, - 'listProdID': _ctrLink - }), - onOK: (_) async { - nav.pop(); - }); - } + doNetworkRequest(scaffMgr, + req: () => postWithCreadentials( + credentials: user, + target: user.server, + path: 'changeItem', + body: { + 'listItemID': widget.item, + 'room': widget.room, + 'server': widget.server, + 'title': _ctrName.text, + 'state': _ctrState, + 'description': _ctrDescription.text, + 'listCatID': _ctrCategory, + 'unit': _ctrUnit, + 'value': _ctrValue, + 'listProdID': _ctrLink + }), + onOK: (_) async { + nav.pop(); + }); }, - label: Text(widget.item != null - ? AppLocalizations.of(context)!.editItemShort - : AppLocalizations.of(context)!.createItemShort), - icon: Icon(widget.item != null ? Icons.edit : Icons.add)), + label: Text(AppLocalizations.of(context)!.editItemShort), + icon: const Icon(Icons.edit)), ); } } diff --git a/lib/screens/room/items/new.dart b/lib/screens/room/items/new.dart new file mode 100644 index 0000000..47ee511 --- /dev/null +++ b/lib/screens/room/items/new.dart @@ -0,0 +1,285 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:go_router/go_router.dart'; +import 'package:outbag_app/backend/request.dart'; +import 'package:outbag_app/backend/room.dart'; +import 'package:outbag_app/backend/user.dart'; +import 'package:outbag_app/components/category_chip.dart'; +import 'package:outbag_app/tools/fetch_wrapper.dart'; +import 'package:provider/provider.dart'; + +class NewItemPage extends StatefulWidget { + final String room; + final String server; + + final int? item; + + const NewItemPage( + {super.key, required this.room, required this.server, this.item}); + + @override + State createState() => _NewItemPageState(); +} + +class _NewItemPageState extends State { + // input controllers + final _ctrInput = TextEditingController(); + + // data cache + List categories = []; + List products = []; + RoomItem? item; + + void fetchCategories() { + final user = context.read(); + + // TODO: load cached categories first + + doNetworkRequest(ScaffoldMessenger.of(context), + req: () => postWithCreadentials( + credentials: user, + target: user.server, + path: 'getCategories', + body: {'room': widget.room, 'server': widget.server}), + onOK: (body) async { + final resp = body['data'] + .map((raw) => RoomCategory.fromJSON(raw)) + .toList(); + + setState(() { + categories = resp; + }); + }); + } + + void fetchProducts() { + final user = context.read(); + + // TODO: load cached products first + + doNetworkRequest(ScaffoldMessenger.of(context), + req: () => postWithCreadentials( + credentials: user, + target: user.server, + path: 'getProducts', + body: {'room': widget.room, 'server': widget.server}), + onOK: (body) async { + final resp = body['data'] + .map((raw) => RoomProduct.fromJSON(raw)) + .toList(); + + setState(() { + products = resp; + }); + }); + } + + void fetchItem() { + final user = context.read(); + + // TODO: load cached item first + + doNetworkRequest(ScaffoldMessenger.of(context), + req: () => postWithCreadentials( + credentials: user, + target: user.server, + path: 'getItem', + body: { + 'room': widget.room, + 'server': widget.server, + 'listItemID': widget.item + }), + onOK: (body) async { + final resp = RoomItem.fromJSON(body['data']); + setState(() { + item = resp; + }); + }); + } + + @override + void initState() { + super.initState(); + + WidgetsBinding.instance.addPostFrameCallback((_) { + fetchCategories(); + fetchProducts(); + + if (widget.item != null) { + fetchItem(); + } + }); + } + + String _query = ""; + + void createItem(BuildContext ctx, String name, int? productID) { + final scaffMgr = ScaffoldMessenger.of(context); + final router = GoRouter.of(context); + final user = context.read(); + + doNetworkRequest(scaffMgr, + req: () => postWithCreadentials( + target: user.server, + credentials: user, + path: 'addItem', + body: { + 'room': widget.room, + 'server': widget.server, + 'state': 0, + 'title': name, + 'description': '', + 'listCatID': null, + 'unit': 0, + 'value': '', + 'listProdID': productID + }), + onOK: (body) async { + final id = body["data"]["listItemID"]; + // TODO cache item + // launch edit item screen + router.pushReplacementNamed('edit-item', params: { + 'server': widget.server, + 'id': widget.room, + 'item': id.toString() + }); + }); + } + + void createProduct(BuildContext ctx, String name, Function(int) cb) { + final scaffMgr = ScaffoldMessenger.of(context); + final user = context.read(); + + doNetworkRequest(scaffMgr, + req: () => postWithCreadentials( + target: user.server, + credentials: user, + path: 'addProduct', + body: { + 'room': widget.room, + 'server': widget.server, + 'title': name, + 'description': '', + 'listCatID': null, + 'defUnit': 0, + 'defValue': '', + 'ean': '', + 'parent': null + }), + onOK: (body) async { + final id = body["data"]["listProdID"]; + // TODO: cache product + cb(id); + }); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text((widget.item == null) + ? AppLocalizations.of(context)!.createItem + : AppLocalizations.of(context)!.editItem), + ), + body: SingleChildScrollView( + child: Center( + child: Padding( + padding: const EdgeInsets.all(14), + child: ConstrainedBox( + constraints: const BoxConstraints(maxWidth: 400), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SearchBar( + controller: _ctrInput, + leading: const Icon(Icons.search), + hintText: + AppLocalizations.of(context)!.newItemQueryHint, + onChanged: (text) { + setState(() { + _query = text; + }); + }, + ), + const Divider(), + // button bar + ...((_query == "") + ? ([ + Text(AppLocalizations.of(context)! + .newItemQueryEmpty) + ]) + : ([ + Wrap( + spacing: 20, + runSpacing: 10, + alignment: WrapAlignment.center, + crossAxisAlignment: + WrapCrossAlignment.center, + children: [ + Text(AppLocalizations.of(context)! + .newItemQuickAccessPrefix), + // new item + FilledButton.icon( + onPressed: () { + // create new named item + // launch edit item screen once done + createItem(context, _query, null); + }, + icon: const Icon(Icons.add), + label: Text(_query)), + // new product + FilledButton.icon( + onPressed: () { + // create new product with name, + // create new item with name + // and link to the created product + // launch edit item screen once done + createProduct( + context, + _query, + (p0) => createItem( + context, _query, p0)); + }, + icon: const Icon(Icons.add), + label: Text(AppLocalizations.of( + context)! + .newItemQuickProduct(_query))), + ]) + ])), + const Divider(), + // link products search + ...((products + // show all products if query is empty + // when query isn't empty show products + // that contain the query in the title + // or description + .where((element) => + (_query == "") || + element.name.contains(_query) || + element.description.contains(_query)) + .map((e) => ListTile( + title: Text(e.name), + subtitle: Text(e.description), + trailing: CategoryChip( + category: categories + .where((element) => + element.id == e.category) + .firstOrNull ?? + RoomCategory.other(context), + ), + onTap: () { + // create new item and link it to the product + // launch edit item screen once done + createItem( + context, + // use productname as item name + e.name, + e.id); + }, + )))) + ], + ))))), + ); + } +} diff --git a/lib/screens/room/pages/list.dart b/lib/screens/room/pages/list.dart index 439e1ca..1acf73d 100644 --- a/lib/screens/room/pages/list.dart +++ b/lib/screens/room/pages/list.dart @@ -445,7 +445,7 @@ class ShoppingListItemInfo extends StatelessWidget { subtitle: Text(AppLocalizations.of(context)!.editItemLong), trailing: const Icon(Icons.chevron_right), onTap: () { - context.pushNamed('edit-product', params: { + context.pushNamed('edit-item', params: { 'server': server, 'id': room, 'item': item.id.toString() diff --git a/pubspec.lock b/pubspec.lock index f347139..56a2f16 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,18 +5,18 @@ packages: dependency: transitive description: name: archive - sha256: d6347d54a2d8028e0437e3c099f66fdb8ae02c4720c1e7534c9f24c10351f85d + sha256: "7b875fd4a20b165a3084bd2d210439b22ebc653f21cea4842729c0c30c82596b" url: "https://pub.dev" source: hosted - version: "3.3.6" + version: "3.4.9" args: dependency: transitive description: name: args - sha256: "4cab82a83ffef80b262ddedf47a0a8e56ee6fbf7fe21e6e768b02792034dd440" + sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596 url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.4.2" async: dependency: transitive description: @@ -45,10 +45,10 @@ packages: dependency: transitive description: name: checked_yaml - sha256: "3d1505d91afa809d177efd4eed5bb0eb65805097a1463abdd2add076effae311" + sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff url: "https://pub.dev" source: hosted - version: "2.0.2" + version: "2.0.3" cli_util: dependency: transitive description: @@ -85,10 +85,10 @@ packages: dependency: "direct main" description: name: crypto - sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 + sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "3.0.3" fake_async: dependency: transitive description: @@ -101,18 +101,18 @@ packages: dependency: transitive description: name: ffi - sha256: a38574032c5f1dd06c4aee541789906c12ccaab8ba01446e800d9c5b79c4a978 + sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "2.1.0" file: dependency: transitive description: name: file - sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" url: "https://pub.dev" source: hosted - version: "6.1.4" + version: "7.0.0" flutter: dependency: "direct main" description: flutter @@ -130,10 +130,10 @@ packages: dependency: "direct dev" description: name: flutter_lints - sha256: aeb0b80a8b3709709c9cc496cdc027c5b3216796bc0af0ce1007eaf24464fd4c + sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04 url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "2.0.3" flutter_localizations: dependency: "direct main" description: flutter @@ -143,10 +143,10 @@ packages: dependency: "direct main" description: name: flutter_svg - sha256: "12006889e2987c549c4c1ec1a5ba4ec4b24d34d2469ee5f9476c926dcecff266" + sha256: d39e7f95621fc84376bc0f7d504f05c3a41488c562f4a8ad410569127507402c url: "https://pub.dev" source: hosted - version: "2.0.4" + version: "2.0.9" flutter_test: dependency: "direct dev" description: flutter @@ -161,18 +161,18 @@ packages: dependency: "direct main" description: name: go_router - sha256: "432409518740645ce7f28802171b78783197d01149fad44f9b8ae55f40277139" + sha256: bd7e671d26fd39c78cba82070fa34ef1f830b0e7ed1aeebccabc6561302a7ee5 url: "https://pub.dev" source: hosted - version: "6.5.0" + version: "6.5.9" http: dependency: "direct main" description: name: http - sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" + sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2" url: "https://pub.dev" source: hosted - version: "0.13.5" + version: "0.13.6" http_parser: dependency: transitive description: @@ -185,10 +185,10 @@ packages: dependency: transitive description: name: image - sha256: "483a389d6ccb292b570c31b3a193779b1b0178e7eb571986d9a49904b6861227" + sha256: "028f61960d56f26414eb616b48b04eb37d700cbe477b7fb09bf1d7ce57fd9271" url: "https://pub.dev" source: hosted - version: "4.0.15" + version: "4.1.3" intl: dependency: "direct main" description: @@ -209,18 +209,18 @@ packages: dependency: transitive description: name: json_annotation - sha256: c33da08e136c3df0190bd5bbe51ae1df4a7d96e7954d1d7249fea2968a72d317 + sha256: b10a7b2ff83d83c777edba3c6a0f97045ddadd56c944e1a23a3fdf43a1bf4467 url: "https://pub.dev" source: hosted - version: "4.8.0" + version: "4.8.1" lints: dependency: transitive description: name: lints - sha256: "5e4a9cd06d447758280a8ac2405101e0e2094d2a1dbdd3756aec3fe7775ba593" + sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452" url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "2.1.1" localstore: dependency: "direct main" description: @@ -233,10 +233,10 @@ packages: dependency: transitive description: name: logging - sha256: "04094f2eb032cbb06c6f6e8d3607edcfcb0455e2bb6cbc010cb01171dcb64e6d" + sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.2.0" matcher: dependency: transitive description: @@ -289,154 +289,146 @@ packages: dependency: transitive description: name: path_provider - sha256: "04890b994ee89bfa80bf3080bfec40d5a92c5c7a785ebb02c13084a099d2b6f9" + sha256: a1aa8aaa2542a6bc57e381f132af822420216c80d4781f7aa085ca3229208aaa url: "https://pub.dev" source: hosted - version: "2.0.13" + version: "2.1.1" path_provider_android: dependency: transitive description: name: path_provider_android - sha256: "019f18c9c10ae370b08dce1f3e3b73bc9f58e7f087bb5e921f06529438ac0ae7" + sha256: e595b98692943b4881b219f0a9e3945118d3c16bd7e2813f98ec6e532d905f72 url: "https://pub.dev" source: hosted - version: "2.0.24" + version: "2.2.1" path_provider_foundation: dependency: transitive description: name: path_provider_foundation - sha256: "12eee51abdf4d34c590f043f45073adbb45514a108bd9db4491547a2fd891059" + sha256: "19314d595120f82aca0ba62787d58dde2cc6b5df7d2f0daf72489e38d1b57f2d" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.3.1" path_provider_linux: dependency: transitive description: name: path_provider_linux - sha256: "2ae08f2216225427e64ad224a24354221c2c7907e448e6e0e8b57b1eb9f10ad1" + sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 url: "https://pub.dev" source: hosted - version: "2.1.10" + version: "2.2.1" path_provider_platform_interface: dependency: transitive description: name: path_provider_platform_interface - sha256: "57585299a729335f1298b43245842678cb9f43a6310351b18fb577d6e33165ec" + sha256: "94b1e0dd80970c1ce43d5d4e050a9918fce4f4a775e6142424c30a29a363265c" url: "https://pub.dev" source: hosted - version: "2.0.6" + version: "2.1.1" path_provider_windows: dependency: transitive description: name: path_provider_windows - sha256: f53720498d5a543f9607db4b0e997c4b5438884de25b0f73098cc2671a51b130 + sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170" url: "https://pub.dev" source: hosted - version: "2.1.5" + version: "2.2.1" petitparser: dependency: transitive description: name: petitparser - sha256: "49392a45ced973e8d94a85fdb21293fbb40ba805fc49f2965101ae748a3683b4" + sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 url: "https://pub.dev" source: hosted - version: "5.1.0" + version: "6.0.2" platform: dependency: transitive description: name: platform - sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" + sha256: "0a279f0707af40c890e80b1e9df8bb761694c074ba7e1d4ab1bc4b728e200b59" url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "3.1.3" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface - sha256: "6a2128648c854906c53fa8e33986fc0247a1116122f9534dd20e3ab9e16a32bc" + sha256: f4f88d4a900933e7267e2b353594774fc0d07fb072b47eedcd5b54e1ea3269f8 url: "https://pub.dev" source: hosted - version: "2.1.4" + version: "2.1.7" pointycastle: dependency: transitive description: name: pointycastle - sha256: ae73e842cdd27a3467a71d70cefd9b198538aab4fc7dde1d0e8c78c96225abf0 + sha256: "7c1e5f0d23c9016c5bbd8b1473d0d3fb3fc851b876046039509e18e0c7485f2c" url: "https://pub.dev" source: hosted - version: "3.7.1" - process: - dependency: transitive - description: - name: process - sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" - url: "https://pub.dev" - source: hosted - version: "4.2.4" + version: "3.7.3" provider: dependency: "direct main" description: name: provider - sha256: cdbe7530b12ecd9eb455bdaa2fcb8d4dad22e80b8afb4798b41479d5ce26847f + sha256: "9a96a0a19b594dbc5bf0f1f27d2bc67d5f95957359b461cd9feb44ed6ae75096" url: "https://pub.dev" source: hosted - version: "6.0.5" + version: "6.1.1" shared_preferences: dependency: "direct main" description: name: shared_preferences - sha256: "78528fd87d0d08ffd3e69551173c026e8eacc7b7079c82eb6a77413957b7e394" + sha256: "81429e4481e1ccfb51ede496e916348668fd0921627779233bd24cc3ff6abd02" url: "https://pub.dev" source: hosted - version: "2.0.20" + version: "2.2.2" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - sha256: ad423a80fe7b4e48b50d6111b3ea1027af0e959e49d485712e134863d9c1c521 + sha256: "8568a389334b6e83415b6aae55378e158fbc2314e074983362d20c562780fb06" url: "https://pub.dev" source: hosted - version: "2.0.17" + version: "2.2.1" shared_preferences_foundation: dependency: transitive description: name: shared_preferences_foundation - sha256: "1e755f8583229f185cfca61b1d80fb2344c9d660e1c69ede5450d8f478fa5310" + sha256: "7bf53a9f2d007329ee6f3df7268fd498f8373602f943c975598bbb34649b62a7" url: "https://pub.dev" source: hosted - version: "2.1.5" + version: "2.3.4" shared_preferences_linux: dependency: transitive description: name: shared_preferences_linux - sha256: "3a59ed10890a8409ad0faad7bb2957dab4b92b8fbe553257b05d30ed8af2c707" + sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa" url: "https://pub.dev" source: hosted - version: "2.1.5" + version: "2.3.2" shared_preferences_platform_interface: dependency: transitive description: name: shared_preferences_platform_interface - sha256: "824bfd02713e37603b2bdade0842e47d56e7db32b1dcdd1cae533fb88e2913fc" + sha256: d4ec5fc9ebb2f2e056c617112aa75dcf92fc2e4faaf2ae999caa297473f75d8a url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.3.1" shared_preferences_web: dependency: transitive description: name: shared_preferences_web - sha256: "0dc2633f215a3d4aa3184c9b2c5766f4711e4e5a6b256e62aafee41f89f1bfb8" + sha256: "7b15ffb9387ea3e237bb7a66b8a23d2147663d391cafc5c8f37b2e7b4bde5d21" url: "https://pub.dev" source: hosted - version: "2.0.6" + version: "2.2.2" shared_preferences_windows: dependency: transitive description: name: shared_preferences_windows - sha256: "71bcd669bb9cdb6b39f22c4a7728b6d49e934f6cba73157ffa5a54f1eed67436" + sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59" url: "https://pub.dev" source: hosted - version: "2.1.5" + version: "2.3.2" sky_engine: dependency: transitive description: flutter @@ -494,34 +486,34 @@ packages: dependency: transitive description: name: typed_data - sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" + sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c url: "https://pub.dev" source: hosted - version: "1.3.1" + version: "1.3.2" vector_graphics: dependency: transitive description: name: vector_graphics - sha256: "4cf8e60dbe4d3a693d37dff11255a172594c0793da542183cbfe7fe978ae4aaa" + sha256: "0f0c746dd2d6254a0057218ff980fc7f5670fd0fcf5e4db38a490d31eed4ad43" url: "https://pub.dev" source: hosted - version: "1.1.4" + version: "1.1.9+1" vector_graphics_codec: dependency: transitive description: name: vector_graphics_codec - sha256: "278ad5f816f58b1967396d1f78ced470e3e58c9fe4b27010102c0a595c764468" + sha256: "0edf6d630d1bfd5589114138ed8fada3234deacc37966bec033d3047c29248b7" url: "https://pub.dev" source: hosted - version: "1.1.4" + version: "1.1.9+1" vector_graphics_compiler: dependency: transitive description: name: vector_graphics_compiler - sha256: "0bf61ad56e6fd6688a2865d3ceaea396bc6a0a90ea0d7ad5049b1b76c09d6163" + sha256: d24333727332d9bd20990f1483af4e09abdb9b1fc7c3db940b56ab5c42790c26 url: "https://pub.dev" source: hosted - version: "1.1.4" + version: "1.1.9+1" vector_math: dependency: transitive description: @@ -542,34 +534,34 @@ packages: dependency: transitive description: name: win32 - sha256: c9ebe7ee4ab0c2194e65d3a07d8c54c5d00bb001b76081c4a04cdb8448b59e46 + sha256: b0f37db61ba2f2e9b7a78a1caece0052564d1bc70668156cf3a29d676fe4e574 url: "https://pub.dev" source: hosted - version: "3.1.3" + version: "5.1.1" xdg_directories: dependency: transitive description: name: xdg_directories - sha256: ee1505df1426458f7f60aac270645098d318a8b4766d85fde75f76f2e21807d1 + sha256: "589ada45ba9e39405c198fe34eb0f607cddb2108527e658136120892beac46d2" url: "https://pub.dev" source: hosted - version: "1.0.0" + version: "1.0.3" xml: dependency: transitive description: name: xml - sha256: "979ee37d622dec6365e2efa4d906c37470995871fe9ae080d967e192d88286b5" + sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 url: "https://pub.dev" source: hosted - version: "6.2.2" + version: "6.5.0" yaml: dependency: transitive description: name: yaml - sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" + sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" url: "https://pub.dev" source: hosted - version: "3.1.1" + version: "3.1.2" sdks: - dart: ">=3.2.0-194.0.dev <4.0.0" - flutter: ">=3.7.0-0" + dart: ">=3.2.0 <4.0.0" + flutter: ">=3.16.0"