From 845a380fbfade164029d1bf34bcae4f56ca3032d Mon Sep 17 00:00:00 2001 From: Vitalij Date: Mon, 8 Sep 2025 22:44:03 +0300 Subject: [PATCH] =?UTF-8?q?feature(training):=20=D0=BE=D1=82=D0=B1=D1=80?= =?UTF-8?q?=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B4=D0=B0=D0=BD=D0=BD?= =?UTF-8?q?=D1=8B=D1=85=20=D0=B4=D0=BB=D1=8F=20=D1=82=D1=80=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .dart_tool/package_config.json | 1158 ++++++++++++++++- .flutter-plugins-dependencies | 2 +- lib/database/dao/collections_dao.dart | 12 + lib/i18n/strings.g.dart | 2 +- lib/inject.config.dart | 3 + lib/models/training_dto.dart | 14 + lib/models/training_dto.freezed.dart | 176 +++ .../training/cubit/training_cubit.dart | 34 +- .../cubit/training_cubit.freezed.dart | 87 +- .../training/cubit/training_state.dart | 2 +- lib/screens/training/training_screen.dart | 43 +- .../training/widgets/training_ticket.dart | 57 +- lib/services/training/training_interface.dart | 10 + lib/services/training/training_service.dart | 49 + 14 files changed, 1591 insertions(+), 58 deletions(-) create mode 100644 lib/models/training_dto.dart create mode 100644 lib/models/training_dto.freezed.dart create mode 100644 lib/services/training/training_interface.dart create mode 100644 lib/services/training/training_service.dart diff --git a/.dart_tool/package_config.json b/.dart_tool/package_config.json index 2b430ff..c66169c 100644 --- a/.dart_tool/package_config.json +++ b/.dart_tool/package_config.json @@ -1 +1,1157 @@ -{"configVersion":2,"packages":[{"name":"_fe_analyzer_shared","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/_fe_analyzer_shared-80.0.0","packageUri":"lib/","languageVersion":"3.3"},{"name":"analyzer","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/analyzer-7.3.0","packageUri":"lib/","languageVersion":"3.3"},{"name":"ansicolor","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/ansicolor-2.0.3","packageUri":"lib/","languageVersion":"3.0"},{"name":"archive","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/archive-4.0.5","packageUri":"lib/","languageVersion":"3.0"},{"name":"args","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/args-2.7.0","packageUri":"lib/","languageVersion":"3.3"},{"name":"async","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/async-2.12.0","packageUri":"lib/","languageVersion":"3.4"},{"name":"auto_route","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/auto_route-10.0.1","packageUri":"lib/","languageVersion":"3.0"},{"name":"auto_route_generator","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/auto_route_generator-10.0.1","packageUri":"lib/","languageVersion":"3.4"},{"name":"bloc","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/bloc-9.0.0","packageUri":"lib/","languageVersion":"2.14"},{"name":"boolean_selector","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/boolean_selector-2.1.2","packageUri":"lib/","languageVersion":"3.1"},{"name":"build","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/build-2.4.2","packageUri":"lib/","languageVersion":"3.6"},{"name":"build_config","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/build_config-1.1.2","packageUri":"lib/","languageVersion":"3.6"},{"name":"build_daemon","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/build_daemon-4.0.4","packageUri":"lib/","languageVersion":"3.6"},{"name":"build_resolvers","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/build_resolvers-2.4.4","packageUri":"lib/","languageVersion":"3.6"},{"name":"build_runner","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/build_runner-2.4.15","packageUri":"lib/","languageVersion":"3.6"},{"name":"build_runner_core","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/build_runner_core-8.0.0","packageUri":"lib/","languageVersion":"3.6"},{"name":"build_verify","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/build_verify-3.1.0","packageUri":"lib/","languageVersion":"2.18"},{"name":"built_collection","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/built_collection-5.1.1","packageUri":"lib/","languageVersion":"2.12"},{"name":"built_value","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/built_value-8.9.5","packageUri":"lib/","languageVersion":"3.0"},{"name":"characters","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/characters-1.4.0","packageUri":"lib/","languageVersion":"3.4"},{"name":"charcode","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/charcode-1.4.0","packageUri":"lib/","languageVersion":"3.0"},{"name":"checked_yaml","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/checked_yaml-2.0.3","packageUri":"lib/","languageVersion":"2.19"},{"name":"cli_util","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/cli_util-0.4.2","packageUri":"lib/","languageVersion":"3.4"},{"name":"clock","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/clock-1.1.2","packageUri":"lib/","languageVersion":"3.4"},{"name":"code_builder","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/code_builder-4.10.1","packageUri":"lib/","languageVersion":"3.5"},{"name":"collection","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/collection-1.19.1","packageUri":"lib/","languageVersion":"3.4"},{"name":"color","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/color-3.0.0","packageUri":"lib/","languageVersion":"2.12"},{"name":"convert","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/convert-3.1.2","packageUri":"lib/","languageVersion":"3.4"},{"name":"coverage","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/coverage-1.11.1","packageUri":"lib/","languageVersion":"3.4"},{"name":"cross_file","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/cross_file-0.3.4+2","packageUri":"lib/","languageVersion":"3.3"},{"name":"crypto","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/crypto-3.0.6","packageUri":"lib/","languageVersion":"3.4"},{"name":"csv","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/csv-6.0.0","packageUri":"lib/","languageVersion":"2.12"},{"name":"cupertino_icons","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/cupertino_icons-1.0.8","packageUri":"lib/","languageVersion":"3.1"},{"name":"dart_style","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/dart_style-3.0.1","packageUri":"lib/","languageVersion":"3.4"},{"name":"dartx","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/dartx-1.2.0","packageUri":"lib/","languageVersion":"2.12"},{"name":"db_viewer","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/db_viewer-1.1.0","packageUri":"lib/","languageVersion":"2.12"},{"name":"dio","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/dio-5.8.0+1","packageUri":"lib/","languageVersion":"2.18"},{"name":"dio_smart_retry","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/dio_smart_retry-7.0.1","packageUri":"lib/","languageVersion":"3.0"},{"name":"dio_web_adapter","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/dio_web_adapter-2.1.1","packageUri":"lib/","languageVersion":"3.3"},{"name":"drift","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/drift-2.26.0","packageUri":"lib/","languageVersion":"3.4"},{"name":"drift_db_viewer","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/drift_db_viewer-2.1.0","packageUri":"lib/","languageVersion":"2.13"},{"name":"drift_dev","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/drift_dev-2.26.0","packageUri":"lib/","languageVersion":"3.4"},{"name":"event_bus","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/event_bus-2.0.1","packageUri":"lib/","languageVersion":"2.12"},{"name":"fake_async","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/fake_async-1.3.2","packageUri":"lib/","languageVersion":"3.3"},{"name":"ffi","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/ffi-2.1.4","packageUri":"lib/","languageVersion":"3.7"},{"name":"file","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/file-7.0.1","packageUri":"lib/","languageVersion":"3.0"},{"name":"file_picker","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/file_picker-10.0.0","packageUri":"lib/","languageVersion":"3.4"},{"name":"fixnum","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/fixnum-1.1.1","packageUri":"lib/","languageVersion":"3.1"},{"name":"flutter","rootUri":"file:///Users/vitalijnecitajlo/fvm/versions/3.29.0/packages/flutter","packageUri":"lib/","languageVersion":"3.7"},{"name":"flutter_bloc","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_bloc-9.1.0","packageUri":"lib/","languageVersion":"2.14"},{"name":"flutter_displaymode","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_displaymode-0.6.0","packageUri":"lib/","languageVersion":"2.12"},{"name":"flutter_gen_core","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_gen_core-5.10.0","packageUri":"lib/","languageVersion":"3.0"},{"name":"flutter_gen_runner","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_gen_runner-5.10.0","packageUri":"lib/","languageVersion":"3.0"},{"name":"flutter_keyboard_size","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_keyboard_size-1.0.1","packageUri":"lib/","languageVersion":"2.18"},{"name":"flutter_launcher_icons","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_launcher_icons-0.14.3","packageUri":"lib/","languageVersion":"3.0"},{"name":"flutter_lints","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_lints-5.0.0","packageUri":"lib/","languageVersion":"3.5"},{"name":"flutter_localizations","rootUri":"file:///Users/vitalijnecitajlo/fvm/versions/3.29.0/packages/flutter_localizations","packageUri":"lib/","languageVersion":"3.7"},{"name":"flutter_plugin_android_lifecycle","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.27","packageUri":"lib/","languageVersion":"3.6"},{"name":"flutter_screenutil","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_screenutil-5.9.3","packageUri":"lib/","languageVersion":"2.17"},{"name":"flutter_secure_storage","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage-9.2.4","packageUri":"lib/","languageVersion":"2.12"},{"name":"flutter_secure_storage_linux","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage_linux-1.2.2","packageUri":"lib/","languageVersion":"2.12"},{"name":"flutter_secure_storage_macos","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage_macos-3.1.3","packageUri":"lib/","languageVersion":"2.12"},{"name":"flutter_secure_storage_platform_interface","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage_platform_interface-1.1.2","packageUri":"lib/","languageVersion":"2.12"},{"name":"flutter_secure_storage_web","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage_web-1.2.1","packageUri":"lib/","languageVersion":"2.12"},{"name":"flutter_secure_storage_windows","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage_windows-3.1.2","packageUri":"lib/","languageVersion":"2.12"},{"name":"flutter_slidable","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_slidable-4.0.0","packageUri":"lib/","languageVersion":"3.6"},{"name":"flutter_test","rootUri":"file:///Users/vitalijnecitajlo/fvm/versions/3.29.0/packages/flutter_test","packageUri":"lib/","languageVersion":"3.7"},{"name":"flutter_web_plugins","rootUri":"file:///Users/vitalijnecitajlo/fvm/versions/3.29.0/packages/flutter_web_plugins","packageUri":"lib/","languageVersion":"3.7"},{"name":"fluttertoast","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/fluttertoast-8.2.12","packageUri":"lib/","languageVersion":"2.12"},{"name":"fps_widget","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/fps_widget-1.0.1+2","packageUri":"lib/","languageVersion":"2.12"},{"name":"freezed","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/freezed-2.5.8","packageUri":"lib/","languageVersion":"3.0"},{"name":"freezed_annotation","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/freezed_annotation-2.4.4","packageUri":"lib/","languageVersion":"3.0"},{"name":"frontend_server_client","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/frontend_server_client-4.0.0","packageUri":"lib/","languageVersion":"3.0"},{"name":"functional_listener","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/functional_listener-2.3.1","packageUri":"lib/","languageVersion":"2.18"},{"name":"get_it","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/get_it-7.7.0","packageUri":"lib/","languageVersion":"3.0"},{"name":"get_it_mixin","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/get_it_mixin-4.2.2","packageUri":"lib/","languageVersion":"2.12"},{"name":"glob","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/glob-2.1.3","packageUri":"lib/","languageVersion":"3.3"},{"name":"google_fonts","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/google_fonts-6.2.1","packageUri":"lib/","languageVersion":"2.14"},{"name":"graphs","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/graphs-2.3.2","packageUri":"lib/","languageVersion":"3.4"},{"name":"group_button","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/group_button-5.3.4","packageUri":"lib/","languageVersion":"2.12"},{"name":"hashcodes","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/hashcodes-2.0.0","packageUri":"lib/","languageVersion":"2.12"},{"name":"hive_ce","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/hive_ce-2.10.1","packageUri":"lib/","languageVersion":"3.4"},{"name":"hive_ce_flutter","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/hive_ce_flutter-2.2.0","packageUri":"lib/","languageVersion":"3.0"},{"name":"hive_ce_generator","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/hive_ce_generator-1.8.2","packageUri":"lib/","languageVersion":"3.0"},{"name":"http","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/http-1.3.0","packageUri":"lib/","languageVersion":"3.4"},{"name":"http_multi_server","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/http_multi_server-3.2.2","packageUri":"lib/","languageVersion":"3.2"},{"name":"http_parser","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/http_parser-4.1.2","packageUri":"lib/","languageVersion":"3.4"},{"name":"image","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/image-4.5.4","packageUri":"lib/","languageVersion":"3.0"},{"name":"image_cropper","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/image_cropper-9.1.0","packageUri":"lib/","languageVersion":"3.3"},{"name":"image_cropper_for_web","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/image_cropper_for_web-6.1.0","packageUri":"lib/","languageVersion":"3.3"},{"name":"image_cropper_platform_interface","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/image_cropper_platform_interface-7.1.0","packageUri":"lib/","languageVersion":"3.3"},{"name":"image_size_getter","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/image_size_getter-2.4.0","packageUri":"lib/","languageVersion":"2.12"},{"name":"import_sorter","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/import_sorter-4.6.0","packageUri":"lib/","languageVersion":"2.12"},{"name":"injectable","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/injectable-2.5.0","packageUri":"lib/","languageVersion":"3.0"},{"name":"injectable_generator","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/injectable_generator-2.7.0","packageUri":"lib/","languageVersion":"3.0"},{"name":"intl","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/intl-0.19.0","packageUri":"lib/","languageVersion":"3.0"},{"name":"io","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/io-1.0.5","packageUri":"lib/","languageVersion":"3.4"},{"name":"js","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/js-0.6.7","packageUri":"lib/","languageVersion":"2.19"},{"name":"json2yaml","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/json2yaml-3.0.1","packageUri":"lib/","languageVersion":"2.12"},{"name":"json_annotation","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/json_annotation-4.9.0","packageUri":"lib/","languageVersion":"3.0"},{"name":"json_serializable","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/json_serializable-6.9.4","packageUri":"lib/","languageVersion":"3.6"},{"name":"leak_tracker","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/leak_tracker-10.0.8","packageUri":"lib/","languageVersion":"3.2"},{"name":"leak_tracker_flutter_testing","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/leak_tracker_flutter_testing-3.0.9","packageUri":"lib/","languageVersion":"3.2"},{"name":"leak_tracker_testing","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/leak_tracker_testing-3.0.1","packageUri":"lib/","languageVersion":"3.2"},{"name":"lints","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/lints-5.1.1","packageUri":"lib/","languageVersion":"3.6"},{"name":"logging","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/logging-1.3.0","packageUri":"lib/","languageVersion":"3.4"},{"name":"matcher","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/matcher-0.12.17","packageUri":"lib/","languageVersion":"3.4"},{"name":"material_color_utilities","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/material_color_utilities-0.11.1","packageUri":"lib/","languageVersion":"2.17"},{"name":"meta","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/meta-1.16.0","packageUri":"lib/","languageVersion":"2.12"},{"name":"mime","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/mime-2.0.0","packageUri":"lib/","languageVersion":"3.2"},{"name":"modal_bottom_sheet","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/modal_bottom_sheet-3.0.0","packageUri":"lib/","languageVersion":"3.3"},{"name":"nested","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/nested-1.0.0","packageUri":"lib/","languageVersion":"2.12"},{"name":"node_preamble","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/node_preamble-2.0.2","packageUri":"lib/","languageVersion":"2.12"},{"name":"package_config","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/package_config-2.2.0","packageUri":"lib/","languageVersion":"3.4"},{"name":"package_info_plus","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/package_info_plus-8.3.0","packageUri":"lib/","languageVersion":"3.3"},{"name":"package_info_plus_platform_interface","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/package_info_plus_platform_interface-3.2.0","packageUri":"lib/","languageVersion":"2.18"},{"name":"path","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path-1.9.1","packageUri":"lib/","languageVersion":"3.4"},{"name":"path_parsing","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_parsing-1.1.0","packageUri":"lib/","languageVersion":"3.3"},{"name":"path_provider","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider-2.1.5","packageUri":"lib/","languageVersion":"3.4"},{"name":"path_provider_android","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_android-2.2.16","packageUri":"lib/","languageVersion":"3.6"},{"name":"path_provider_foundation","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.1","packageUri":"lib/","languageVersion":"3.3"},{"name":"path_provider_linux","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1","packageUri":"lib/","languageVersion":"2.19"},{"name":"path_provider_platform_interface","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_platform_interface-2.1.2","packageUri":"lib/","languageVersion":"3.0"},{"name":"path_provider_windows","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_windows-2.3.0","packageUri":"lib/","languageVersion":"3.2"},{"name":"petitparser","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/petitparser-6.1.0","packageUri":"lib/","languageVersion":"3.5"},{"name":"pin_code_fields","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/pin_code_fields-8.0.1","packageUri":"lib/","languageVersion":"2.12"},{"name":"platform","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/platform-3.1.6","packageUri":"lib/","languageVersion":"3.2"},{"name":"plugin_platform_interface","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/plugin_platform_interface-2.1.8","packageUri":"lib/","languageVersion":"3.0"},{"name":"pool","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/pool-1.5.1","packageUri":"lib/","languageVersion":"2.12"},{"name":"posix","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/posix-6.0.1","packageUri":"lib/","languageVersion":"3.0"},{"name":"provider","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/provider-6.1.4","packageUri":"lib/","languageVersion":"2.12"},{"name":"pub_semver","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/pub_semver-2.2.0","packageUri":"lib/","languageVersion":"3.4"},{"name":"pubspec_parse","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/pubspec_parse-1.5.0","packageUri":"lib/","languageVersion":"3.6"},{"name":"readmore","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/readmore-3.0.0","packageUri":"lib/","languageVersion":"3.0"},{"name":"recase","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/recase-4.1.0","packageUri":"lib/","languageVersion":"2.12"},{"name":"share_plus","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/share_plus-10.1.4","packageUri":"lib/","languageVersion":"3.4"},{"name":"share_plus_platform_interface","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/share_plus_platform_interface-5.0.2","packageUri":"lib/","languageVersion":"2.18"},{"name":"shelf","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/shelf-1.4.2","packageUri":"lib/","languageVersion":"3.4"},{"name":"shelf_packages_handler","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/shelf_packages_handler-3.0.2","packageUri":"lib/","languageVersion":"2.17"},{"name":"shelf_static","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/shelf_static-1.1.3","packageUri":"lib/","languageVersion":"3.3"},{"name":"shelf_web_socket","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/shelf_web_socket-3.0.0","packageUri":"lib/","languageVersion":"3.5"},{"name":"sky_engine","rootUri":"file:///Users/vitalijnecitajlo/fvm/versions/3.29.0/bin/cache/pkg/sky_engine","packageUri":"lib/","languageVersion":"3.7"},{"name":"slang","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/slang-4.6.0","packageUri":"lib/","languageVersion":"3.3"},{"name":"slang_build_runner","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/slang_build_runner-4.6.0","packageUri":"lib/","languageVersion":"3.3"},{"name":"slang_flutter","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/slang_flutter-4.6.0","packageUri":"lib/","languageVersion":"3.3"},{"name":"source_gen","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/source_gen-2.0.0","packageUri":"lib/","languageVersion":"3.6"},{"name":"source_helper","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/source_helper-1.3.5","packageUri":"lib/","languageVersion":"3.4"},{"name":"source_map_stack_trace","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/source_map_stack_trace-2.1.2","packageUri":"lib/","languageVersion":"3.3"},{"name":"source_maps","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/source_maps-0.10.13","packageUri":"lib/","languageVersion":"3.3"},{"name":"source_span","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/source_span-1.10.1","packageUri":"lib/","languageVersion":"3.1"},{"name":"sprintf","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sprintf-7.0.0","packageUri":"lib/","languageVersion":"2.12"},{"name":"sqlite3","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sqlite3-2.7.5","packageUri":"lib/","languageVersion":"3.5"},{"name":"sqlite3_flutter_libs","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sqlite3_flutter_libs-0.5.32","packageUri":"lib/","languageVersion":"2.12"},{"name":"sqlparser","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sqlparser-0.41.0","packageUri":"lib/","languageVersion":"3.0"},{"name":"stack_trace","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/stack_trace-1.12.1","packageUri":"lib/","languageVersion":"3.4"},{"name":"stream_channel","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/stream_channel-2.1.4","packageUri":"lib/","languageVersion":"3.3"},{"name":"stream_transform","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/stream_transform-2.1.1","packageUri":"lib/","languageVersion":"3.1"},{"name":"string_scanner","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/string_scanner-1.4.1","packageUri":"lib/","languageVersion":"3.1"},{"name":"talker","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/talker-4.7.1","packageUri":"lib/","languageVersion":"2.17"},{"name":"talker_bloc_logger","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/talker_bloc_logger-4.7.1","packageUri":"lib/","languageVersion":"2.15"},{"name":"talker_dio_logger","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/talker_dio_logger-4.7.1","packageUri":"lib/","languageVersion":"2.15"},{"name":"talker_flutter","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/talker_flutter-4.7.1","packageUri":"lib/","languageVersion":"3.6"},{"name":"talker_logger","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/talker_logger-4.7.1","packageUri":"lib/","languageVersion":"2.15"},{"name":"term_glyph","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/term_glyph-1.2.2","packageUri":"lib/","languageVersion":"3.1"},{"name":"test","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/test-1.25.15","packageUri":"lib/","languageVersion":"3.5"},{"name":"test_api","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/test_api-0.7.4","packageUri":"lib/","languageVersion":"3.5"},{"name":"test_core","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/test_core-0.6.8","packageUri":"lib/","languageVersion":"3.5"},{"name":"time","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/time-2.1.5","packageUri":"lib/","languageVersion":"2.12"},{"name":"timing","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/timing-1.0.2","packageUri":"lib/","languageVersion":"3.4"},{"name":"tint","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/tint-2.0.1","packageUri":"lib/","languageVersion":"2.18"},{"name":"typed_data","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/typed_data-1.4.0","packageUri":"lib/","languageVersion":"3.5"},{"name":"url_launcher_linux","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/url_launcher_linux-3.2.1","packageUri":"lib/","languageVersion":"3.3"},{"name":"url_launcher_platform_interface","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/url_launcher_platform_interface-2.3.2","packageUri":"lib/","languageVersion":"3.1"},{"name":"url_launcher_web","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/url_launcher_web-2.4.0","packageUri":"lib/","languageVersion":"3.6"},{"name":"url_launcher_windows","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/url_launcher_windows-3.1.4","packageUri":"lib/","languageVersion":"3.4"},{"name":"uuid","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/uuid-4.5.1","packageUri":"lib/","languageVersion":"3.0"},{"name":"vector_graphics_codec","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/vector_graphics_codec-1.1.13","packageUri":"lib/","languageVersion":"3.4"},{"name":"vector_graphics_compiler","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/vector_graphics_compiler-1.1.16","packageUri":"lib/","languageVersion":"3.4"},{"name":"vector_math","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/vector_math-2.1.4","packageUri":"lib/","languageVersion":"2.14"},{"name":"vm_service","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/vm_service-14.3.1","packageUri":"lib/","languageVersion":"3.3"},{"name":"watcher","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/watcher-1.1.1","packageUri":"lib/","languageVersion":"3.1"},{"name":"web","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/web-1.1.1","packageUri":"lib/","languageVersion":"3.4"},{"name":"web_socket","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/web_socket-0.1.6","packageUri":"lib/","languageVersion":"3.3"},{"name":"web_socket_channel","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/web_socket_channel-3.0.2","packageUri":"lib/","languageVersion":"3.3"},{"name":"webkit_inspection_protocol","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/webkit_inspection_protocol-1.2.1","packageUri":"lib/","languageVersion":"3.0"},{"name":"win32","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/win32-5.12.0","packageUri":"lib/","languageVersion":"3.7"},{"name":"xdg_directories","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/xdg_directories-1.1.0","packageUri":"lib/","languageVersion":"3.3"},{"name":"xml","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/xml-6.5.0","packageUri":"lib/","languageVersion":"3.2"},{"name":"yaml","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/yaml-3.1.3","packageUri":"lib/","languageVersion":"3.4"},{"name":"yaml_writer","rootUri":"file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/yaml_writer-2.1.0","packageUri":"lib/","languageVersion":"3.0"},{"name":"remever","rootUri":"../","packageUri":"lib/","languageVersion":"3.7"},{"name":"flutter_gen","rootUri":"flutter_gen","languageVersion":"2.12"}],"generated":"2025-09-08T18:22:53.137282Z","generator":"pub","generatorVersion":"3.7.0","flutterRoot":"file:///Users/vitalijnecitajlo/fvm/versions/3.29.0","flutterVersion":"3.29.0","pubCache":"file:///Users/vitalijnecitajlo/.pub-cache"} \ No newline at end of file +{ + "configVersion": 2, + "packages": [ + { + "name": "_fe_analyzer_shared", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/_fe_analyzer_shared-80.0.0", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "analyzer", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/analyzer-7.3.0", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "ansicolor", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/ansicolor-2.0.3", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "archive", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/archive-4.0.5", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "args", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/args-2.7.0", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "async", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/async-2.12.0", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "auto_route", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/auto_route-10.0.1", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "auto_route_generator", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/auto_route_generator-10.0.1", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "bloc", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/bloc-9.0.0", + "packageUri": "lib/", + "languageVersion": "2.14" + }, + { + "name": "boolean_selector", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/boolean_selector-2.1.2", + "packageUri": "lib/", + "languageVersion": "3.1" + }, + { + "name": "build", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/build-2.4.2", + "packageUri": "lib/", + "languageVersion": "3.6" + }, + { + "name": "build_config", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/build_config-1.1.2", + "packageUri": "lib/", + "languageVersion": "3.6" + }, + { + "name": "build_daemon", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/build_daemon-4.0.4", + "packageUri": "lib/", + "languageVersion": "3.6" + }, + { + "name": "build_resolvers", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/build_resolvers-2.4.4", + "packageUri": "lib/", + "languageVersion": "3.6" + }, + { + "name": "build_runner", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/build_runner-2.4.15", + "packageUri": "lib/", + "languageVersion": "3.6" + }, + { + "name": "build_runner_core", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/build_runner_core-8.0.0", + "packageUri": "lib/", + "languageVersion": "3.6" + }, + { + "name": "build_verify", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/build_verify-3.1.0", + "packageUri": "lib/", + "languageVersion": "2.18" + }, + { + "name": "built_collection", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/built_collection-5.1.1", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "built_value", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/built_value-8.9.5", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "characters", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/characters-1.4.0", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "charcode", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/charcode-1.4.0", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "checked_yaml", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/checked_yaml-2.0.3", + "packageUri": "lib/", + "languageVersion": "2.19" + }, + { + "name": "cli_util", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/cli_util-0.4.2", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "clock", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/clock-1.1.2", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "code_builder", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/code_builder-4.10.1", + "packageUri": "lib/", + "languageVersion": "3.5" + }, + { + "name": "collection", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/collection-1.19.1", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "color", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/color-3.0.0", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "convert", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/convert-3.1.2", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "coverage", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/coverage-1.11.1", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "cross_file", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/cross_file-0.3.4+2", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "crypto", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/crypto-3.0.6", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "csv", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/csv-6.0.0", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "cupertino_icons", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/cupertino_icons-1.0.8", + "packageUri": "lib/", + "languageVersion": "3.1" + }, + { + "name": "dart_style", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/dart_style-3.0.1", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "dartx", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/dartx-1.2.0", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "db_viewer", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/db_viewer-1.1.0", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "dio", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/dio-5.8.0+1", + "packageUri": "lib/", + "languageVersion": "2.18" + }, + { + "name": "dio_smart_retry", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/dio_smart_retry-7.0.1", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "dio_web_adapter", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/dio_web_adapter-2.1.1", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "drift", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/drift-2.26.0", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "drift_db_viewer", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/drift_db_viewer-2.1.0", + "packageUri": "lib/", + "languageVersion": "2.13" + }, + { + "name": "drift_dev", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/drift_dev-2.26.0", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "event_bus", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/event_bus-2.0.1", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "fake_async", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/fake_async-1.3.2", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "ffi", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/ffi-2.1.4", + "packageUri": "lib/", + "languageVersion": "3.7" + }, + { + "name": "file", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/file-7.0.1", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "file_picker", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/file_picker-10.0.0", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "fixnum", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/fixnum-1.1.1", + "packageUri": "lib/", + "languageVersion": "3.1" + }, + { + "name": "flutter", + "rootUri": "file:///Users/vitalijnecitajlo/fvm/versions/3.29.0/packages/flutter", + "packageUri": "lib/", + "languageVersion": "3.7" + }, + { + "name": "flutter_bloc", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_bloc-9.1.0", + "packageUri": "lib/", + "languageVersion": "2.14" + }, + { + "name": "flutter_displaymode", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_displaymode-0.6.0", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "flutter_gen_core", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_gen_core-5.10.0", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "flutter_gen_runner", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_gen_runner-5.10.0", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "flutter_keyboard_size", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_keyboard_size-1.0.1", + "packageUri": "lib/", + "languageVersion": "2.18" + }, + { + "name": "flutter_launcher_icons", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_launcher_icons-0.14.3", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "flutter_lints", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_lints-5.0.0", + "packageUri": "lib/", + "languageVersion": "3.5" + }, + { + "name": "flutter_localizations", + "rootUri": "file:///Users/vitalijnecitajlo/fvm/versions/3.29.0/packages/flutter_localizations", + "packageUri": "lib/", + "languageVersion": "3.7" + }, + { + "name": "flutter_plugin_android_lifecycle", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.27", + "packageUri": "lib/", + "languageVersion": "3.6" + }, + { + "name": "flutter_screenutil", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_screenutil-5.9.3", + "packageUri": "lib/", + "languageVersion": "2.17" + }, + { + "name": "flutter_secure_storage", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage-9.2.4", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "flutter_secure_storage_linux", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage_linux-1.2.2", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "flutter_secure_storage_macos", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage_macos-3.1.3", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "flutter_secure_storage_platform_interface", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage_platform_interface-1.1.2", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "flutter_secure_storage_web", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage_web-1.2.1", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "flutter_secure_storage_windows", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage_windows-3.1.2", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "flutter_slidable", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_slidable-4.0.0", + "packageUri": "lib/", + "languageVersion": "3.6" + }, + { + "name": "flutter_test", + "rootUri": "file:///Users/vitalijnecitajlo/fvm/versions/3.29.0/packages/flutter_test", + "packageUri": "lib/", + "languageVersion": "3.7" + }, + { + "name": "flutter_web_plugins", + "rootUri": "file:///Users/vitalijnecitajlo/fvm/versions/3.29.0/packages/flutter_web_plugins", + "packageUri": "lib/", + "languageVersion": "3.7" + }, + { + "name": "fluttertoast", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/fluttertoast-8.2.12", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "fps_widget", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/fps_widget-1.0.1+2", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "freezed", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/freezed-2.5.8", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "freezed_annotation", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/freezed_annotation-2.4.4", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "frontend_server_client", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/frontend_server_client-4.0.0", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "functional_listener", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/functional_listener-2.3.1", + "packageUri": "lib/", + "languageVersion": "2.18" + }, + { + "name": "get_it", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/get_it-7.7.0", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "get_it_mixin", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/get_it_mixin-4.2.2", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "glob", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/glob-2.1.3", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "google_fonts", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/google_fonts-6.2.1", + "packageUri": "lib/", + "languageVersion": "2.14" + }, + { + "name": "graphs", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/graphs-2.3.2", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "group_button", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/group_button-5.3.4", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "hashcodes", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/hashcodes-2.0.0", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "hive_ce", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/hive_ce-2.10.1", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "hive_ce_flutter", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/hive_ce_flutter-2.2.0", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "hive_ce_generator", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/hive_ce_generator-1.8.2", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "http", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/http-1.3.0", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "http_multi_server", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/http_multi_server-3.2.2", + "packageUri": "lib/", + "languageVersion": "3.2" + }, + { + "name": "http_parser", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/http_parser-4.1.2", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "image", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/image-4.5.4", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "image_cropper", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/image_cropper-9.1.0", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "image_cropper_for_web", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/image_cropper_for_web-6.1.0", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "image_cropper_platform_interface", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/image_cropper_platform_interface-7.1.0", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "image_size_getter", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/image_size_getter-2.4.0", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "import_sorter", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/import_sorter-4.6.0", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "injectable", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/injectable-2.5.0", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "injectable_generator", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/injectable_generator-2.7.0", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "intl", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/intl-0.19.0", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "io", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/io-1.0.5", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "js", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/js-0.6.7", + "packageUri": "lib/", + "languageVersion": "2.19" + }, + { + "name": "json2yaml", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/json2yaml-3.0.1", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "json_annotation", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/json_annotation-4.9.0", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "json_serializable", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/json_serializable-6.9.4", + "packageUri": "lib/", + "languageVersion": "3.6" + }, + { + "name": "leak_tracker", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/leak_tracker-10.0.8", + "packageUri": "lib/", + "languageVersion": "3.2" + }, + { + "name": "leak_tracker_flutter_testing", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/leak_tracker_flutter_testing-3.0.9", + "packageUri": "lib/", + "languageVersion": "3.2" + }, + { + "name": "leak_tracker_testing", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/leak_tracker_testing-3.0.1", + "packageUri": "lib/", + "languageVersion": "3.2" + }, + { + "name": "lints", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/lints-5.1.1", + "packageUri": "lib/", + "languageVersion": "3.6" + }, + { + "name": "logging", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/logging-1.3.0", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "matcher", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/matcher-0.12.17", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "material_color_utilities", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/material_color_utilities-0.11.1", + "packageUri": "lib/", + "languageVersion": "2.17" + }, + { + "name": "meta", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/meta-1.16.0", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "mime", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/mime-2.0.0", + "packageUri": "lib/", + "languageVersion": "3.2" + }, + { + "name": "modal_bottom_sheet", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/modal_bottom_sheet-3.0.0", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "nested", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/nested-1.0.0", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "node_preamble", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/node_preamble-2.0.2", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "package_config", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/package_config-2.2.0", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "package_info_plus", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/package_info_plus-8.3.0", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "package_info_plus_platform_interface", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/package_info_plus_platform_interface-3.2.0", + "packageUri": "lib/", + "languageVersion": "2.18" + }, + { + "name": "path", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path-1.9.1", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "path_parsing", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_parsing-1.1.0", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "path_provider", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider-2.1.5", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "path_provider_android", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_android-2.2.16", + "packageUri": "lib/", + "languageVersion": "3.6" + }, + { + "name": "path_provider_foundation", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.1", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "path_provider_linux", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1", + "packageUri": "lib/", + "languageVersion": "2.19" + }, + { + "name": "path_provider_platform_interface", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_platform_interface-2.1.2", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "path_provider_windows", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_windows-2.3.0", + "packageUri": "lib/", + "languageVersion": "3.2" + }, + { + "name": "petitparser", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/petitparser-6.1.0", + "packageUri": "lib/", + "languageVersion": "3.5" + }, + { + "name": "pin_code_fields", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/pin_code_fields-8.0.1", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "platform", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/platform-3.1.6", + "packageUri": "lib/", + "languageVersion": "3.2" + }, + { + "name": "plugin_platform_interface", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/plugin_platform_interface-2.1.8", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "pool", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/pool-1.5.1", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "posix", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/posix-6.0.1", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "provider", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/provider-6.1.4", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "pub_semver", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/pub_semver-2.2.0", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "pubspec_parse", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/pubspec_parse-1.5.0", + "packageUri": "lib/", + "languageVersion": "3.6" + }, + { + "name": "readmore", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/readmore-3.0.0", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "recase", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/recase-4.1.0", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "share_plus", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/share_plus-10.1.4", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "share_plus_platform_interface", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/share_plus_platform_interface-5.0.2", + "packageUri": "lib/", + "languageVersion": "2.18" + }, + { + "name": "shelf", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/shelf-1.4.2", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "shelf_packages_handler", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/shelf_packages_handler-3.0.2", + "packageUri": "lib/", + "languageVersion": "2.17" + }, + { + "name": "shelf_static", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/shelf_static-1.1.3", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "shelf_web_socket", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/shelf_web_socket-3.0.0", + "packageUri": "lib/", + "languageVersion": "3.5" + }, + { + "name": "sky_engine", + "rootUri": "file:///Users/vitalijnecitajlo/fvm/versions/3.29.0/bin/cache/pkg/sky_engine", + "packageUri": "lib/", + "languageVersion": "3.7" + }, + { + "name": "slang", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/slang-4.6.0", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "slang_build_runner", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/slang_build_runner-4.6.0", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "slang_flutter", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/slang_flutter-4.6.0", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "source_gen", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/source_gen-2.0.0", + "packageUri": "lib/", + "languageVersion": "3.6" + }, + { + "name": "source_helper", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/source_helper-1.3.5", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "source_map_stack_trace", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/source_map_stack_trace-2.1.2", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "source_maps", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/source_maps-0.10.13", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "source_span", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/source_span-1.10.1", + "packageUri": "lib/", + "languageVersion": "3.1" + }, + { + "name": "sprintf", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sprintf-7.0.0", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "sqlite3", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sqlite3-2.7.5", + "packageUri": "lib/", + "languageVersion": "3.5" + }, + { + "name": "sqlite3_flutter_libs", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sqlite3_flutter_libs-0.5.32", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "sqlparser", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sqlparser-0.41.0", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "stack_trace", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/stack_trace-1.12.1", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "stream_channel", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/stream_channel-2.1.4", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "stream_transform", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/stream_transform-2.1.1", + "packageUri": "lib/", + "languageVersion": "3.1" + }, + { + "name": "string_scanner", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/string_scanner-1.4.1", + "packageUri": "lib/", + "languageVersion": "3.1" + }, + { + "name": "talker", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/talker-4.7.1", + "packageUri": "lib/", + "languageVersion": "2.17" + }, + { + "name": "talker_bloc_logger", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/talker_bloc_logger-4.7.1", + "packageUri": "lib/", + "languageVersion": "2.15" + }, + { + "name": "talker_dio_logger", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/talker_dio_logger-4.7.1", + "packageUri": "lib/", + "languageVersion": "2.15" + }, + { + "name": "talker_flutter", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/talker_flutter-4.7.1", + "packageUri": "lib/", + "languageVersion": "3.6" + }, + { + "name": "talker_logger", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/talker_logger-4.7.1", + "packageUri": "lib/", + "languageVersion": "2.15" + }, + { + "name": "term_glyph", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/term_glyph-1.2.2", + "packageUri": "lib/", + "languageVersion": "3.1" + }, + { + "name": "test", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/test-1.25.15", + "packageUri": "lib/", + "languageVersion": "3.5" + }, + { + "name": "test_api", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/test_api-0.7.4", + "packageUri": "lib/", + "languageVersion": "3.5" + }, + { + "name": "test_core", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/test_core-0.6.8", + "packageUri": "lib/", + "languageVersion": "3.5" + }, + { + "name": "time", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/time-2.1.5", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "timing", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/timing-1.0.2", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "tint", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/tint-2.0.1", + "packageUri": "lib/", + "languageVersion": "2.18" + }, + { + "name": "typed_data", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/typed_data-1.4.0", + "packageUri": "lib/", + "languageVersion": "3.5" + }, + { + "name": "url_launcher_linux", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/url_launcher_linux-3.2.1", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "url_launcher_platform_interface", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/url_launcher_platform_interface-2.3.2", + "packageUri": "lib/", + "languageVersion": "3.1" + }, + { + "name": "url_launcher_web", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/url_launcher_web-2.4.0", + "packageUri": "lib/", + "languageVersion": "3.6" + }, + { + "name": "url_launcher_windows", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/url_launcher_windows-3.1.4", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "uuid", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/uuid-4.5.1", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "vector_graphics_codec", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/vector_graphics_codec-1.1.13", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "vector_graphics_compiler", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/vector_graphics_compiler-1.1.16", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "vector_math", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/vector_math-2.1.4", + "packageUri": "lib/", + "languageVersion": "2.14" + }, + { + "name": "vm_service", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/vm_service-14.3.1", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "watcher", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/watcher-1.1.1", + "packageUri": "lib/", + "languageVersion": "3.1" + }, + { + "name": "web", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/web-1.1.1", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "web_socket", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/web_socket-0.1.6", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "web_socket_channel", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/web_socket_channel-3.0.2", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "webkit_inspection_protocol", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/webkit_inspection_protocol-1.2.1", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "win32", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/win32-5.12.0", + "packageUri": "lib/", + "languageVersion": "3.7" + }, + { + "name": "xdg_directories", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/xdg_directories-1.1.0", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "xml", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/xml-6.5.0", + "packageUri": "lib/", + "languageVersion": "3.2" + }, + { + "name": "yaml", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/yaml-3.1.3", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "yaml_writer", + "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/yaml_writer-2.1.0", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "remever", + "rootUri": "../", + "packageUri": "lib/", + "languageVersion": "3.7" + } + ], + "generated": "2025-09-08T19:38:33.805712Z", + "generator": "pub", + "generatorVersion": "3.7.0", + "flutterRoot": "file:///Users/vitalijnecitajlo/fvm/versions/3.29.0", + "flutterVersion": "3.29.0", + "pubCache": "file:///Users/vitalijnecitajlo/.pub-cache" +} diff --git a/.flutter-plugins-dependencies b/.flutter-plugins-dependencies index abac9e1..44b4a98 100644 --- a/.flutter-plugins-dependencies +++ b/.flutter-plugins-dependencies @@ -1 +1 @@ -{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"file_picker","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/file_picker-10.0.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage-9.2.4/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"fluttertoast","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/fluttertoast-8.2.12/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"image_cropper","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/image_cropper-9.1.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"package_info_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/package_info_plus-8.3.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"path_provider_foundation","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.1/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"share_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/share_plus-10.1.4/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"sqlite3_flutter_libs","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sqlite3_flutter_libs-0.5.32/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false}],"android":[{"name":"file_picker","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/file_picker-10.0.0/","native_build":true,"dependencies":["flutter_plugin_android_lifecycle"],"dev_dependency":false},{"name":"flutter_displaymode","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_displaymode-0.6.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_plugin_android_lifecycle","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.27/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage-9.2.4/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"fluttertoast","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/fluttertoast-8.2.12/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"image_cropper","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/image_cropper-9.1.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"package_info_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/package_info_plus-8.3.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"path_provider_android","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_android-2.2.16/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"share_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/share_plus-10.1.4/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"sqlite3_flutter_libs","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sqlite3_flutter_libs-0.5.32/","native_build":true,"dependencies":[],"dev_dependency":false}],"macos":[{"name":"file_picker","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/file_picker-10.0.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage_macos","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage_macos-3.1.3/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"package_info_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/package_info_plus-8.3.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"path_provider_foundation","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.1/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"share_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/share_plus-10.1.4/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"sqlite3_flutter_libs","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sqlite3_flutter_libs-0.5.32/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false}],"linux":[{"name":"file_picker","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/file_picker-10.0.0/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage_linux","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage_linux-1.2.2/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"package_info_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/package_info_plus-8.3.0/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"path_provider_linux","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"share_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/share_plus-10.1.4/","native_build":false,"dependencies":["url_launcher_linux"],"dev_dependency":false},{"name":"sqlite3_flutter_libs","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sqlite3_flutter_libs-0.5.32/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"url_launcher_linux","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/url_launcher_linux-3.2.1/","native_build":true,"dependencies":[],"dev_dependency":false}],"windows":[{"name":"file_picker","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/file_picker-10.0.0/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage_windows","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage_windows-3.1.2/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"package_info_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/package_info_plus-8.3.0/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"path_provider_windows","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_windows-2.3.0/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"share_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/share_plus-10.1.4/","native_build":true,"dependencies":["url_launcher_windows"],"dev_dependency":false},{"name":"sqlite3_flutter_libs","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sqlite3_flutter_libs-0.5.32/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"url_launcher_windows","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/url_launcher_windows-3.1.4/","native_build":true,"dependencies":[],"dev_dependency":false}],"web":[{"name":"file_picker","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/file_picker-10.0.0/","dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage_web","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage_web-1.2.1/","dependencies":[],"dev_dependency":false},{"name":"fluttertoast","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/fluttertoast-8.2.12/","dependencies":[],"dev_dependency":false},{"name":"image_cropper_for_web","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/image_cropper_for_web-6.1.0/","dependencies":[],"dev_dependency":false},{"name":"package_info_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/package_info_plus-8.3.0/","dependencies":[],"dev_dependency":false},{"name":"share_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/share_plus-10.1.4/","dependencies":["url_launcher_web"],"dev_dependency":false},{"name":"url_launcher_web","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/url_launcher_web-2.4.0/","dependencies":[],"dev_dependency":false}]},"dependencyGraph":[{"name":"file_picker","dependencies":["flutter_plugin_android_lifecycle"]},{"name":"flutter_displaymode","dependencies":[]},{"name":"flutter_plugin_android_lifecycle","dependencies":[]},{"name":"flutter_secure_storage","dependencies":["flutter_secure_storage_linux","flutter_secure_storage_macos","flutter_secure_storage_web","flutter_secure_storage_windows"]},{"name":"flutter_secure_storage_linux","dependencies":[]},{"name":"flutter_secure_storage_macos","dependencies":[]},{"name":"flutter_secure_storage_web","dependencies":[]},{"name":"flutter_secure_storage_windows","dependencies":["path_provider"]},{"name":"fluttertoast","dependencies":[]},{"name":"image_cropper","dependencies":["image_cropper_for_web"]},{"name":"image_cropper_for_web","dependencies":[]},{"name":"package_info_plus","dependencies":[]},{"name":"path_provider","dependencies":["path_provider_android","path_provider_foundation","path_provider_linux","path_provider_windows"]},{"name":"path_provider_android","dependencies":[]},{"name":"path_provider_foundation","dependencies":[]},{"name":"path_provider_linux","dependencies":[]},{"name":"path_provider_windows","dependencies":[]},{"name":"share_plus","dependencies":["url_launcher_web","url_launcher_windows","url_launcher_linux"]},{"name":"sqlite3_flutter_libs","dependencies":[]},{"name":"url_launcher_linux","dependencies":[]},{"name":"url_launcher_web","dependencies":[]},{"name":"url_launcher_windows","dependencies":[]}],"date_created":"2025-09-08 21:23:29.041070","version":"3.29.0","swift_package_manager_enabled":{"ios":false,"macos":false}} \ No newline at end of file +{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"file_picker","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/file_picker-10.0.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage-9.2.4/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"fluttertoast","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/fluttertoast-8.2.12/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"image_cropper","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/image_cropper-9.1.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"package_info_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/package_info_plus-8.3.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"path_provider_foundation","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.1/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"share_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/share_plus-10.1.4/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"sqlite3_flutter_libs","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sqlite3_flutter_libs-0.5.32/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false}],"android":[{"name":"file_picker","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/file_picker-10.0.0/","native_build":true,"dependencies":["flutter_plugin_android_lifecycle"],"dev_dependency":false},{"name":"flutter_displaymode","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_displaymode-0.6.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_plugin_android_lifecycle","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.27/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage-9.2.4/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"fluttertoast","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/fluttertoast-8.2.12/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"image_cropper","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/image_cropper-9.1.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"package_info_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/package_info_plus-8.3.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"path_provider_android","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_android-2.2.16/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"share_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/share_plus-10.1.4/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"sqlite3_flutter_libs","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sqlite3_flutter_libs-0.5.32/","native_build":true,"dependencies":[],"dev_dependency":false}],"macos":[{"name":"file_picker","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/file_picker-10.0.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage_macos","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage_macos-3.1.3/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"package_info_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/package_info_plus-8.3.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"path_provider_foundation","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.1/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"share_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/share_plus-10.1.4/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"sqlite3_flutter_libs","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sqlite3_flutter_libs-0.5.32/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false}],"linux":[{"name":"file_picker","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/file_picker-10.0.0/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage_linux","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage_linux-1.2.2/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"package_info_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/package_info_plus-8.3.0/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"path_provider_linux","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"share_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/share_plus-10.1.4/","native_build":false,"dependencies":["url_launcher_linux"],"dev_dependency":false},{"name":"sqlite3_flutter_libs","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sqlite3_flutter_libs-0.5.32/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"url_launcher_linux","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/url_launcher_linux-3.2.1/","native_build":true,"dependencies":[],"dev_dependency":false}],"windows":[{"name":"file_picker","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/file_picker-10.0.0/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage_windows","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage_windows-3.1.2/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"package_info_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/package_info_plus-8.3.0/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"path_provider_windows","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_windows-2.3.0/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"share_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/share_plus-10.1.4/","native_build":true,"dependencies":["url_launcher_windows"],"dev_dependency":false},{"name":"sqlite3_flutter_libs","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sqlite3_flutter_libs-0.5.32/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"url_launcher_windows","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/url_launcher_windows-3.1.4/","native_build":true,"dependencies":[],"dev_dependency":false}],"web":[{"name":"file_picker","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/file_picker-10.0.0/","dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage_web","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage_web-1.2.1/","dependencies":[],"dev_dependency":false},{"name":"fluttertoast","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/fluttertoast-8.2.12/","dependencies":[],"dev_dependency":false},{"name":"image_cropper_for_web","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/image_cropper_for_web-6.1.0/","dependencies":[],"dev_dependency":false},{"name":"package_info_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/package_info_plus-8.3.0/","dependencies":[],"dev_dependency":false},{"name":"share_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/share_plus-10.1.4/","dependencies":["url_launcher_web"],"dev_dependency":false},{"name":"url_launcher_web","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/url_launcher_web-2.4.0/","dependencies":[],"dev_dependency":false}]},"dependencyGraph":[{"name":"file_picker","dependencies":["flutter_plugin_android_lifecycle"]},{"name":"flutter_displaymode","dependencies":[]},{"name":"flutter_plugin_android_lifecycle","dependencies":[]},{"name":"flutter_secure_storage","dependencies":["flutter_secure_storage_linux","flutter_secure_storage_macos","flutter_secure_storage_web","flutter_secure_storage_windows"]},{"name":"flutter_secure_storage_linux","dependencies":[]},{"name":"flutter_secure_storage_macos","dependencies":[]},{"name":"flutter_secure_storage_web","dependencies":[]},{"name":"flutter_secure_storage_windows","dependencies":["path_provider"]},{"name":"fluttertoast","dependencies":[]},{"name":"image_cropper","dependencies":["image_cropper_for_web"]},{"name":"image_cropper_for_web","dependencies":[]},{"name":"package_info_plus","dependencies":[]},{"name":"path_provider","dependencies":["path_provider_android","path_provider_foundation","path_provider_linux","path_provider_windows"]},{"name":"path_provider_android","dependencies":[]},{"name":"path_provider_foundation","dependencies":[]},{"name":"path_provider_linux","dependencies":[]},{"name":"path_provider_windows","dependencies":[]},{"name":"share_plus","dependencies":["url_launcher_web","url_launcher_windows","url_launcher_linux"]},{"name":"sqlite3_flutter_libs","dependencies":[]},{"name":"url_launcher_linux","dependencies":[]},{"name":"url_launcher_web","dependencies":[]},{"name":"url_launcher_windows","dependencies":[]}],"date_created":"2025-09-08 22:38:32.215720","version":"3.29.0","swift_package_manager_enabled":{"ios":false,"macos":false}} \ No newline at end of file diff --git a/lib/database/dao/collections_dao.dart b/lib/database/dao/collections_dao.dart index 7d271c4..d160762 100644 --- a/lib/database/dao/collections_dao.dart +++ b/lib/database/dao/collections_dao.dart @@ -28,6 +28,18 @@ class CollectionsDao extends DatabaseAccessor } } + Future getCollectionById(String? id) { + try { + return db.managers.collections + .filter((f) => f.id.equals(id)) + .getSingleOrNull(); + } catch (e, st) { + logger.logError('Ошибка в методе getCollectionById', e, st); + + throw ('EXEPTION'); + } + } + /// Создание коллекции Future createCollection(CrudCollectionDto dto) async { try { diff --git a/lib/i18n/strings.g.dart b/lib/i18n/strings.g.dart index 5deb201..4ca9bd2 100644 --- a/lib/i18n/strings.g.dart +++ b/lib/i18n/strings.g.dart @@ -6,7 +6,7 @@ /// Locales: 2 /// Strings: 20 (10 per locale) /// -/// Built on 2025-09-08 at 14:50 UTC +/// Built on 2025-09-08 at 19:38 UTC // coverage:ignore-file // ignore_for_file: type=lint, unused_import diff --git a/lib/inject.config.dart b/lib/inject.config.dart index f09cefe..66e4872 100644 --- a/lib/inject.config.dart +++ b/lib/inject.config.dart @@ -23,6 +23,8 @@ import 'services/core/theme_service.dart' as _i84; import 'services/logs/logs_service.dart' as _i393; import 'services/tickets/tickets_interface.dart' as _i147; import 'services/tickets/tickets_service.dart' as _i548; +import 'services/training/training_interface.dart' as _i813; +import 'services/training/training_service.dart' as _i162; import 'services/warmup_service.dart' as _i564; extension GetItInjectableX on _i174.GetIt { @@ -37,6 +39,7 @@ extension GetItInjectableX on _i174.GetIt { gh.factory<_i84.ThemeService>(() => _i84.ThemeService()); gh.singleton<_i565.AppDatabase>(() => _i565.AppDatabase()); gh.singleton<_i393.LogsService>(() => _i393.LogsService()); + gh.singleton<_i813.TrainingInterface>(() => _i162.TrainingService()); gh.singleton<_i147.TicketsInterface>(() => _i548.TicketsService()); gh.singleton<_i764.CollectionsInterface>(() => _i1001.CollectionsService()); gh.singleton<_i580.AuthInterface>(() => _i975.AuthService()); diff --git a/lib/models/training_dto.dart b/lib/models/training_dto.dart new file mode 100644 index 0000000..2ee6a2c --- /dev/null +++ b/lib/models/training_dto.dart @@ -0,0 +1,14 @@ +// To parse this JSON data, do +// +// final collectionDto = collectionDtoFromJson(jsonString); + +import 'package:freezed_annotation/freezed_annotation.dart'; +import 'package:remever/database/database.dart'; + +part 'training_dto.freezed.dart'; + +@Freezed(copyWith: true, equal: true, fromJson: false, toJson: false) +abstract class TrainingDto with _$TrainingDto { + const factory TrainingDto({Collection? collection, required Ticket ticket}) = + _TrainingDto; +} diff --git a/lib/models/training_dto.freezed.dart b/lib/models/training_dto.freezed.dart new file mode 100644 index 0000000..d565bdd --- /dev/null +++ b/lib/models/training_dto.freezed.dart @@ -0,0 +1,176 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark + +part of 'training_dto.dart'; + +// ************************************************************************** +// FreezedGenerator +// ************************************************************************** + +T _$identity(T value) => value; + +final _privateConstructorUsedError = UnsupportedError( + 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models', +); + +/// @nodoc +mixin _$TrainingDto { + Collection? get collection => throw _privateConstructorUsedError; + Ticket get ticket => throw _privateConstructorUsedError; + + /// Create a copy of TrainingDto + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) + $TrainingDtoCopyWith get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $TrainingDtoCopyWith<$Res> { + factory $TrainingDtoCopyWith( + TrainingDto value, + $Res Function(TrainingDto) then, + ) = _$TrainingDtoCopyWithImpl<$Res, TrainingDto>; + @useResult + $Res call({Collection? collection, Ticket ticket}); +} + +/// @nodoc +class _$TrainingDtoCopyWithImpl<$Res, $Val extends TrainingDto> + implements $TrainingDtoCopyWith<$Res> { + _$TrainingDtoCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; + + /// Create a copy of TrainingDto + /// with the given fields replaced by the non-null parameter values. + @pragma('vm:prefer-inline') + @override + $Res call({Object? collection = freezed, Object? ticket = freezed}) { + return _then( + _value.copyWith( + collection: + freezed == collection + ? _value.collection + : collection // ignore: cast_nullable_to_non_nullable + as Collection?, + ticket: + freezed == ticket + ? _value.ticket + : ticket // ignore: cast_nullable_to_non_nullable + as Ticket, + ) + as $Val, + ); + } +} + +/// @nodoc +abstract class _$$TrainingDtoImplCopyWith<$Res> + implements $TrainingDtoCopyWith<$Res> { + factory _$$TrainingDtoImplCopyWith( + _$TrainingDtoImpl value, + $Res Function(_$TrainingDtoImpl) then, + ) = __$$TrainingDtoImplCopyWithImpl<$Res>; + @override + @useResult + $Res call({Collection? collection, Ticket ticket}); +} + +/// @nodoc +class __$$TrainingDtoImplCopyWithImpl<$Res> + extends _$TrainingDtoCopyWithImpl<$Res, _$TrainingDtoImpl> + implements _$$TrainingDtoImplCopyWith<$Res> { + __$$TrainingDtoImplCopyWithImpl( + _$TrainingDtoImpl _value, + $Res Function(_$TrainingDtoImpl) _then, + ) : super(_value, _then); + + /// Create a copy of TrainingDto + /// with the given fields replaced by the non-null parameter values. + @pragma('vm:prefer-inline') + @override + $Res call({Object? collection = freezed, Object? ticket = freezed}) { + return _then( + _$TrainingDtoImpl( + collection: + freezed == collection + ? _value.collection + : collection // ignore: cast_nullable_to_non_nullable + as Collection?, + ticket: + freezed == ticket + ? _value.ticket + : ticket // ignore: cast_nullable_to_non_nullable + as Ticket, + ), + ); + } +} + +/// @nodoc + +class _$TrainingDtoImpl implements _TrainingDto { + const _$TrainingDtoImpl({this.collection, required this.ticket}); + + @override + final Collection? collection; + @override + final Ticket ticket; + + @override + String toString() { + return 'TrainingDto(collection: $collection, ticket: $ticket)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$TrainingDtoImpl && + const DeepCollectionEquality().equals( + other.collection, + collection, + ) && + const DeepCollectionEquality().equals(other.ticket, ticket)); + } + + @override + int get hashCode => Object.hash( + runtimeType, + const DeepCollectionEquality().hash(collection), + const DeepCollectionEquality().hash(ticket), + ); + + /// Create a copy of TrainingDto + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) + @override + @pragma('vm:prefer-inline') + _$$TrainingDtoImplCopyWith<_$TrainingDtoImpl> get copyWith => + __$$TrainingDtoImplCopyWithImpl<_$TrainingDtoImpl>(this, _$identity); +} + +abstract class _TrainingDto implements TrainingDto { + const factory _TrainingDto({ + final Collection? collection, + required final Ticket ticket, + }) = _$TrainingDtoImpl; + + @override + Collection? get collection; + @override + Ticket get ticket; + + /// Create a copy of TrainingDto + /// with the given fields replaced by the non-null parameter values. + @override + @JsonKey(includeFromJson: false, includeToJson: false) + _$$TrainingDtoImplCopyWith<_$TrainingDtoImpl> get copyWith => + throw _privateConstructorUsedError; +} diff --git a/lib/screens/training/cubit/training_cubit.dart b/lib/screens/training/cubit/training_cubit.dart index f2e6e5b..e10e3f6 100644 --- a/lib/screens/training/cubit/training_cubit.dart +++ b/lib/screens/training/cubit/training_cubit.dart @@ -1,11 +1,17 @@ import 'package:bloc/bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; +import 'package:remever/database/database.dart'; +import 'package:remever/inject.dart'; +import 'package:remever/models/training_dto.dart'; +import 'package:remever/services/training/training_interface.dart'; part 'training_state.dart'; part 'training_cubit.freezed.dart'; class TrainingCubit extends Cubit { - TrainingCubit() : super(TrainingState.data()); + TrainingCubit() : super(TrainingState.loading()) { + init(); + } Future toLoading() async { emit(TrainingState.loading()); @@ -16,10 +22,34 @@ class TrainingCubit extends Cubit { } Future toDataState() async { - emit(TrainingState.data()); + emit(TrainingState.data([])); } Future toResultState() async { emit(TrainingState.result()); } + + Future init() async { + final List data = await getIt().getTraining(); + + if (data.isEmpty) { + emit(TrainingState.empty()); + + return; + } + + List dto = []; + + for (final ticket in data) { + dto.add( + TrainingDto( + ticket: ticket, + collection: await getIt().collectionsDao + .getCollectionById(ticket.collectionId), + ), + ); + } + + emit(TrainingState.data(dto)); + } } diff --git a/lib/screens/training/cubit/training_cubit.freezed.dart b/lib/screens/training/cubit/training_cubit.freezed.dart index c2cf45e..d593332 100644 --- a/lib/screens/training/cubit/training_cubit.freezed.dart +++ b/lib/screens/training/cubit/training_cubit.freezed.dart @@ -21,21 +21,21 @@ mixin _$TrainingState { TResult when({ required TResult Function() loading, required TResult Function() empty, - required TResult Function() data, + required TResult Function(List data) data, required TResult Function() result, }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult? whenOrNull({ TResult? Function()? loading, TResult? Function()? empty, - TResult? Function()? data, + TResult? Function(List data)? data, TResult? Function()? result, }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult maybeWhen({ TResult Function()? loading, TResult Function()? empty, - TResult Function()? data, + TResult Function(List data)? data, TResult Function()? result, required TResult orElse(), }) => throw _privateConstructorUsedError; @@ -130,7 +130,7 @@ class _$LoadingImpl implements _Loading { TResult when({ required TResult Function() loading, required TResult Function() empty, - required TResult Function() data, + required TResult Function(List data) data, required TResult Function() result, }) { return loading(); @@ -141,7 +141,7 @@ class _$LoadingImpl implements _Loading { TResult? whenOrNull({ TResult? Function()? loading, TResult? Function()? empty, - TResult? Function()? data, + TResult? Function(List data)? data, TResult? Function()? result, }) { return loading?.call(); @@ -152,7 +152,7 @@ class _$LoadingImpl implements _Loading { TResult maybeWhen({ TResult Function()? loading, TResult Function()? empty, - TResult Function()? data, + TResult Function(List data)? data, TResult Function()? result, required TResult orElse(), }) { @@ -249,7 +249,7 @@ class _$EmptyImpl implements _Empty { TResult when({ required TResult Function() loading, required TResult Function() empty, - required TResult Function() data, + required TResult Function(List data) data, required TResult Function() result, }) { return empty(); @@ -260,7 +260,7 @@ class _$EmptyImpl implements _Empty { TResult? whenOrNull({ TResult? Function()? loading, TResult? Function()? empty, - TResult? Function()? data, + TResult? Function(List data)? data, TResult? Function()? result, }) { return empty?.call(); @@ -271,7 +271,7 @@ class _$EmptyImpl implements _Empty { TResult maybeWhen({ TResult Function()? loading, TResult Function()? empty, - TResult Function()? data, + TResult Function(List data)? data, TResult Function()? result, required TResult orElse(), }) { @@ -329,6 +329,8 @@ abstract class _$$DataImplCopyWith<$Res> { _$DataImpl value, $Res Function(_$DataImpl) then, ) = __$$DataImplCopyWithImpl<$Res>; + @useResult + $Res call({List data}); } /// @nodoc @@ -340,36 +342,67 @@ class __$$DataImplCopyWithImpl<$Res> /// Create a copy of TrainingState /// with the given fields replaced by the non-null parameter values. + @pragma('vm:prefer-inline') + @override + $Res call({Object? data = null}) { + return _then( + _$DataImpl( + null == data + ? _value._data + : data // ignore: cast_nullable_to_non_nullable + as List, + ), + ); + } } /// @nodoc class _$DataImpl implements _Data { - const _$DataImpl(); + const _$DataImpl(final List data) : _data = data; + + final List _data; + @override + List get data { + if (_data is EqualUnmodifiableListView) return _data; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(_data); + } @override String toString() { - return 'TrainingState.data()'; + return 'TrainingState.data(data: $data)'; } @override bool operator ==(Object other) { return identical(this, other) || - (other.runtimeType == runtimeType && other is _$DataImpl); + (other.runtimeType == runtimeType && + other is _$DataImpl && + const DeepCollectionEquality().equals(other._data, _data)); } @override - int get hashCode => runtimeType.hashCode; + int get hashCode => + Object.hash(runtimeType, const DeepCollectionEquality().hash(_data)); + + /// Create a copy of TrainingState + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) + @override + @pragma('vm:prefer-inline') + _$$DataImplCopyWith<_$DataImpl> get copyWith => + __$$DataImplCopyWithImpl<_$DataImpl>(this, _$identity); @override @optionalTypeArgs TResult when({ required TResult Function() loading, required TResult Function() empty, - required TResult Function() data, + required TResult Function(List data) data, required TResult Function() result, }) { - return data(); + return data(this.data); } @override @@ -377,10 +410,10 @@ class _$DataImpl implements _Data { TResult? whenOrNull({ TResult? Function()? loading, TResult? Function()? empty, - TResult? Function()? data, + TResult? Function(List data)? data, TResult? Function()? result, }) { - return data?.call(); + return data?.call(this.data); } @override @@ -388,12 +421,12 @@ class _$DataImpl implements _Data { TResult maybeWhen({ TResult Function()? loading, TResult Function()? empty, - TResult Function()? data, + TResult Function(List data)? data, TResult Function()? result, required TResult orElse(), }) { if (data != null) { - return data(); + return data(this.data); } return orElse(); } @@ -437,7 +470,15 @@ class _$DataImpl implements _Data { } abstract class _Data implements TrainingState { - const factory _Data() = _$DataImpl; + const factory _Data(final List data) = _$DataImpl; + + List get data; + + /// Create a copy of TrainingState + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) + _$$DataImplCopyWith<_$DataImpl> get copyWith => + throw _privateConstructorUsedError; } /// @nodoc @@ -485,7 +526,7 @@ class _$ResultImpl implements _Result { TResult when({ required TResult Function() loading, required TResult Function() empty, - required TResult Function() data, + required TResult Function(List data) data, required TResult Function() result, }) { return result(); @@ -496,7 +537,7 @@ class _$ResultImpl implements _Result { TResult? whenOrNull({ TResult? Function()? loading, TResult? Function()? empty, - TResult? Function()? data, + TResult? Function(List data)? data, TResult? Function()? result, }) { return result?.call(); @@ -507,7 +548,7 @@ class _$ResultImpl implements _Result { TResult maybeWhen({ TResult Function()? loading, TResult Function()? empty, - TResult Function()? data, + TResult Function(List data)? data, TResult Function()? result, required TResult orElse(), }) { diff --git a/lib/screens/training/cubit/training_state.dart b/lib/screens/training/cubit/training_state.dart index 4021db4..5825430 100644 --- a/lib/screens/training/cubit/training_state.dart +++ b/lib/screens/training/cubit/training_state.dart @@ -4,6 +4,6 @@ part of 'training_cubit.dart'; class TrainingState with _$TrainingState { const factory TrainingState.loading() = _Loading; const factory TrainingState.empty() = _Empty; - const factory TrainingState.data() = _Data; + const factory TrainingState.data(List data) = _Data; const factory TrainingState.result() = _Result; } diff --git a/lib/screens/training/training_screen.dart b/lib/screens/training/training_screen.dart index 21d44f4..c413ad4 100644 --- a/lib/screens/training/training_screen.dart +++ b/lib/screens/training/training_screen.dart @@ -1,16 +1,13 @@ import 'package:auto_route/auto_route.dart'; -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:remever/common/resources.dart'; -import 'package:remever/common/typography.dart'; import 'package:remever/common/widgets/typography.dart'; import 'package:remever/common/widgets/w_if.dart'; import 'package:remever/common/widgets/wspace.dart'; import 'package:remever/components/extensions/context.dart'; import 'package:remever/components/extensions/state.dart'; -import 'package:remever/gen/assets.gen.dart'; -import 'package:remever/router.gr.dart'; +import 'package:remever/models/training_dto.dart'; import 'package:remever/screens/training/cubit/training_cubit.dart'; import 'package:remever/screens/training/states/empty.dart'; import 'package:remever/screens/training/states/loading.dart'; @@ -40,7 +37,7 @@ class TrainingScreen extends StatelessWidget { return state.when( loading: () => TrainingLoading(), empty: () => TrainingEmpty(), - data: () => TrainingData(), + data: (data) => TrainingData(data: data), result: () => Placeholder(), ); }, @@ -50,8 +47,9 @@ class TrainingScreen extends StatelessWidget { } class TrainingData extends StatefulWidget { - const TrainingData({super.key}); + const TrainingData({super.key, required this.data}); + final List data; @override State createState() => _TrainingDataState(); } @@ -59,6 +57,8 @@ class TrainingData extends StatefulWidget { class _TrainingDataState extends State { bool _showAnswer = false; + int _currentTicketIndex = 0; + @override Widget build(BuildContext context) { return Scaffold( @@ -97,7 +97,12 @@ class _TrainingDataState extends State { ), child: Padding( padding: const EdgeInsets.all(3).r, - child: Center(child: AppTypography('1 из 9', type: Regular14px())), + child: Center( + child: AppTypography( + '${_currentTicketIndex + 1} из ${widget.data.length}', + type: Regular14px(), + ), + ), ), ), ); @@ -117,7 +122,13 @@ class _TrainingDataState extends State { children: [ Flexible( child: PrimaryButton( - onTap: () {}, + onTap: () { + if (widget.data.length == _currentTicketIndex + 1) { + context.read().toResultState(); + return; + } + safeSetState(() => _currentTicketIndex++); + }, color: AppColors.danger, child: AppTypography( 'Не помню', @@ -133,7 +144,13 @@ class _TrainingDataState extends State { type: Medium14px(), color: Colors.white, ), - onTap: () {}, + onTap: () { + if (widget.data.length == _currentTicketIndex + 1) { + context.read().toResultState(); + return; + } + safeSetState(() => _currentTicketIndex++); + }, ), ), ], @@ -171,10 +188,14 @@ class _TrainingDataState extends State { child: Column( spacing: 8.r, children: [ - TrainingTicket(), + TrainingTicket(trainingDto: widget.data[_currentTicketIndex]), Wif( condition: _showAnswer, - builder: (context) => TrainingTicket(isAnswer: true), + builder: + (context) => TrainingTicket( + trainingDto: widget.data[_currentTicketIndex], + isAnswer: true, + ), ), ], ), diff --git a/lib/screens/training/widgets/training_ticket.dart b/lib/screens/training/widgets/training_ticket.dart index f126042..61831c5 100644 --- a/lib/screens/training/widgets/training_ticket.dart +++ b/lib/screens/training/widgets/training_ticket.dart @@ -1,13 +1,22 @@ +import 'dart:io'; + import 'package:flutter/material.dart'; import 'package:remever/common/resources.dart'; import 'package:remever/common/widgets/typography.dart'; import 'package:remever/common/widgets/w_if.dart'; import 'package:remever/common/widgets/wspace.dart'; import 'package:remever/components/extensions/context.dart'; +import 'package:remever/database/database.dart'; +import 'package:remever/models/training_dto.dart'; class TrainingTicket extends StatelessWidget { - const TrainingTicket({super.key, this.isAnswer = false}); + const TrainingTicket({ + super.key, + this.isAnswer = false, + required this.trainingDto, + }); + final TrainingDto trainingDto; final bool isAnswer; @override @@ -43,8 +52,10 @@ class TrainingTicket extends StatelessWidget { } Widget _buildCollectionInfo() { + final collection = trainingDto.collection; + return Wif( - condition: !isAnswer, + condition: !isAnswer && collection != null, builder: (context) { return Padding( padding: const EdgeInsets.only(bottom: 8).r, @@ -53,16 +64,28 @@ class TrainingTicket extends StatelessWidget { SizedBox( height: 24.h, width: 24.w, - child: ClipOval( - child: Image.network( - 'https://avatars.mds.yandex.net/i?id=56429b65e9098a58fcd538387d43bcbb_l-5384017-images-thumbs&n=13', - fit: BoxFit.cover, - ), + child: Wif( + condition: collection!.image != null, + builder: + (context) => ClipOval( + child: Image.file( + File(collection.image!), + fit: BoxFit.cover, + ), + ), + fallback: + (context) => Center( + child: AppTypography( + collection.title.substring(0, 1), + type: Bold34px(), + ), + ), ), ), + WSpace(4), AppTypography( - 'Астрология и астрофизика', + collection.title, type: Regular14px(), color: AppColors.disabled, ), @@ -70,6 +93,7 @@ class TrainingTicket extends StatelessWidget { ), ); }, + fallback: (context) => Row(children: []), ); } @@ -90,20 +114,21 @@ class TrainingTicket extends StatelessWidget { } Widget _buildText(BuildContext context) { + final ticket = trainingDto.ticket; return AppTypography( - 'Родился 19 февраля 1473 года в Торуне в семье купца. После смерти отца воспитывался у дяди, епископа Вармийской епархии. Коперник изложил свои идеи в сочинении «Commentariolus» («Малый комментарий»), в котором сформулировал основные положения гелиоцентрической системы мира в виде 6 аксиом. Их смысл состоит в том, что Земля, как и другие планеты,' - 'Родился 19 февраля 1473 года в Торуне в семье купца. После смерти отца воспитывался у дяди, епископа Вармийской епархии. Коперник изложил свои идеи в сочинении «Commentariolus» («Малый комментарий»), в котором сформулировал основные положения гелиоцентрической системы мира в виде 6 аксиом. Их смысл состоит в том, что Земля, как и другие планеты,', + isAnswer ? ticket.answer : ticket.question, maxLines: 99, type: Regular14px(), ); } Widget _buildImage() { - // final imageBytes = - // isAnswer ? ticket.answerImage : ticket.questionImage; + final ticket = trainingDto.ticket; + final String? imagePath = + isAnswer ? ticket.answerImage : ticket.questionImage; return Wif( - condition: true, // imageBytes != null, + condition: imagePath != null, builder: (context) => Padding( padding: const EdgeInsets.only(right: 8).r, @@ -111,11 +136,7 @@ class TrainingTicket extends StatelessWidget { dimension: 100.r, child: ClipRRect( borderRadius: BorderRadius.circular(8).r, - // child: Image.memory(imageBytes!, fit: BoxFit.cover), - child: Image.network( - 'https://avatars.mds.yandex.net/i?id=56429b65e9098a58fcd538387d43bcbb_l-5384017-images-thumbs&n=13', - fit: BoxFit.cover, - ), + child: Image.file(File(imagePath!), fit: BoxFit.cover), ), ), ), diff --git a/lib/services/training/training_interface.dart b/lib/services/training/training_interface.dart new file mode 100644 index 0000000..bbdd21f --- /dev/null +++ b/lib/services/training/training_interface.dart @@ -0,0 +1,10 @@ +import 'package:remever/database/database.dart'; +import 'package:remever/models/crud_collection_dto.dart'; + +/// +/// Интерфейс взаимодействия с тренировкой +/// +abstract interface class TrainingInterface { + /// Получение списка тикетов для тренировки + Future> getTraining(); +} diff --git a/lib/services/training/training_service.dart b/lib/services/training/training_service.dart new file mode 100644 index 0000000..d10f025 --- /dev/null +++ b/lib/services/training/training_service.dart @@ -0,0 +1,49 @@ +import 'dart:math'; + +import 'package:injectable/injectable.dart'; +import 'package:remever/database/database.dart'; +import 'package:remever/inject.dart'; +import 'package:remever/services/training/training_interface.dart'; + +@Singleton(as: TrainingInterface) +final class TrainingService implements TrainingInterface { + // @override + // Future removeTicket(String ticketId) async { + // return await getIt().ticketsDao.removeTicket(ticketId); + // } + + @override + Future> getTraining() async { + try { + final db = getIt(); + + final rows = + await db + .customSelect('SELECT * FROM tickets ORDER BY RANDOM() LIMIT 10') + .get(); + + return rows.map((row) { + final data = row.data; + print("ALARMA $data"); + + // Преобразуем snake_case ключи в camelCase для Moor сериализатора + final camelCaseData = { + 'id': data['id'], + 'createdAt': data['created_at'], + 'updatedAt': data['updated_at'], + 'question': data['question'], + 'questionImage': data['question_image'], + 'answer': data['answer'], + 'answerImage': data['answer_image'], + 'collectionId': data['collection_id'], + 'progress': data['progress'], + }; + + return Ticket.fromJson(camelCaseData); + }).toList(); + } catch (e) { + print('Error in training $e'); + return []; + } + } +}