From 3dc0ed448812ac6e45acdc105b0350d51742b8a9 Mon Sep 17 00:00:00 2001 From: Lenkomotive Date: Sat, 12 Oct 2024 14:48:00 +0200 Subject: [PATCH] PAINTROID-454: Flutter: Add Layers - reorder positions, fix some bugs --- .../state/layer_menu_state_provider.dart | 41 ++- .../state/layer_menu_state_provider.g.dart | 2 +- .../providers/state/layer_state_data.dart | 3 +- .../state/layer_state_data.freezed.dart | 40 +-- .../components/layer_menu/layer.dart | 77 +++-- .../components/layer_menu/layer_menu.dart | 24 +- pubspec.lock | 302 ++++++++++-------- pubspec.yaml | 1 + 8 files changed, 293 insertions(+), 197 deletions(-) diff --git a/lib/core/providers/state/layer_menu_state_provider.dart b/lib/core/providers/state/layer_menu_state_provider.dart index 3cfe10f3..716dc824 100644 --- a/lib/core/providers/state/layer_menu_state_provider.dart +++ b/lib/core/providers/state/layer_menu_state_provider.dart @@ -1,23 +1,24 @@ +import 'package:flutter/cupertino.dart'; import 'package:paintroid/core/providers/state/layer_menu_state_data.dart'; import 'package:paintroid/core/providers/state/layer_state_data.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; +import 'package:uuid/uuid.dart'; part 'layer_menu_state_provider.g.dart'; @Riverpod(keepAlive: true) class LayerMenuStateProvider extends _$LayerMenuStateProvider { + final uuid = const Uuid(); + @override LayerMenuStateData build() { - return const LayerMenuStateData( + return LayerMenuStateData( isVisible: false, layer: [ - LayerStateData(id: 0, isSelected: false), - LayerStateData(id: 1, isSelected: false), - LayerStateData(id: 2, isSelected: false), - LayerStateData(id: 3, isSelected: false), - LayerStateData(id: 4, isSelected: false), - LayerStateData(id: 5, isSelected: false), - LayerStateData(id: 6, isSelected: false), + LayerStateData( + key: ValueKey(uuid.v4()), + isSelected: false, + ), ], ); } @@ -37,19 +38,33 @@ class LayerMenuStateProvider extends _$LayerMenuStateProvider { state = state.copyWith(layer: layerList); } - void toggleSelection(int layerId) { - final updatedLayerList = state.layer.map((layer) { - if (layer.id == layerId) { - return layer.copyWith(isSelected: !layer.isSelected); + void toggleSelection(Key? layerKey) { + final layers = state.layer; + + final selectedCount = layers.where((layer) => layer.isSelected).length; + final unselectedCount = layers.length - selectedCount; + + final updatedLayerList = layers.map((layer) { + if (layer.key == layerKey) { + if (!layer.isSelected) { + if (unselectedCount <= 1) { + return layer; + } else { + return layer.copyWith(isSelected: true); + } + } else { + return layer.copyWith(isSelected: false); + } } return layer; }).toList(); + state = state.copyWith(layer: updatedLayerList); } void addLayer() { final newLayer = LayerStateData( - id: state.layer.length + 1, + key: ValueKey(uuid.v4()), isSelected: false, ); state = state.copyWith(layer: [...state.layer, newLayer]); diff --git a/lib/core/providers/state/layer_menu_state_provider.g.dart b/lib/core/providers/state/layer_menu_state_provider.g.dart index b301c9d7..7ed88c9d 100644 --- a/lib/core/providers/state/layer_menu_state_provider.g.dart +++ b/lib/core/providers/state/layer_menu_state_provider.g.dart @@ -7,7 +7,7 @@ part of 'layer_menu_state_provider.dart'; // ************************************************************************** String _$layerMenuStateProviderHash() => - r'311c058569eb9676b09e9de5c21a44516f2ee183'; + r'e78261920cf20ae52a3349a3efaa6a1f30ced750'; /// See also [LayerMenuStateProvider]. @ProviderFor(LayerMenuStateProvider) diff --git a/lib/core/providers/state/layer_state_data.dart b/lib/core/providers/state/layer_state_data.dart index b03533c7..d9555693 100644 --- a/lib/core/providers/state/layer_state_data.dart +++ b/lib/core/providers/state/layer_state_data.dart @@ -1,3 +1,4 @@ +import 'package:flutter/cupertino.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; part 'layer_state_data.freezed.dart'; @@ -6,7 +7,7 @@ part 'layer_state_data.freezed.dart'; @freezed class LayerStateData with _$LayerStateData { const factory LayerStateData({ - required int id, + required ValueKey key, required bool isSelected, }) = _LayerStateData; } diff --git a/lib/core/providers/state/layer_state_data.freezed.dart b/lib/core/providers/state/layer_state_data.freezed.dart index c03ca7e8..e12e5780 100644 --- a/lib/core/providers/state/layer_state_data.freezed.dart +++ b/lib/core/providers/state/layer_state_data.freezed.dart @@ -16,7 +16,7 @@ final _privateConstructorUsedError = UnsupportedError( /// @nodoc mixin _$LayerStateData { - int get id => throw _privateConstructorUsedError; + ValueKey get key => throw _privateConstructorUsedError; bool get isSelected => throw _privateConstructorUsedError; @JsonKey(ignore: true) @@ -30,7 +30,7 @@ abstract class $LayerStateDataCopyWith<$Res> { LayerStateData value, $Res Function(LayerStateData) then) = _$LayerStateDataCopyWithImpl<$Res, LayerStateData>; @useResult - $Res call({int id, bool isSelected}); + $Res call({ValueKey key, bool isSelected}); } /// @nodoc @@ -46,14 +46,14 @@ class _$LayerStateDataCopyWithImpl<$Res, $Val extends LayerStateData> @pragma('vm:prefer-inline') @override $Res call({ - Object? id = null, + Object? key = null, Object? isSelected = null, }) { return _then(_value.copyWith( - id: null == id - ? _value.id - : id // ignore: cast_nullable_to_non_nullable - as int, + key: null == key + ? _value.key + : key // ignore: cast_nullable_to_non_nullable + as ValueKey, isSelected: null == isSelected ? _value.isSelected : isSelected // ignore: cast_nullable_to_non_nullable @@ -70,7 +70,7 @@ abstract class _$$LayerStateDataImplCopyWith<$Res> __$$LayerStateDataImplCopyWithImpl<$Res>; @override @useResult - $Res call({int id, bool isSelected}); + $Res call({ValueKey key, bool isSelected}); } /// @nodoc @@ -84,14 +84,14 @@ class __$$LayerStateDataImplCopyWithImpl<$Res> @pragma('vm:prefer-inline') @override $Res call({ - Object? id = null, + Object? key = null, Object? isSelected = null, }) { return _then(_$LayerStateDataImpl( - id: null == id - ? _value.id - : id // ignore: cast_nullable_to_non_nullable - as int, + key: null == key + ? _value.key + : key // ignore: cast_nullable_to_non_nullable + as ValueKey, isSelected: null == isSelected ? _value.isSelected : isSelected // ignore: cast_nullable_to_non_nullable @@ -103,16 +103,16 @@ class __$$LayerStateDataImplCopyWithImpl<$Res> /// @nodoc class _$LayerStateDataImpl implements _LayerStateData { - const _$LayerStateDataImpl({required this.id, required this.isSelected}); + const _$LayerStateDataImpl({required this.key, required this.isSelected}); @override - final int id; + final ValueKey key; @override final bool isSelected; @override String toString() { - return 'LayerStateData(id: $id, isSelected: $isSelected)'; + return 'LayerStateData(key: $key, isSelected: $isSelected)'; } @override @@ -120,13 +120,13 @@ class _$LayerStateDataImpl implements _LayerStateData { return identical(this, other) || (other.runtimeType == runtimeType && other is _$LayerStateDataImpl && - (identical(other.id, id) || other.id == id) && + (identical(other.key, key) || other.key == key) && (identical(other.isSelected, isSelected) || other.isSelected == isSelected)); } @override - int get hashCode => Object.hash(runtimeType, id, isSelected); + int get hashCode => Object.hash(runtimeType, key, isSelected); @JsonKey(ignore: true) @override @@ -138,11 +138,11 @@ class _$LayerStateDataImpl implements _LayerStateData { abstract class _LayerStateData implements LayerStateData { const factory _LayerStateData( - {required final int id, + {required final ValueKey key, required final bool isSelected}) = _$LayerStateDataImpl; @override - int get id; + ValueKey get key; @override bool get isSelected; @override diff --git a/lib/ui/pages/workspace_page/components/layer_menu/layer.dart b/lib/ui/pages/workspace_page/components/layer_menu/layer.dart index a25dfbba..ac0d678f 100644 --- a/lib/ui/pages/workspace_page/components/layer_menu/layer.dart +++ b/lib/ui/pages/workspace_page/components/layer_menu/layer.dart @@ -1,48 +1,79 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:paintroid/core/providers/state/layer_menu_state_provider.dart'; +import 'package:paintroid/ui/theme/data/custom_colors.dart'; -List customColors = [ - const Color(0xFFFF5733), // Fiery Red - const Color(0xFF33C1FF), // Sky Blue - const Color(0xFF75FF33), // Lime Green - const Color(0xFFFF33A8), // Hot Pink - const Color(0xFF33FFF5), // Aqua - const Color(0xFFFFD133), // Golden Yellow - const Color(0xFF8D33FF), // Deep Purple - const Color(0xFFFF8333), // Vibrant Orange - const Color(0xFF33FF8D), // Mint Green - const Color(0xFF3361FF), // Bright Indigo -]; +const layerHeight = 180.0; class Layer extends ConsumerWidget { const Layer({ super.key, this.isSelected = false, - required this.id, }); - final int id; final bool isSelected; @override Widget build(BuildContext context, WidgetRef ref) { return GestureDetector( onTap: () { - ref.read(layerMenuStateProvider.notifier).toggleSelection(id); + ref.read(layerMenuStateProvider.notifier).toggleSelection(key); }, child: Container( - height: 80, + height: 180, margin: const EdgeInsets.only(bottom: 8), decoration: BoxDecoration( - color: customColors[id], + color: CustomColors.oceanBlue.withOpacity(isSelected ? 0.5 : 1), borderRadius: BorderRadius.circular(12), - border: isSelected - ? Border.all( - color: Colors.blue, - width: 5.0, - ) - : null, + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Flexible( + child: Column( + children: [ + IconButton( + icon: const Icon(Icons.visibility), + color: Colors.white, + onPressed: () {}, + ), + Expanded( + child: RotatedBox( + quarterTurns: 3, + child: Slider( + value: 0.5, + activeColor: Colors.grey, + inactiveColor: CustomColors.lightGray, + onChanged: (value) {}, + ), + ), + ) + ], + ), + ), + // const Spacer(), + Container( + width: 80, + height: 180 - 32, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(12), + ), + child: Text( + key.toString(), + textAlign: TextAlign.center, + style: TextStyle( + color: Colors.black, + fontWeight: FontWeight.bold, + ), + ), + ), + IconButton( + icon: const Icon(Icons.drag_indicator_outlined), + color: Colors.white, + onPressed: () {}, + ), + ], ), ), ); diff --git a/lib/ui/pages/workspace_page/components/layer_menu/layer_menu.dart b/lib/ui/pages/workspace_page/components/layer_menu/layer_menu.dart index a8cf0235..bcaacc18 100644 --- a/lib/ui/pages/workspace_page/components/layer_menu/layer_menu.dart +++ b/lib/ui/pages/workspace_page/components/layer_menu/layer_menu.dart @@ -15,19 +15,22 @@ class LayerMenu extends ConsumerWidget { final layers = ref.watch( layerMenuStateProvider.select((state) => state.layer), ); - return Positioned( - top: 54, - bottom: 54, - right: 8, + + return Align( + alignment: Alignment.centerRight, child: FadeInOutWidget( isVisible: isVisible, child: Container( width: 200, + constraints: BoxConstraints( + maxHeight: _calculateHeight(layers.length, context), + ), decoration: BoxDecoration( color: Colors.white.withOpacity(0.7), borderRadius: BorderRadius.circular(12), ), child: Column( + mainAxisSize: MainAxisSize.min, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceAround, @@ -46,9 +49,9 @@ class LayerMenu extends ConsumerWidget { ), ], ), - Expanded( + Flexible( child: ReorderableListView( - padding: const EdgeInsets.all(8), + padding: const EdgeInsets.fromLTRB(8, 0, 8, 0), onReorder: (int oldIndex, int newIndex) { ref.read(layerMenuStateProvider.notifier).reorder( oldIndex, @@ -57,8 +60,7 @@ class LayerMenu extends ConsumerWidget { }, children: List.generate(layers.length, (index) { return Layer( - id: layers[index].id, - key: ValueKey(layers[index].id), + key: layers[index].key, isSelected: layers[index].isSelected, ); }), @@ -70,4 +72,10 @@ class LayerMenu extends ConsumerWidget { ), ); } + + double _calculateHeight(int layerCount, BuildContext context) { + final screenHeight = MediaQuery.of(context).size.height; + final double maxHeight = screenHeight * 0.66; + return (layerCount * layerHeight + 64).clamp(0.0, maxHeight); + } } diff --git a/pubspec.lock b/pubspec.lock index 01c51cd8..e147a59d 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,26 +5,26 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: ae92f5d747aee634b87f89d9946000c2de774be1d6ac3e58268224348cd0101a + sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7" url: "https://pub.dev" source: hosted - version: "61.0.0" + version: "67.0.0" analyzer: dependency: transitive description: name: analyzer - sha256: ea3d8652bda62982addfd92fdc2d0214e5f82e43325104990d4f4c4a2a313562 + sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d" url: "https://pub.dev" source: hosted - version: "5.13.0" + version: "6.4.1" analyzer_plugin: dependency: transitive description: name: analyzer_plugin - sha256: c1d5f167683de03d5ab6c3b53fc9aeefc5d59476e7810ba7bbddff50c6f4392d + sha256: "9661b30b13a685efaee9f02e5d01ed9f2b423bd889d28a304d02d704aee69161" url: "https://pub.dev" source: hosted - version: "0.11.2" + version: "0.11.3" archive: dependency: transitive description: @@ -77,10 +77,10 @@ packages: dependency: transitive description: name: build_daemon - sha256: "0343061a33da9c5810b2d6cee51945127d8f4c060b7fbdd9d54917f0a3feaaa1" + sha256: "79b2aef6ac2ed00046867ed354c88778c9c0f029df8a20fe10b5436826721ef9" url: "https://pub.dev" source: hosted - version: "4.0.1" + version: "4.0.2" build_resolvers: dependency: transitive description: @@ -93,18 +93,18 @@ packages: dependency: "direct dev" description: name: build_runner - sha256: "3ac61a79bfb6f6cc11f693591063a7f19a7af628dc52f141743edac5c16e8c22" + sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" url: "https://pub.dev" source: hosted - version: "2.4.9" + version: "2.4.11" build_runner_core: dependency: transitive description: name: build_runner_core - sha256: "4ae8ffe5ac758da294ecf1802f2aff01558d8b1b00616aa7538ea9a8a5d50799" + sha256: e3c79f69a64bdfcd8a776a3c28db4eb6e3fb5356d013ae5eb2e52007706d5dbe url: "https://pub.dev" source: hosted - version: "7.3.0" + version: "7.3.1" built_collection: dependency: transitive description: @@ -204,50 +204,58 @@ packages: dependency: transitive description: name: cross_file - sha256: fedaadfa3a6996f75211d835aaeb8fede285dae94262485698afd832371b9a5e + sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" url: "https://pub.dev" source: hosted - version: "0.3.3+8" + version: "0.3.4+2" crypto: dependency: transitive description: name: crypto - sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab + sha256: ec30d999af904f33454ba22ed9a86162b35e52b44ac4807d1d93c288041d7d27 url: "https://pub.dev" source: hosted - version: "3.0.3" + version: "3.0.5" custom_lint: dependency: transitive description: name: custom_lint - sha256: "22bd87a362f433ba6aae127a7bac2838645270737f3721b180916d7c5946cb5d" + sha256: "7c0aec12df22f9082146c354692056677f1e70bc43471644d1fdb36c6fdda799" url: "https://pub.dev" source: hosted - version: "0.5.11" + version: "0.6.4" custom_lint_builder: dependency: transitive description: name: custom_lint_builder - sha256: "0d48e002438950f9582e574ef806b2bea5719d8d14c0f9f754fbad729bcf3b19" + sha256: d7dc41e709dde223806660268678be7993559e523eb3164e2a1425fd6f7615a9 url: "https://pub.dev" source: hosted - version: "0.5.14" + version: "0.6.4" custom_lint_core: dependency: transitive description: name: custom_lint_core - sha256: "2952837953022de610dacb464f045594854ced6506ac7f76af28d4a6490e189b" + sha256: a85e8f78f4c52f6c63cdaf8c872eb573db0231dcdf3c3a5906d493c1f8bc20e6 url: "https://pub.dev" source: hosted - version: "0.5.14" + version: "0.6.3" dart_style: dependency: transitive description: name: dart_style - sha256: "1efa911ca7086affd35f463ca2fc1799584fb6aa89883cf0af8e3664d6a02d55" + sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.3.6" + dev_build: + dependency: transitive + description: + name: dev_build + sha256: f526d1fbe68875f6119ffc333f114dfe6aa93ad04439276d53968f7977cc410e + url: "https://pub.dev" + source: hosted + version: "1.0.0+11" device_info_plus: dependency: "direct main" description: @@ -260,10 +268,10 @@ packages: dependency: transitive description: name: device_info_plus_platform_interface - sha256: d3b01d5868b50ae571cd1dc6e502fc94d956b665756180f7b16ead09e836fd64 + sha256: "282d3cf731045a2feb66abfe61bbc40870ae50a3ed10a4d3d217556c35c8c2ba" url: "https://pub.dev" source: hosted - version: "7.0.0" + version: "7.0.1" equatable: dependency: "direct main" description: @@ -284,10 +292,10 @@ packages: dependency: transitive description: name: ffi - sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" + sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.3" file: dependency: transitive description: @@ -308,18 +316,18 @@ packages: dependency: transitive description: name: file_selector_linux - sha256: "045d372bf19b02aeb69cacf8b4009555fb5f6f0b7ad8016e5f46dd1387ddd492" + sha256: "712ce7fab537ba532c8febdb1a8f167b32441e74acd68c3ccb2e36dcb52c4ab2" url: "https://pub.dev" source: hosted - version: "0.9.2+1" + version: "0.9.3" file_selector_macos: dependency: transitive description: name: file_selector_macos - sha256: f42eacb83b318e183b1ae24eead1373ab1334084404c8c16e0354f9a3e55d385 + sha256: "271ab9986df0c135d45c3cdb6bd0faa5db6f4976d3e4b437cf7d0f258d941bfc" url: "https://pub.dev" source: hosted - version: "0.9.4" + version: "0.9.4+2" file_selector_platform_interface: dependency: transitive description: @@ -332,10 +340,10 @@ packages: dependency: transitive description: name: file_selector_windows - sha256: d3547240c20cabf205c7c7f01a50ecdbc413755814d6677f3cb366f04abcead0 + sha256: "8f5d2f6590d51ecd9179ba39c64f722edc15226cc93dcc8698466ad36a4a85a4" url: "https://pub.dev" source: hosted - version: "0.9.3+1" + version: "0.9.3+3" filesize: dependency: "direct main" description: @@ -356,26 +364,34 @@ packages: dependency: "direct main" description: name: floor - sha256: "52a8eac2c8d274e7c0c54251226f59786bb5b749365a2d8537d8095aa5132d92" + sha256: c1b06023912b5b8e49deb6a9d867863c535ae1a232d991c3582bba3ee8687867 url: "https://pub.dev" source: hosted - version: "1.4.2" + version: "1.5.0" floor_annotation: dependency: transitive description: name: floor_annotation - sha256: fa3fa4f198cdd1d922a69ceb06e54663fe59256bf1cb3c036eff206b445a6960 + sha256: a40949580a7ab0eee572686e2d3b1638fd6bd6a753e661d792ab4236b365b23b url: "https://pub.dev" source: hosted - version: "1.4.2" + version: "1.5.0" + floor_common: + dependency: transitive + description: + name: floor_common + sha256: "41c9914862f83a821815e1b1ffd47a1e1ae2130c35ff882ba2d000a67713ba64" + url: "https://pub.dev" + source: hosted + version: "1.5.0" floor_generator: dependency: "direct dev" description: name: floor_generator - sha256: "40aaf1b619adc03367ce4b7c79161e3198d43b572b5ec9cc99a4a89de27b08d2" + sha256: "1499b3ab878a807e6fbe6f140dc014124845cd1df3090a113aae5fa7577a1e77" url: "https://pub.dev" source: hosted - version: "1.4.2" + version: "1.5.0" flutter: dependency: "direct main" description: flutter @@ -419,10 +435,10 @@ packages: dependency: transitive description: name: flutter_plugin_android_lifecycle - sha256: "8cf40eebf5dec866a6d1956ad7b4f7016e6c0cc69847ab946833b7d43743809f" + sha256: "9ee02950848f61c4129af3d6ec84a1cfc0e47931abc746b03e7a3bc3e8ff6eda" url: "https://pub.dev" source: hosted - version: "2.0.19" + version: "2.0.22" flutter_riverpod: dependency: "direct main" description: @@ -461,10 +477,10 @@ packages: dependency: "direct main" description: name: freezed_annotation - sha256: c3fd9336eb55a38cc1bbd79ab17573113a8deccd0ecbbf926cca3c62803b5c2d + sha256: c2e2d632dd9b8a2b7751117abcfc2b4888ecfe181bd9fca7170d9ef02e595fe2 url: "https://pub.dev" source: hosted - version: "2.4.1" + version: "2.4.4" frontend_server_client: dependency: transitive description: @@ -490,10 +506,10 @@ packages: dependency: transitive description: name: graphs - sha256: aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19 + sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.3.2" hotreloader: dependency: transitive description: @@ -506,10 +522,10 @@ packages: dependency: transitive description: name: http - sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.2" http_multi_server: dependency: transitive description: @@ -546,10 +562,10 @@ packages: dependency: transitive description: name: image_picker_android - sha256: "844c6da4e4f2829dffdab97816bca09d0e0977e8dcef7450864aba4e07967a58" + sha256: "8c5abf0dcc24fe6e8e0b4a5c0b51a5cf30cefdf6407a3213dae61edc75a70f56" url: "https://pub.dev" source: hosted - version: "0.8.9+6" + version: "0.8.12+12" image_picker_for_web: dependency: transitive description: @@ -562,10 +578,10 @@ packages: dependency: transitive description: name: image_picker_ios - sha256: fadafce49e8569257a0cad56d24438a6fa1f0cbd7ee0af9b631f7492818a4ca3 + sha256: "6703696ad49f5c3c8356d576d7ace84d1faf459afb07accbb0fae780753ff447" url: "https://pub.dev" source: hosted - version: "0.8.9+1" + version: "0.8.12" image_picker_linux: dependency: transitive description: @@ -586,10 +602,10 @@ packages: dependency: transitive description: name: image_picker_platform_interface - sha256: fa4e815e6fcada50e35718727d83ba1c92f1edf95c0b4436554cec301b56233b + sha256: "9ec26d410ff46f483c5519c29c02ef0e02e13a543f882b152d4bfd2f06802f80" url: "https://pub.dev" source: hosted - version: "2.9.3" + version: "2.10.0" image_picker_windows: dependency: transitive description: @@ -623,10 +639,10 @@ packages: dependency: transitive description: name: js - sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 + sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf url: "https://pub.dev" source: hosted - version: "0.6.7" + version: "0.7.1" json_annotation: dependency: "direct main" description: @@ -727,10 +743,10 @@ packages: dependency: transitive description: name: mime - sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2" + sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a" url: "https://pub.dev" source: hosted - version: "1.0.5" + version: "1.0.6" mockito: dependency: "direct dev" description: @@ -799,26 +815,26 @@ packages: dependency: "direct main" description: name: path_provider - sha256: c9e7d3a4cd1410877472158bee69963a4579f78b68c65a2b7d40d1a7a88bb161 + sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378 url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "2.1.4" path_provider_android: dependency: transitive description: name: path_provider_android - sha256: a248d8146ee5983446bf03ed5ea8f6533129a12b11f12057ad1b4a67a2b3b41d + sha256: "6f01f8e37ec30b07bc424b4deabac37cacb1bc7e2e515ad74486039918a37eb7" url: "https://pub.dev" source: hosted - version: "2.2.4" + version: "2.2.10" path_provider_foundation: dependency: transitive description: name: path_provider_foundation - sha256: "5a7999be66e000916500be4f15a3633ebceb8302719b47b9cc49ce924125350f" + sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16 url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.0" path_provider_linux: dependency: transitive description: @@ -839,10 +855,10 @@ packages: dependency: transitive description: name: path_provider_windows - sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170" + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 url: "https://pub.dev" source: hosted - version: "2.2.1" + version: "2.3.0" permission_handler: dependency: "direct main" description: @@ -923,6 +939,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.0.2" + process_run: + dependency: transitive + description: + name: process_run + sha256: c917dfb5f7afad4c7485bc00a4df038621248fce046105020cea276d1a87c820 + url: "https://pub.dev" + source: hosted + version: "1.1.0" pub_semver: dependency: transitive description: @@ -951,10 +975,10 @@ packages: dependency: transitive description: name: riverpod_analyzer_utils - sha256: d72d7096964baf288b55619fe48100001fc4564ab7923ed0a7f5c7650e03c0d6 + sha256: "8b71f03fc47ae27d13769496a1746332df4cec43918aeba9aff1e232783a780f" url: "https://pub.dev" source: hosted - version: "0.3.4" + version: "0.5.1" riverpod_annotation: dependency: "direct main" description: @@ -967,18 +991,18 @@ packages: dependency: "direct dev" description: name: riverpod_generator - sha256: "5b36ad2f2b562cffb37212e8d59390b25499bf045b732276e30a207b16a25f61" + sha256: d451608bf17a372025fc36058863737636625dfdb7e3cbf6142e0dfeb366ab22 url: "https://pub.dev" source: hosted - version: "2.3.3" + version: "2.4.0" riverpod_lint: dependency: "direct dev" description: name: riverpod_lint - sha256: "70198738c3047ae4f6517ef1a2011a8514a980a52576c7f629a3a08810319a02" + sha256: "3c67c14ccd16f0c9d53e35ef70d06cd9d072e2fb14557326886bbde903b230a5" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.3.10" rxdart: dependency: transitive description: @@ -991,58 +1015,58 @@ packages: dependency: "direct main" description: name: shared_preferences - sha256: d3bbe5553a986e83980916ded2f0b435ef2e1893dfaa29d5a7a790d0eca12180 + sha256: "746e5369a43170c25816cc472ee016d3a66bc13fcf430c0bc41ad7b4b2922051" url: "https://pub.dev" source: hosted - version: "2.2.3" + version: "2.3.2" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - sha256: "1ee8bf911094a1b592de7ab29add6f826a7331fb854273d55918693d5364a1f2" + sha256: "480ba4345773f56acda9abf5f50bd966f581dac5d514e5fc4a18c62976bbba7e" url: "https://pub.dev" source: hosted - version: "2.2.2" + version: "2.3.2" shared_preferences_foundation: dependency: transitive description: name: shared_preferences_foundation - sha256: "7708d83064f38060c7b39db12aefe449cb8cdc031d6062280087bc4cdb988f5c" + sha256: "07e050c7cd39bad516f8d64c455f04508d09df104be326d8c02551590a0d513d" url: "https://pub.dev" source: hosted - version: "2.3.5" + version: "2.5.3" shared_preferences_linux: dependency: transitive description: name: shared_preferences_linux - sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa" + sha256: "580abfd40f415611503cae30adf626e6656dfb2f0cee8f465ece7b6defb40f2f" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.1" shared_preferences_platform_interface: dependency: transitive description: name: shared_preferences_platform_interface - sha256: "22e2ecac9419b4246d7c22bfbbda589e3acf5c0351137d87dd2939d984d37c3b" + sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.1" shared_preferences_web: dependency: transitive description: name: shared_preferences_web - sha256: "7b15ffb9387ea3e237bb7a66b8a23d2147663d391cafc5c8f37b2e7b4bde5d21" + sha256: d2ca4132d3946fec2184261726b355836a82c33d7d5b67af32692aff18a4684e url: "https://pub.dev" source: hosted - version: "2.2.2" + version: "2.4.2" shared_preferences_windows: dependency: transitive description: name: shared_preferences_windows - sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59" + sha256: "94ef0f72b2d71bc3e700e025db3710911bd51a71cefb65cc609dd0d9a982e3c1" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.1" shelf: dependency: transitive description: @@ -1055,10 +1079,10 @@ packages: dependency: transitive description: name: shelf_web_socket - sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1" + sha256: "073c147238594ecd0d193f3456a5fe91c4b0abbcc68bf5cd95b36c4e194ac611" url: "https://pub.dev" source: hosted - version: "1.0.4" + version: "2.0.0" sky_engine: dependency: transitive description: flutter @@ -1068,10 +1092,10 @@ packages: dependency: "direct main" description: name: smooth_page_indicator - sha256: "725bc638d5e79df0c84658e1291449996943f93bacbc2cec49963dbbab48d8ae" + sha256: "3b28b0c545fa67ed9e5997d9f9720d486f54c0c607e056a1094544e36934dff3" url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.2.0+3" source_gen: dependency: transitive description: @@ -1108,42 +1132,50 @@ packages: dependency: "direct main" description: name: sqflite - sha256: a9016f495c927cb90557c909ff26a6d92d9bd54fc42ba92e19d4e79d61e798c6 + sha256: a43e5a27235518c03ca238e7b4732cf35eabe863a369ceba6cbefa537a66f16d url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.3.3+1" sqflite_common: dependency: transitive description: name: sqflite_common - sha256: "28d8c66baee4968519fb8bd6cdbedad982d6e53359091f0b74544a9f32ec72d5" + sha256: "3da423ce7baf868be70e2c0976c28a1bb2f73644268b7ffa7d2e08eab71f16a4" url: "https://pub.dev" source: hosted - version: "2.5.3" + version: "2.5.4" sqflite_common_ffi: dependency: transitive description: name: sqflite_common_ffi - sha256: "754927d82de369a6b9e760fb60640aa81da650f35ffd468d5a992814d6022908" + sha256: "4d6137c29e930d6e4a8ff373989dd9de7bac12e3bc87bce950f6e844e8ad3bb5" url: "https://pub.dev" source: hosted - version: "2.3.2+1" + version: "2.3.3" + sqflite_common_ffi_web: + dependency: transitive + description: + name: sqflite_common_ffi_web + sha256: e9d1cb35a5ff7c43072968ed734e0a1a859564fd2b2c8654e0c6244a57dc82a8 + url: "https://pub.dev" + source: hosted + version: "0.4.4" sqlite3: dependency: transitive description: name: sqlite3 - sha256: "072128763f1547e3e9b4735ce846bfd226d68019ccda54db4cd427b12dfdedc9" + sha256: "45f168ae2213201b54e09429ed0c593dc2c88c924a1488d6f9c523a255d567cb" url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.4.6" sqlparser: dependency: transitive description: name: sqlparser - sha256: "91f47610aa54d8abf9d795a7b4e49b2a788f65d7493d5a68fbf180c3cbcc6f38" + sha256: "7b20045d1ccfb7bc1df7e8f9fee5ae58673fce6ff62cefbb0e0fd7214e90e5a0" url: "https://pub.dev" source: hosted - version: "0.27.0" + version: "0.34.1" stack_trace: dependency: transitive description: @@ -1188,10 +1220,10 @@ packages: dependency: transitive description: name: strings - sha256: "5af86299505c299640f5564e187c1a2ee9d6308c540e8d65f6385f5c67019122" + sha256: "052836499f03897d3860a603b330c1ea3c8a14177b21f34b15a1295f36024aae" url: "https://pub.dev" source: hosted - version: "0.2.2" + version: "3.1.2" sync_http: dependency: transitive description: @@ -1260,42 +1292,42 @@ packages: dependency: "direct main" description: name: url_launcher - sha256: "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3" + sha256: "9d06212b1362abc2f0f0d78e6f09f726608c74e3b9462e8368bb03314aa8d603" url: "https://pub.dev" source: hosted - version: "6.3.0" + version: "6.3.1" url_launcher_android: dependency: transitive description: name: url_launcher_android - sha256: "17cd5e205ea615e2c6ea7a77323a11712dffa0720a8a90540db57a01347f9ad9" + sha256: f0c73347dfcfa5b3db8bc06e1502668265d39c08f310c29bff4e28eea9699f79 url: "https://pub.dev" source: hosted - version: "6.3.2" + version: "6.3.9" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: "75bb6fe3f60070407704282a2d295630cab232991eb52542b18347a8a941df03" + sha256: e43b677296fadce447e987a2f519dcf5f6d1e527dc35d01ffab4fff5b8a7063e url: "https://pub.dev" source: hosted - version: "6.2.4" + version: "6.3.1" url_launcher_linux: dependency: transitive description: name: url_launcher_linux - sha256: ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811 + sha256: e2b9622b4007f97f504cd64c0128309dfb978ae66adbe944125ed9e1750f06af url: "https://pub.dev" source: hosted - version: "3.1.1" + version: "3.2.0" url_launcher_macos: dependency: transitive description: name: url_launcher_macos - sha256: "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de" + sha256: "769549c999acdb42b8bcfa7c43d72bf79a382ca7441ab18a808e101149daf672" url: "https://pub.dev" source: hosted - version: "3.2.0" + version: "3.2.1" url_launcher_platform_interface: dependency: transitive description: @@ -1308,26 +1340,26 @@ packages: dependency: transitive description: name: url_launcher_web - sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b + sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e" url: "https://pub.dev" source: hosted - version: "2.2.3" + version: "2.3.3" url_launcher_windows: dependency: transitive description: name: url_launcher_windows - sha256: ecf9725510600aa2bb6d7ddabe16357691b6d2805f66216a97d1b881e21beff7 + sha256: "49c10f879746271804767cb45551ec5592cdab00ee105c06dddde1a98f73b185" url: "https://pub.dev" source: hosted - version: "3.1.1" + version: "3.1.2" uuid: - dependency: transitive + dependency: "direct main" description: name: uuid - sha256: "814e9e88f21a176ae1359149021870e87f7cddaf633ab678a5d2b0bff7fd1ba8" + sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff url: "https://pub.dev" source: hosted - version: "4.4.0" + version: "4.5.1" vector_math: dependency: transitive description: @@ -1356,18 +1388,26 @@ packages: dependency: transitive description: name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb url: "https://pub.dev" source: hosted - version: "0.3.0" + version: "1.1.0" + web_socket: + dependency: transitive + description: + name: web_socket + sha256: "3c12d96c0c9a4eec095246debcea7b86c0324f22df69893d538fcc6f1b8cce83" + url: "https://pub.dev" + source: hosted + version: "0.1.6" web_socket_channel: dependency: transitive description: name: web_socket_channel - sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b + sha256: "9f187088ed104edd8662ca07af4b124465893caf063ba29758f97af57e61da8f" url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "3.0.1" webdriver: dependency: transitive description: @@ -1380,26 +1420,26 @@ packages: dependency: transitive description: name: win32 - sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8" + sha256: "68d1e89a91ed61ad9c370f9f8b6effed9ae5e0ede22a270bdfa6daf79fc2290a" url: "https://pub.dev" source: hosted - version: "5.2.0" + version: "5.5.4" win32_registry: dependency: transitive description: name: win32_registry - sha256: "41fd8a189940d8696b1b810efb9abcf60827b6cbfab90b0c43e8439e3a39d85a" + sha256: "21ec76dfc731550fd3e2ce7a33a9ea90b828fdf19a5c3bcf556fa992cfa99852" url: "https://pub.dev" source: hosted - version: "1.1.2" + version: "1.1.5" xdg_directories: dependency: transitive description: name: xdg_directories - sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d + sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15" url: "https://pub.dev" source: hosted - version: "1.0.4" + version: "1.1.0" xml: dependency: transitive description: @@ -1417,5 +1457,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.3.0 <4.0.0" - flutter: ">=3.18.0-18.0.pre.54" + dart: ">=3.4.0 <4.0.0" + flutter: ">=3.22.0" diff --git a/pubspec.yaml b/pubspec.yaml index c267575f..552b38d3 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -42,6 +42,7 @@ dependencies: sqflite: ^2.3.0 colorpicker: path: packages/colorpicker + uuid: ^4.5.1 dev_dependencies: flutter_test: