diff --git a/.dart_tool/package_config.json b/.dart_tool/package_config.json index 5ec4839..d11a282 100644 --- a/.dart_tool/package_config.json +++ b/.dart_tool/package_config.json @@ -1130,7 +1130,7 @@ "languageVersion": "3.7" } ], - "generated": "2025-06-16T19:03:33.328096Z", + "generated": "2025-06-17T17:48:52.089260Z", "generator": "pub", "generatorVersion": "3.7.0", "flutterRoot": "file:///Users/vitalijnecitajlo/fvm/versions/3.29.0", diff --git a/.flutter-plugins-dependencies b/.flutter-plugins-dependencies index 7ea77c9..54bf22b 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":"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":"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":"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":"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-06-16 22:03:31.911393","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":"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":"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":"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":"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-06-17 20:49:46.224491","version":"3.29.0","swift_package_manager_enabled":{"ios":false,"macos":false}} \ No newline at end of file diff --git a/assets/.DS_Store b/assets/.DS_Store index d07000f..0d775bb 100644 Binary files a/assets/.DS_Store and b/assets/.DS_Store differ diff --git a/assets/icons/stats_best.png b/assets/icons/stats_best.png new file mode 100644 index 0000000..98b5493 Binary files /dev/null and b/assets/icons/stats_best.png differ diff --git a/assets/icons/stats_card.png b/assets/icons/stats_card.png new file mode 100644 index 0000000..8c008bf Binary files /dev/null and b/assets/icons/stats_card.png differ diff --git a/assets/icons/stats_down.png b/assets/icons/stats_down.png new file mode 100644 index 0000000..2ecc412 Binary files /dev/null and b/assets/icons/stats_down.png differ diff --git a/assets/icons/stats_repeat.png b/assets/icons/stats_repeat.png new file mode 100644 index 0000000..cc4ba9f Binary files /dev/null and b/assets/icons/stats_repeat.png differ diff --git a/assets/icons/stats_time.png b/assets/icons/stats_time.png new file mode 100644 index 0000000..8a07f06 Binary files /dev/null and b/assets/icons/stats_time.png differ diff --git a/assets/icons/stats_up.png b/assets/icons/stats_up.png new file mode 100644 index 0000000..d29bc33 Binary files /dev/null and b/assets/icons/stats_up.png differ diff --git a/lib/common/typography.dart b/lib/common/typography.dart index b5529c8..bd92665 100644 --- a/lib/common/typography.dart +++ b/lib/common/typography.dart @@ -103,6 +103,11 @@ class Bold14px extends TypographyTypeBold { double get size => 14; } +class Bold24px extends TypographyTypeBold { + @override + double get size => 24; +} + class Bold34px extends TypographyTypeBold { @override double get size => 34; diff --git a/lib/gen/assets.gen.dart b/lib/gen/assets.gen.dart index 872fcdc..68c3ffb 100644 --- a/lib/gen/assets.gen.dart +++ b/lib/gen/assets.gen.dart @@ -61,6 +61,29 @@ class $AssetsIconsGen { AssetGenImage get settingsTrash => const AssetGenImage('assets/icons/settings_trash.png'); + /// File path: assets/icons/stats_best.png + AssetGenImage get statsBest => + const AssetGenImage('assets/icons/stats_best.png'); + + /// File path: assets/icons/stats_card.png + AssetGenImage get statsCard => + const AssetGenImage('assets/icons/stats_card.png'); + + /// File path: assets/icons/stats_down.png + AssetGenImage get statsDown => + const AssetGenImage('assets/icons/stats_down.png'); + + /// File path: assets/icons/stats_repeat.png + AssetGenImage get statsRepeat => + const AssetGenImage('assets/icons/stats_repeat.png'); + + /// File path: assets/icons/stats_time.png + AssetGenImage get statsTime => + const AssetGenImage('assets/icons/stats_time.png'); + + /// File path: assets/icons/stats_up.png + AssetGenImage get statsUp => const AssetGenImage('assets/icons/stats_up.png'); + /// File path: assets/icons/type=arrow_down.png AssetGenImage get typeArrowDown => const AssetGenImage('assets/icons/type=arrow_down.png'); @@ -271,6 +294,12 @@ class $AssetsIconsGen { settingsProfile, settingsShare, settingsTrash, + statsBest, + statsCard, + statsDown, + statsRepeat, + statsTime, + statsUp, typeArrowDown, typeBack, typeBold, diff --git a/lib/i18n/strings.g.dart b/lib/i18n/strings.g.dart index d08ccee..bd6bd7c 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-06-16 at 19:03 UTC +/// Built on 2025-06-17 at 17:49 UTC // coverage:ignore-file // ignore_for_file: type=lint, unused_import diff --git a/lib/router.gr.dart b/lib/router.gr.dart index 9b13338..189f9f3 100644 --- a/lib/router.gr.dart +++ b/lib/router.gr.dart @@ -11,6 +11,7 @@ // ignore_for_file: no_leading_underscores_for_library_prefixes import 'package:auto_route/auto_route.dart' as _i13; import 'package:flutter/cupertino.dart' as _i14; +import 'package:flutter/material.dart' as _i16; import 'package:remever/database/database.dart' as _i15; import 'package:remever/screens/auth/auth_screen.dart' as _i1; import 'package:remever/screens/collections/collection_detail_screen.dart' @@ -366,16 +367,34 @@ class SplashRoute extends _i13.PageRouteInfo { /// generated route for /// [_i12.StatistickScreen] -class StatistickRoute extends _i13.PageRouteInfo { - const StatistickRoute({List<_i13.PageRouteInfo>? children}) - : super(StatistickRoute.name, initialChildren: children); +class StatistickRoute extends _i13.PageRouteInfo { + StatistickRoute({_i16.Key? key, List<_i13.PageRouteInfo>? children}) + : super( + StatistickRoute.name, + args: StatistickRouteArgs(key: key), + initialChildren: children, + ); static const String name = 'StatistickRoute'; static _i13.PageInfo page = _i13.PageInfo( name, builder: (data) { - return const _i12.StatistickScreen(); + final args = data.argsAs( + orElse: () => const StatistickRouteArgs(), + ); + return _i12.StatistickScreen(key: args.key); }, ); } + +class StatistickRouteArgs { + const StatistickRouteArgs({this.key}); + + final _i16.Key? key; + + @override + String toString() { + return 'StatistickRouteArgs{key: $key}'; + } +} diff --git a/lib/screens/settings/states/about.dart b/lib/screens/settings/states/about.dart index 14789d8..3e574eb 100644 --- a/lib/screens/settings/states/about.dart +++ b/lib/screens/settings/states/about.dart @@ -9,6 +9,7 @@ import 'package:remever/components/extensions/context.dart'; import 'package:remever/gen/assets.gen.dart'; import 'package:remever/screens/settings/cubit/settings_cubit.dart'; import 'package:remever/widgets/primary_button.dart'; +import 'package:share_plus/share_plus.dart'; class AboutSettingsState extends StatelessWidget { const AboutSettingsState({super.key}); @@ -32,8 +33,8 @@ class AboutSettingsState extends StatelessWidget { ), actions: [ IconButton( - onPressed: () { - showInfoToast('тут будет sharing'); + onPressed: () async { + await Share.share('Присоединяйся к нам в REMEVER'); }, icon: Assets.icons.settingsShare.image(height: 24.h, width: 24.w), color: Colors.black, diff --git a/lib/screens/statistick/statistick_screen.dart b/lib/screens/statistick/statistick_screen.dart index e13b56f..b0eb6a7 100644 --- a/lib/screens/statistick/statistick_screen.dart +++ b/lib/screens/statistick/statistick_screen.dart @@ -1,12 +1,255 @@ import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; +import 'package:remever/common/resources.dart'; +import 'package:remever/common/widgets/typography.dart'; +import 'package:remever/common/widgets/wspace.dart'; +import 'package:remever/components/extensions/context.dart'; +import 'package:remever/gen/assets.gen.dart'; +import 'package:share_plus/share_plus.dart'; +import 'package:intl/intl.dart'; @RoutePage() class StatistickScreen extends StatelessWidget { - const StatistickScreen({super.key}); + StatistickScreen({super.key}); + + final DateTime today = DateTime.now(); @override Widget build(BuildContext context) { - return const Placeholder(color: Colors.orange); + return Scaffold( + backgroundColor: AppColors.bg, + appBar: _buildAppBar(context), + body: Padding( + padding: const EdgeInsets.symmetric(horizontal: 16).r, + child: SingleChildScrollView( + physics: BouncingScrollPhysics(), + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 16).r, + child: Container( + decoration: BoxDecoration( + color: AppColors.white, + borderRadius: BorderRadius.all(Radius.circular(12)).r, + ), + child: Padding( + padding: + const EdgeInsets.symmetric(horizontal: 12, vertical: 16).r, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Center( + child: AppTypography( + "Лучший результат за день", + type: Medium16px(), + ), + ), + Center( + child: AppTypography( + DateFormat('dd.MM.yyyy').format(today), + type: Regular14px(), + color: AppColors.disabled, + ), + ), + HSpace(16), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + spacing: 8.r, + children: [ + _buildStatBlock( + "230", + "повторили\nкарточек", + Color(0xFFD7E6F4), + Color(0xFF0058AB), + ), + _buildStatBlock( + "19", + "прошли\nтренировок", + Color(0xFFFFE4E6), + Color(0xFFFF5C69), + ), + _buildStatBlock( + "196", + "вырос\nуровень", + Color(0xFFD7F4EA), + Color(0xFF008456), + ), + ], + ), + HSpace(32), + _buildSectionHeader( + "Повторили карточек", + Assets.icons.statsRepeat, + ), + HSpace(16), + _buildStatisticsList([ + {"label": "За сегодня", "value": "77"}, + {"label": "За эту неделю", "value": "188"}, + {"label": "За прошлую неделю", "value": "33"}, + {"label": "За последний месяц", "value": "1669"}, + {"label": "За все время", "value": "1345669"}, + ]), + HSpace(32), + _buildSectionHeader( + "Всего изучено карточек", + Assets.icons.statsBest, + ), + HSpace(16), + _buildStatisticsList([ + {"label": "За сегодня", "value": "77"}, + {"label": "За эту неделю", "value": "188"}, + {"label": "За прошлую неделю", "value": "33"}, + {"label": "За последний месяц", "value": "1669"}, + {"label": "За все время", "value": "1345669"}, + ]), + HSpace(32), + _buildSectionHeader( + "Прошли тренировок", + Assets.icons.statsTime, + ), + HSpace(16), + _buildStatisticsList([ + {"label": "За сегодня", "value": "77"}, + {"label": "За эту неделю", "value": "188"}, + {"label": "За прошлую неделю", "value": "33"}, + {"label": "За последний месяц", "value": "1669"}, + {"label": "За все время", "value": "1345669"}, + ]), + HSpace(32), + _buildSectionHeader( + "Вырос уровень у карточек", + Assets.icons.statsUp, + ), + HSpace(16), + _buildStatisticsList([ + {"label": "За сегодня", "value": "77"}, + {"label": "За эту неделю", "value": "188"}, + {"label": "За прошлую неделю", "value": "33"}, + {"label": "За последний месяц", "value": "1669"}, + {"label": "За все время", "value": "1345669"}, + ]), + HSpace(32), + _buildSectionHeader( + "Снизился уровень у карточек", + Assets.icons.statsDown, + ), + HSpace(16), + _buildStatisticsList([ + {"label": "За сегодня", "value": "77"}, + {"label": "За эту неделю", "value": "188"}, + {"label": "За прошлую неделю", "value": "33"}, + {"label": "За последний месяц", "value": "1669"}, + {"label": "За все время", "value": "1345669"}, + ]), + ], + ), + ), + ), + ), + ), + ), + ); + } + + /// AppBar экрана настроек + AppBar _buildAppBar(BuildContext context) { + return AppBar( + toolbarHeight: 66.h, + backgroundColor: AppColors.white, + shadowColor: Colors.transparent, + centerTitle: true, + leadingWidth: 0, + title: AppTypography('Статистика', type: SemiBold20px()), + actions: [ + IconButton( + onPressed: () => Share.share('Зацени мою статистику в REMEVER'), + icon: Assets.icons.settingsShare.image(height: 24.h, width: 24.w), + color: Colors.black, + ), + ], + ); + } + + // Вспомогательные методы + + Widget _buildStatBlock( + String value, + String label, + Color color, + Color textColor, + ) { + return Expanded( + child: Container( + decoration: BoxDecoration( + color: color, + borderRadius: BorderRadius.circular(12).r, + ), + padding: EdgeInsets.all(12).r, + child: Column( + children: [ + AppTypography(value, type: Bold24px(), color: textColor), + AppTypography( + label, + type: Regular12px(), + color: textColor, + maxLines: 2, + textAlign: TextAlign.center, + ), + ], + ), + ), + ); + } + + Widget _buildSectionHeader(String title, AssetGenImage icon) { + return Row( + children: [ + icon.image(height: 20.h, width: 20.w), + WSpace(4), + AppTypography(title, type: Medium16px()), + ], + ); + } + + Widget _buildStatisticsList(List> data) { + return Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(12)).r, + color: AppColors.bg, + ), + child: Padding( + padding: const EdgeInsets.all(12).r, + child: Column( + spacing: 8.r, + children: + data + .map( + (e) => Row( + children: [ + Expanded( + child: AppTypography( + e['label']!, + type: Regular16px(), + ), + ), + Assets.icons.statsCard.image(height: 18.h, width: 18.w), + AppTypography(e["value"]!, type: Regular16px()), + ], + ), + ) + .toList(), + ), + ), + ); + return ListView.builder( + shrinkWrap: true, + physics: NeverScrollableScrollPhysics(), + itemCount: data.length, + itemBuilder: (context, index) { + final item = data[index]; + return ListTile( + title: Text(item["label"]!), + trailing: Text(item["value"]!), + ); + }, + ); } }