From 91a1942191500735df84a90ab410bc1fba04912b Mon Sep 17 00:00:00 2001 From: Vadim <44135514+vodemn@users.noreply.github.com> Date: Wed, 16 Jul 2025 21:24:37 +0200 Subject: [PATCH] wip --- iap/lib/src/data/logbook_storage_service.dart | 24 +++ lib/runner.dart | 1 + .../widget_grid_tile_logbook_photo.dart | 1 + lib/screens/logbook/screen_logbook.dart | 43 +++- pubspec.lock | 196 ++++++++++++------ 5 files changed, 189 insertions(+), 76 deletions(-) create mode 100644 iap/lib/src/data/logbook_storage_service.dart diff --git a/iap/lib/src/data/logbook_storage_service.dart b/iap/lib/src/data/logbook_storage_service.dart new file mode 100644 index 0000000..807df29 --- /dev/null +++ b/iap/lib/src/data/logbook_storage_service.dart @@ -0,0 +1,24 @@ +import 'dart:async'; + +import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart'; + +class LogbookPhotosStorageService { + LogbookPhotosStorageService(); + + Future init() async {} + + Future addPhoto(LogbookPhoto profile) async {} + + Future updatePhoto({ + required String id, + String? note, + ApertureValue? apertureValue, + bool removeApertureValue = false, + ShutterSpeedValue? shutterSpeedValue, + bool removeShutterSpeedValue = false, + }) async {} + + Future deletePhoto(String id) async {} + + Future> getPhotos() async => []; +} diff --git a/lib/runner.dart b/lib/runner.dart index 765f300..0f83b67 100644 --- a/lib/runner.dart +++ b/lib/runner.dart @@ -31,6 +31,7 @@ Future runLightmeterApp(Environment env) async { IAPProduct( storeId: IAPProductType.paidFeatures.storeId, price: '0.0\$', + status: IAPProductStatus.purchased, ), ], child: application, diff --git a/lib/screens/logbook/components/grid_tile/widget_grid_tile_logbook_photo.dart b/lib/screens/logbook/components/grid_tile/widget_grid_tile_logbook_photo.dart index 22b877a..48e4c97 100644 --- a/lib/screens/logbook/components/grid_tile/widget_grid_tile_logbook_photo.dart +++ b/lib/screens/logbook/components/grid_tile/widget_grid_tile_logbook_photo.dart @@ -12,6 +12,7 @@ class LogbookPhotoGridTile extends StatelessWidget { const LogbookPhotoGridTile({ required this.photo, required this.onTap, + super.key, }); @override diff --git a/lib/screens/logbook/screen_logbook.dart b/lib/screens/logbook/screen_logbook.dart index ae99e65..8eeba8f 100644 --- a/lib/screens/logbook/screen_logbook.dart +++ b/lib/screens/logbook/screen_logbook.dart @@ -55,7 +55,7 @@ class _LogbookScreenState extends State with SingleTickerProvider } } -class _PicturesGridBuilder extends StatelessWidget { +class _PicturesGridBuilder extends StatefulWidget { final List values; final void Function(LogbookPhoto photo) onEdit; @@ -66,9 +66,22 @@ class _PicturesGridBuilder extends StatelessWidget { required this.onEdit, }); + @override + State<_PicturesGridBuilder> createState() => _PicturesGridBuilderState(); +} + +class _PicturesGridBuilderState extends State<_PicturesGridBuilder> { + late Map _keys = _generateKeys(); + + @override + void didUpdateWidget(_PicturesGridBuilder oldWidget) { + super.didUpdateWidget(oldWidget); + _keys = _generateKeys(); + } + @override Widget build(BuildContext context) { - if (values.isEmpty) { + if (widget.values.isEmpty) { return SliverFillRemaining( hasScrollBody: false, child: Center( @@ -83,19 +96,33 @@ class _PicturesGridBuilder extends StatelessWidget { padding: const EdgeInsets.all(Dimens.paddingM), sliver: SliverGrid( gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent( - maxCrossAxisExtent: - (MediaQuery.sizeOf(context).width - Dimens.paddingS * (_crossAxisCount - 1) - Dimens.paddingM * 2) / - _crossAxisCount, + maxCrossAxisExtent: (MediaQuery.sizeOf(context).width - + Dimens.paddingS * (_PicturesGridBuilder._crossAxisCount - 1) - + Dimens.paddingM * 2) / + _PicturesGridBuilder._crossAxisCount, mainAxisSpacing: Dimens.paddingS, crossAxisSpacing: Dimens.paddingS, childAspectRatio: PlatformConfig.cameraPreviewAspectRatio, ), delegate: SliverChildBuilderDelegate( + //TODO: fix jumping after the photo is edited (_, int index) => LogbookPhotoGridTile( - photo: values[index], - onTap: () => onEdit(values[index]), + key: _keys[widget.values[index].id], + photo: widget.values[index], + onTap: () => widget.onEdit(widget.values[index]), ), - childCount: values.length, + childCount: widget.values.length, + ), + ), + ); + } + + Map _generateKeys() { + return Map.fromEntries( + widget.values.map( + (photo) => MapEntry( + photo.id, + GlobalKey(debugLabel: photo.id), ), ), ); diff --git a/pubspec.lock b/pubspec.lock index bc5b411..dde899f 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -170,10 +170,10 @@ packages: dependency: transitive description: name: built_value - sha256: "28a712df2576b63c6c005c465989a348604960c0958d28be5303ba9baa841ac2" + sha256: "082001b5c3dc495d4a42f1d5789990505df20d8547d42507c29050af6933ee27" url: "https://pub.dev" source: hosted - version: "8.9.3" + version: "8.10.1" camera: dependency: "direct main" description: @@ -186,26 +186,26 @@ packages: dependency: transitive description: name: camera_android_camerax - sha256: "2985b8e5fca62709ebb2150962b1dae0444ba0a112be888ccf21e8371a1406d9" + sha256: abcfa1ac32bd03116b4cfda7e8223ab391f01966e65823c064afe388550d1b3d url: "https://pub.dev" source: hosted - version: "0.6.10+1" + version: "0.6.10+3" camera_avfoundation: dependency: transitive description: name: camera_avfoundation - sha256: c3038e6e72e284b14ad246a419f26908c08f8886d114cb8a2e351988439bfa68 + sha256: ca36181194f429eef3b09de3c96280f2400693f9735025f90d1f4a27465fdd72 url: "https://pub.dev" source: hosted - version: "0.9.17+6" + version: "0.9.19" camera_platform_interface: dependency: transitive description: name: camera_platform_interface - sha256: b3ede1f171532e0d83111fe0980b46d17f1aa9788a07a2fbed07366bbdbb9061 + sha256: "2f757024a48696ff4814a789b0bd90f5660c0fb25f393ab4564fb483327930e2" url: "https://pub.dev" source: hosted - version: "2.8.0" + version: "2.10.0" camera_web: dependency: transitive description: @@ -230,6 +230,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.3" + cli_config: + dependency: transitive + description: + name: cli_config + sha256: ac20a183a07002b700f0c25e61b7ee46b23c309d76ab7b7640a028f18e4d99ec + url: "https://pub.dev" + source: hosted + version: "0.2.0" clipboard: dependency: "direct main" description: @@ -298,10 +306,10 @@ packages: dependency: transitive description: name: coverage - sha256: e3493833ea012784c740e341952298f1cc77f1f01b1bbc3eb4eecf6984fb7f43 + sha256: "5da775aa218eaf2151c721b16c01c7676fbfdd99cebba2bf64e8b807a28ff94d" url: "https://pub.dev" source: hosted - version: "1.11.1" + version: "1.15.0" cross_file: dependency: transitive description: @@ -338,10 +346,10 @@ packages: dependency: transitive description: name: device_info_plus - sha256: "4fa68e53e26ab17b70ca39f072c285562cfc1589df5bb1e9295db90f6645f431" + sha256: "72d146c6d7098689ff5c5f66bcf593ac11efc530095385356e131070333e64da" url: "https://pub.dev" source: hosted - version: "11.2.0" + version: "11.3.0" device_info_plus_platform_interface: dependency: transitive description: @@ -458,18 +466,18 @@ packages: dependency: transitive description: name: firebase_core_platform_interface - sha256: d7253d255ff10f85cfd2adaba9ac17bae878fa3ba577462451163bd9f1d1f0bf + sha256: "8bcfad6d7033f5ea951d15b867622a824b13812178bfec0c779b9d81de011bbb" url: "https://pub.dev" source: hosted - version: "5.4.0" + version: "5.4.2" firebase_core_web: dependency: transitive description: name: firebase_core_web - sha256: fbc008cf390d909b823763064b63afefe9f02d8afdb13eb3f485b871afee956b + sha256: eb3afccfc452b2b2075acbe0c4b27de62dd596802b4e5e19869c1e926cbb20b3 url: "https://pub.dev" source: hosted - version: "2.19.0" + version: "2.24.0" firebase_crashlytics: dependency: "direct main" description: @@ -553,10 +561,10 @@ packages: dependency: transitive description: name: flutter_plugin_android_lifecycle - sha256: "615a505aef59b151b46bbeef55b36ce2b6ed299d160c51d84281946f0aa0ce0e" + sha256: "1c2b787f99bdca1f3718543f81d38aa1b124817dfeb9fb196201bea85b6134bf" url: "https://pub.dev" source: hosted - version: "2.0.24" + version: "2.0.26" flutter_secure_storage: dependency: transitive description: @@ -628,14 +636,62 @@ packages: description: flutter source: sdk version: "0.0.0" + geolocator: + dependency: "direct main" + description: + name: geolocator + sha256: "0ec58b731776bc43097fcf751f79681b6a8f6d3bc737c94779fe9f1ad73c1a81" + url: "https://pub.dev" + source: hosted + version: "13.0.1" + geolocator_android: + dependency: "direct overridden" + description: + name: geolocator_android + sha256: "7aefc530db47d90d0580b552df3242440a10fe60814496a979aa67aa98b1fd47" + url: "https://pub.dev" + source: hosted + version: "4.6.1" + geolocator_apple: + dependency: transitive + description: + name: geolocator_apple + sha256: dbdd8789d5aaf14cf69f74d4925ad1336b4433a6efdf2fce91e8955dc921bf22 + url: "https://pub.dev" + source: hosted + version: "2.3.13" + geolocator_platform_interface: + dependency: transitive + description: + name: geolocator_platform_interface + sha256: "30cb64f0b9adcc0fb36f628b4ebf4f731a2961a0ebd849f4b56200205056fe67" + url: "https://pub.dev" + source: hosted + version: "4.2.6" + geolocator_web: + dependency: transitive + description: + name: geolocator_web + sha256: b1ae9bdfd90f861fde8fd4f209c37b953d65e92823cb73c7dee1fa021b06f172 + url: "https://pub.dev" + source: hosted + version: "4.1.3" + geolocator_windows: + dependency: transitive + description: + name: geolocator_windows + sha256: "175435404d20278ffd220de83c2ca293b73db95eafbdc8131fe8609be1421eb6" + url: "https://pub.dev" + source: hosted + version: "0.2.5" glob: dependency: transitive description: name: glob - sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" + sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.3" golden_toolkit: dependency: "direct dev" description: @@ -664,10 +720,10 @@ packages: dependency: transitive description: name: html - sha256: "1fc58edeaec4307368c60d59b7e15b9d658b57d7f3125098b6294153c75337ec" + sha256: "6d1264f2dffa1b1101c25a91dff0dc2daee4c18e87cd8538729773c073dbf602" url: "https://pub.dev" source: hosted - version: "0.15.5" + version: "0.15.6" http: dependency: transitive description: @@ -728,10 +784,10 @@ packages: dependency: transitive description: name: in_app_purchase_storekit - sha256: "52caf1051fec8018adabd2d1e775a44cb389972ed868a746c4fc28a301734d41" + sha256: "6ce1361278cacc0481508989ba419b2c9f46a2b0dc54b3fe54f5ee63c2718fef" url: "https://pub.dev" source: hosted - version: "0.3.20+4" + version: "0.3.22+1" integration_test: dependency: "direct dev" description: flutter @@ -765,10 +821,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: transitive description: @@ -828,21 +884,17 @@ packages: m3_lightmeter_iap: dependency: "direct main" description: - path: "." - ref: "v2.1.3" - resolved-ref: "4575586ff6114b780ca651b7ac7c272a4a4801eb" - url: "https://github.com/vodemn/m3_lightmeter_iap" - source: git - version: "2.1.3+30" + path: "/Users/vodemn/Documents/GitHub/Vodemn/m3_lightmeter_iap" + relative: false + source: path + version: "2.2.0+31" m3_lightmeter_resources: dependency: "direct main" description: - path: "." - ref: "v2.1.0" - resolved-ref: "0e6eefe534adce851df639dcd28463a9089e5b92" - url: "https://github.com/vodemn/m3_lightmeter_resources" - source: git - version: "2.1.0+9" + path: "/Users/vodemn/Documents/GitHub/Vodemn/m3_lightmeter_resources" + relative: false + source: path + version: "2.2.0+10" macros: dependency: transitive description: @@ -851,6 +903,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.1.2-main.4" + map_launcher: + dependency: "direct main" + description: + name: map_launcher + sha256: b9c11a1d32740ef8393559148716cc0fec38a569fdcf3fb569375114cf30988a + url: "https://pub.dev" + source: hosted + version: "3.2.0" matcher: dependency: transitive description: @@ -911,10 +971,10 @@ 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: @@ -927,10 +987,10 @@ packages: dependency: transitive description: name: package_info_plus_platform_interface - sha256: a5ef9986efc7bf772f2696183a3992615baa76c1ffb1189318dd8803778fb05b + sha256: "6c935fb612dff8e3cc9632c2b301720c77450a126114126ffaafe28d2e87956c" url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "3.2.0" path: dependency: transitive description: @@ -999,18 +1059,18 @@ packages: dependency: transitive description: name: permission_handler_android - sha256: "71bbecfee799e65aff7c744761a57e817e73b738fedf62ab7afd5593da21f9f1" + sha256: d3971dcdd76182a0c198c096b5db2f0884b0d4196723d21a866fc4cdea057ebc url: "https://pub.dev" source: hosted - version: "12.0.13" + version: "12.1.0" permission_handler_apple: dependency: transitive description: name: permission_handler_apple - sha256: e6f6d73b12438ef13e648c4ae56bd106ec60d17e90a59c4545db6781229082a0 + sha256: f000131e755c54cf4d84a5d8bd6e4149e262cc31c5a8b1d698de1ac85fa41023 url: "https://pub.dev" source: hosted - version: "9.4.5" + version: "9.4.7" permission_handler_html: dependency: transitive description: @@ -1023,10 +1083,10 @@ packages: dependency: transitive description: name: permission_handler_platform_interface - sha256: e9c8eadee926c4532d0305dff94b85bf961f16759c3af791486613152af4b4f9 + sha256: eb99b295153abce5d683cac8c02e22faab63e50679b937fa1bf67d58bb282878 url: "https://pub.dev" source: hosted - version: "4.2.3" + version: "4.3.0" permission_handler_windows: dependency: transitive description: @@ -1079,18 +1139,18 @@ packages: dependency: transitive description: name: provider - sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c + sha256: "4abbd070a04e9ddc287673bf5a030c7ca8b685ff70218720abab8b092f53dd84" url: "https://pub.dev" source: hosted - version: "6.1.2" + version: "6.1.5" pub_semver: 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: @@ -1111,10 +1171,10 @@ packages: dependency: transitive description: name: shared_preferences_android - sha256: "02a7d8a9ef346c9af715811b01fbd8e27845ad2c41148eefd31321471b41863d" + sha256: "9f9f3d372d4304723e6136663bb291c0b93f5e4c8a4a6314347f481a33bda2b1" url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.4.7" shared_preferences_foundation: dependency: transitive description: @@ -1143,10 +1203,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: @@ -1428,10 +1488,10 @@ packages: dependency: transitive description: name: url_launcher_windows - sha256: "44cf3aabcedde30f2dba119a9dea3b0f2672fbe6fa96e85536251d678216b3c4" + sha256: "3284b6d2ac454cf34f114e1d3319866fdd1e19cdc329999057e44ffe936cfa77" url: "https://pub.dev" source: hosted - version: "3.1.3" + version: "3.1.4" uuid: dependency: "direct main" description: @@ -1476,34 +1536,34 @@ packages: dependency: transitive description: name: watcher - sha256: "69da27e49efa56a15f8afe8f4438c4ec02eff0a117df1b22ea4aad194fe1c104" + sha256: "0b7fd4a0bbc4b92641dbf20adfd7e3fd1398fe17102d94b674234563e110088a" url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.1.2" web: dependency: transitive 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: transitive description: name: web_socket_channel - sha256: "9f187088ed104edd8662ca07af4b124465893caf063ba29758f97af57e61da8f" + sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8 url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "3.0.3" webdriver: dependency: transitive description: @@ -1524,10 +1584,10 @@ packages: dependency: transitive description: name: win32 - sha256: "154360849a56b7b67331c21f09a386562d88903f90a1099c5987afc1912e1f29" + sha256: daf97c9d80197ed7b619040e86c8ab9a9dad285e7671ee7390f9180cc828a51e url: "https://pub.dev" source: hosted - version: "5.10.0" + version: "5.10.1" win32_registry: dependency: transitive description: