Правки + иконка
@@ -12,20 +12,20 @@ file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/ansicolor-2.0.3/
|
|||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/ansicolor-2.0.3/lib/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/ansicolor-2.0.3/lib/
|
||||||
archive
|
archive
|
||||||
3.0
|
3.0
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/archive-4.0.4/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/archive-4.0.5/
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/archive-4.0.4/lib/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/archive-4.0.5/lib/
|
||||||
args
|
args
|
||||||
3.3
|
3.3
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/args-2.6.0/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/args-2.7.0/
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/args-2.6.0/lib/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/args-2.7.0/lib/
|
||||||
async
|
async
|
||||||
3.4
|
3.4
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/async-2.12.0/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/async-2.12.0/
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/async-2.12.0/lib/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/async-2.12.0/lib/
|
||||||
auto_route
|
auto_route
|
||||||
3.0
|
3.0
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/auto_route-10.0.0/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/auto_route-10.0.1/
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/auto_route-10.0.0/lib/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/auto_route-10.0.1/lib/
|
||||||
auto_route_generator
|
auto_route_generator
|
||||||
3.4
|
3.4
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/auto_route_generator-10.0.1/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/auto_route_generator-10.0.1/
|
||||||
@@ -72,8 +72,8 @@ file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/built_collection-5.1.1/
|
|||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/built_collection-5.1.1/lib/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/built_collection-5.1.1/lib/
|
||||||
built_value
|
built_value
|
||||||
3.0
|
3.0
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/built_value-8.9.4/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/built_value-8.9.5/
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/built_value-8.9.4/lib/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/built_value-8.9.5/lib/
|
||||||
characters
|
characters
|
||||||
3.4
|
3.4
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/characters-1.4.0/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/characters-1.4.0/
|
||||||
@@ -156,16 +156,16 @@ file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/dio_web_adapter-2.1.1/
|
|||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/dio_web_adapter-2.1.1/lib/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/dio_web_adapter-2.1.1/lib/
|
||||||
drift
|
drift
|
||||||
3.4
|
3.4
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/drift-2.25.1/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/drift-2.26.0/
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/drift-2.25.1/lib/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/drift-2.26.0/lib/
|
||||||
drift_db_viewer
|
drift_db_viewer
|
||||||
2.13
|
2.13
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/drift_db_viewer-2.1.0/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/drift_db_viewer-2.1.0/
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/drift_db_viewer-2.1.0/lib/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/drift_db_viewer-2.1.0/lib/
|
||||||
drift_dev
|
drift_dev
|
||||||
3.4
|
3.4
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/drift_dev-2.25.2/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/drift_dev-2.26.0/
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/drift_dev-2.25.2/lib/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/drift_dev-2.26.0/lib/
|
||||||
event_bus
|
event_bus
|
||||||
2.12
|
2.12
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/event_bus-2.0.1/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/event_bus-2.0.1/
|
||||||
@@ -184,8 +184,8 @@ file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/file-7.0.1/
|
|||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/file-7.0.1/lib/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/file-7.0.1/lib/
|
||||||
file_picker
|
file_picker
|
||||||
3.4
|
3.4
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/file_picker-9.2.1/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/file_picker-10.0.0/
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/file_picker-9.2.1/lib/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/file_picker-10.0.0/lib/
|
||||||
fixnum
|
fixnum
|
||||||
3.1
|
3.1
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/fixnum-1.1.1/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/fixnum-1.1.1/
|
||||||
@@ -210,6 +210,10 @@ flutter_keyboard_size
|
|||||||
2.18
|
2.18
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_keyboard_size-1.0.1/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_keyboard_size-1.0.1/
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_keyboard_size-1.0.1/lib/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_keyboard_size-1.0.1/lib/
|
||||||
|
flutter_launcher_icons
|
||||||
|
3.0
|
||||||
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_launcher_icons-0.14.3/
|
||||||
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_launcher_icons-0.14.3/lib/
|
||||||
flutter_lints
|
flutter_lints
|
||||||
3.5
|
3.5
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_lints-5.0.0/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_lints-5.0.0/
|
||||||
@@ -326,6 +330,10 @@ http_parser
|
|||||||
3.4
|
3.4
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/http_parser-4.1.2/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/http_parser-4.1.2/
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/http_parser-4.1.2/lib/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/http_parser-4.1.2/lib/
|
||||||
|
image
|
||||||
|
3.0
|
||||||
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/image-4.5.4/
|
||||||
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/image-4.5.4/lib/
|
||||||
image_size_getter
|
image_size_getter
|
||||||
2.12
|
2.12
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/image_size_getter-2.4.0/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/image_size_getter-2.4.0/
|
||||||
@@ -416,8 +424,8 @@ file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/node_preamble-2.0.2/
|
|||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/node_preamble-2.0.2/lib/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/node_preamble-2.0.2/lib/
|
||||||
package_config
|
package_config
|
||||||
3.4
|
3.4
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/package_config-2.1.1/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/package_config-2.2.0/
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/package_config-2.1.1/lib/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/package_config-2.2.0/lib/
|
||||||
package_info_plus
|
package_info_plus
|
||||||
3.3
|
3.3
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/package_info_plus-8.3.0/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/package_info_plus-8.3.0/
|
||||||
@@ -439,9 +447,9 @@ path_provider
|
|||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider-2.1.5/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider-2.1.5/
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider-2.1.5/lib/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider-2.1.5/lib/
|
||||||
path_provider_android
|
path_provider_android
|
||||||
3.5
|
3.6
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_android-2.2.15/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_android-2.2.16/
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_android-2.2.15/lib/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_android-2.2.16/lib/
|
||||||
path_provider_foundation
|
path_provider_foundation
|
||||||
3.3
|
3.3
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.1/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.1/
|
||||||
@@ -484,12 +492,12 @@ file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/posix-6.0.1/
|
|||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/posix-6.0.1/lib/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/posix-6.0.1/lib/
|
||||||
provider
|
provider
|
||||||
2.12
|
2.12
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/provider-6.1.2/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/provider-6.1.4/
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/provider-6.1.2/lib/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/provider-6.1.4/lib/
|
||||||
pub_semver
|
pub_semver
|
||||||
3.4
|
3.4
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/pub_semver-2.1.5/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/pub_semver-2.2.0/
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/pub_semver-2.1.5/lib/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/pub_semver-2.2.0/lib/
|
||||||
pubspec_parse
|
pubspec_parse
|
||||||
3.6
|
3.6
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/pubspec_parse-1.5.0/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/pubspec_parse-1.5.0/
|
||||||
@@ -528,16 +536,16 @@ file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/shelf_web_socket-3.0.0/
|
|||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/shelf_web_socket-3.0.0/lib/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/shelf_web_socket-3.0.0/lib/
|
||||||
slang
|
slang
|
||||||
3.3
|
3.3
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/slang-4.5.0/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/slang-4.6.0/
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/slang-4.5.0/lib/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/slang-4.6.0/lib/
|
||||||
slang_build_runner
|
slang_build_runner
|
||||||
3.3
|
3.3
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/slang_build_runner-4.5.0/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/slang_build_runner-4.6.0/
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/slang_build_runner-4.5.0/lib/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/slang_build_runner-4.6.0/lib/
|
||||||
slang_flutter
|
slang_flutter
|
||||||
3.3
|
3.3
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/slang_flutter-4.5.0/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/slang_flutter-4.6.0/
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/slang_flutter-4.5.0/lib/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/slang_flutter-4.6.0/lib/
|
||||||
source_gen
|
source_gen
|
||||||
3.6
|
3.6
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/source_gen-2.0.0/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/source_gen-2.0.0/
|
||||||
@@ -564,12 +572,12 @@ file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sprintf-7.0.0/
|
|||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sprintf-7.0.0/lib/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sprintf-7.0.0/lib/
|
||||||
sqlite3
|
sqlite3
|
||||||
3.5
|
3.5
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sqlite3-2.7.4/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sqlite3-2.7.5/
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sqlite3-2.7.4/lib/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sqlite3-2.7.5/lib/
|
||||||
sqlite3_flutter_libs
|
sqlite3_flutter_libs
|
||||||
2.12
|
2.12
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sqlite3_flutter_libs-0.5.31/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sqlite3_flutter_libs-0.5.32/
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sqlite3_flutter_libs-0.5.31/lib/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sqlite3_flutter_libs-0.5.32/lib/
|
||||||
sqlparser
|
sqlparser
|
||||||
3.0
|
3.0
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sqlparser-0.41.0/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sqlparser-0.41.0/
|
||||||
@@ -700,8 +708,8 @@ file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/webkit_inspection_proto
|
|||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/webkit_inspection_protocol-1.2.1/lib/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/webkit_inspection_protocol-1.2.1/lib/
|
||||||
win32
|
win32
|
||||||
3.7
|
3.7
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/win32-5.11.0/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/win32-5.12.0/
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/win32-5.11.0/lib/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/win32-5.12.0/lib/
|
||||||
xdg_directories
|
xdg_directories
|
||||||
3.3
|
3.3
|
||||||
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/xdg_directories-1.1.0/
|
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/xdg_directories-1.1.0/
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# This is a generated file; do not edit or check into version control.
|
# This is a generated file; do not edit or check into version control.
|
||||||
file_picker=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/file_picker-9.2.1/
|
file_picker=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/file_picker-10.0.0/
|
||||||
flutter_displaymode=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_displaymode-0.6.0/
|
flutter_displaymode=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_displaymode-0.6.0/
|
||||||
flutter_plugin_android_lifecycle=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.27/
|
flutter_plugin_android_lifecycle=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.27/
|
||||||
flutter_secure_storage=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage-9.2.4/
|
flutter_secure_storage=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage-9.2.4/
|
||||||
@@ -10,12 +10,12 @@ flutter_secure_storage_windows=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev
|
|||||||
fluttertoast=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/fluttertoast-8.2.12/
|
fluttertoast=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/fluttertoast-8.2.12/
|
||||||
package_info_plus=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/package_info_plus-8.3.0/
|
package_info_plus=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/package_info_plus-8.3.0/
|
||||||
path_provider=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider-2.1.5/
|
path_provider=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider-2.1.5/
|
||||||
path_provider_android=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_android-2.2.15/
|
path_provider_android=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_android-2.2.16/
|
||||||
path_provider_foundation=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.1/
|
path_provider_foundation=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.1/
|
||||||
path_provider_linux=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1/
|
path_provider_linux=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1/
|
||||||
path_provider_windows=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_windows-2.3.0/
|
path_provider_windows=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_windows-2.3.0/
|
||||||
share_plus=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/share_plus-10.1.4/
|
share_plus=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/share_plus-10.1.4/
|
||||||
sqlite3_flutter_libs=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sqlite3_flutter_libs-0.5.31/
|
sqlite3_flutter_libs=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sqlite3_flutter_libs-0.5.32/
|
||||||
url_launcher_linux=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/url_launcher_linux-3.2.1/
|
url_launcher_linux=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/url_launcher_linux-3.2.1/
|
||||||
url_launcher_web=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/url_launcher_web-2.4.0/
|
url_launcher_web=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/url_launcher_web-2.4.0/
|
||||||
url_launcher_windows=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/url_launcher_windows-3.1.4/
|
url_launcher_windows=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/url_launcher_windows-3.1.4/
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<application
|
<application
|
||||||
android:label="remever"
|
android:label="remever"
|
||||||
android:name="${applicationName}"
|
android:name="${applicationName}"
|
||||||
android:icon="@mipmap/ic_launcher">
|
android:icon="@mipmap/launcher_icon">
|
||||||
<activity
|
<activity
|
||||||
android:name=".MainActivity"
|
android:name=".MainActivity"
|
||||||
android:exported="true"
|
android:exported="true"
|
||||||
|
|||||||
|
After Width: | Height: | Size: 6.0 KiB |
|
After Width: | Height: | Size: 6.0 KiB |
|
After Width: | Height: | Size: 3.9 KiB |
|
After Width: | Height: | Size: 3.9 KiB |
|
After Width: | Height: | Size: 8.1 KiB |
|
After Width: | Height: | Size: 8.1 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 17 KiB |
14
android/app/src/main/res/mipmap-anydpi-v26/launcher_icon.xml
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<background android:drawable="@color/ic_launcher_background"/>
|
||||||
|
<foreground>
|
||||||
|
<inset
|
||||||
|
android:drawable="@drawable/ic_launcher_foreground"
|
||||||
|
android:inset="16%" />
|
||||||
|
</foreground>
|
||||||
|
<monochrome>
|
||||||
|
<inset
|
||||||
|
android:drawable="@drawable/ic_launcher_monochrome"
|
||||||
|
android:inset="16%" />
|
||||||
|
</monochrome>
|
||||||
|
</adaptive-icon>
|
||||||
BIN
android/app/src/main/res/mipmap-hdpi/launcher_icon.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
android/app/src/main/res/mipmap-mdpi/launcher_icon.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
android/app/src/main/res/mipmap-xhdpi/launcher_icon.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png
Normal file
|
After Width: | Height: | Size: 7.1 KiB |
4
android/app/src/main/res/values/colors.xml
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<color name="ic_launcher_background">#ffffff</color>
|
||||||
|
</resources>
|
||||||
BIN
assets/.DS_Store
vendored
BIN
assets/images/app_icon.png
Normal file
|
After Width: | Height: | Size: 56 KiB |
BIN
assets/images/app_icon_monochrome.png
Normal file
|
After Width: | Height: | Size: 56 KiB |
@@ -428,7 +428,7 @@
|
|||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
|
||||||
CLANG_ANALYZER_NONNULL = YES;
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||||
CLANG_CXX_LIBRARY = "libc++";
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
@@ -485,7 +485,7 @@
|
|||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
|
||||||
CLANG_ANALYZER_NONNULL = YES;
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||||
CLANG_CXX_LIBRARY = "libc++";
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
|
|||||||
@@ -1,122 +1 @@
|
|||||||
{
|
{"images":[{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@3x.png","scale":"3x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@3x.png","scale":"3x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@3x.png","scale":"3x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@1x.png","scale":"1x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@3x.png","scale":"3x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@1x.png","scale":"1x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@1x.png","scale":"1x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@1x.png","scale":"1x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@2x.png","scale":"2x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@1x.png","scale":"1x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@2x.png","scale":"2x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@1x.png","scale":"1x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@2x.png","scale":"2x"},{"size":"83.5x83.5","idiom":"ipad","filename":"Icon-App-83.5x83.5@2x.png","scale":"2x"},{"size":"1024x1024","idiom":"ios-marketing","filename":"Icon-App-1024x1024@1x.png","scale":"1x"}],"info":{"version":1,"author":"xcode"}}
|
||||||
"images" : [
|
|
||||||
{
|
|
||||||
"size" : "20x20",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "Icon-App-20x20@2x.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "20x20",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "Icon-App-20x20@3x.png",
|
|
||||||
"scale" : "3x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "29x29",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "Icon-App-29x29@1x.png",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "29x29",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "Icon-App-29x29@2x.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "29x29",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "Icon-App-29x29@3x.png",
|
|
||||||
"scale" : "3x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "40x40",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "Icon-App-40x40@2x.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "40x40",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "Icon-App-40x40@3x.png",
|
|
||||||
"scale" : "3x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "60x60",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "Icon-App-60x60@2x.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "60x60",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "Icon-App-60x60@3x.png",
|
|
||||||
"scale" : "3x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "20x20",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "Icon-App-20x20@1x.png",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "20x20",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "Icon-App-20x20@2x.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "29x29",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "Icon-App-29x29@1x.png",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "29x29",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "Icon-App-29x29@2x.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "40x40",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "Icon-App-40x40@1x.png",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "40x40",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "Icon-App-40x40@2x.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "76x76",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "Icon-App-76x76@1x.png",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "76x76",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "Icon-App-76x76@2x.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "83.5x83.5",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "Icon-App-83.5x83.5@2x.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "1024x1024",
|
|
||||||
"idiom" : "ios-marketing",
|
|
||||||
"filename" : "Icon-App-1024x1024@1x.png",
|
|
||||||
"scale" : "1x"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"info" : {
|
|
||||||
"version" : 1,
|
|
||||||
"author" : "xcode"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 295 B After Width: | Height: | Size: 447 B |
|
Before Width: | Height: | Size: 406 B After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 450 B After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 282 B After Width: | Height: | Size: 737 B |
|
Before Width: | Height: | Size: 462 B After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 704 B After Width: | Height: | Size: 3.0 KiB |
|
Before Width: | Height: | Size: 406 B After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 586 B After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 862 B After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 3.5 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 4.0 KiB |
|
Before Width: | Height: | Size: 862 B After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 4.1 KiB |
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 5.3 KiB |
|
Before Width: | Height: | Size: 762 B After Width: | Height: | Size: 2.6 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 5.6 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 6.1 KiB |
@@ -51,7 +51,19 @@ void showSuccessToast(String text) {
|
|||||||
toastLength: Toast.LENGTH_SHORT,
|
toastLength: Toast.LENGTH_SHORT,
|
||||||
gravity: ToastGravity.TOP,
|
gravity: ToastGravity.TOP,
|
||||||
timeInSecForIosWeb: 1,
|
timeInSecForIosWeb: 1,
|
||||||
backgroundColor: AppColors.additional_blue,
|
backgroundColor: Colors.green,
|
||||||
|
textColor: AppColors.white,
|
||||||
|
fontSize: 16,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void showInfoToast(String text) {
|
||||||
|
Fluttertoast.showToast(
|
||||||
|
msg: text,
|
||||||
|
toastLength: Toast.LENGTH_SHORT,
|
||||||
|
gravity: ToastGravity.TOP,
|
||||||
|
timeInSecForIosWeb: 1,
|
||||||
|
backgroundColor: AppColors.disabled,
|
||||||
textColor: AppColors.white,
|
textColor: AppColors.white,
|
||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ class CollectionsDao extends DatabaseAccessor<AppDatabase>
|
|||||||
title: dto.title,
|
title: dto.title,
|
||||||
desc: dto.desc,
|
desc: dto.desc,
|
||||||
isPublic: Value<bool>(dto.isPublic),
|
isPublic: Value<bool>(dto.isPublic),
|
||||||
image: Value<String?>(dto.avatar),
|
image: Value<Uint8List?>(dto.avatar),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
} catch (e, st) {
|
} catch (e, st) {
|
||||||
@@ -52,7 +52,7 @@ class CollectionsDao extends DatabaseAccessor<AppDatabase>
|
|||||||
title: Value<String>(dto.title),
|
title: Value<String>(dto.title),
|
||||||
desc: Value<String>(dto.desc),
|
desc: Value<String>(dto.desc),
|
||||||
isPublic: Value<bool>(dto.isPublic),
|
isPublic: Value<bool>(dto.isPublic),
|
||||||
image: Value<String?>(dto.avatar),
|
image: Value<Uint8List?>(dto.avatar),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
} catch (e, st) {
|
} catch (e, st) {
|
||||||
|
|||||||
@@ -64,10 +64,23 @@ mixin _Deletable on Table {
|
|||||||
class Collections extends Table with _UuidPrimaryKey, _Timestampable {
|
class Collections extends Table with _UuidPrimaryKey, _Timestampable {
|
||||||
TextColumn get title => text()();
|
TextColumn get title => text()();
|
||||||
TextColumn get desc => text()();
|
TextColumn get desc => text()();
|
||||||
TextColumn get image => text().nullable()();
|
BlobColumn get image => blob().nullable()();
|
||||||
TextColumn get payload => text().nullable()();
|
TextColumn get payload => text().nullable()();
|
||||||
IntColumn get likesCount => integer().withDefault(Constant(0))();
|
IntColumn get likesCount => integer().withDefault(Constant(0))();
|
||||||
BoolColumn get isLiked => boolean().withDefault(Constant(false))();
|
BoolColumn get isLiked => boolean().withDefault(Constant(false))();
|
||||||
BoolColumn get isPublic => boolean().withDefault(Constant(false))();
|
BoolColumn get isPublic => boolean().withDefault(Constant(false))();
|
||||||
BoolColumn get includeInTraining => boolean().withDefault(Constant(false))();
|
BoolColumn get includeInTraining => boolean().withDefault(Constant(false))();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
///
|
||||||
|
///
|
||||||
|
@DataClassName('Ticket')
|
||||||
|
class Tickets extends Table with _UuidPrimaryKey, _Timestampable {
|
||||||
|
TextColumn get question => text()();
|
||||||
|
TextColumn get answer => text()();
|
||||||
|
BlobColumn get image => blob().nullable()();
|
||||||
|
TextColumn get collectionId =>
|
||||||
|
text().references(Collections, #id, onDelete: KeyAction.cascade)();
|
||||||
|
RealColumn get progress => real().withDefault(Constant(0))();
|
||||||
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
/// Locales: 2
|
/// Locales: 2
|
||||||
/// Strings: 20 (10 per locale)
|
/// Strings: 20 (10 per locale)
|
||||||
///
|
///
|
||||||
/// Built on 2025-04-01 at 17:23 UTC
|
/// Built on 2025-04-01 at 19:29 UTC
|
||||||
|
|
||||||
// coverage:ignore-file
|
// coverage:ignore-file
|
||||||
// ignore_for_file: type=lint, unused_import
|
// ignore_for_file: type=lint, unused_import
|
||||||
|
|||||||
@@ -13,9 +13,9 @@ import 'strings.g.dart';
|
|||||||
class TranslationsEn extends Translations {
|
class TranslationsEn extends Translations {
|
||||||
/// You can call this constructor and build your own translation instance of this locale.
|
/// You can call this constructor and build your own translation instance of this locale.
|
||||||
/// Constructing via the enum [AppLocale.build] is preferred.
|
/// Constructing via the enum [AppLocale.build] is preferred.
|
||||||
TranslationsEn({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver})
|
TranslationsEn({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
|
||||||
: assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'),
|
: assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'),
|
||||||
$meta = TranslationMetadata(
|
$meta = meta ?? TranslationMetadata(
|
||||||
locale: AppLocale.en,
|
locale: AppLocale.en,
|
||||||
overrides: overrides ?? {},
|
overrides: overrides ?? {},
|
||||||
cardinalResolver: cardinalResolver,
|
cardinalResolver: cardinalResolver,
|
||||||
@@ -34,6 +34,9 @@ class TranslationsEn extends Translations {
|
|||||||
|
|
||||||
late final TranslationsEn _root = this; // ignore: unused_field
|
late final TranslationsEn _root = this; // ignore: unused_field
|
||||||
|
|
||||||
|
@override
|
||||||
|
TranslationsEn $copyWith({TranslationMetadata<AppLocale, Translations>? meta}) => TranslationsEn(meta: meta ?? this.$meta);
|
||||||
|
|
||||||
// Translations
|
// Translations
|
||||||
@override String get app_name => 'Tesmit';
|
@override String get app_name => 'Tesmit';
|
||||||
@override late final _TranslationsHomeScreenEn home_screen = _TranslationsHomeScreenEn._(_root);
|
@override late final _TranslationsHomeScreenEn home_screen = _TranslationsHomeScreenEn._(_root);
|
||||||
|
|||||||
@@ -17,9 +17,9 @@ class Translations implements BaseTranslations<AppLocale, Translations> {
|
|||||||
|
|
||||||
/// You can call this constructor and build your own translation instance of this locale.
|
/// You can call this constructor and build your own translation instance of this locale.
|
||||||
/// Constructing via the enum [AppLocale.build] is preferred.
|
/// Constructing via the enum [AppLocale.build] is preferred.
|
||||||
Translations({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver})
|
Translations({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
|
||||||
: assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'),
|
: assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'),
|
||||||
$meta = TranslationMetadata(
|
$meta = meta ?? TranslationMetadata(
|
||||||
locale: AppLocale.ru,
|
locale: AppLocale.ru,
|
||||||
overrides: overrides ?? {},
|
overrides: overrides ?? {},
|
||||||
cardinalResolver: cardinalResolver,
|
cardinalResolver: cardinalResolver,
|
||||||
@@ -36,6 +36,8 @@ class Translations implements BaseTranslations<AppLocale, Translations> {
|
|||||||
|
|
||||||
late final Translations _root = this; // ignore: unused_field
|
late final Translations _root = this; // ignore: unused_field
|
||||||
|
|
||||||
|
Translations $copyWith({TranslationMetadata<AppLocale, Translations>? meta}) => Translations(meta: meta ?? this.$meta);
|
||||||
|
|
||||||
// Translations
|
// Translations
|
||||||
String get app_name => 'Tesmit';
|
String get app_name => 'Tesmit';
|
||||||
late final TranslationsHomeScreenRu home_screen = TranslationsHomeScreenRu.internal(_root);
|
late final TranslationsHomeScreenRu home_screen = TranslationsHomeScreenRu.internal(_root);
|
||||||
|
|||||||
@@ -21,6 +21,8 @@ import 'services/core/enc_keys_service.dart' as _i439;
|
|||||||
import 'services/core/lang_service.dart' as _i68;
|
import 'services/core/lang_service.dart' as _i68;
|
||||||
import 'services/core/theme_service.dart' as _i84;
|
import 'services/core/theme_service.dart' as _i84;
|
||||||
import 'services/logs/logs_service.dart' as _i393;
|
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/warmup_service.dart' as _i564;
|
import 'services/warmup_service.dart' as _i564;
|
||||||
|
|
||||||
extension GetItInjectableX on _i174.GetIt {
|
extension GetItInjectableX on _i174.GetIt {
|
||||||
@@ -35,6 +37,7 @@ extension GetItInjectableX on _i174.GetIt {
|
|||||||
gh.factory<_i84.ThemeService>(() => _i84.ThemeService());
|
gh.factory<_i84.ThemeService>(() => _i84.ThemeService());
|
||||||
gh.singleton<_i565.AppDatabase>(() => _i565.AppDatabase());
|
gh.singleton<_i565.AppDatabase>(() => _i565.AppDatabase());
|
||||||
gh.singleton<_i393.LogsService>(() => _i393.LogsService());
|
gh.singleton<_i393.LogsService>(() => _i393.LogsService());
|
||||||
|
gh.singleton<_i147.TicketsInterface>(() => _i548.TicketsService());
|
||||||
gh.singleton<_i764.CollectionsInterface>(() => _i1001.CollectionsService());
|
gh.singleton<_i764.CollectionsInterface>(() => _i1001.CollectionsService());
|
||||||
gh.singleton<_i580.AuthInterface>(() => _i975.AuthService());
|
gh.singleton<_i580.AuthInterface>(() => _i975.AuthService());
|
||||||
await gh.singletonAsync<_i564.WarmupService>(() {
|
await gh.singletonAsync<_i564.WarmupService>(() {
|
||||||
|
|||||||
@@ -2,26 +2,41 @@
|
|||||||
//
|
//
|
||||||
// final collectionDto = collectionDtoFromJson(jsonString);
|
// final collectionDto = collectionDtoFromJson(jsonString);
|
||||||
|
|
||||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
import 'dart:typed_data';
|
||||||
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
|
||||||
part 'collection_dto.freezed.dart';
|
part 'collection_dto.freezed.dart';
|
||||||
part 'collection_dto.g.dart';
|
// part 'collection_dto.g.dart';
|
||||||
|
|
||||||
CollectionDto collectionDtoFromJson(String str) =>
|
// CollectionDto collectionDtoFromJson(String str) =>
|
||||||
CollectionDto.fromJson(json.decode(str));
|
// CollectionDto.fromJson(json.decode(str));
|
||||||
|
|
||||||
String collectionDtoToJson(CollectionDto data) => json.encode(data.toJson());
|
// String collectionDtoToJson(CollectionDto data) => json.encode(data.toJson());
|
||||||
|
|
||||||
@freezed
|
// class Uint8ListConverter implements JsonConverter<Uint8List?, List<int>?> {
|
||||||
class CollectionDto with _$CollectionDto {
|
// const Uint8ListConverter();
|
||||||
|
|
||||||
|
// @override
|
||||||
|
// Uint8List? fromJson(List<int>? json) {
|
||||||
|
// return json == null ? null : Uint8List.fromList(json);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// @override
|
||||||
|
// List<int>? toJson(Uint8List? object) {
|
||||||
|
// return object?.toList();
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
@Freezed(copyWith: true, equal: true, fromJson: false, toJson: false)
|
||||||
|
abstract class CollectionDto with _$CollectionDto {
|
||||||
const factory CollectionDto({
|
const factory CollectionDto({
|
||||||
required String desc,
|
required String desc,
|
||||||
required String title,
|
required String title,
|
||||||
required bool isPublic,
|
required bool isPublic,
|
||||||
String? avatar,
|
Uint8List? avatar,
|
||||||
}) = _CollectionDto;
|
}) = _CollectionDto;
|
||||||
|
|
||||||
factory CollectionDto.fromJson(Map<String, dynamic> json) =>
|
// factory CollectionDto.fromJson(Map<String, dynamic> json) =>
|
||||||
_$CollectionDtoFromJson(json);
|
// _$CollectionDtoFromJson(json);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,19 +15,12 @@ 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',
|
'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',
|
||||||
);
|
);
|
||||||
|
|
||||||
CollectionDto _$CollectionDtoFromJson(Map<String, dynamic> json) {
|
|
||||||
return _CollectionDto.fromJson(json);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// @nodoc
|
/// @nodoc
|
||||||
mixin _$CollectionDto {
|
mixin _$CollectionDto {
|
||||||
String get desc => throw _privateConstructorUsedError;
|
String get desc => throw _privateConstructorUsedError;
|
||||||
String get title => throw _privateConstructorUsedError;
|
String get title => throw _privateConstructorUsedError;
|
||||||
bool get isPublic => throw _privateConstructorUsedError;
|
bool get isPublic => throw _privateConstructorUsedError;
|
||||||
String? get avatar => throw _privateConstructorUsedError;
|
Uint8List? get avatar => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
/// Serializes this CollectionDto to a JSON map.
|
|
||||||
Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
|
|
||||||
|
|
||||||
/// Create a copy of CollectionDto
|
/// Create a copy of CollectionDto
|
||||||
/// with the given fields replaced by the non-null parameter values.
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
@@ -43,7 +36,7 @@ abstract class $CollectionDtoCopyWith<$Res> {
|
|||||||
$Res Function(CollectionDto) then,
|
$Res Function(CollectionDto) then,
|
||||||
) = _$CollectionDtoCopyWithImpl<$Res, CollectionDto>;
|
) = _$CollectionDtoCopyWithImpl<$Res, CollectionDto>;
|
||||||
@useResult
|
@useResult
|
||||||
$Res call({String desc, String title, bool isPublic, String? avatar});
|
$Res call({String desc, String title, bool isPublic, Uint8List? avatar});
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @nodoc
|
/// @nodoc
|
||||||
@@ -87,7 +80,7 @@ class _$CollectionDtoCopyWithImpl<$Res, $Val extends CollectionDto>
|
|||||||
freezed == avatar
|
freezed == avatar
|
||||||
? _value.avatar
|
? _value.avatar
|
||||||
: avatar // ignore: cast_nullable_to_non_nullable
|
: avatar // ignore: cast_nullable_to_non_nullable
|
||||||
as String?,
|
as Uint8List?,
|
||||||
)
|
)
|
||||||
as $Val,
|
as $Val,
|
||||||
);
|
);
|
||||||
@@ -103,7 +96,7 @@ abstract class _$$CollectionDtoImplCopyWith<$Res>
|
|||||||
) = __$$CollectionDtoImplCopyWithImpl<$Res>;
|
) = __$$CollectionDtoImplCopyWithImpl<$Res>;
|
||||||
@override
|
@override
|
||||||
@useResult
|
@useResult
|
||||||
$Res call({String desc, String title, bool isPublic, String? avatar});
|
$Res call({String desc, String title, bool isPublic, Uint8List? avatar});
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @nodoc
|
/// @nodoc
|
||||||
@@ -146,14 +139,14 @@ class __$$CollectionDtoImplCopyWithImpl<$Res>
|
|||||||
freezed == avatar
|
freezed == avatar
|
||||||
? _value.avatar
|
? _value.avatar
|
||||||
: avatar // ignore: cast_nullable_to_non_nullable
|
: avatar // ignore: cast_nullable_to_non_nullable
|
||||||
as String?,
|
as Uint8List?,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @nodoc
|
/// @nodoc
|
||||||
@JsonSerializable()
|
|
||||||
class _$CollectionDtoImpl implements _CollectionDto {
|
class _$CollectionDtoImpl implements _CollectionDto {
|
||||||
const _$CollectionDtoImpl({
|
const _$CollectionDtoImpl({
|
||||||
required this.desc,
|
required this.desc,
|
||||||
@@ -162,9 +155,6 @@ class _$CollectionDtoImpl implements _CollectionDto {
|
|||||||
this.avatar,
|
this.avatar,
|
||||||
});
|
});
|
||||||
|
|
||||||
factory _$CollectionDtoImpl.fromJson(Map<String, dynamic> json) =>
|
|
||||||
_$$CollectionDtoImplFromJson(json);
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
final String desc;
|
final String desc;
|
||||||
@override
|
@override
|
||||||
@@ -172,7 +162,7 @@ class _$CollectionDtoImpl implements _CollectionDto {
|
|||||||
@override
|
@override
|
||||||
final bool isPublic;
|
final bool isPublic;
|
||||||
@override
|
@override
|
||||||
final String? avatar;
|
final Uint8List? avatar;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String toString() {
|
String toString() {
|
||||||
@@ -188,12 +178,17 @@ class _$CollectionDtoImpl implements _CollectionDto {
|
|||||||
(identical(other.title, title) || other.title == title) &&
|
(identical(other.title, title) || other.title == title) &&
|
||||||
(identical(other.isPublic, isPublic) ||
|
(identical(other.isPublic, isPublic) ||
|
||||||
other.isPublic == isPublic) &&
|
other.isPublic == isPublic) &&
|
||||||
(identical(other.avatar, avatar) || other.avatar == avatar));
|
const DeepCollectionEquality().equals(other.avatar, avatar));
|
||||||
}
|
}
|
||||||
|
|
||||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
|
||||||
@override
|
@override
|
||||||
int get hashCode => Object.hash(runtimeType, desc, title, isPublic, avatar);
|
int get hashCode => Object.hash(
|
||||||
|
runtimeType,
|
||||||
|
desc,
|
||||||
|
title,
|
||||||
|
isPublic,
|
||||||
|
const DeepCollectionEquality().hash(avatar),
|
||||||
|
);
|
||||||
|
|
||||||
/// Create a copy of CollectionDto
|
/// Create a copy of CollectionDto
|
||||||
/// with the given fields replaced by the non-null parameter values.
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
@@ -202,11 +197,6 @@ class _$CollectionDtoImpl implements _CollectionDto {
|
|||||||
@pragma('vm:prefer-inline')
|
@pragma('vm:prefer-inline')
|
||||||
_$$CollectionDtoImplCopyWith<_$CollectionDtoImpl> get copyWith =>
|
_$$CollectionDtoImplCopyWith<_$CollectionDtoImpl> get copyWith =>
|
||||||
__$$CollectionDtoImplCopyWithImpl<_$CollectionDtoImpl>(this, _$identity);
|
__$$CollectionDtoImplCopyWithImpl<_$CollectionDtoImpl>(this, _$identity);
|
||||||
|
|
||||||
@override
|
|
||||||
Map<String, dynamic> toJson() {
|
|
||||||
return _$$CollectionDtoImplToJson(this);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class _CollectionDto implements CollectionDto {
|
abstract class _CollectionDto implements CollectionDto {
|
||||||
@@ -214,12 +204,9 @@ abstract class _CollectionDto implements CollectionDto {
|
|||||||
required final String desc,
|
required final String desc,
|
||||||
required final String title,
|
required final String title,
|
||||||
required final bool isPublic,
|
required final bool isPublic,
|
||||||
final String? avatar,
|
final Uint8List? avatar,
|
||||||
}) = _$CollectionDtoImpl;
|
}) = _$CollectionDtoImpl;
|
||||||
|
|
||||||
factory _CollectionDto.fromJson(Map<String, dynamic> json) =
|
|
||||||
_$CollectionDtoImpl.fromJson;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get desc;
|
String get desc;
|
||||||
@override
|
@override
|
||||||
@@ -227,7 +214,7 @@ abstract class _CollectionDto implements CollectionDto {
|
|||||||
@override
|
@override
|
||||||
bool get isPublic;
|
bool get isPublic;
|
||||||
@override
|
@override
|
||||||
String? get avatar;
|
Uint8List? get avatar;
|
||||||
|
|
||||||
/// Create a copy of CollectionDto
|
/// Create a copy of CollectionDto
|
||||||
/// with the given fields replaced by the non-null parameter values.
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
|||||||
@@ -1,23 +0,0 @@
|
|||||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
|
||||||
|
|
||||||
part of 'collection_dto.dart';
|
|
||||||
|
|
||||||
// **************************************************************************
|
|
||||||
// JsonSerializableGenerator
|
|
||||||
// **************************************************************************
|
|
||||||
|
|
||||||
_$CollectionDtoImpl _$$CollectionDtoImplFromJson(Map<String, dynamic> json) =>
|
|
||||||
_$CollectionDtoImpl(
|
|
||||||
desc: json['desc'] as String,
|
|
||||||
title: json['title'] as String,
|
|
||||||
isPublic: json['isPublic'] as bool,
|
|
||||||
avatar: json['avatar'] as String?,
|
|
||||||
);
|
|
||||||
|
|
||||||
Map<String, dynamic> _$$CollectionDtoImplToJson(_$CollectionDtoImpl instance) =>
|
|
||||||
<String, dynamic>{
|
|
||||||
'desc': instance.desc,
|
|
||||||
'title': instance.title,
|
|
||||||
'isPublic': instance.isPublic,
|
|
||||||
'avatar': instance.avatar,
|
|
||||||
};
|
|
||||||
@@ -44,20 +44,45 @@ class AuthRoute extends _i12.PageRouteInfo<void> {
|
|||||||
|
|
||||||
/// generated route for
|
/// generated route for
|
||||||
/// [_i2.CollectionDetailScreen]
|
/// [_i2.CollectionDetailScreen]
|
||||||
class CollectionDetailRoute extends _i12.PageRouteInfo<void> {
|
class CollectionDetailRoute
|
||||||
const CollectionDetailRoute({List<_i12.PageRouteInfo>? children})
|
extends _i12.PageRouteInfo<CollectionDetailRouteArgs> {
|
||||||
: super(CollectionDetailRoute.name, initialChildren: children);
|
CollectionDetailRoute({
|
||||||
|
_i13.Key? key,
|
||||||
|
required _i14.Collection collection,
|
||||||
|
List<_i12.PageRouteInfo>? children,
|
||||||
|
}) : super(
|
||||||
|
CollectionDetailRoute.name,
|
||||||
|
args: CollectionDetailRouteArgs(key: key, collection: collection),
|
||||||
|
initialChildren: children,
|
||||||
|
);
|
||||||
|
|
||||||
static const String name = 'CollectionDetailRoute';
|
static const String name = 'CollectionDetailRoute';
|
||||||
|
|
||||||
static _i12.PageInfo page = _i12.PageInfo(
|
static _i12.PageInfo page = _i12.PageInfo(
|
||||||
name,
|
name,
|
||||||
builder: (data) {
|
builder: (data) {
|
||||||
return const _i2.CollectionDetailScreen();
|
final args = data.argsAs<CollectionDetailRouteArgs>();
|
||||||
|
return _i2.CollectionDetailScreen(
|
||||||
|
key: args.key,
|
||||||
|
collection: args.collection,
|
||||||
|
);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class CollectionDetailRouteArgs {
|
||||||
|
const CollectionDetailRouteArgs({this.key, required this.collection});
|
||||||
|
|
||||||
|
final _i13.Key? key;
|
||||||
|
|
||||||
|
final _i14.Collection collection;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'CollectionDetailRouteArgs{key: $key, collection: $collection}';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// generated route for
|
/// generated route for
|
||||||
/// [_i3.CollectionScreen]
|
/// [_i3.CollectionScreen]
|
||||||
class CollectionRoute extends _i12.PageRouteInfo<void> {
|
class CollectionRoute extends _i12.PageRouteInfo<void> {
|
||||||
|
|||||||
@@ -31,12 +31,13 @@ class AuthScreen extends StatelessWidget {
|
|||||||
return PopScope(
|
return PopScope(
|
||||||
canPop: false,
|
canPop: false,
|
||||||
child: BlocBuilder<AuthCubit, AuthState>(
|
child: BlocBuilder<AuthCubit, AuthState>(
|
||||||
builder:
|
builder: (BuildContext context, AuthState state) {
|
||||||
(BuildContext context, AuthState state) => state.when(
|
return state.when(
|
||||||
initial: () => InitialAuth(),
|
initial: () => InitialAuth(),
|
||||||
email: () => EmailAuth(),
|
email: () => EmailAuth(),
|
||||||
code: (email, uuid) => CodeAuth(email: email, uuid: uuid),
|
code: (email, uuid) => CodeAuth(email: email, uuid: uuid),
|
||||||
),
|
);
|
||||||
|
},
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,7 +50,6 @@ class EmailAuthState extends State<EmailAuth> {
|
|||||||
padding: _padding,
|
padding: _padding,
|
||||||
child: SingleChildScrollView(
|
child: SingleChildScrollView(
|
||||||
physics: BouncingScrollPhysics(),
|
physics: BouncingScrollPhysics(),
|
||||||
child: Expanded(
|
|
||||||
child: Column(
|
child: Column(
|
||||||
mainAxisAlignment: MainAxisAlignment.start,
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
@@ -67,7 +66,6 @@ class EmailAuthState extends State<EmailAuth> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -35,7 +35,6 @@ class InitialAuth extends StatelessWidget {
|
|||||||
padding: _padding,
|
padding: _padding,
|
||||||
child: SingleChildScrollView(
|
child: SingleChildScrollView(
|
||||||
physics: BouncingScrollPhysics(),
|
physics: BouncingScrollPhysics(),
|
||||||
child: Expanded(
|
|
||||||
child: Column(
|
child: Column(
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
HSpace(148),
|
HSpace(148),
|
||||||
@@ -50,7 +49,6 @@ class InitialAuth extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import 'dart:convert';
|
||||||
import 'dart:math';
|
import 'dart:math';
|
||||||
|
|
||||||
import 'package:auto_route/auto_route.dart';
|
import 'package:auto_route/auto_route.dart';
|
||||||
@@ -6,16 +7,31 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:modal_bottom_sheet/modal_bottom_sheet.dart';
|
import 'package:modal_bottom_sheet/modal_bottom_sheet.dart';
|
||||||
import 'package:remever/common/resources.dart';
|
import 'package:remever/common/resources.dart';
|
||||||
import 'package:remever/common/widgets/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/common/widgets/wspace.dart';
|
||||||
import 'package:remever/components/extensions/context.dart';
|
import 'package:remever/components/extensions/context.dart';
|
||||||
|
import 'package:remever/database/database.dart';
|
||||||
import 'package:remever/gen/assets.gen.dart';
|
import 'package:remever/gen/assets.gen.dart';
|
||||||
|
import 'package:remever/inject.dart';
|
||||||
import 'package:remever/screens/collections/widgets/learning_card.dart';
|
import 'package:remever/screens/collections/widgets/learning_card.dart';
|
||||||
import 'package:remever/screens/dialogs/info_dialog.dart';
|
import 'package:remever/screens/dialogs/info_dialog.dart';
|
||||||
|
import 'package:remever/services/tickets/tickets_interface.dart';
|
||||||
import 'package:remever/widgets/primary_button.dart';
|
import 'package:remever/widgets/primary_button.dart';
|
||||||
|
|
||||||
@RoutePage()
|
@RoutePage()
|
||||||
class CollectionDetailScreen extends StatelessWidget {
|
class CollectionDetailScreen extends StatelessWidget {
|
||||||
const CollectionDetailScreen({super.key});
|
const CollectionDetailScreen({super.key, required this.collection});
|
||||||
|
|
||||||
|
final Collection collection;
|
||||||
|
|
||||||
|
void _onInfoTap(BuildContext context) {
|
||||||
|
showCupertinoModalBottomSheet(
|
||||||
|
topRadius: const Radius.circular(24).r,
|
||||||
|
backgroundColor: AppColors.white,
|
||||||
|
context: context,
|
||||||
|
builder: (BuildContext _) => InfoDialog(collection: collection),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
@@ -43,14 +59,7 @@ class CollectionDetailScreen extends StatelessWidget {
|
|||||||
title: _buildTitle(),
|
title: _buildTitle(),
|
||||||
actions: <Widget>[
|
actions: <Widget>[
|
||||||
GestureDetector(
|
GestureDetector(
|
||||||
onTap: () {
|
onTap: () => _onInfoTap(context),
|
||||||
showCupertinoModalBottomSheet(
|
|
||||||
topRadius: const Radius.circular(24).r,
|
|
||||||
backgroundColor: AppColors.white,
|
|
||||||
context: context,
|
|
||||||
builder: (BuildContext _) => const InfoDialog(),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
child: Assets.icons.typeDescription.image(height: 24.h, width: 24.w),
|
child: Assets.icons.typeDescription.image(height: 24.h, width: 24.w),
|
||||||
),
|
),
|
||||||
const WSpace(16),
|
const WSpace(16),
|
||||||
@@ -95,10 +104,11 @@ class CollectionDetailScreen extends StatelessWidget {
|
|||||||
color: AppColors.disabled,
|
color: AppColors.disabled,
|
||||||
),
|
),
|
||||||
const WSpace(2),
|
const WSpace(2),
|
||||||
AppTypography(
|
StreamBuilder<List<Collection>>(
|
||||||
0.toString(),
|
stream: getIt<TicketsInterface>().watchTicketsList(),
|
||||||
type: Regular14px(),
|
builder: (context, snapshot) {
|
||||||
color: AppColors.disabled,
|
return _buildCount(snapshot.data?.length ?? 0);
|
||||||
|
},
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
@@ -107,12 +117,20 @@ class CollectionDetailScreen extends StatelessWidget {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Widget _buildCount(int count) {
|
||||||
|
return AppTypography(
|
||||||
|
'$count',
|
||||||
|
type: Regular14px(),
|
||||||
|
color: AppColors.disabled,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Название коллекции
|
/// Название коллекции
|
||||||
///
|
///
|
||||||
Widget _buildCollectionTitle() {
|
Widget _buildCollectionTitle() {
|
||||||
return AppTypography(
|
return AppTypography(
|
||||||
'Астрономия и тайная комната Харли Хоттера',
|
collection.title,
|
||||||
type: Medium16px(),
|
type: Medium16px(),
|
||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
softWrap: true,
|
softWrap: true,
|
||||||
@@ -127,9 +145,21 @@ class CollectionDetailScreen extends StatelessWidget {
|
|||||||
return SizedBox.square(
|
return SizedBox.square(
|
||||||
dimension: 40.r,
|
dimension: 40.r,
|
||||||
child: DecoratedBox(
|
child: DecoratedBox(
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(shape: BoxShape.circle, color: AppColors.bg),
|
||||||
shape: BoxShape.circle,
|
|
||||||
image: DecorationImage(image: Assets.images.img.provider()),
|
child: Wif(
|
||||||
|
condition: collection.image != null,
|
||||||
|
builder:
|
||||||
|
(context) => ClipOval(
|
||||||
|
child: Image.memory(collection.image!, fit: BoxFit.cover),
|
||||||
|
),
|
||||||
|
fallback:
|
||||||
|
(context) => Center(
|
||||||
|
child: AppTypography(
|
||||||
|
collection.title.substring(0, 1),
|
||||||
|
type: Bold34px(),
|
||||||
|
),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import 'package:auto_route/auto_route.dart';
|
import 'package:auto_route/auto_route.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/rendering.dart';
|
import 'package:flutter/rendering.dart';
|
||||||
|
import 'package:remever/common/functions.dart';
|
||||||
import 'package:remever/common/resources.dart';
|
import 'package:remever/common/resources.dart';
|
||||||
import 'package:remever/common/widgets/typography.dart';
|
import 'package:remever/common/widgets/typography.dart';
|
||||||
import 'package:remever/components/extensions/context.dart';
|
import 'package:remever/components/extensions/context.dart';
|
||||||
@@ -54,6 +55,8 @@ class _CollectionScreenState extends State<CollectionScreen> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
logger.logBuild('build collection screen');
|
||||||
|
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
backgroundColor: AppColors.bg,
|
backgroundColor: AppColors.bg,
|
||||||
appBar: const CollectionsAppBar(),
|
appBar: const CollectionsAppBar(),
|
||||||
|
|||||||
@@ -20,6 +20,10 @@ class CollectionCard extends StatelessWidget {
|
|||||||
|
|
||||||
final Collection collection;
|
final Collection collection;
|
||||||
|
|
||||||
|
void _onCollectionTap(BuildContext context) {
|
||||||
|
context.pushRoute(CollectionDetailRoute(collection: collection));
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Slidable(
|
return Slidable(
|
||||||
@@ -33,7 +37,9 @@ class CollectionCard extends StatelessWidget {
|
|||||||
backgroundColor: const Color(0xFFD7E6F4),
|
backgroundColor: const Color(0xFFD7E6F4),
|
||||||
foregroundColor: const Color(0xFF0058AB),
|
foregroundColor: const Color(0xFF0058AB),
|
||||||
icon: Icons.info_outline,
|
icon: Icons.info_outline,
|
||||||
onPressed: () {},
|
onPressed: () {
|
||||||
|
showInfoToast('Пока недоступно');
|
||||||
|
},
|
||||||
),
|
),
|
||||||
const WSpace(8),
|
const WSpace(8),
|
||||||
_buildSlidableAction(
|
_buildSlidableAction(
|
||||||
@@ -44,7 +50,9 @@ class CollectionCard extends StatelessWidget {
|
|||||||
collection.isLiked
|
collection.isLiked
|
||||||
? Icons.favorite_outlined
|
? Icons.favorite_outlined
|
||||||
: Icons.favorite_border,
|
: Icons.favorite_border,
|
||||||
onPressed: () {},
|
onPressed: () {
|
||||||
|
showInfoToast('Пока недоступно');
|
||||||
|
},
|
||||||
),
|
),
|
||||||
const WSpace(8),
|
const WSpace(8),
|
||||||
_buildSlidableAction(
|
_buildSlidableAction(
|
||||||
@@ -52,12 +60,14 @@ class CollectionCard extends StatelessWidget {
|
|||||||
backgroundColor: AppColors.secondary,
|
backgroundColor: AppColors.secondary,
|
||||||
foregroundColor: AppColors.primary,
|
foregroundColor: AppColors.primary,
|
||||||
icon: Icons.visibility_off_outlined,
|
icon: Icons.visibility_off_outlined,
|
||||||
onPressed: () {},
|
onPressed: () {
|
||||||
|
showInfoToast('Пока недоступно');
|
||||||
|
},
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
child: GestureDetector(
|
child: GestureDetector(
|
||||||
onTap: () => context.pushRoute(CollectionDetailRoute()),
|
onTap: () => _onCollectionTap(context),
|
||||||
child: Container(
|
child: Container(
|
||||||
constraints: BoxConstraints(minHeight: 66.h, maxHeight: 84.h),
|
constraints: BoxConstraints(minHeight: 66.h, maxHeight: 84.h),
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
@@ -162,10 +172,7 @@ class CollectionCard extends StatelessWidget {
|
|||||||
condition: collection.image != null,
|
condition: collection.image != null,
|
||||||
builder:
|
builder:
|
||||||
(context) => ClipOval(
|
(context) => ClipOval(
|
||||||
child: Image.memory(
|
child: Image.memory(collection.image!, fit: BoxFit.cover),
|
||||||
base64Decode(collection.image!),
|
|
||||||
fit: BoxFit.cover,
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
fallback:
|
fallback:
|
||||||
(context) => Center(
|
(context) => Center(
|
||||||
|
|||||||
@@ -1,87 +0,0 @@
|
|||||||
import 'package:auto_route/auto_route.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
|
||||||
import 'package:modal_bottom_sheet/modal_bottom_sheet.dart';
|
|
||||||
import 'package:remever/common/functions.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:remever/router.gr.dart';
|
|
||||||
import 'package:remever/screens/dialogs/filters_dialog.dart';
|
|
||||||
|
|
||||||
class CollectionsAppBar extends StatelessWidget implements PreferredSizeWidget {
|
|
||||||
const CollectionsAppBar({super.key});
|
|
||||||
|
|
||||||
@override
|
|
||||||
Size get preferredSize => Size.fromHeight(66.h);
|
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
return AppBar(
|
|
||||||
toolbarHeight: 66.h,
|
|
||||||
backgroundColor: AppColors.white,
|
|
||||||
shadowColor: Colors.transparent,
|
|
||||||
title: Row(
|
|
||||||
children: <Widget>[
|
|
||||||
GestureDetector(
|
|
||||||
onLongPress: () => context.pushRoute(const SandboxRoute()),
|
|
||||||
child: AppTypography(
|
|
||||||
'Коллекции',
|
|
||||||
type: SemiBold28px(),
|
|
||||||
color: AppColors.body_text,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
const WSpace(2),
|
|
||||||
Container(
|
|
||||||
height: 22.h,
|
|
||||||
width: 38.w,
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
color: AppColors.secondary,
|
|
||||||
borderRadius: BorderRadius.circular(40).r,
|
|
||||||
),
|
|
||||||
child: Center(
|
|
||||||
child: AppTypography(
|
|
||||||
'2213',
|
|
||||||
type: Regular12px(),
|
|
||||||
color: AppColors.body_text,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
actions: <Widget>[
|
|
||||||
AppBarIconButton(icon: Assets.icons.typeSearch, onTap: () {}),
|
|
||||||
AppBarIconButton(icon: Assets.icons.typeDownload, onTap: () {}),
|
|
||||||
AppBarIconButton(
|
|
||||||
icon: Assets.icons.typeSort,
|
|
||||||
onTap: () {
|
|
||||||
showCuperModalBottomSheet(
|
|
||||||
context: context,
|
|
||||||
height: 424.h,
|
|
||||||
builder: (BuildContext context) => const FiltersDialog(),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
),
|
|
||||||
],
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class AppBarIconButton extends StatelessWidget {
|
|
||||||
const AppBarIconButton({required this.icon, required this.onTap, super.key});
|
|
||||||
|
|
||||||
final AssetGenImage icon;
|
|
||||||
final void Function()? onTap;
|
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
return GestureDetector(
|
|
||||||
onTap: onTap,
|
|
||||||
child: SizedBox(
|
|
||||||
width: 48.h,
|
|
||||||
child: Center(child: icon.image(height: 24.h, width: 24.w)),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -5,9 +5,13 @@ import 'package:remever/common/resources.dart';
|
|||||||
import 'package:remever/common/widgets/typography.dart';
|
import 'package:remever/common/widgets/typography.dart';
|
||||||
import 'package:remever/common/widgets/wspace.dart';
|
import 'package:remever/common/widgets/wspace.dart';
|
||||||
import 'package:remever/components/extensions/context.dart';
|
import 'package:remever/components/extensions/context.dart';
|
||||||
|
import 'package:remever/database/database.dart';
|
||||||
import 'package:remever/gen/assets.gen.dart';
|
import 'package:remever/gen/assets.gen.dart';
|
||||||
|
import 'package:remever/inject.dart';
|
||||||
import 'package:remever/router.gr.dart';
|
import 'package:remever/router.gr.dart';
|
||||||
import 'package:remever/screens/dialogs/filters_dialog.dart';
|
import 'package:remever/screens/dialogs/filters_dialog.dart';
|
||||||
|
import 'package:remever/services/collection/collections_interface.dart';
|
||||||
|
import 'package:remever/widgets/debug/app_debug.dart';
|
||||||
|
|
||||||
class CollectionsAppBar extends StatelessWidget implements PreferredSizeWidget {
|
class CollectionsAppBar extends StatelessWidget implements PreferredSizeWidget {
|
||||||
const CollectionsAppBar({super.key});
|
const CollectionsAppBar({super.key});
|
||||||
@@ -42,16 +46,22 @@ class CollectionsAppBar extends StatelessWidget implements PreferredSizeWidget {
|
|||||||
borderRadius: BorderRadius.circular(40).r,
|
borderRadius: BorderRadius.circular(40).r,
|
||||||
),
|
),
|
||||||
child: Center(
|
child: Center(
|
||||||
child: AppTypography(
|
child: StreamBuilder<List<Collection>>(
|
||||||
'2213',
|
stream: getIt<CollectionsInterface>().watchCollectionsList(),
|
||||||
type: Regular12px(),
|
builder: (context, snapshot) {
|
||||||
color: AppColors.body_text,
|
return _buildCount(snapshot.data?.length ?? 0);
|
||||||
|
},
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
actions: <Widget>[
|
actions: <Widget>[
|
||||||
|
AppDebug(
|
||||||
|
builder: (context, isDebug) {
|
||||||
|
if (!isDebug) return SizedBox();
|
||||||
|
return Row(
|
||||||
|
children: [
|
||||||
AppBarIconButton(icon: Assets.icons.typeSearch, onTap: () {}),
|
AppBarIconButton(icon: Assets.icons.typeSearch, onTap: () {}),
|
||||||
AppBarIconButton(icon: Assets.icons.typeDownload, onTap: () {}),
|
AppBarIconButton(icon: Assets.icons.typeDownload, onTap: () {}),
|
||||||
AppBarIconButton(
|
AppBarIconButton(
|
||||||
@@ -66,6 +76,18 @@ class CollectionsAppBar extends StatelessWidget implements PreferredSizeWidget {
|
|||||||
),
|
),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _buildCount(int count) {
|
||||||
|
return AppTypography(
|
||||||
|
'$count',
|
||||||
|
type: Regular12px(),
|
||||||
|
color: AppColors.body_text,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,12 @@
|
|||||||
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:remever/common/resources.dart';
|
import 'package:remever/common/resources.dart';
|
||||||
import 'package:remever/common/widgets/typography.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/components/extensions/context.dart';
|
||||||
import 'package:remever/components/extensions/state.dart';
|
import 'package:remever/components/extensions/state.dart';
|
||||||
|
import 'package:remever/widgets/debug/app_debug.dart';
|
||||||
|
|
||||||
class CollectionsFilters extends StatefulWidget {
|
class CollectionsFilters extends StatefulWidget {
|
||||||
const CollectionsFilters({super.key});
|
const CollectionsFilters({super.key});
|
||||||
@@ -15,6 +18,10 @@ class CollectionsFilters extends StatefulWidget {
|
|||||||
class _CollectionsFiltersState extends State<CollectionsFilters> {
|
class _CollectionsFiltersState extends State<CollectionsFilters> {
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
return AppDebug(
|
||||||
|
builder: (context, isDebug) {
|
||||||
|
if (!isDebug) return HSpace(20);
|
||||||
|
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: const EdgeInsets.symmetric(vertical: 16, horizontal: 28).r,
|
padding: const EdgeInsets.symmetric(vertical: 16, horizontal: 28).r,
|
||||||
child: Row(
|
child: Row(
|
||||||
@@ -32,6 +39,8 @@ class _CollectionsFiltersState extends State<CollectionsFilters> {
|
|||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
///
|
///
|
||||||
|
|||||||
@@ -78,15 +78,17 @@ class _CrudCollectionScreenState extends State<CrudCollectionScreen> {
|
|||||||
final file = File(filePath);
|
final file = File(filePath);
|
||||||
final bytes = await file.readAsBytes();
|
final bytes = await file.readAsBytes();
|
||||||
|
|
||||||
final base64String = base64Encode(bytes);
|
// final base64String = base64Encode(bytes);
|
||||||
|
|
||||||
_collection = _collection?.copyWith(avatar: base64String);
|
_collection = _collection?.copyWith(avatar: bytes);
|
||||||
|
|
||||||
safeSetState(() {});
|
safeSetState(() {});
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
logger.logBuild('build create screen');
|
||||||
|
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
backgroundColor: AppColors.gray_bg,
|
backgroundColor: AppColors.gray_bg,
|
||||||
appBar: _buildAppBar(context),
|
appBar: _buildAppBar(context),
|
||||||
@@ -107,7 +109,7 @@ class _CrudCollectionScreenState extends State<CrudCollectionScreen> {
|
|||||||
const HSpace(16),
|
const HSpace(16),
|
||||||
..._buildDescription(context),
|
..._buildDescription(context),
|
||||||
const HSpace(16),
|
const HSpace(16),
|
||||||
_buildPublickSwitch(),
|
// _buildPublickSwitch(),
|
||||||
const HSpace(16),
|
const HSpace(16),
|
||||||
AnimatedOpacity(
|
AnimatedOpacity(
|
||||||
// opacity: _isPublic ? 1 : 0,
|
// opacity: _isPublic ? 1 : 0,
|
||||||
@@ -370,10 +372,7 @@ class _CrudCollectionScreenState extends State<CrudCollectionScreen> {
|
|||||||
condition: _collection!.avatar != null,
|
condition: _collection!.avatar != null,
|
||||||
builder:
|
builder:
|
||||||
(context) => ClipOval(
|
(context) => ClipOval(
|
||||||
child: Image.memory(
|
child: Image.memory(_collection!.avatar!, fit: BoxFit.cover),
|
||||||
base64Decode(_collection!.avatar!),
|
|
||||||
fit: BoxFit.cover,
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
fallback:
|
fallback:
|
||||||
(context) => SizedBox.square(
|
(context) => SizedBox.square(
|
||||||
|
|||||||
@@ -12,14 +12,59 @@ import 'package:remever/screens/dialogs/alert_dialog.dart';
|
|||||||
import 'package:remever/screens/dialogs/dialog_header.dart';
|
import 'package:remever/screens/dialogs/dialog_header.dart';
|
||||||
import 'package:remever/screens/dialogs/dialog_item.dart';
|
import 'package:remever/screens/dialogs/dialog_item.dart';
|
||||||
import 'package:remever/services/collection/collections_interface.dart';
|
import 'package:remever/services/collection/collections_interface.dart';
|
||||||
|
import 'package:share_plus/share_plus.dart';
|
||||||
|
|
||||||
class ActionDialog extends StatelessWidget {
|
class ActionDialog extends StatelessWidget {
|
||||||
const ActionDialog({super.key, required this.collection});
|
const ActionDialog({super.key, required this.collection});
|
||||||
|
|
||||||
final Collection collection;
|
final Collection collection;
|
||||||
|
|
||||||
|
void _onTrainingTap(BuildContext context) {
|
||||||
|
showInfoToast('Все скоро будет. Рим не сразу строился');
|
||||||
|
|
||||||
|
Navigator.pop(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
void _onEditTap(BuildContext context) {
|
||||||
|
Navigator.pop(context);
|
||||||
|
context.pushRoute(CrudCollectionRoute(editedCollection: collection));
|
||||||
|
}
|
||||||
|
|
||||||
|
void _onStatistickTap(BuildContext context) {
|
||||||
|
showInfoToast('Ты серьезно?');
|
||||||
|
Navigator.pop(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
void _onDownloadTap(BuildContext context) {
|
||||||
|
showInfoToast('Ты серьезно?');
|
||||||
|
Navigator.pop(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
void _onShareTap(BuildContext context) async {
|
||||||
|
await Share.share('View my collection ${collection.id}');
|
||||||
|
}
|
||||||
|
|
||||||
|
void _onDeleteTap(BuildContext context) async {
|
||||||
|
final bool? res = await showCuperModalBottomSheet(
|
||||||
|
context: context,
|
||||||
|
height: 262.h,
|
||||||
|
builder:
|
||||||
|
(BuildContext context) => const AlertInfoDialog(
|
||||||
|
title: 'Вы хотите удалить коллекцию?\nЭто действие необратимо',
|
||||||
|
acceptTitle: 'Да, удалить',
|
||||||
|
declineTitle: 'Нет, оставить',
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
if (res != null && res) {
|
||||||
|
await getIt<CollectionsInterface>().deleteCollection(collection.id);
|
||||||
|
|
||||||
|
Navigator.pop(context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void _makePublic(BuildContext context, bool public) {
|
void _makePublic(BuildContext context, bool public) {
|
||||||
if (public) {
|
if (!public) {
|
||||||
showCuperModalBottomSheet(
|
showCuperModalBottomSheet(
|
||||||
context: context,
|
context: context,
|
||||||
height: 282.h,
|
height: 282.h,
|
||||||
@@ -55,65 +100,32 @@ class ActionDialog extends StatelessWidget {
|
|||||||
DialogItem(
|
DialogItem(
|
||||||
title: 'Исключена из тренировки',
|
title: 'Исключена из тренировки',
|
||||||
child: Assets.icons.typeHide.image(color: AppColors.primary),
|
child: Assets.icons.typeHide.image(color: AppColors.primary),
|
||||||
onTap: () {
|
onTap: () => _onTrainingTap(context),
|
||||||
Navigator.pop(context);
|
|
||||||
},
|
|
||||||
),
|
),
|
||||||
DialogItem(
|
DialogItem(
|
||||||
title: 'Редактировать',
|
title: 'Редактировать',
|
||||||
child: Assets.icons.typeEdit.image(color: AppColors.primary),
|
child: Assets.icons.typeEdit.image(color: AppColors.primary),
|
||||||
onTap: () {
|
onTap: () => _onEditTap(context),
|
||||||
// context.back();
|
|
||||||
context.pushRoute(
|
|
||||||
CrudCollectionRoute(editedCollection: collection),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
),
|
),
|
||||||
DialogItem(
|
DialogItem(
|
||||||
title: 'Статистика',
|
title: 'Статистика',
|
||||||
child: Assets.icons.typeStat.image(color: AppColors.primary),
|
child: Assets.icons.typeStat.image(color: AppColors.primary),
|
||||||
onTap: () {
|
onTap: () => _onStatistickTap(context),
|
||||||
Navigator.pop(context);
|
|
||||||
},
|
|
||||||
),
|
),
|
||||||
DialogItem(
|
DialogItem(
|
||||||
title: 'Скачать',
|
title: 'Скачать',
|
||||||
child: Assets.icons.typeDownload.image(color: AppColors.primary),
|
child: Assets.icons.typeDownload.image(color: AppColors.primary),
|
||||||
onTap: () {
|
onTap: () => _onDownloadTap(context),
|
||||||
Navigator.pop(context);
|
|
||||||
},
|
|
||||||
),
|
),
|
||||||
DialogItem(
|
DialogItem(
|
||||||
title: 'Поделиться',
|
title: 'Поделиться',
|
||||||
child: Assets.icons.typeShare.image(color: AppColors.primary),
|
child: Assets.icons.typeShare.image(color: AppColors.primary),
|
||||||
onTap: () {
|
onTap: () => _onShareTap(context),
|
||||||
Navigator.pop(context);
|
|
||||||
},
|
|
||||||
),
|
),
|
||||||
DialogItem(
|
DialogItem(
|
||||||
title: 'Удалить',
|
title: 'Удалить',
|
||||||
color: AppColors.danger,
|
color: AppColors.danger,
|
||||||
onTap: () async {
|
onTap: () => _onDeleteTap(context),
|
||||||
final bool? res = await showCuperModalBottomSheet(
|
|
||||||
context: context,
|
|
||||||
height: 262.h,
|
|
||||||
builder:
|
|
||||||
(BuildContext context) => const AlertInfoDialog(
|
|
||||||
title:
|
|
||||||
'Вы хотите удалить коллекцию?\nЭто действие необратимо',
|
|
||||||
acceptTitle: 'Да, удалить',
|
|
||||||
declineTitle: 'Нет, оставить',
|
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
if (true) {
|
|
||||||
await getIt<CollectionsInterface>().deleteCollection(
|
|
||||||
collection.id,
|
|
||||||
);
|
|
||||||
|
|
||||||
Navigator.pop(context);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
child: Assets.icons.typeTrash.image(color: AppColors.danger),
|
child: Assets.icons.typeTrash.image(color: AppColors.danger),
|
||||||
),
|
),
|
||||||
const BottomSafeSpace(),
|
const BottomSafeSpace(),
|
||||||
|
|||||||
@@ -1,17 +1,23 @@
|
|||||||
|
import 'dart:convert';
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:remever/common/resources.dart';
|
import 'package:remever/common/resources.dart';
|
||||||
import 'package:remever/common/widgets/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/common/widgets/wspace.dart';
|
||||||
import 'package:remever/components/extensions/context.dart';
|
import 'package:remever/components/extensions/context.dart';
|
||||||
import 'package:remever/gen/assets.gen.dart';
|
import 'package:remever/database/database.dart';
|
||||||
import 'package:remever/widgets/primary_button.dart';
|
import 'package:remever/widgets/primary_button.dart';
|
||||||
|
|
||||||
class InfoDialog extends StatelessWidget {
|
class InfoDialog extends StatelessWidget {
|
||||||
const InfoDialog({super.key});
|
const InfoDialog({super.key, required this.collection});
|
||||||
|
|
||||||
|
final Collection collection;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Container(
|
return Material(
|
||||||
|
child: Container(
|
||||||
decoration: const BoxDecoration(color: Colors.white),
|
decoration: const BoxDecoration(color: Colors.white),
|
||||||
constraints: BoxConstraints(
|
constraints: BoxConstraints(
|
||||||
minHeight: MediaQuery.sizeOf(context).height / 6,
|
minHeight: MediaQuery.sizeOf(context).height / 6,
|
||||||
@@ -20,6 +26,7 @@ class InfoDialog extends StatelessWidget {
|
|||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.symmetric(vertical: 32, horizontal: 16).r,
|
padding: const EdgeInsets.symmetric(vertical: 32, horizontal: 16).r,
|
||||||
child: Column(
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
Row(
|
Row(
|
||||||
@@ -44,6 +51,7 @@ class InfoDialog extends StatelessWidget {
|
|||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -52,13 +60,7 @@ class InfoDialog extends StatelessWidget {
|
|||||||
child: SingleChildScrollView(
|
child: SingleChildScrollView(
|
||||||
controller: ScrollController(),
|
controller: ScrollController(),
|
||||||
child: AppTypography(
|
child: AppTypography(
|
||||||
'Предварительные выводы неутешительны: убеждённость некоторых оппонентов способствует подготовке и реализации форм воздействия. Как принято считать, предприниматели в сети интернет представляют собой не что иное, как квинтэссенцию победы маркетинга над разумом и должны быть описаны максимально подробно.'
|
collection.desc,
|
||||||
'Идейные соображения высшего порядка, а также высокотехнологичная концепция общественного уклада говорит о возможностях кластеризации усилий. Задача организации, в особенности же реализация намеченных плановых заданий выявляет срочную потребность первоочередных требований. Вот вам яркий пример современных тенденций — существующая теория обеспечивает широкому кругу (специалистов) участие в формировании поставленных обществом задач. Имеется спорная точка зрения, гласящая примерно следующее: сторонники тоталитаризма в науке освещают чрезвычайно интересные особенности картины в целом, однако конкретные выводы, разумеется, представлены в исключительно положительном свете. Лишь базовые сценарии поведения пользователей представляют собой не что иное, как квинтэссенцию победы маркетинга над разумом и должны быть функционально разнесены на независимые элементы. Каждый из нас понимает очевидную вещь: начало повседневной работы по формированию позиции способствует повышению качества распределения внутренних резервов и ресурсов.'
|
|
||||||
'В своём стремлении улучшить пользовательский опыт мы упускаем, что тщательные исследования конкурентов набирают популярность среди определенных слоев населения, а значит, должны быть представлены в исключительно положительном свете. Противоположная точка зрения подразумевает, что непосредственные участники технического прогресса преданы социально-демократической анафеме. Вот вам яркий пример современных тенденций — выбранный нами инновационный путь не оставляет шанса для поставленных обществом задач. Задача организации, в особенности же понимание сути ресурсосберегающих технологий влечет за собой процесс внедрения и модернизации новых принципов формирования материально-технической и кадровой базы. В своём стремлении улучшить пользовательский опыт мы упускаем, что непосредственные участники технического прогресса ассоциативно распределены по отраслям. Высокий уровень вовлечения представителей целевой аудитории является четким доказательством простого факта: синтетическое тестирование влечет за собой процесс внедрения и модернизации системы массового участия!'
|
|
||||||
'Сложно сказать, почему стремящиеся вытеснить традиционное производство, нанотехнологии призваны к ответу. Но предприниматели в сети интернет, инициированные исключительно синтетически, призваны к ответу. Следует отметить, что экономическая повестка сегодняшнего дня способствует подготовке и реализации глубокомысленных рассуждений. Равным образом, укрепление и развитие внутренней структуры в значительной степени обусловливает важность соответствующих условий активизации. Противоположная точка зрения подразумевает, что диаграммы связей будут призваны к ответу. И нет сомнений, что независимые государства формируют глобальную экономическую сеть и при этом — ограничены исключительно образом мышления.'
|
|
||||||
'И нет сомнений, что реплицированные с зарубежных источников, современные исследования освещают чрезвычайно интересные особенности картины в целом, однако конкретные выводы, разумеется, разоблачены! Мы вынуждены отталкиваться от того, что современная методология разработки говорит о возможностях как самодостаточных, так и внешне зависимых концептуальных решений. Повседневная практика показывает, что курс на социально-ориентированный национальный проект требует от нас анализа распределения внутренних резервов и ресурсов. Задача организации, в особенности же курс на социально-ориентированный национальный проект представляет собой интересный эксперимент проверки укрепления моральных ценностей. Значимость этих проблем настолько очевидна, что социально-экономическое развитие говорит о возможностях кластеризации усилий. Не следует, однако, забывать, что дальнейшее развитие различных форм деятельности в значительной степени обусловливает важность прогресса профессионального сообщества.'
|
|
||||||
'А ещё реплицированные с зарубежных источников, современные исследования могут быть превращены в посмешище, хотя само их существование приносит несомненную пользу обществу. Задача организации, в особенности же социально-экономическое развитие является качественно новой ступенью системы обучения кадров, соответствующей насущным потребностям. В целом, конечно, начало повседневной работы по формированию позиции требует анализа поставленных обществом задач. Но курс на социально-ориентированный национальный проект говорит о возможностях экспериментов, поражающих по своей масштабности и грандиозности. Прежде всего, существующая теория создаёт предпосылки для экономической целесообразности принимаемых решений. Внезапно, представители современных социальных резервов лишь добавляют фракционных разногласий и разоблачены.'
|
|
||||||
'В рамках спецификации современных стандартов, действия представителей оппозиции ассоциативно распределены по отраслям. Не следует, однако, забывать, что новая модель организационной деятельности позволяет оценить значение соответствующих условий активизации. Значимость этих проблем настолько очевидна, что курс на социально-ориентированный национальный проект позволяет выполнить важные задания по разработке глубокомысленных рассуждений. Современные технологии достигли такого уровня, что начало повседневной работы по формированию позиции обеспечивает широкому кругу (специалистов) участие в формировании инновационных методов управления процессами. Имеется спорная точка зрения, гласящая примерно следующее: активно развивающиеся страны третьего мира будут объявлены нарушающими общечеловеческие нормы этики и морали. Картельные сговоры не допускают ситуации, при которой диаграммы связей будут обнародованы.',
|
|
||||||
type: Regular14px(),
|
type: Regular14px(),
|
||||||
maxLines: 9999,
|
maxLines: 9999,
|
||||||
),
|
),
|
||||||
@@ -71,7 +73,7 @@ class InfoDialog extends StatelessWidget {
|
|||||||
///
|
///
|
||||||
Widget _buildCollectionTitle() {
|
Widget _buildCollectionTitle() {
|
||||||
return AppTypography(
|
return AppTypography(
|
||||||
'Астрономия и тайная комната Харли Хоттера',
|
collection.title,
|
||||||
type: Medium16px(),
|
type: Medium16px(),
|
||||||
maxLines: 2,
|
maxLines: 2,
|
||||||
softWrap: true,
|
softWrap: true,
|
||||||
@@ -86,9 +88,21 @@ class InfoDialog extends StatelessWidget {
|
|||||||
return SizedBox.square(
|
return SizedBox.square(
|
||||||
dimension: 40.r,
|
dimension: 40.r,
|
||||||
child: DecoratedBox(
|
child: DecoratedBox(
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(shape: BoxShape.circle, color: AppColors.bg),
|
||||||
shape: BoxShape.circle,
|
|
||||||
image: DecorationImage(image: Assets.images.img.provider()),
|
child: Wif(
|
||||||
|
condition: collection.image != null,
|
||||||
|
builder:
|
||||||
|
(context) => ClipOval(
|
||||||
|
child: Image.memory(collection.image!, fit: BoxFit.cover),
|
||||||
|
),
|
||||||
|
fallback:
|
||||||
|
(context) => Center(
|
||||||
|
child: AppTypography(
|
||||||
|
collection.title.substring(0, 1),
|
||||||
|
type: Bold34px(),
|
||||||
|
),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
|
|||||||
|
|
||||||
// Package imports:
|
// Package imports:
|
||||||
import 'package:auto_route/auto_route.dart';
|
import 'package:auto_route/auto_route.dart';
|
||||||
|
import 'package:remever/common/functions.dart';
|
||||||
import 'package:remever/common/resources.dart';
|
import 'package:remever/common/resources.dart';
|
||||||
import 'package:remever/common/widgets/wspace.dart';
|
import 'package:remever/common/widgets/wspace.dart';
|
||||||
import 'package:remever/components/extensions/context.dart';
|
import 'package:remever/components/extensions/context.dart';
|
||||||
@@ -18,7 +19,7 @@ class HomeScreen extends StatelessWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
print('build home screen');
|
logger.logBuild('build home screen');
|
||||||
|
|
||||||
return SafeArea(
|
return SafeArea(
|
||||||
top: false,
|
top: false,
|
||||||
|
|||||||
@@ -37,6 +37,17 @@ class _SandboxScreenState extends State<SandboxScreen> {
|
|||||||
const HSpace(8),
|
const HSpace(8),
|
||||||
_debugBox(),
|
_debugBox(),
|
||||||
const HSpace(8),
|
const HSpace(8),
|
||||||
|
PrimaryButton(
|
||||||
|
child: const Text('Логи'),
|
||||||
|
onTap: () {
|
||||||
|
Navigator.of(context).push(
|
||||||
|
MaterialPageRoute<dynamic>(
|
||||||
|
builder:
|
||||||
|
(BuildContext context) => TalkerScreen(talker: talker),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
@@ -67,17 +78,6 @@ class _SandboxScreenState extends State<SandboxScreen> {
|
|||||||
},
|
},
|
||||||
child: const Text('Open Db Viewer'),
|
child: const Text('Open Db Viewer'),
|
||||||
),
|
),
|
||||||
PrimaryButton(
|
|
||||||
child: const Text('Логи'),
|
|
||||||
onTap: () {
|
|
||||||
Navigator.of(context).push(
|
|
||||||
MaterialPageRoute<dynamic>(
|
|
||||||
builder:
|
|
||||||
(BuildContext context) => TalkerScreen(talker: talker),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import 'dart:io';
|
|||||||
|
|
||||||
// Flutter imports:
|
// Flutter imports:
|
||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
|
import 'package:flutter/foundation.dart';
|
||||||
|
|
||||||
// Package imports:
|
// Package imports:
|
||||||
import 'package:fluttertoast/fluttertoast.dart';
|
import 'package:fluttertoast/fluttertoast.dart';
|
||||||
@@ -32,7 +33,7 @@ class LogsService {
|
|||||||
void logError(String message, Object? exception, StackTrace? stackTrace) {
|
void logError(String message, Object? exception, StackTrace? stackTrace) {
|
||||||
talker.error(message, exception, stackTrace);
|
talker.error(message, exception, stackTrace);
|
||||||
|
|
||||||
showErrorToast('$message ${exception.toString()}');
|
if (kDebugMode) showErrorToast('$message ${exception.toString()}');
|
||||||
}
|
}
|
||||||
|
|
||||||
void logCritical(String message, Object? exception, StackTrace? stackTrace) {
|
void logCritical(String message, Object? exception, StackTrace? stackTrace) {
|
||||||
|
|||||||
9
lib/services/tickets/tickets_interface.dart
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
import 'package:remever/database/database.dart';
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Интерфейс взаимодействия с билетами в коллекция
|
||||||
|
///
|
||||||
|
abstract interface class TicketsInterface {
|
||||||
|
/// Получение списка билетов
|
||||||
|
Stream<List<Collection>> watchTicketsList();
|
||||||
|
}
|
||||||
15
lib/services/tickets/tickets_service.dart
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
import 'package:injectable/injectable.dart';
|
||||||
|
import 'package:remever/database/database.dart';
|
||||||
|
import 'package:remever/services/tickets/tickets_interface.dart';
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Сервис авторизации
|
||||||
|
///
|
||||||
|
|
||||||
|
@Singleton(as: TicketsInterface)
|
||||||
|
final class TicketsService implements TicketsInterface {
|
||||||
|
@override
|
||||||
|
Stream<List<Collection>> watchTicketsList() {
|
||||||
|
return Stream.empty();
|
||||||
|
}
|
||||||
|
}
|
||||||
35
lib/widgets/debug/app_debug.dart
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
// Flutter imports:
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
// Package imports:
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
import 'package:remever/components/notifiers/app_settings.dart';
|
||||||
|
|
||||||
|
/// Функция для построения содержимого [AppDebug]
|
||||||
|
typedef AppDebugBuilder = Widget Function(BuildContext context, bool isDebug);
|
||||||
|
|
||||||
|
class AppDebug extends StatelessWidget {
|
||||||
|
///
|
||||||
|
/// Вспомогательный виджет для условной отрисовки
|
||||||
|
/// если включен дебаг режим в песочнице
|
||||||
|
///
|
||||||
|
const AppDebug({required this.builder, super.key});
|
||||||
|
|
||||||
|
/// Построитель
|
||||||
|
final AppDebugBuilder builder;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Consumer<AppSettingsNotifier>(
|
||||||
|
builder: (
|
||||||
|
BuildContext context,
|
||||||
|
AppSettingsNotifier value,
|
||||||
|
Widget? child,
|
||||||
|
) {
|
||||||
|
if (child != null) return child;
|
||||||
|
|
||||||
|
return builder(context, value.debugMode);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
84
pubspec.lock
@@ -29,18 +29,18 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: archive
|
name: archive
|
||||||
sha256: "0c64e928dcbefddecd234205422bcfc2b5e6d31be0b86fef0d0dd48d7b4c9742"
|
sha256: "7dcbd0f87fe5f61cb28da39a1a8b70dbc106e2fe0516f7836eb7bb2948481a12"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.0.4"
|
version: "4.0.5"
|
||||||
args:
|
args:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: args
|
name: args
|
||||||
sha256: bf9f5caeea8d8fe6721a9c358dd8a5c1947b27f1cfaa18b39c301273594919e6
|
sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.6.0"
|
version: "2.7.0"
|
||||||
async:
|
async:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -53,10 +53,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: auto_route
|
name: auto_route
|
||||||
sha256: fd5af38a2a682e4cbb06c6842ea728efdf460cbf6a425d9459fa9647ad5468f2
|
sha256: "89bc5d17d8c575399891194b8cd02b39f52a8512c730052f17ebe443cdcb9109"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "10.0.0"
|
version: "10.0.1"
|
||||||
auto_route_generator:
|
auto_route_generator:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
@@ -149,10 +149,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: built_value
|
name: built_value
|
||||||
sha256: "8b158ab94ec6913e480dc3f752418348b5ae099eb75868b5f4775f0572999c61"
|
sha256: ea90e81dc4a25a043d9bee692d20ed6d1c4a1662a28c03a96417446c093ed6b4
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "8.9.4"
|
version: "8.9.5"
|
||||||
characters:
|
characters:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -317,10 +317,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: drift
|
name: drift
|
||||||
sha256: "97d5832657d49f26e7a8e07de397ddc63790b039372878d5117af816d0fdb5cb"
|
sha256: "14a61af39d4584faf1d73b5b35e4b758a43008cf4c0fdb0576ec8e7032c0d9a5"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.25.1"
|
version: "2.26.0"
|
||||||
drift_db_viewer:
|
drift_db_viewer:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@@ -333,10 +333,10 @@ packages:
|
|||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
name: drift_dev
|
name: drift_dev
|
||||||
sha256: f1db88482dbb016b9bbddddf746d5d0a6938b156ff20e07320052981f97388cc
|
sha256: "0d3f8b33b76cf1c6a82ee34d9511c40957549c4674b8f1688609e6d6c7306588"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.25.2"
|
version: "2.26.0"
|
||||||
event_bus:
|
event_bus:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@@ -373,10 +373,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: file_picker
|
name: file_picker
|
||||||
sha256: "8d938fd5c11dc81bf1acd4f7f0486c683fe9e79a0b13419e27730f9ce4d8a25b"
|
sha256: "36a1652d99cb6bf8ccc8b9f43aded1fd60b234d23ce78af422c07f950a436ef7"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "9.2.1"
|
version: "10.0.0"
|
||||||
fixnum:
|
fixnum:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -430,6 +430,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.1"
|
version: "1.0.1"
|
||||||
|
flutter_launcher_icons:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: flutter_launcher_icons
|
||||||
|
sha256: bfa04787c85d80ecb3f8777bde5fc10c3de809240c48fa061a2c2bf15ea5211c
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.14.3"
|
||||||
flutter_lints:
|
flutter_lints:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
@@ -677,6 +685,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.1.2"
|
version: "4.1.2"
|
||||||
|
image:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: image
|
||||||
|
sha256: "4e973fcf4caae1a4be2fa0a13157aa38a8f9cb049db6529aa00b4d71abc4d928"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "4.5.4"
|
||||||
image_size_getter:
|
image_size_getter:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -857,10 +873,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: package_config
|
name: package_config
|
||||||
sha256: "92d4488434b520a62570293fbd33bb556c7d49230791c1b4bbd973baf6d2dc67"
|
sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.1"
|
version: "2.2.0"
|
||||||
package_info_plus:
|
package_info_plus:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@@ -905,10 +921,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: path_provider_android
|
name: path_provider_android
|
||||||
sha256: "4adf4fd5423ec60a29506c76581bc05854c55e3a0b72d35bb28d661c9686edf2"
|
sha256: "0ca7359dad67fd7063cb2892ab0c0737b2daafd807cf1acecd62374c8fae6c12"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.2.15"
|
version: "2.2.16"
|
||||||
path_provider_foundation:
|
path_provider_foundation:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -993,18 +1009,18 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: provider
|
name: provider
|
||||||
sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c
|
sha256: "489024f942069c2920c844ee18bb3d467c69e48955a4f32d1677f71be103e310"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.1.2"
|
version: "6.1.4"
|
||||||
pub_semver:
|
pub_semver:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: pub_semver
|
name: pub_semver
|
||||||
sha256: "7b3cfbf654f3edd0c6298ecd5be782ce997ddf0e00531b9464b55245185bbbbd"
|
sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.5"
|
version: "2.2.0"
|
||||||
pubspec_parse:
|
pubspec_parse:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -1086,26 +1102,26 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: slang
|
name: slang
|
||||||
sha256: "354283dfe5d6b5bb72d17a52c2acba0ad08c98f8de317a00aa2c801814093982"
|
sha256: a2422a1a60d17d37bce226467caf2487c975804255e3d2d10bc4078c442b1a8c
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.5.0"
|
version: "4.6.0"
|
||||||
slang_build_runner:
|
slang_build_runner:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
name: slang_build_runner
|
name: slang_build_runner
|
||||||
sha256: b96f23d5b518fbabdb4e0328d1b260b1af0149b2603b2c98f670c1ce46188bbb
|
sha256: "9acd4d521f5d6cb7d42044ec47e9274d4523c3fbb87cce5054fd380d6a601a49"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.5.0"
|
version: "4.6.0"
|
||||||
slang_flutter:
|
slang_flutter:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: slang_flutter
|
name: slang_flutter
|
||||||
sha256: "6891526b13641dd2667ce60a9a65ef2c1611f838105396e5e8ad39edc4ecb191"
|
sha256: afd0058c027dd8a3ee9aab9dfabb828bd4e6b7207d50896dc5ec02c71d8f8b9f
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.5.0"
|
version: "4.6.0"
|
||||||
source_gen:
|
source_gen:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -1158,18 +1174,18 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: sqlite3
|
name: sqlite3
|
||||||
sha256: "32b632dda27d664f85520093ed6f735ae5c49b5b75345afb8b19411bc59bb53d"
|
sha256: "310af39c40dd0bb2058538333c9d9840a2725ae0b9f77e4fd09ad6696aa8f66e"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.7.4"
|
version: "2.7.5"
|
||||||
sqlite3_flutter_libs:
|
sqlite3_flutter_libs:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: sqlite3_flutter_libs
|
name: sqlite3_flutter_libs
|
||||||
sha256: "7adb4cc96dc08648a5eb1d80a7619070796ca6db03901ff2b6dcb15ee30468f3"
|
sha256: "1a96b59227828d9eb1463191d684b37a27d66ee5ed7597fcf42eee6452c88a14"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.5.31"
|
version: "0.5.32"
|
||||||
sqlparser:
|
sqlparser:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -1430,10 +1446,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: win32
|
name: win32
|
||||||
sha256: b89e6e24d1454e149ab20fbb225af58660f0c0bf4475544650700d8e2da54aef
|
sha256: dc6ecaa00a7c708e5b4d10ee7bec8c270e9276dfcab1783f57e9962d7884305f
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "5.11.0"
|
version: "5.12.0"
|
||||||
xdg_directories:
|
xdg_directories:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|||||||
13
pubspec.yaml
@@ -37,7 +37,7 @@ dependencies:
|
|||||||
fluttertoast: ^8.2.12
|
fluttertoast: ^8.2.12
|
||||||
pin_code_fields: ^8.0.1
|
pin_code_fields: ^8.0.1
|
||||||
modal_bottom_sheet: ^3.0.0
|
modal_bottom_sheet: ^3.0.0
|
||||||
file_picker: ^9.2.1
|
file_picker: ^10.0.0
|
||||||
|
|
||||||
# logs
|
# logs
|
||||||
talker: ^4.6.11
|
talker: ^4.6.11
|
||||||
@@ -58,6 +58,8 @@ dependencies:
|
|||||||
flutter_bloc: ^9.0.0
|
flutter_bloc: ^9.0.0
|
||||||
flutter_slidable: ^4.0.0
|
flutter_slidable: ^4.0.0
|
||||||
flutter_keyboard_size: ^1.0.1
|
flutter_keyboard_size: ^1.0.1
|
||||||
|
flutter_launcher_icons: ^0.14.3
|
||||||
|
|
||||||
|
|
||||||
# dio
|
# dio
|
||||||
dio_smart_retry: ^7.0.1
|
dio_smart_retry: ^7.0.1
|
||||||
@@ -116,3 +118,12 @@ import_sorter:
|
|||||||
- \/lib\/inject.config.dart
|
- \/lib\/inject.config.dart
|
||||||
- \/lib/gen\/*
|
- \/lib/gen\/*
|
||||||
|
|
||||||
|
|
||||||
|
flutter_launcher_icons:
|
||||||
|
android: "launcher_icon"
|
||||||
|
ios: true
|
||||||
|
image_path: "assets/images/app_icon.png"
|
||||||
|
min_sdk_android: 16
|
||||||
|
adaptive_icon_background: "#ffffff"
|
||||||
|
adaptive_icon_foreground: "assets/images/app_icon.png"
|
||||||
|
adaptive_icon_monochrome: "assets/images/app_icon_monochrome.png"
|
||||||
|
|||||||