From 0854b7be9bd4dd36d307c1af72823d0bf150d431 Mon Sep 17 00:00:00 2001
From: Vadim <44135514+vodemn@users.noreply.github.com>
Date: Mon, 6 Jan 2025 12:13:39 +0100
Subject: [PATCH 01/18] fixed fvm path typo
---
.vscode/settings.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.vscode/settings.json b/.vscode/settings.json
index e929cb4..e04697a 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,6 +1,6 @@
{
"task.slowProviderWarning": true,
- "dart.flutterSdkPath": "fvm",
+ "dart.flutterSdkPath": ".fvm/flutter_sdk",
"search.exclude": {
"**/.fvm": true
},
From 2a857dac1dec0ef1baf0451279f181642bf7aa71 Mon Sep 17 00:00:00 2001
From: Vadim <44135514+vodemn@users.noreply.github.com>
Date: Mon, 6 Jan 2025 12:13:44 +0100
Subject: [PATCH 02/18] Update pubspec.yaml
---
pubspec.yaml | 46 +++++++++++++++++++++++-----------------------
1 file changed, 23 insertions(+), 23 deletions(-)
diff --git a/pubspec.yaml b/pubspec.yaml
index ddb3f7b..854ed63 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -7,27 +7,26 @@ environment:
sdk: ">=3.0.0 <4.0.0"
dependencies:
- app_settings: 4.2.0
+ app_settings: ^5.1.1
auto_size_text: 3.0.0
- bloc_concurrency: 0.2.2
- camera: 0.10.5+2
- camera_android_camerax: 0.6.1+1
+ bloc_concurrency: ^0.2.5
+ camera: ^0.11.0+2
clipboard: 0.1.3
collection: any
dynamic_color: 1.7.0
- exif: 3.1.4
+ exif: ^3.3.0
firebase_analytics: 10.6.2
firebase_core: 2.20.0
firebase_crashlytics: 3.4.2
firebase_remote_config: 4.3.2
flutter:
sdk: flutter
- flutter_bloc: 8.1.3
+ flutter_bloc: ^8.1.6
flutter_localizations:
sdk: flutter
- flutter_native_splash: 2.3.5
- intl: 0.18.1
- intl_utils: 2.8.2
+ flutter_native_splash: ^2.4.4
+ intl: ^0.19.0
+ intl_utils: ^2.8.7
light_sensor: 3.0.0
m3_lightmeter_iap:
git:
@@ -39,29 +38,30 @@ dependencies:
ref: v2.1.0
material_color_utilities: 0.5.0
package_info_plus: 4.2.0
- permission_handler: 10.4.3
- platform: 3.1.0
+ permission_handler: ^11.3.1
+ platform: ^3.1.5
shared_preferences: 2.2.0
- url_launcher: 6.1.12
+ url_launcher:
+ url_launcher_ios: ^6.3.2
uuid: 3.0.7
- vibration: 1.8.1
+ vibration: ^2.0.1
dev_dependencies:
- args: 2.5.0
- bloc_test: 9.1.3
- build_runner: 2.4.6
+ args: ^2.6.0
+ bloc_test: ^9.1.7
+ build_runner: ^2.4.14
flutter_test:
sdk: flutter
golden_toolkit: 0.15.0
- google_fonts: 3.0.1
- image: 4.1.7
+ google_fonts: ^4.0.4
+ image: ^4.3.0
integration_test:
sdk: flutter
- lint: 2.1.2
- logging: 1.2.0
- meta: 1.9.1
- mocktail: 0.3.0
- test: 1.24.3
+ lint: ^2.3.0
+ logging: ^1.3.0
+ meta: ^1.15.0
+ mocktail: ^1.0.4
+ test: ^1.25.8
dependency_overrides:
material_color_utilities: 0.11.1
From 0fd0c3095236f2dfa1edfc08ef4f7547b4c00104 Mon Sep 17 00:00:00 2001
From: Vadim <44135514+vodemn@users.noreply.github.com>
Date: Mon, 6 Jan 2025 12:13:59 +0100
Subject: [PATCH 03/18] version control pubspec.lock
---
.gitignore | 1 -
pubspec.lock | 1541 ++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 1541 insertions(+), 1 deletion(-)
create mode 100644 pubspec.lock
diff --git a/.gitignore b/.gitignore
index f8353b3..be55ad1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -48,7 +48,6 @@ app.*.map.json
/ios/build/
/ios/Runner.xcodeproj/project.pbxproj
-pubspec.lock
/ios/Podfile.lock
.fvm/
diff --git a/pubspec.lock b/pubspec.lock
new file mode 100644
index 0000000..76cdb7a
--- /dev/null
+++ b/pubspec.lock
@@ -0,0 +1,1541 @@
+# Generated by pub
+# See https://dart.dev/tools/pub/glossary#lockfile
+packages:
+ _fe_analyzer_shared:
+ dependency: transitive
+ description:
+ name: _fe_analyzer_shared
+ sha256: "16e298750b6d0af7ce8a3ba7c18c69c3785d11b15ec83f6dcd0ad2a0009b3cab"
+ url: "https://pub.dev"
+ source: hosted
+ version: "76.0.0"
+ _flutterfire_internals:
+ dependency: transitive
+ description:
+ name: _flutterfire_internals
+ sha256: "7bcb5c5d62b3907fb4a269c0f0843df46760d38e12829a715f2ff1fb492f19ef"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.3.10"
+ _macros:
+ dependency: transitive
+ description: dart
+ source: sdk
+ version: "0.3.3"
+ analyzer:
+ dependency: transitive
+ description:
+ name: analyzer
+ sha256: "1f14db053a8c23e260789e9b0980fa27f2680dd640932cae5e1137cce0e46e1e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "6.11.0"
+ ansicolor:
+ dependency: transitive
+ description:
+ name: ansicolor
+ sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.0.3"
+ app_settings:
+ dependency: "direct main"
+ description:
+ name: app_settings
+ sha256: "09bc7fe0313a507087bec1a3baf555f0576e816a760cbb31813a88890a09d9e5"
+ url: "https://pub.dev"
+ source: hosted
+ version: "5.1.1"
+ archive:
+ dependency: transitive
+ description:
+ name: archive
+ sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.6.1"
+ args:
+ dependency: "direct dev"
+ description:
+ name: args
+ sha256: bf9f5caeea8d8fe6721a9c358dd8a5c1947b27f1cfaa18b39c301273594919e6
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.6.0"
+ async:
+ dependency: transitive
+ description:
+ name: async
+ sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.11.0"
+ auto_size_text:
+ dependency: "direct main"
+ description:
+ name: auto_size_text
+ sha256: "3f5261cd3fb5f2a9ab4e2fc3fba84fd9fcaac8821f20a1d4e71f557521b22599"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.0"
+ bloc:
+ dependency: transitive
+ description:
+ name: bloc
+ sha256: "106842ad6569f0b60297619e9e0b1885c2fb9bf84812935490e6c5275777804e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "8.1.4"
+ bloc_concurrency:
+ dependency: "direct main"
+ description:
+ name: bloc_concurrency
+ sha256: "456b7a3616a7c1ceb975c14441b3f198bf57d81cb95b7c6de5cb0c60201afcd8"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.2.5"
+ bloc_test:
+ dependency: "direct dev"
+ description:
+ name: bloc_test
+ sha256: "165a6ec950d9252ebe36dc5335f2e6eb13055f33d56db0eeb7642768849b43d2"
+ url: "https://pub.dev"
+ source: hosted
+ version: "9.1.7"
+ boolean_selector:
+ dependency: transitive
+ description:
+ name: boolean_selector
+ sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.1"
+ build:
+ dependency: transitive
+ description:
+ name: build
+ sha256: cef23f1eda9b57566c81e2133d196f8e3df48f244b317368d65c5943d91148f0
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.4.2"
+ build_config:
+ dependency: transitive
+ description:
+ name: build_config
+ sha256: "4ae2de3e1e67ea270081eaee972e1bd8f027d459f249e0f1186730784c2e7e33"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.2"
+ build_daemon:
+ dependency: transitive
+ description:
+ name: build_daemon
+ sha256: "294a2edaf4814a378725bfe6358210196f5ea37af89ecd81bfa32960113d4948"
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.0.3"
+ build_resolvers:
+ dependency: transitive
+ description:
+ name: build_resolvers
+ sha256: "99d3980049739a985cf9b21f30881f46db3ebc62c5b8d5e60e27440876b1ba1e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.4.3"
+ build_runner:
+ dependency: "direct dev"
+ description:
+ name: build_runner
+ sha256: "74691599a5bc750dc96a6b4bfd48f7d9d66453eab04c7f4063134800d6a5c573"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.4.14"
+ build_runner_core:
+ dependency: transitive
+ description:
+ name: build_runner_core
+ sha256: "22e3aa1c80e0ada3722fe5b63fd43d9c8990759d0a2cf489c8c5d7b2bdebc021"
+ url: "https://pub.dev"
+ source: hosted
+ version: "8.0.0"
+ built_collection:
+ dependency: transitive
+ description:
+ name: built_collection
+ sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100"
+ url: "https://pub.dev"
+ source: hosted
+ version: "5.1.1"
+ built_value:
+ dependency: transitive
+ description:
+ name: built_value
+ sha256: "28a712df2576b63c6c005c465989a348604960c0958d28be5303ba9baa841ac2"
+ url: "https://pub.dev"
+ source: hosted
+ version: "8.9.3"
+ camera:
+ dependency: "direct main"
+ description:
+ name: camera
+ sha256: "26ff41045772153f222ffffecba711a206f670f5834d40ebf5eed3811692f167"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.11.0+2"
+ camera_android_camerax:
+ dependency: transitive
+ description:
+ name: camera_android_camerax
+ sha256: abcfa1ac32bd03116b4cfda7e8223ab391f01966e65823c064afe388550d1b3d
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.6.10+3"
+ camera_avfoundation:
+ dependency: transitive
+ description:
+ name: camera_avfoundation
+ sha256: c3038e6e72e284b14ad246a419f26908c08f8886d114cb8a2e351988439bfa68
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.9.17+6"
+ camera_platform_interface:
+ dependency: transitive
+ description:
+ name: camera_platform_interface
+ sha256: b3ede1f171532e0d83111fe0980b46d17f1aa9788a07a2fbed07366bbdbb9061
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.8.0"
+ camera_web:
+ dependency: transitive
+ description:
+ name: camera_web
+ sha256: "595f28c89d1fb62d77c73c633193755b781c6d2e0ebcd8dc25b763b514e6ba8f"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.3.5"
+ characters:
+ dependency: transitive
+ description:
+ name: characters
+ sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.3.0"
+ checked_yaml:
+ dependency: transitive
+ description:
+ name: checked_yaml
+ sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.0.3"
+ clipboard:
+ dependency: "direct main"
+ description:
+ name: clipboard
+ sha256: "2ec38f0e59878008ceca0ab122e4bfde98847f88ef0f83331362ba4521f565a9"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.1.3"
+ clock:
+ dependency: transitive
+ description:
+ name: clock
+ sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.1"
+ cloud_firestore:
+ dependency: transitive
+ description:
+ name: cloud_firestore
+ sha256: "666ae6914f5d9dde04d7fb49c5983d3bf7b887021a79a3ac17de2e95386b8006"
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.12.1"
+ cloud_firestore_platform_interface:
+ dependency: transitive
+ description:
+ name: cloud_firestore_platform_interface
+ sha256: f1a9436bc0d7f49e60df33b5eb872772733646d4f211516220a1f6006c8177f5
+ url: "https://pub.dev"
+ source: hosted
+ version: "6.0.2"
+ cloud_firestore_web:
+ dependency: transitive
+ description:
+ name: cloud_firestore_web
+ sha256: "8df1e484d57f771242c2d8b3a534b921dfb0ba144a1cd441f23b1c7c4f33c3a1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.8.2"
+ code_builder:
+ dependency: transitive
+ description:
+ name: code_builder
+ sha256: "0ec10bf4a89e4c613960bf1e8b42c64127021740fb21640c29c909826a5eea3e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.10.1"
+ collection:
+ dependency: "direct main"
+ description:
+ name: collection
+ sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.19.0"
+ convert:
+ dependency: transitive
+ description:
+ name: convert
+ sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.1.2"
+ coverage:
+ dependency: transitive
+ description:
+ name: coverage
+ sha256: e3493833ea012784c740e341952298f1cc77f1f01b1bbc3eb4eecf6984fb7f43
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.11.1"
+ cross_file:
+ dependency: transitive
+ description:
+ name: cross_file
+ sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.3.4+2"
+ crypto:
+ dependency: transitive
+ description:
+ name: crypto
+ sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.6"
+ csslib:
+ dependency: transitive
+ description:
+ name: csslib
+ sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.2"
+ dart_style:
+ dependency: transitive
+ description:
+ name: dart_style
+ sha256: "7856d364b589d1f08986e140938578ed36ed948581fbc3bc9aef1805039ac5ab"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.3.7"
+ device_info_plus:
+ dependency: transitive
+ description:
+ name: device_info_plus
+ sha256: "4fa68e53e26ab17b70ca39f072c285562cfc1589df5bb1e9295db90f6645f431"
+ url: "https://pub.dev"
+ source: hosted
+ version: "11.2.0"
+ device_info_plus_platform_interface:
+ dependency: transitive
+ description:
+ name: device_info_plus_platform_interface
+ sha256: "0b04e02b30791224b31969eb1b50d723498f402971bff3630bca2ba839bd1ed2"
+ url: "https://pub.dev"
+ source: hosted
+ version: "7.0.2"
+ diff_match_patch:
+ dependency: transitive
+ description:
+ name: diff_match_patch
+ sha256: "2efc9e6e8f449d0abe15be240e2c2a3bcd977c8d126cfd70598aee60af35c0a4"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.4.1"
+ dynamic_color:
+ dependency: "direct main"
+ description:
+ name: dynamic_color
+ sha256: eae98052fa6e2826bdac3dd2e921c6ce2903be15c6b7f8b6d8a5d49b5086298d
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.7.0"
+ exif:
+ dependency: "direct main"
+ description:
+ name: exif
+ sha256: a7980fdb3b7ffcd0b035e5b8a5e1eef7cadfe90ea6a4e85ebb62f87b96c7a172
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.3.0"
+ fake_async:
+ dependency: transitive
+ description:
+ name: fake_async
+ sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.3.1"
+ ffi:
+ dependency: transitive
+ description:
+ name: ffi
+ sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.3"
+ file:
+ dependency: transitive
+ description:
+ name: file
+ sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c"
+ url: "https://pub.dev"
+ source: hosted
+ version: "7.0.0"
+ firebase_analytics:
+ dependency: "direct main"
+ description:
+ name: firebase_analytics
+ sha256: fd94117b8160022a57af063dcd856fae2d9a29b6e3bbfcb078e77b87ccecbd3f
+ url: "https://pub.dev"
+ source: hosted
+ version: "10.6.2"
+ firebase_analytics_platform_interface:
+ dependency: transitive
+ description:
+ name: firebase_analytics_platform_interface
+ sha256: "42bb0ffc4087dbbfdc7e89514c1b86e55fbbdebd42fdb59efda05f8dd2606a62"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.7.4"
+ firebase_analytics_web:
+ dependency: transitive
+ description:
+ name: firebase_analytics_web
+ sha256: ad82db058df608974900ee90afac88fa1cc1d2079bfb62f780d1ad7df6505161
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.5.5+4"
+ firebase_auth:
+ dependency: transitive
+ description:
+ name: firebase_auth
+ sha256: ee5e4f6e79483d1b39e2fe81cdef74f4c295c9865e150aefacd615eea96d3e7b
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.12.0"
+ firebase_auth_platform_interface:
+ dependency: transitive
+ description:
+ name: firebase_auth_platform_interface
+ sha256: a664a8f1dbf73e6a56fd41364bcd0ad24f8d9d57428b365199dc795ee52b7d27
+ url: "https://pub.dev"
+ source: hosted
+ version: "7.0.2"
+ firebase_auth_web:
+ dependency: transitive
+ description:
+ name: firebase_auth_web
+ sha256: "6a3c8c09c9ffcfea83ac4ce3d18d8b4c467c77d57713b2d786fd69ece5bb4a48"
+ url: "https://pub.dev"
+ source: hosted
+ version: "5.8.5"
+ firebase_core:
+ dependency: "direct main"
+ description:
+ name: firebase_core
+ sha256: "37299e4907391d7fac8c7ea059bb3292768cc07b72b6c6c777675cc58da2ef4d"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.20.0"
+ firebase_core_platform_interface:
+ dependency: transitive
+ description:
+ name: firebase_core_platform_interface
+ sha256: d7253d255ff10f85cfd2adaba9ac17bae878fa3ba577462451163bd9f1d1f0bf
+ url: "https://pub.dev"
+ source: hosted
+ version: "5.4.0"
+ firebase_core_web:
+ dependency: transitive
+ description:
+ name: firebase_core_web
+ sha256: fbc008cf390d909b823763064b63afefe9f02d8afdb13eb3f485b871afee956b
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.19.0"
+ firebase_crashlytics:
+ dependency: "direct main"
+ description:
+ name: firebase_crashlytics
+ sha256: d279ec1a3377df3762778e55ded07fe6d169d216713a44bbc624ae6218e35c3c
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.4.2"
+ firebase_crashlytics_platform_interface:
+ dependency: transitive
+ description:
+ name: firebase_crashlytics_platform_interface
+ sha256: "8a82ce2879e359134f5ce786048737b6385a65ec696d68cf0c27134a1c933676"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.6.10"
+ firebase_remote_config:
+ dependency: "direct main"
+ description:
+ name: firebase_remote_config
+ sha256: d701609add3ff2a79bbf36610563cd599f23e49f729933d944210a9aaf6d454a
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.3.2"
+ firebase_remote_config_platform_interface:
+ dependency: transitive
+ description:
+ name: firebase_remote_config_platform_interface
+ sha256: "262bf51f73ef18e5e46ab626c2e5c8d47dc41c96419b74e70b6359a001f3b657"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.10"
+ firebase_remote_config_web:
+ dependency: transitive
+ description:
+ name: firebase_remote_config_web
+ sha256: d752bf5ea858d7e77e3906e23af59be083201b370a1ec849b295edb1d07000b1
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.10"
+ fixnum:
+ dependency: transitive
+ description:
+ name: fixnum
+ sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.1"
+ flutter:
+ dependency: "direct main"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ flutter_bloc:
+ dependency: "direct main"
+ description:
+ name: flutter_bloc
+ sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a
+ url: "https://pub.dev"
+ source: hosted
+ version: "8.1.6"
+ flutter_driver:
+ dependency: transitive
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ flutter_localizations:
+ dependency: "direct main"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ flutter_native_splash:
+ dependency: "direct main"
+ description:
+ name: flutter_native_splash
+ sha256: "7062602e0dbd29141fb8eb19220b5871ca650be5197ab9c1f193a28b17537bc7"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.4.4"
+ flutter_plugin_android_lifecycle:
+ dependency: transitive
+ description:
+ name: flutter_plugin_android_lifecycle
+ sha256: "615a505aef59b151b46bbeef55b36ce2b6ed299d160c51d84281946f0aa0ce0e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.0.24"
+ flutter_secure_storage:
+ dependency: transitive
+ description:
+ name: flutter_secure_storage
+ sha256: "98352186ee7ad3639ccc77ad7924b773ff6883076ab952437d20f18a61f0a7c5"
+ url: "https://pub.dev"
+ source: hosted
+ version: "8.0.0"
+ flutter_secure_storage_linux:
+ dependency: transitive
+ description:
+ name: flutter_secure_storage_linux
+ sha256: bf7404619d7ab5c0a1151d7c4e802edad8f33535abfbeff2f9e1fe1274e2d705
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.2.2"
+ flutter_secure_storage_macos:
+ dependency: transitive
+ description:
+ name: flutter_secure_storage_macos
+ sha256: "6c0a2795a2d1de26ae202a0d78527d163f4acbb11cde4c75c670f3a0fc064247"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.1.3"
+ flutter_secure_storage_platform_interface:
+ dependency: transitive
+ description:
+ name: flutter_secure_storage_platform_interface
+ sha256: cf91ad32ce5adef6fba4d736a542baca9daf3beac4db2d04be350b87f69ac4a8
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.2"
+ flutter_secure_storage_web:
+ dependency: transitive
+ description:
+ name: flutter_secure_storage_web
+ sha256: f4ebff989b4f07b2656fb16b47852c0aab9fed9b4ec1c70103368337bc1886a9
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.2.1"
+ flutter_secure_storage_windows:
+ dependency: transitive
+ description:
+ name: flutter_secure_storage_windows
+ sha256: "38f9501c7cb6f38961ef0e1eacacee2b2d4715c63cc83fe56449c4d3d0b47255"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.1"
+ flutter_test:
+ dependency: "direct dev"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ flutter_web_plugins:
+ dependency: transitive
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ frontend_server_client:
+ dependency: transitive
+ description:
+ name: frontend_server_client
+ sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.0.0"
+ fuchsia_remote_debug_protocol:
+ dependency: transitive
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ glob:
+ dependency: transitive
+ description:
+ name: glob
+ sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.2"
+ golden_toolkit:
+ dependency: "direct dev"
+ description:
+ name: golden_toolkit
+ sha256: "8f74adab33154fe7b731395782797021f97d2edc52f7bfb85ff4f1b5c4a215f0"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.15.0"
+ google_fonts:
+ dependency: "direct dev"
+ description:
+ name: google_fonts
+ sha256: "6b6f10f0ce3c42f6552d1c70d2c28d764cf22bb487f50f66cca31dcd5194f4d6"
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.0.4"
+ graphs:
+ dependency: transitive
+ description:
+ name: graphs
+ sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.3.2"
+ html:
+ dependency: transitive
+ description:
+ name: html
+ sha256: "1fc58edeaec4307368c60d59b7e15b9d658b57d7f3125098b6294153c75337ec"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.15.5"
+ http:
+ dependency: transitive
+ description:
+ name: http
+ sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.13.5"
+ http_multi_server:
+ dependency: transitive
+ description:
+ name: http_multi_server
+ sha256: aa6199f908078bb1c5efb8d8638d4ae191aac11b311132c3ef48ce352fb52ef8
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.2.2"
+ http_parser:
+ dependency: transitive
+ description:
+ name: http_parser
+ sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571"
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.1.2"
+ image:
+ dependency: "direct dev"
+ description:
+ name: image
+ sha256: f31d52537dc417fdcde36088fdf11d191026fd5e4fae742491ebd40e5a8bea7d
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.3.0"
+ in_app_purchase:
+ dependency: transitive
+ description:
+ name: in_app_purchase
+ sha256: bdda02b5b11b56d5e29c7f0c57c433db3452b0c8ce1c37cbfcf1de52946efd9f
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.1.11"
+ in_app_purchase_android:
+ dependency: transitive
+ description:
+ name: in_app_purchase_android
+ sha256: c4b84caa4e2c7ffebda444c5033fd8423cc3a45a6e1066929bbbcd4daf665db5
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.3.0+15"
+ in_app_purchase_platform_interface:
+ dependency: transitive
+ description:
+ name: in_app_purchase_platform_interface
+ sha256: "1d353d38251da5b9fea6635c0ebfc6bb17a2d28d0e86ea5e083bf64244f1fb4c"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.0"
+ in_app_purchase_storekit:
+ dependency: transitive
+ description:
+ name: in_app_purchase_storekit
+ sha256: "250b3865da1f4abf0d0e1eda9556734ee22ab5ebfe47a59227d8d9aeaa1c03e8"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.3.20+2"
+ integration_test:
+ dependency: "direct dev"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ intl:
+ dependency: "direct main"
+ description:
+ name: intl
+ sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.19.0"
+ intl_utils:
+ dependency: "direct main"
+ description:
+ name: intl_utils
+ sha256: c2b1f5c72c25512cbeef5ab015c008fc50fe7e04813ba5541c25272300484bf4
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.8.7"
+ io:
+ dependency: transitive
+ description:
+ name: io
+ sha256: dfd5a80599cf0165756e3181807ed3e77daf6dd4137caaad72d0b7931597650b
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.5"
+ js:
+ dependency: transitive
+ description:
+ name: js
+ sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.6.7"
+ json_annotation:
+ dependency: transitive
+ description:
+ name: json_annotation
+ sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.9.0"
+ leak_tracker:
+ dependency: transitive
+ description:
+ name: leak_tracker
+ sha256: "7bb2830ebd849694d1ec25bf1f44582d6ac531a57a365a803a6034ff751d2d06"
+ url: "https://pub.dev"
+ source: hosted
+ version: "10.0.7"
+ leak_tracker_flutter_testing:
+ dependency: transitive
+ description:
+ name: leak_tracker_flutter_testing
+ sha256: "9491a714cca3667b60b5c420da8217e6de0d1ba7a5ec322fab01758f6998f379"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.8"
+ leak_tracker_testing:
+ dependency: transitive
+ description:
+ name: leak_tracker_testing
+ sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.1"
+ light_sensor:
+ dependency: "direct main"
+ description:
+ name: light_sensor
+ sha256: "669c71e5f4484a237f1f749c1b602b72d3c8b54977d7d0200d189356b32ec96e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.0"
+ lint:
+ dependency: "direct dev"
+ description:
+ name: lint
+ sha256: d758a5211fce7fd3f5e316f804daefecdc34c7e53559716125e6da7388ae8565
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.3.0"
+ logging:
+ dependency: "direct dev"
+ description:
+ name: logging
+ sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.3.0"
+ m3_lightmeter_iap:
+ dependency: "direct main"
+ description:
+ path: "."
+ ref: "v2.1.0"
+ resolved-ref: "451a1fc38f3eb1aedff35e550c169fddd3c7c857"
+ url: "https://github.com/vodemn/m3_lightmeter_iap"
+ source: git
+ version: "2.1.0+27"
+ m3_lightmeter_resources:
+ dependency: "direct main"
+ description:
+ path: "."
+ ref: "v2.1.0"
+ resolved-ref: "0e6eefe534adce851df639dcd28463a9089e5b92"
+ url: "https://github.com/vodemn/m3_lightmeter_resources"
+ source: git
+ version: "2.1.0+9"
+ macros:
+ dependency: transitive
+ description:
+ name: macros
+ sha256: "1d9e801cd66f7ea3663c45fc708450db1fa57f988142c64289142c9b7ee80656"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.1.3-main.0"
+ matcher:
+ dependency: transitive
+ description:
+ name: matcher
+ sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.12.16+1"
+ material_color_utilities:
+ dependency: "direct main"
+ description:
+ name: material_color_utilities
+ sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.11.1"
+ meta:
+ dependency: "direct dev"
+ description:
+ name: meta
+ sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.15.0"
+ mime:
+ dependency: transitive
+ description:
+ name: mime
+ sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.0.0"
+ mocktail:
+ dependency: "direct dev"
+ description:
+ name: mocktail
+ sha256: "890df3f9688106f25755f26b1c60589a92b3ab91a22b8b224947ad041bf172d8"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.4"
+ nested:
+ dependency: transitive
+ description:
+ name: nested
+ sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.0"
+ node_preamble:
+ dependency: transitive
+ description:
+ name: node_preamble
+ sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.0.2"
+ package_config:
+ dependency: transitive
+ description:
+ name: package_config
+ sha256: "92d4488434b520a62570293fbd33bb556c7d49230791c1b4bbd973baf6d2dc67"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.1"
+ package_info_plus:
+ dependency: "direct main"
+ description:
+ name: package_info_plus
+ sha256: "7e76fad405b3e4016cd39d08f455a4eb5199723cf594cd1b8916d47140d93017"
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.2.0"
+ package_info_plus_platform_interface:
+ dependency: transitive
+ description:
+ name: package_info_plus_platform_interface
+ sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.0.1"
+ path:
+ dependency: transitive
+ description:
+ name: path
+ sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.9.0"
+ path_provider:
+ dependency: transitive
+ description:
+ name: path_provider
+ sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.5"
+ path_provider_android:
+ dependency: transitive
+ description:
+ name: path_provider_android
+ sha256: "4adf4fd5423ec60a29506c76581bc05854c55e3a0b72d35bb28d661c9686edf2"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.15"
+ path_provider_foundation:
+ dependency: transitive
+ description:
+ name: path_provider_foundation
+ sha256: "4843174df4d288f5e29185bd6e72a6fbdf5a4a4602717eed565497429f179942"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.4.1"
+ path_provider_linux:
+ dependency: transitive
+ description:
+ name: path_provider_linux
+ sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.1"
+ path_provider_platform_interface:
+ dependency: transitive
+ description:
+ name: path_provider_platform_interface
+ sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.2"
+ path_provider_windows:
+ dependency: transitive
+ description:
+ name: path_provider_windows
+ sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.3.0"
+ permission_handler:
+ dependency: "direct main"
+ description:
+ name: permission_handler
+ sha256: "18bf33f7fefbd812f37e72091a15575e72d5318854877e0e4035a24ac1113ecb"
+ url: "https://pub.dev"
+ source: hosted
+ version: "11.3.1"
+ permission_handler_android:
+ dependency: transitive
+ description:
+ name: permission_handler_android
+ sha256: "71bbecfee799e65aff7c744761a57e817e73b738fedf62ab7afd5593da21f9f1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "12.0.13"
+ permission_handler_apple:
+ dependency: transitive
+ description:
+ name: permission_handler_apple
+ sha256: e6f6d73b12438ef13e648c4ae56bd106ec60d17e90a59c4545db6781229082a0
+ url: "https://pub.dev"
+ source: hosted
+ version: "9.4.5"
+ permission_handler_html:
+ dependency: transitive
+ description:
+ name: permission_handler_html
+ sha256: "38f000e83355abb3392140f6bc3030660cfaef189e1f87824facb76300b4ff24"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.1.3+5"
+ permission_handler_platform_interface:
+ dependency: transitive
+ description:
+ name: permission_handler_platform_interface
+ sha256: e9c8eadee926c4532d0305dff94b85bf961f16759c3af791486613152af4b4f9
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.2.3"
+ permission_handler_windows:
+ dependency: transitive
+ description:
+ name: permission_handler_windows
+ sha256: "1a790728016f79a41216d88672dbc5df30e686e811ad4e698bfc51f76ad91f1e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.2.1"
+ petitparser:
+ dependency: transitive
+ description:
+ name: petitparser
+ sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27
+ url: "https://pub.dev"
+ source: hosted
+ version: "6.0.2"
+ platform:
+ dependency: "direct main"
+ description:
+ name: platform
+ sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.1.5"
+ plugin_platform_interface:
+ dependency: transitive
+ description:
+ name: plugin_platform_interface
+ sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.8"
+ pool:
+ dependency: transitive
+ description:
+ name: pool
+ sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.5.1"
+ process:
+ dependency: transitive
+ description:
+ name: process
+ sha256: "21e54fd2faf1b5bdd5102afd25012184a6793927648ea81eea80552ac9405b32"
+ url: "https://pub.dev"
+ source: hosted
+ version: "5.0.2"
+ provider:
+ dependency: transitive
+ description:
+ name: provider
+ sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c
+ url: "https://pub.dev"
+ source: hosted
+ version: "6.1.2"
+ pub_semver:
+ dependency: transitive
+ description:
+ name: pub_semver
+ sha256: "7b3cfbf654f3edd0c6298ecd5be782ce997ddf0e00531b9464b55245185bbbbd"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.5"
+ pubspec_parse:
+ dependency: transitive
+ description:
+ name: pubspec_parse
+ sha256: "81876843eb50dc2e1e5b151792c9a985c5ed2536914115ed04e9c8528f6647b0"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.0"
+ shared_preferences:
+ dependency: "direct main"
+ description:
+ name: shared_preferences
+ sha256: "0344316c947ffeb3a529eac929e1978fcd37c26be4e8468628bac399365a3ca1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.0"
+ shared_preferences_android:
+ dependency: transitive
+ description:
+ name: shared_preferences_android
+ sha256: "02a7d8a9ef346c9af715811b01fbd8e27845ad2c41148eefd31321471b41863d"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.4.0"
+ shared_preferences_foundation:
+ dependency: transitive
+ description:
+ name: shared_preferences_foundation
+ sha256: "6a52cfcdaeac77cad8c97b539ff688ccfc458c007b4db12be584fbe5c0e49e03"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.5.4"
+ shared_preferences_linux:
+ dependency: transitive
+ description:
+ name: shared_preferences_linux
+ sha256: "580abfd40f415611503cae30adf626e6656dfb2f0cee8f465ece7b6defb40f2f"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.4.1"
+ shared_preferences_platform_interface:
+ dependency: transitive
+ description:
+ name: shared_preferences_platform_interface
+ sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.4.1"
+ shared_preferences_web:
+ dependency: transitive
+ description:
+ name: shared_preferences_web
+ sha256: d2ca4132d3946fec2184261726b355836a82c33d7d5b67af32692aff18a4684e
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.4.2"
+ shared_preferences_windows:
+ dependency: transitive
+ description:
+ name: shared_preferences_windows
+ sha256: "94ef0f72b2d71bc3e700e025db3710911bd51a71cefb65cc609dd0d9a982e3c1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.4.1"
+ shelf:
+ dependency: transitive
+ description:
+ name: shelf
+ sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.2"
+ shelf_packages_handler:
+ dependency: transitive
+ description:
+ name: shelf_packages_handler
+ sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.2"
+ shelf_static:
+ dependency: transitive
+ description:
+ name: shelf_static
+ sha256: c87c3875f91262785dade62d135760c2c69cb217ac759485334c5857ad89f6e3
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.3"
+ shelf_web_socket:
+ dependency: transitive
+ description:
+ name: shelf_web_socket
+ sha256: cc36c297b52866d203dbf9332263c94becc2fe0ceaa9681d07b6ef9807023b67
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.0.1"
+ sky_engine:
+ dependency: transitive
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ source_map_stack_trace:
+ dependency: transitive
+ description:
+ name: source_map_stack_trace
+ sha256: c0713a43e323c3302c2abe2a1cc89aa057a387101ebd280371d6a6c9fa68516b
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.2"
+ source_maps:
+ dependency: transitive
+ description:
+ name: source_maps
+ sha256: "190222579a448b03896e0ca6eca5998fa810fda630c1d65e2f78b3f638f54812"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.10.13"
+ source_span:
+ dependency: transitive
+ description:
+ name: source_span
+ sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.10.0"
+ sprintf:
+ dependency: transitive
+ description:
+ name: sprintf
+ sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23"
+ url: "https://pub.dev"
+ source: hosted
+ version: "7.0.0"
+ sqflite:
+ dependency: transitive
+ description:
+ name: sqflite
+ sha256: "591f1602816e9c31377d5f008c2d9ef7b8aca8941c3f89cc5fd9d84da0c38a9a"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.3.0"
+ sqflite_common:
+ dependency: transitive
+ description:
+ name: sqflite_common
+ sha256: "761b9740ecbd4d3e66b8916d784e581861fd3c3553eda85e167bc49fdb68f709"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.5.4+6"
+ stack_trace:
+ dependency: transitive
+ description:
+ name: stack_trace
+ sha256: "9f47fd3630d76be3ab26f0ee06d213679aa425996925ff3feffdec504931c377"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.12.0"
+ stream_channel:
+ dependency: transitive
+ description:
+ name: stream_channel
+ sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.2"
+ stream_transform:
+ dependency: transitive
+ description:
+ name: stream_transform
+ sha256: ad47125e588cfd37a9a7f86c7d6356dde8dfe89d071d293f80ca9e9273a33871
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.1"
+ string_scanner:
+ dependency: transitive
+ description:
+ name: string_scanner
+ sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.3.0"
+ sync_http:
+ dependency: transitive
+ description:
+ name: sync_http
+ sha256: "7f0cd72eca000d2e026bcd6f990b81d0ca06022ef4e32fb257b30d3d1014a961"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.3.1"
+ synchronized:
+ dependency: transitive
+ description:
+ name: synchronized
+ sha256: "69fe30f3a8b04a0be0c15ae6490fc859a78ef4c43ae2dd5e8a623d45bfcf9225"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.3.0+3"
+ term_glyph:
+ dependency: transitive
+ description:
+ name: term_glyph
+ sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.2.1"
+ test:
+ dependency: "direct dev"
+ description:
+ name: test
+ sha256: "713a8789d62f3233c46b4a90b174737b2c04cb6ae4500f2aa8b1be8f03f5e67f"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.25.8"
+ test_api:
+ dependency: transitive
+ description:
+ name: test_api
+ sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.7.3"
+ test_core:
+ dependency: transitive
+ description:
+ name: test_core
+ sha256: "12391302411737c176b0b5d6491f466b0dd56d4763e347b6714efbaa74d7953d"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.6.5"
+ timing:
+ dependency: transitive
+ description:
+ name: timing
+ sha256: "62ee18aca144e4a9f29d212f5a4c6a053be252b895ab14b5821996cff4ed90fe"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.2"
+ typed_data:
+ dependency: transitive
+ description:
+ name: typed_data
+ sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.0"
+ universal_io:
+ dependency: transitive
+ description:
+ name: universal_io
+ sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.2"
+ url_launcher:
+ dependency: "direct main"
+ description:
+ name: url_launcher
+ sha256: "9d06212b1362abc2f0f0d78e6f09f726608c74e3b9462e8368bb03314aa8d603"
+ url: "https://pub.dev"
+ source: hosted
+ version: "6.3.1"
+ url_launcher_android:
+ dependency: transitive
+ description:
+ name: url_launcher_android
+ sha256: "6fc2f56536ee873eeb867ad176ae15f304ccccc357848b351f6f0d8d4a40d193"
+ url: "https://pub.dev"
+ source: hosted
+ version: "6.3.14"
+ url_launcher_ios:
+ dependency: "direct main"
+ description:
+ name: url_launcher_ios
+ sha256: "16a513b6c12bb419304e72ea0ae2ab4fed569920d1c7cb850263fe3acc824626"
+ url: "https://pub.dev"
+ source: hosted
+ version: "6.3.2"
+ url_launcher_linux:
+ dependency: transitive
+ description:
+ name: url_launcher_linux
+ sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.2.1"
+ url_launcher_macos:
+ dependency: transitive
+ description:
+ name: url_launcher_macos
+ sha256: "17ba2000b847f334f16626a574c702b196723af2a289e7a93ffcb79acff855c2"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.2.2"
+ url_launcher_platform_interface:
+ dependency: transitive
+ description:
+ name: url_launcher_platform_interface
+ sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.3.2"
+ url_launcher_web:
+ dependency: transitive
+ description:
+ name: url_launcher_web
+ sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.3.3"
+ url_launcher_windows:
+ dependency: transitive
+ description:
+ name: url_launcher_windows
+ sha256: "44cf3aabcedde30f2dba119a9dea3b0f2672fbe6fa96e85536251d678216b3c4"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.1.3"
+ uuid:
+ dependency: "direct main"
+ description:
+ name: uuid
+ sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.7"
+ vector_math:
+ dependency: transitive
+ description:
+ name: vector_math
+ sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.4"
+ vibration:
+ dependency: "direct main"
+ description:
+ name: vibration
+ sha256: f0af02af2d63132135ae0332a3e54d5de718e214ee94c4f082176ef6ce624a4b
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.0.1"
+ vibration_platform_interface:
+ dependency: transitive
+ description:
+ name: vibration_platform_interface
+ sha256: f66b39aab2447038978c16f3d6f77228e49ef5717556e3da02313e044e4a7600
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.0.2"
+ vm_service:
+ dependency: transitive
+ description:
+ name: vm_service
+ sha256: f6be3ed8bd01289b34d679c2b62226f63c0e69f9fd2e50a6b3c1c729a961041b
+ url: "https://pub.dev"
+ source: hosted
+ version: "14.3.0"
+ watcher:
+ dependency: transitive
+ description:
+ name: watcher
+ sha256: "69da27e49efa56a15f8afe8f4438c4ec02eff0a117df1b22ea4aad194fe1c104"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.1"
+ web:
+ dependency: transitive
+ description:
+ name: web
+ sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.0"
+ web_socket:
+ dependency: transitive
+ description:
+ name: web_socket
+ sha256: "3c12d96c0c9a4eec095246debcea7b86c0324f22df69893d538fcc6f1b8cce83"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.1.6"
+ web_socket_channel:
+ dependency: transitive
+ description:
+ name: web_socket_channel
+ sha256: "9f187088ed104edd8662ca07af4b124465893caf063ba29758f97af57e61da8f"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.1"
+ webdriver:
+ dependency: transitive
+ description:
+ name: webdriver
+ sha256: "3d773670966f02a646319410766d3b5e1037efb7f07cc68f844d5e06cd4d61c8"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.4"
+ webkit_inspection_protocol:
+ dependency: transitive
+ description:
+ name: webkit_inspection_protocol
+ sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.2.1"
+ win32:
+ dependency: transitive
+ description:
+ name: win32
+ sha256: "154360849a56b7b67331c21f09a386562d88903f90a1099c5987afc1912e1f29"
+ url: "https://pub.dev"
+ source: hosted
+ version: "5.10.0"
+ win32_registry:
+ dependency: transitive
+ description:
+ name: win32_registry
+ sha256: "21ec76dfc731550fd3e2ce7a33a9ea90b828fdf19a5c3bcf556fa992cfa99852"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.5"
+ xdg_directories:
+ dependency: transitive
+ description:
+ name: xdg_directories
+ sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.0"
+ xml:
+ dependency: transitive
+ description:
+ name: xml
+ sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226
+ url: "https://pub.dev"
+ source: hosted
+ version: "6.5.0"
+ yaml:
+ dependency: transitive
+ description:
+ name: yaml
+ sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.1.3"
+sdks:
+ dart: ">=3.6.0 <4.0.0"
+ flutter: ">=3.24.0"
From 2c9ca4551713359b5763efa5e3d0829b24feeaf2 Mon Sep 17 00:00:00 2001
From: Vadim <44135514+vodemn@users.noreply.github.com>
Date: Mon, 6 Jan 2025 12:29:39 +0100
Subject: [PATCH 04/18] fixed ios build
---
ios/Flutter/AppFrameworkInfo.plist | 2 +-
ios/Podfile | 10 ++++++
ios/Runner.xcodeproj/project.pbxproj | 50 ++++++++++++++++++++--------
ios/Runner/AppDelegate.swift | 2 +-
4 files changed, 49 insertions(+), 15 deletions(-)
diff --git a/ios/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist
index 9625e10..7c56964 100644
--- a/ios/Flutter/AppFrameworkInfo.plist
+++ b/ios/Flutter/AppFrameworkInfo.plist
@@ -21,6 +21,6 @@
CFBundleVersion
1.0
MinimumOSVersion
- 11.0
+ 12.0
diff --git a/ios/Podfile b/ios/Podfile
index 5588975..c353189 100644
--- a/ios/Podfile
+++ b/ios/Podfile
@@ -36,6 +36,16 @@ end
post_install do |installer|
installer.pods_project.targets.each do |target|
+ if target.name == 'BoringSSL-GRPC'
+ target.source_build_phase.files.each do |file|
+ if file.settings && file.settings['COMPILER_FLAGS']
+ flags = file.settings['COMPILER_FLAGS'].split
+ flags.reject! { |flag| flag == '-GCC_WARN_INHIBIT_ALL_WARNINGS' }
+ file.settings['COMPILER_FLAGS'] = flags.join(' ')
+ end
+ end
+ end
+
flutter_additional_ios_build_settings(target)
target.build_configurations.each do |config|
diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj
index 7d56341..f49a9ab 100644
--- a/ios/Runner.xcodeproj/project.pbxproj
+++ b/ios/Runner.xcodeproj/project.pbxproj
@@ -155,6 +155,7 @@
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
45F53C083F2EA48EF231DA16 /* [CP] Embed Pods Frameworks */,
FF00F85CE432774850A0EDB7 /* [firebase_crashlytics] Crashlytics Upload Symbols */,
+ 08127035D2CDEEEBA66FCDBB /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@@ -171,7 +172,7 @@
97C146E61CF9000F007C117D /* Project object */ = {
isa = PBXProject;
attributes = {
- LastUpgradeCheck = 1300;
+ LastUpgradeCheck = 1510;
ORGANIZATIONNAME = "";
TargetAttributes = {
97C146ED1CF9000F007C117D = {
@@ -214,6 +215,23 @@
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
+ 08127035D2CDEEEBA66FCDBB /* [CP] Copy Pods Resources */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
+ );
+ name = "[CP] Copy Pods Resources";
+ outputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
385E047940E442D45ED68E6E /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
@@ -292,11 +310,11 @@
inputFileListPaths = (
);
inputPaths = (
- "\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}\"",
- "\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/\"",
- "\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\"",
- "\"$(TARGET_BUILD_DIR)/$(EXECUTABLE_PATH)\"",
- "\"$(PROJECT_DIR)/firebase_app_id_file.json\"",
+ "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}",
+ "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${PRODUCT_NAME}",
+ "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist",
+ "$(BUILT_PRODUCTS_DIR)/$(UNLOCALIZED_RESOURCES_FOLDER_PATH)/GoogleService-Info.plist",
+ "$(BUILT_PRODUCTS_DIR)/$(EXECUTABLE_PATH)",
);
name = "[firebase_crashlytics] Crashlytics Upload Symbols";
outputFileListPaths = (
@@ -305,7 +323,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "\"$PODS_ROOT/FirebaseCrashlytics/upload-symbols\" --flutter-project \"$PROJECT_DIR/firebase_app_id_file.json\" ";
+ shellScript = "\"${PODS_ROOT}/FirebaseCrashlytics/upload-symbols\" -gsp \"${PROJECT_DIR}/Runner/GoogleService-Info.plist\" -p ios \"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}\"\n";
};
/* End PBXShellScriptBuildPhase section */
@@ -382,7 +400,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
@@ -397,6 +415,7 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-prod";
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO;
+ CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
@@ -466,7 +485,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
@@ -515,7 +534,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
@@ -532,6 +551,7 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-prod";
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO;
+ CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
@@ -561,6 +581,7 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-prod";
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO;
+ CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
@@ -633,7 +654,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
@@ -647,6 +668,7 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-dev";
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO;
+ CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
@@ -711,7 +733,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
@@ -728,6 +750,7 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-dev";
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO;
+ CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
@@ -791,7 +814,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
@@ -806,6 +829,7 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-dev";
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO;
+ CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift
index 5dc5452..b43b14e 100644
--- a/ios/Runner/AppDelegate.swift
+++ b/ios/Runner/AppDelegate.swift
@@ -1,7 +1,7 @@
import UIKit
import Flutter
-@UIApplicationMain
+@main
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
From beee9d8a6e6999a5b5f7313c93c946ed74f2d27c Mon Sep 17 00:00:00 2001
From: Vadim <44135514+vodemn@users.noreply.github.com>
Date: Mon, 6 Jan 2025 15:00:26 +0100
Subject: [PATCH 05/18] deleted `ExpandableSectionList`
---
.../widget_dialog_section_name.dart | 56 ------
.../widget_expandable_section_list_item.dart | 184 ------------------
.../widget_expandable_section_list.dart | 95 ---------
3 files changed, 335 deletions(-)
delete mode 100644 lib/screens/settings/components/shared/expandable_section_list/components/dialog_section_name/widget_dialog_section_name.dart
delete mode 100644 lib/screens/settings/components/shared/expandable_section_list/components/expandable_section_list_item/widget_expandable_section_list_item.dart
delete mode 100644 lib/screens/settings/components/shared/expandable_section_list/widget_expandable_section_list.dart
diff --git a/lib/screens/settings/components/shared/expandable_section_list/components/dialog_section_name/widget_dialog_section_name.dart b/lib/screens/settings/components/shared/expandable_section_list/components/dialog_section_name/widget_dialog_section_name.dart
deleted file mode 100644
index 4fa2edc..0000000
--- a/lib/screens/settings/components/shared/expandable_section_list/components/dialog_section_name/widget_dialog_section_name.dart
+++ /dev/null
@@ -1,56 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:lightmeter/generated/l10n.dart';
-import 'package:lightmeter/res/dimens.dart';
-
-class ExpandableSectionNameDialog extends StatefulWidget {
- final String title;
- final String hint;
- final String initialValue;
-
- const ExpandableSectionNameDialog({
- this.initialValue = '',
- required this.title,
- required this.hint,
- super.key,
- });
-
- @override
- State createState() => _ExpandableSectionNameDialogState();
-}
-
-class _ExpandableSectionNameDialogState extends State {
- late final _nameController = TextEditingController(text: widget.initialValue);
-
- @override
- void dispose() {
- _nameController.dispose();
- super.dispose();
- }
-
- @override
- Widget build(BuildContext context) {
- return AlertDialog(
- icon: const Icon(Icons.edit_outlined),
- titlePadding: Dimens.dialogIconTitlePadding,
- title: Text(widget.title),
- content: TextField(
- autofocus: true,
- controller: _nameController,
- decoration: InputDecoration(hintText: widget.hint),
- ),
- actions: [
- TextButton(
- onPressed: Navigator.of(context).pop,
- child: Text(S.of(context).cancel),
- ),
- ValueListenableBuilder(
- valueListenable: _nameController,
- builder: (_, value, __) => TextButton(
- onPressed: value.text.isNotEmpty ? () => Navigator.of(context).pop(value.text) : null,
- child: Text(S.of(context).save),
- ),
- ),
- ],
- );
- }
-}
diff --git a/lib/screens/settings/components/shared/expandable_section_list/components/expandable_section_list_item/widget_expandable_section_list_item.dart b/lib/screens/settings/components/shared/expandable_section_list/components/expandable_section_list_item/widget_expandable_section_list_item.dart
deleted file mode 100644
index 28e1926..0000000
--- a/lib/screens/settings/components/shared/expandable_section_list/components/expandable_section_list_item/widget_expandable_section_list_item.dart
+++ /dev/null
@@ -1,184 +0,0 @@
-import 'dart:math';
-
-import 'package:flutter/material.dart';
-import 'package:flutter/scheduler.dart';
-import 'package:lightmeter/generated/l10n.dart';
-import 'package:lightmeter/res/dimens.dart';
-
-class ExpandableSectionListItem extends StatefulWidget {
- final String title;
- final VoidCallback onTitleTap;
- final VoidCallback onExpand;
- final List actions;
- final List children;
-
- const ExpandableSectionListItem({
- required this.title,
- required this.onTitleTap,
- required this.onExpand,
- required this.actions,
- required this.children,
- super.key,
- });
-
- static ExpandableSectionListItemState of(BuildContext context) {
- return context.findAncestorStateOfType()!;
- }
-
- @override
- State createState() => ExpandableSectionListItemState();
-}
-
-class ExpandableSectionListItemState extends State with TickerProviderStateMixin {
- late final AnimationController _controller = AnimationController(
- duration: Dimens.durationM,
- vsync: this,
- );
- bool get _expanded => _controller.isCompleted;
-
- @override
- void dispose() {
- _controller.dispose();
- super.dispose();
- }
-
- @override
- Widget build(BuildContext context) {
- return Card(
- child: Padding(
- padding: const EdgeInsets.symmetric(vertical: Dimens.paddingM),
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- mainAxisSize: MainAxisSize.min,
- children: [
- ListTile(
- contentPadding: const EdgeInsets.symmetric(horizontal: Dimens.paddingM),
- title: Row(
- children: [
- _AnimatedNameLeading(controller: _controller),
- const SizedBox(width: Dimens.grid8),
- Flexible(
- child: Text(
- widget.title,
- maxLines: 1,
- overflow: TextOverflow.ellipsis,
- ),
- ),
- ],
- ),
- trailing: _AnimatedArrowButton(
- controller: _controller,
- onPressed: () => _expanded ? collapse() : expand(),
- ),
- onTap: () => _expanded ? widget.onTitleTap() : expand(),
- ),
- _AnimatedContent(
- controller: _controller,
- actions: widget.actions,
- children: widget.children,
- ),
- ],
- ),
- ),
- );
- }
-
- void expand() {
- widget.onExpand();
- _controller.forward();
- SchedulerBinding.instance.addPostFrameCallback((_) {
- Future.delayed(_controller.duration!).then((_) {
- Scrollable.ensureVisible(
- context,
- alignmentPolicy: ScrollPositionAlignmentPolicy.keepVisibleAtEnd,
- duration: _controller.duration!,
- );
- });
- });
- }
-
- void collapse() {
- _controller.reverse();
- }
-}
-
-class _AnimatedNameLeading extends AnimatedWidget {
- const _AnimatedNameLeading({required AnimationController controller}) : super(listenable: controller);
-
- Animation get _progress => listenable as Animation;
-
- @override
- Widget build(BuildContext context) {
- return Padding(
- padding: EdgeInsets.only(right: _progress.value * Dimens.grid8),
- child: Icon(
- Icons.edit_outlined,
- size: _progress.value * Dimens.grid24,
- ),
- );
- }
-}
-
-class _AnimatedArrowButton extends AnimatedWidget {
- final VoidCallback onPressed;
-
- const _AnimatedArrowButton({
- required AnimationController controller,
- required this.onPressed,
- }) : super(listenable: controller);
-
- Animation get _progress => listenable as Animation;
-
- @override
- Widget build(BuildContext context) {
- return IconButton(
- onPressed: onPressed,
- icon: Transform.rotate(
- angle: _progress.value * pi,
- child: const Icon(Icons.keyboard_arrow_down_outlined),
- ),
- tooltip: _progress.value == 0 ? S.of(context).tooltipExpand : S.of(context).tooltipCollapse,
- );
- }
-}
-
-class _AnimatedContent extends AnimatedWidget {
- final List actions;
- final List children;
-
- const _AnimatedContent({
- required AnimationController controller,
- required this.actions,
- required this.children,
- }) : super(listenable: controller);
-
- Animation get _progress => listenable as Animation;
-
- @override
- Widget build(BuildContext context) {
- return SizedOverflowBox(
- alignment: Alignment.topCenter,
- size: Size(
- double.maxFinite,
- _progress.value * Dimens.grid56 * (children.length + 1),
- ),
- // https://github.com/gskinnerTeam/flutter-folio/pull/62
- child: Opacity(
- opacity: _progress.value,
- child: Column(
- children: [
- ...children,
- ListTile(
- contentPadding: const EdgeInsets.symmetric(horizontal: Dimens.paddingM),
- trailing: Row(
- mainAxisAlignment: MainAxisAlignment.end,
- mainAxisSize: MainAxisSize.min,
- children: actions,
- ),
- ),
- ],
- ),
- ),
- );
- }
-}
diff --git a/lib/screens/settings/components/shared/expandable_section_list/widget_expandable_section_list.dart b/lib/screens/settings/components/shared/expandable_section_list/widget_expandable_section_list.dart
deleted file mode 100644
index 0fc5de2..0000000
--- a/lib/screens/settings/components/shared/expandable_section_list/widget_expandable_section_list.dart
+++ /dev/null
@@ -1,95 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:lightmeter/res/dimens.dart';
-import 'package:lightmeter/screens/settings/components/shared/expandable_section_list/components/expandable_section_list_item/widget_expandable_section_list_item.dart';
-import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart';
-
-typedef _WidgetBuilder = W Function(BuildContext context, T value);
-
-class ExpandableSectionList extends StatefulWidget {
- final List values;
- final VoidCallback onSectionTitleTap;
- final _WidgetBuilder, T> contentBuilder;
- final _WidgetBuilder, T> actionsBuilder;
-
- const ExpandableSectionList({
- required this.values,
- required this.onSectionTitleTap,
- required this.contentBuilder,
- required this.actionsBuilder,
- super.key,
- });
-
- @override
- State createState() => _ExpandableSectionListState();
-}
-
-class _ExpandableSectionListState extends State> {
- final Map> keysMap = {};
-
- @override
- void didChangeDependencies() {
- super.didChangeDependencies();
- _updateProfilesKeys();
- }
-
- @override
- Widget build(BuildContext context) {
- return SliverList(
- delegate: SliverChildBuilderDelegate(
- (context, index) {
- final item = widget.values[index];
- return Padding(
- padding: EdgeInsets.fromLTRB(
- Dimens.paddingM,
- index == 0 ? Dimens.paddingM : 0,
- Dimens.paddingM,
- Dimens.paddingM,
- ),
- child: ExpandableSectionListItem(
- key: keysMap[item.id],
- title: item.name,
- onTitleTap: widget.onSectionTitleTap,
- onExpand: () => _keepExpandedAt(index),
- actions: widget.actionsBuilder(context, item),
- children: widget.contentBuilder(context, item),
- ),
- );
- },
- childCount: widget.values.length,
- ),
- );
- }
-
- void _keepExpandedAt(int index) {
- keysMap.values.toList().getRange(0, index).forEach((element) {
- element.currentState?.collapse();
- });
- keysMap.values.toList().getRange(index + 1, keysMap.length).forEach((element) {
- element.currentState?.collapse();
- });
- }
-
- void _updateProfilesKeys() {
- if (widget.values.length > keysMap.length) {
- // item added
- final List idsToAdd = [];
- for (final item in widget.values) {
- if (!keysMap.keys.contains(item.id)) idsToAdd.add(item.id);
- }
- for (final id in idsToAdd) {
- keysMap[id] = GlobalKey(debugLabel: id);
- }
- idsToAdd.clear();
- } else if (widget.values.length < keysMap.length) {
- // item deleted
- final List idsToDelete = [];
- for (final id in keysMap.keys) {
- if (!widget.values.any((p) => p.id == id)) idsToDelete.add(id);
- }
- idsToDelete.forEach(keysMap.remove);
- idsToDelete.clear();
- } else {
- // item updated, no need to updated keys
- }
- }
-}
From 8a41ebcb2928c4bb36d219e11faad4271ed2a640 Mon Sep 17 00:00:00 2001
From: Vadim <44135514+vodemn@users.noreply.github.com>
Date: Mon, 6 Jan 2025 15:03:32 +0100
Subject: [PATCH 06/18] removed redundant default cases
---
lib/data/models/metering_screen_layout_config.dart | 4 +---
.../components/camera_container/bloc_container_camera.dart | 1 -
2 files changed, 1 insertion(+), 4 deletions(-)
diff --git a/lib/data/models/metering_screen_layout_config.dart b/lib/data/models/metering_screen_layout_config.dart
index a558202..64bc60c 100644
--- a/lib/data/models/metering_screen_layout_config.dart
+++ b/lib/data/models/metering_screen_layout_config.dart
@@ -8,7 +8,7 @@ typedef MeteringScreenLayoutConfig = Map;
extension MeteringScreenLayoutConfigJson on MeteringScreenLayoutConfig {
static MeteringScreenLayoutConfig fromJson(Map data) {
- int? migratedIndex(MeteringScreenLayoutFeature feature) {
+ int migratedIndex(MeteringScreenLayoutFeature feature) {
switch (feature) {
case MeteringScreenLayoutFeature.extremeExposurePairs:
return 0;
@@ -16,8 +16,6 @@ extension MeteringScreenLayoutConfigJson on MeteringScreenLayoutConfig {
return 1;
case MeteringScreenLayoutFeature.equipmentProfiles:
return 3;
- default:
- return null;
}
}
diff --git a/lib/screens/metering/components/camera_container/bloc_container_camera.dart b/lib/screens/metering/components/camera_container/bloc_container_camera.dart
index 08bfee4..fd81b68 100644
--- a/lib/screens/metering/components/camera_container/bloc_container_camera.dart
+++ b/lib/screens/metering/components/camera_container/bloc_container_camera.dart
@@ -91,7 +91,6 @@ class CameraContainerBloc extends EvSourceBlocBase
Date: Mon, 6 Jan 2025 15:06:58 +0100
Subject: [PATCH 07/18] avoided async gaps
---
.../widget_dialog_animated.dart | 8 +++-
lib/screens/metering/screen_metering.dart | 11 +++--
.../widget_list_tile_write_email.dart | 43 ++++++++++++-------
.../language/widget_list_tile_language.dart | 5 ++-
.../widget_list_tile_fractional_stops.dart | 3 +-
.../widget_list_tile_primary_color.dart | 3 +-
.../widget_list_tile_theme_type.dart | 3 +-
.../flow_dialog_release_notes.dart | 3 +-
8 files changed, 53 insertions(+), 26 deletions(-)
diff --git a/lib/screens/metering/components/shared/readings_container/components/shared/animated_dialog_picker/components/animated_dialog/widget_dialog_animated.dart b/lib/screens/metering/components/shared/readings_container/components/shared/animated_dialog_picker/components/animated_dialog/widget_dialog_animated.dart
index 63bd1e6..264bbbd 100644
--- a/lib/screens/metering/components/shared/readings_container/components/shared/animated_dialog_picker/components/animated_dialog/widget_dialog_animated.dart
+++ b/lib/screens/metering/components/shared/readings_container/components/shared/animated_dialog_picker/components/animated_dialog/widget_dialog_animated.dart
@@ -221,7 +221,13 @@ class AnimatedDialogState extends State with SingleTickerProvide
});
}
- Future close() => _animateReverse().then((_) => Navigator.of(context).pop());
+ Future close() {
+ return _animateReverse().then((_) {
+ if (mounted) {
+ Navigator.of(context).pop();
+ }
+ });
+ }
}
class _AnimatedOverlay extends StatelessWidget {
diff --git a/lib/screens/metering/screen_metering.dart b/lib/screens/metering/screen_metering.dart
index 7771bf2..417d330 100644
--- a/lib/screens/metering/screen_metering.dart
+++ b/lib/screens/metering/screen_metering.dart
@@ -69,9 +69,14 @@ class MeteringScreen extends StatelessWidget {
}
void pushNamed(BuildContext context, String routeName, {Object? arguments}) {
- context.read().add(const ScreenOnTopOpenedEvent());
- Navigator.pushNamed(context, routeName, arguments: arguments).then((_) {
- context.read().add(const ScreenOnTopClosedEvent());
+ final bloc = context.read();
+ bloc.add(const ScreenOnTopOpenedEvent());
+ Navigator.pushNamed(
+ context,
+ routeName,
+ arguments: arguments,
+ ).then((_) {
+ bloc.add(const ScreenOnTopClosedEvent());
});
}
}
diff --git a/lib/screens/settings/components/about/components/write_email/widget_list_tile_write_email.dart b/lib/screens/settings/components/about/components/write_email/widget_list_tile_write_email.dart
index aab959f..e5271ff 100644
--- a/lib/screens/settings/components/about/components/write_email/widget_list_tile_write_email.dart
+++ b/lib/screens/settings/components/about/components/write_email/widget_list_tile_write_email.dart
@@ -4,9 +4,14 @@ import 'package:lightmeter/constants.dart';
import 'package:lightmeter/generated/l10n.dart';
import 'package:url_launcher/url_launcher.dart';
-class WriteEmailListTile extends StatelessWidget {
+class WriteEmailListTile extends StatefulWidget {
const WriteEmailListTile({super.key});
+ @override
+ State createState() => _WriteEmailListTileState();
+}
+
+class _WriteEmailListTileState extends State {
@override
Widget build(BuildContext context) {
return ListTile(
@@ -20,24 +25,30 @@ class WriteEmailListTile extends StatelessWidget {
mailToUrl,
mode: LaunchMode.externalApplication,
);
- } else {
- ScaffoldMessenger.of(context).showSnackBar(
- SnackBar(
- content: Text(S.of(context).youDontHaveMailApp),
- behavior: SnackBarBehavior.floating,
- action: SnackBarAction(
- label: S.of(context).copyEmail,
- onPressed: () {
- FlutterClipboard.copy(contactEmail).then((_) {
- ScaffoldMessenger.of(context).clearSnackBars();
- });
- },
- ),
- ),
- );
+ } else if (mounted) {
+ _showSnackBar();
}
});
},
);
}
+
+ Future _showSnackBar() async {
+ ScaffoldMessenger.of(context).showSnackBar(
+ SnackBar(
+ content: Text(S.of(context).youDontHaveMailApp),
+ behavior: SnackBarBehavior.floating,
+ action: SnackBarAction(
+ label: S.of(context).copyEmail,
+ onPressed: () {
+ FlutterClipboard.copy(contactEmail).then((_) {
+ if (mounted) {
+ ScaffoldMessenger.of(context).clearSnackBars();
+ }
+ });
+ },
+ ),
+ ),
+ );
+ }
}
diff --git a/lib/screens/settings/components/general/components/language/widget_list_tile_language.dart b/lib/screens/settings/components/general/components/language/widget_list_tile_language.dart
index 14d8971..b2410b4 100644
--- a/lib/screens/settings/components/general/components/language/widget_list_tile_language.dart
+++ b/lib/screens/settings/components/general/components/language/widget_list_tile_language.dart
@@ -14,6 +14,7 @@ class LanguageListTile extends StatelessWidget {
title: Text(S.of(context).language),
trailing: Text(UserPreferencesProvider.localeOf(context).localizedName),
onTap: () {
+ final prefs = UserPreferencesProvider.of(context);
showDialog(
context: context,
builder: (_) => DialogPicker(
@@ -21,11 +22,11 @@ class LanguageListTile extends StatelessWidget {
title: S.of(context).chooseLanguage,
selectedValue: UserPreferencesProvider.localeOf(context),
values: SupportedLocale.values,
- titleAdapter: (context, value) => value.localizedName,
+ titleAdapter: (_, value) => value.localizedName,
),
).then((value) {
if (value != null) {
- UserPreferencesProvider.of(context).setLocale(value);
+ prefs.setLocale(value);
}
});
},
diff --git a/lib/screens/settings/components/metering/components/fractional_stops/widget_list_tile_fractional_stops.dart b/lib/screens/settings/components/metering/components/fractional_stops/widget_list_tile_fractional_stops.dart
index 90ab875..e97ef13 100644
--- a/lib/screens/settings/components/metering/components/fractional_stops/widget_list_tile_fractional_stops.dart
+++ b/lib/screens/settings/components/metering/components/fractional_stops/widget_list_tile_fractional_stops.dart
@@ -14,6 +14,7 @@ class StopTypeListTile extends StatelessWidget {
title: Text(S.of(context).fractionalStops),
trailing: Text(_typeToString(context, UserPreferencesProvider.stopTypeOf(context))),
onTap: () {
+ final prefs = UserPreferencesProvider.of(context);
showDialog(
context: context,
builder: (_) => DialogPicker(
@@ -25,7 +26,7 @@ class StopTypeListTile extends StatelessWidget {
),
).then((value) {
if (value != null) {
- UserPreferencesProvider.of(context).setStopType(value);
+ prefs.setStopType(value);
}
});
},
diff --git a/lib/screens/settings/components/theme/components/primary_color/widget_list_tile_primary_color.dart b/lib/screens/settings/components/theme/components/primary_color/widget_list_tile_primary_color.dart
index 6560d4c..1e66074 100644
--- a/lib/screens/settings/components/theme/components/primary_color/widget_list_tile_primary_color.dart
+++ b/lib/screens/settings/components/theme/components/primary_color/widget_list_tile_primary_color.dart
@@ -22,12 +22,13 @@ class PrimaryColorListTile extends StatelessWidget {
leading: const Icon(Icons.palette_outlined),
title: Text(S.of(context).primaryColor),
onTap: () {
+ final prefs = UserPreferencesProvider.of(context);
showDialog(
context: context,
builder: (_) => const PrimaryColorDialogPicker(),
).then((value) {
if (value != null) {
- UserPreferencesProvider.of(context).setPrimaryColor(value);
+ prefs.setPrimaryColor(value);
}
});
},
diff --git a/lib/screens/settings/components/theme/components/theme_type/widget_list_tile_theme_type.dart b/lib/screens/settings/components/theme/components/theme_type/widget_list_tile_theme_type.dart
index a74464c..07326e5 100644
--- a/lib/screens/settings/components/theme/components/theme_type/widget_list_tile_theme_type.dart
+++ b/lib/screens/settings/components/theme/components/theme_type/widget_list_tile_theme_type.dart
@@ -14,6 +14,7 @@ class ThemeTypeListTile extends StatelessWidget {
title: Text(S.of(context).theme),
trailing: Text(_typeToString(context, UserPreferencesProvider.themeTypeOf(context))),
onTap: () {
+ final prefs = UserPreferencesProvider.of(context);
showDialog(
context: context,
builder: (_) => DialogPicker(
@@ -25,7 +26,7 @@ class ThemeTypeListTile extends StatelessWidget {
),
).then((value) {
if (value != null) {
- UserPreferencesProvider.of(context).setThemeType(value);
+ prefs.setThemeType(value);
}
});
},
diff --git a/lib/screens/shared/release_notes_dialog/flow_dialog_release_notes.dart b/lib/screens/shared/release_notes_dialog/flow_dialog_release_notes.dart
index de7af05..fc00ea2 100644
--- a/lib/screens/shared/release_notes_dialog/flow_dialog_release_notes.dart
+++ b/lib/screens/shared/release_notes_dialog/flow_dialog_release_notes.dart
@@ -21,10 +21,11 @@ class ReleaseNotesFlow extends StatelessWidget {
child: BlocListener(
listener: (context, state) {
if (state is ShowReleaseNotesDialogState) {
+ final bloc = context.read();
showDialog(
context: context,
builder: (_) => ReleaseNotesDialog(version: state.version),
- ).then((_) => context.read().setChangelogVersion());
+ ).then((_) => bloc.setChangelogVersion());
}
},
child: child,
From 2b6b27bcf437641ad9504253dfab8d6e1e9e0ab8 Mon Sep 17 00:00:00 2001
From: Vadim <44135514+vodemn@users.noreply.github.com>
Date: Mon, 6 Jan 2025 15:14:00 +0100
Subject: [PATCH 08/18] replaced deprecated color value getter
---
lib/data/shared_prefs_service.dart | 3 ++-
lib/res/theme.dart | 3 ++-
.../widget_dialog_picker_primary_color.dart | 3 ++-
lib/utils/color_to_int.dart | 12 ++++++++++++
screenshots/generate_screenshots.dart | 5 +++--
5 files changed, 21 insertions(+), 5 deletions(-)
create mode 100644 lib/utils/color_to_int.dart
diff --git a/lib/data/shared_prefs_service.dart b/lib/data/shared_prefs_service.dart
index 2662d7f..726fd63 100644
--- a/lib/data/shared_prefs_service.dart
+++ b/lib/data/shared_prefs_service.dart
@@ -7,6 +7,7 @@ import 'package:lightmeter/data/models/metering_screen_layout_config.dart';
import 'package:lightmeter/data/models/supported_locale.dart';
import 'package:lightmeter/data/models/theme_type.dart';
import 'package:lightmeter/data/models/volume_action.dart';
+import 'package:lightmeter/utils/color_to_int.dart';
import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart';
import 'package:shared_preferences/shared_preferences.dart';
@@ -155,7 +156,7 @@ class UserPreferencesService {
set themeType(ThemeType value) => _sharedPreferences.setInt(themeTypeKey, value.index);
Color get primaryColor => Color(_sharedPreferences.getInt(primaryColorKey) ?? 0xff2196f3);
- set primaryColor(Color value) => _sharedPreferences.setInt(primaryColorKey, value.value);
+ set primaryColor(Color value) => _sharedPreferences.setInt(primaryColorKey, value.toInt());
bool get dynamicColor => _sharedPreferences.getBool(dynamicColorKey) ?? false;
set dynamicColor(bool value) => _sharedPreferences.setBool(dynamicColorKey, value);
diff --git a/lib/res/theme.dart b/lib/res/theme.dart
index 9f9d392..c0e0a24 100644
--- a/lib/res/theme.dart
+++ b/lib/res/theme.dart
@@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import 'package:lightmeter/res/dimens.dart';
+import 'package:lightmeter/utils/color_to_int.dart';
import 'package:material_color_utilities/material_color_utilities.dart';
const primaryColorsList = [
@@ -75,7 +76,7 @@ ThemeData themeFrom(Color primaryColor, Brightness brightness) {
ColorScheme _colorSchemeFromColor(Color primaryColor, Brightness brightness) {
final scheme = SchemeTonalSpot(
- sourceColorHct: Hct.fromInt(primaryColor.value),
+ sourceColorHct: Hct.fromInt(primaryColor.toInt()),
isDark: brightness == Brightness.dark,
contrastLevel: 0.0,
);
diff --git a/lib/screens/settings/components/theme/components/primary_color/components/primary_color_picker_dialog/widget_dialog_picker_primary_color.dart b/lib/screens/settings/components/theme/components/primary_color/components/primary_color_picker_dialog/widget_dialog_picker_primary_color.dart
index be9e8ad..8330eb6 100644
--- a/lib/screens/settings/components/theme/components/primary_color/components/primary_color_picker_dialog/widget_dialog_picker_primary_color.dart
+++ b/lib/screens/settings/components/theme/components/primary_color/components/primary_color_picker_dialog/widget_dialog_picker_primary_color.dart
@@ -3,6 +3,7 @@ import 'package:lightmeter/generated/l10n.dart';
import 'package:lightmeter/res/dimens.dart';
import 'package:lightmeter/res/theme.dart';
import 'package:lightmeter/screens/shared/filled_circle/widget_circle_filled.dart';
+import 'package:lightmeter/utils/color_to_int.dart';
class PrimaryColorDialogPicker extends StatefulWidget {
const PrimaryColorDialogPicker({super.key});
@@ -45,7 +46,7 @@ class _PrimaryColorDialogPickerState extends State {
padding: EdgeInsets.only(left: index == 0 ? 0 : Dimens.paddingS),
child: _SelectableColorItem(
color: color,
- selected: color.value == _selected.value,
+ selected: color.toInt() == _selected.toInt(),
onTap: () {
setState(() {
_selected = color;
diff --git a/lib/utils/color_to_int.dart b/lib/utils/color_to_int.dart
new file mode 100644
index 0000000..21e0589
--- /dev/null
+++ b/lib/utils/color_to_int.dart
@@ -0,0 +1,12 @@
+import 'dart:ui';
+
+extension ColorToInt on Color {
+ int toInt() {
+ final a = (this.a * 255).round();
+ final r = (this.r * 255).round();
+ final g = (this.g * 255).round();
+ final b = (this.b * 255).round();
+
+ return (a << 24) | (r << 16) | (g << 8) | b;
+ }
+}
diff --git a/screenshots/generate_screenshots.dart b/screenshots/generate_screenshots.dart
index a47b9e9..d80159c 100644
--- a/screenshots/generate_screenshots.dart
+++ b/screenshots/generate_screenshots.dart
@@ -22,6 +22,7 @@ import 'package:lightmeter/screens/metering/screen_metering.dart';
import 'package:lightmeter/screens/settings/screen_settings.dart';
import 'package:lightmeter/screens/shared/animated_circular_button/widget_button_circular_animated.dart';
import 'package:lightmeter/screens/timer/screen_timer.dart';
+import 'package:lightmeter/utils/color_to_int.dart';
import 'package:lightmeter/utils/platform_utils.dart';
import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart';
import 'package:shared_preferences/shared_preferences.dart';
@@ -77,7 +78,7 @@ void main() {
/// Theme settings
UserPreferencesService.themeTypeKey: theme.index,
- UserPreferencesService.primaryColorKey: color.value,
+ UserPreferencesService.primaryColorKey: color.toInt(),
UserPreferencesService.dynamicColorKey: false,
UserPreferencesService.seenChangelogVersionKey: await const PlatformUtils().version,
@@ -190,7 +191,7 @@ extension on WidgetTester {
name: name,
deviceName: const String.fromEnvironment('deviceName'),
platformFolder: _platformFolder,
- backgroundColor: backgroundColor.value.toRadixString(16),
+ backgroundColor: backgroundColor.toInt().toRadixString(16),
isDark: theme.brightness == Brightness.dark,
).toString(),
);
From 5753e261f65fdebfff4dfbd2202bd5927acf89f2 Mon Sep 17 00:00:00 2001
From: Vadim <44135514+vodemn@users.noreply.github.com>
Date: Mon, 6 Jan 2025 15:15:31 +0100
Subject: [PATCH 09/18] `WillPopScope` -> `PopScope`
---
.../components/animated_dialog/widget_dialog_animated.dart | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/screens/metering/components/shared/readings_container/components/shared/animated_dialog_picker/components/animated_dialog/widget_dialog_animated.dart b/lib/screens/metering/components/shared/readings_container/components/shared/animated_dialog_picker/components/animated_dialog/widget_dialog_animated.dart
index 264bbbd..2a0f50d 100644
--- a/lib/screens/metering/components/shared/readings_container/components/shared/animated_dialog_picker/components/animated_dialog/widget_dialog_animated.dart
+++ b/lib/screens/metering/components/shared/readings_container/components/shared/animated_dialog_picker/components/animated_dialog/widget_dialog_animated.dart
@@ -178,8 +178,8 @@ class AnimatedDialogState extends State with SingleTickerProvide
opaque: false,
transitionDuration: Duration.zero,
reverseTransitionDuration: Duration.zero,
- pageBuilder: (_, __, ___) => WillPopScope(
- onWillPop: () => _animateReverse().then((value) => true),
+ pageBuilder: (_, __, ___) => PopScope(
+ onPopInvokedWithResult: (_, __) => _animateReverse().then((value) => true),
child: _AnimatedOverlay(
controller: _animationController,
barrierColorAnimation: _barrierColorAnimation,
From f784af927ab2391fda31e92df27493c7e5ee1dde Mon Sep 17 00:00:00 2001
From: Vadim <44135514+vodemn@users.noreply.github.com>
Date: Mon, 6 Jan 2025 15:20:18 +0100
Subject: [PATCH 10/18] removed theme deprecations
---
lib/res/theme.dart | 6 ++----
.../widget_placeholder_camera_controls.dart | 2 +-
.../widget_item_list_exposure_pairs.dart | 6 +++---
.../exposure_pairs_list/widget_list_exposure_pairs.dart | 2 +-
.../shared/centered_slider/widget_slider_centered.dart | 2 +-
.../shared/icon_placeholder/widget_icon_placeholder.dart | 7 ++-----
lib/screens/shared/ruler_slider/widget_slider_ruler.dart | 4 ++--
7 files changed, 12 insertions(+), 17 deletions(-)
diff --git a/lib/res/theme.dart b/lib/res/theme.dart
index c0e0a24..0362dac 100644
--- a/lib/res/theme.dart
+++ b/lib/res/theme.dart
@@ -33,7 +33,7 @@ ThemeData themeFrom(Color primaryColor, Brightness brightness) {
elevation: Dimens.elevationLevel0,
scrolledUnderElevation: Dimens.elevationLevel2,
color: scheme.surface,
- foregroundColor: scheme.onBackground,
+ foregroundColor: scheme.onSurface,
surfaceTintColor: scheme.surfaceTint,
),
cardTheme: CardTheme(
@@ -83,8 +83,6 @@ ColorScheme _colorSchemeFromColor(Color primaryColor, Brightness brightness) {
return ColorScheme(
brightness: brightness,
- background: Color(scheme.background),
- onBackground: Color(scheme.onBackground),
error: Color(scheme.error),
onError: Color(scheme.onError),
errorContainer: Color(scheme.errorContainer),
@@ -103,7 +101,7 @@ ColorScheme _colorSchemeFromColor(Color primaryColor, Brightness brightness) {
onTertiaryContainer: Color(scheme.onTertiaryContainer),
surface: Color(scheme.surface),
onSurface: Color(scheme.onSurface),
- surfaceVariant: Color(scheme.surfaceVariant),
+ surfaceContainerHighest: Color(scheme.surfaceContainerHighest),
onSurfaceVariant: Color(scheme.onSurfaceVariant),
outline: Color(scheme.outline),
outlineVariant: Color(scheme.outlineVariant),
diff --git a/lib/screens/metering/components/camera_container/components/camera_controls_placeholder/widget_placeholder_camera_controls.dart b/lib/screens/metering/components/camera_container/components/camera_controls_placeholder/widget_placeholder_camera_controls.dart
index 467a0b1..c2a39bf 100644
--- a/lib/screens/metering/components/camera_container/components/camera_controls_placeholder/widget_placeholder_camera_controls.dart
+++ b/lib/screens/metering/components/camera_container/components/camera_controls_placeholder/widget_placeholder_camera_controls.dart
@@ -25,7 +25,7 @@ class CameraControlsPlaceholder extends StatelessWidget {
const SizedBox(height: Dimens.grid8),
Text(
error.toStringLocalized(context),
- style: Theme.of(context).textTheme.bodyMedium?.copyWith(color: Theme.of(context).colorScheme.onBackground),
+ style: Theme.of(context).textTheme.bodyMedium?.copyWith(color: Theme.of(context).colorScheme.onSurface),
textAlign: TextAlign.center,
),
],
diff --git a/lib/screens/metering/components/shared/exposure_pairs_list/components/exposure_pairs_list_item/widget_item_list_exposure_pairs.dart b/lib/screens/metering/components/shared/exposure_pairs_list/components/exposure_pairs_list_item/widget_item_list_exposure_pairs.dart
index d4209ba..2451a07 100644
--- a/lib/screens/metering/components/shared/exposure_pairs_list/components/exposure_pairs_list_item/widget_item_list_exposure_pairs.dart
+++ b/lib/screens/metering/components/shared/exposure_pairs_list/components/exposure_pairs_list_item/widget_item_list_exposure_pairs.dart
@@ -62,14 +62,14 @@ class _Title extends StatelessWidget {
value.toString(),
stepGranularity: 0.5,
minFontSize: 10,
- style: labelTextStyle(context).copyWith(color: Theme.of(context).colorScheme.onBackground),
+ style: labelTextStyle(context).copyWith(color: Theme.of(context).colorScheme.onSurface),
softWrap: false,
overflow: TextOverflow.fade,
maxLines: 1,
)
: Text(
value.toString(),
- style: labelTextStyle(context).copyWith(color: Theme.of(context).colorScheme.onBackground),
+ style: labelTextStyle(context).copyWith(color: Theme.of(context).colorScheme.onSurface),
softWrap: false,
overflow: TextOverflow.fade,
maxLines: 1,
@@ -97,7 +97,7 @@ class _Tick extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ColoredBox(
- color: Theme.of(context).colorScheme.onBackground,
+ color: Theme.of(context).colorScheme.onSurface,
child: SizedBox(
height: 1,
width: _length,
diff --git a/lib/screens/metering/components/shared/exposure_pairs_list/widget_list_exposure_pairs.dart b/lib/screens/metering/components/shared/exposure_pairs_list/widget_list_exposure_pairs.dart
index 415892d..f5ec902 100644
--- a/lib/screens/metering/components/shared/exposure_pairs_list/widget_list_exposure_pairs.dart
+++ b/lib/screens/metering/components/shared/exposure_pairs_list/widget_list_exposure_pairs.dart
@@ -78,7 +78,7 @@ class ExposurePairsList extends StatelessWidget {
? constraints.maxHeight / 2
: constraints.maxHeight,
child: ColoredBox(
- color: Theme.of(context).colorScheme.onBackground,
+ color: Theme.of(context).colorScheme.onSurface,
child: const SizedBox(width: 1),
),
),
diff --git a/lib/screens/shared/centered_slider/widget_slider_centered.dart b/lib/screens/shared/centered_slider/widget_slider_centered.dart
index f2cc66d..10039c6 100644
--- a/lib/screens/shared/centered_slider/widget_slider_centered.dart
+++ b/lib/screens/shared/centered_slider/widget_slider_centered.dart
@@ -120,7 +120,7 @@ class _Slider extends StatelessWidget {
width: handleDistance + trackThickness,
child: ClipRRect(
borderRadius: BorderRadius.circular(trackThickness / 2),
- child: ColoredBox(color: Theme.of(context).colorScheme.surfaceVariant),
+ child: ColoredBox(color: Theme.of(context).colorScheme.surfaceContainerHighest),
),
),
AnimatedPositioned.fromRect(
diff --git a/lib/screens/shared/icon_placeholder/widget_icon_placeholder.dart b/lib/screens/shared/icon_placeholder/widget_icon_placeholder.dart
index f11128a..1536f0d 100644
--- a/lib/screens/shared/icon_placeholder/widget_icon_placeholder.dart
+++ b/lib/screens/shared/icon_placeholder/widget_icon_placeholder.dart
@@ -20,15 +20,12 @@ class IconPlaceholder extends StatelessWidget {
children: [
Icon(
icon,
- color: Theme.of(context).colorScheme.onBackground,
+ color: Theme.of(context).colorScheme.onSurface,
),
const SizedBox(height: Dimens.grid8),
Text(
text,
- style: Theme.of(context)
- .textTheme
- .bodyMedium
- ?.copyWith(color: Theme.of(context).colorScheme.onBackground),
+ style: Theme.of(context).textTheme.bodyMedium?.copyWith(color: Theme.of(context).colorScheme.onSurface),
textAlign: TextAlign.center,
),
],
diff --git a/lib/screens/shared/ruler_slider/widget_slider_ruler.dart b/lib/screens/shared/ruler_slider/widget_slider_ruler.dart
index 9932ef2..5075597 100644
--- a/lib/screens/shared/ruler_slider/widget_slider_ruler.dart
+++ b/lib/screens/shared/ruler_slider/widget_slider_ruler.dart
@@ -30,7 +30,7 @@ class RulerSlider extends StatelessWidget {
children: [
Text(
valueAdapter(value),
- style: Theme.of(context).textTheme.labelLarge!.copyWith(color: Theme.of(context).colorScheme.onBackground),
+ style: Theme.of(context).textTheme.labelLarge!.copyWith(color: Theme.of(context).colorScheme.onSurface),
),
const SizedBox(height: Dimens.grid4),
Expanded(
@@ -78,7 +78,7 @@ class _Ruler extends StatelessWidget {
@override
Widget build(BuildContext context) {
final mainTicksFontSize = Theme.of(context).textTheme.bodySmall!.fontSize!;
- final itemsColor = Theme.of(context).colorScheme.onBackground;
+ final itemsColor = Theme.of(context).colorScheme.onSurface;
return LayoutBuilder(
builder: (context, constraints) {
final bool showAllMainTicks =
From e12dc500dd001486ad09b141f12d3e9ceeebee1e Mon Sep 17 00:00:00 2001
From: Vadim <44135514+vodemn@users.noreply.github.com>
Date: Mon, 6 Jan 2025 15:21:59 +0100
Subject: [PATCH 11/18] replaced text scale deprecation
---
lib/application.dart | 2 +-
test/application_mock.dart | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/lib/application.dart b/lib/application.dart
index a58de01..e272b92 100644
--- a/lib/application.dart
+++ b/lib/application.dart
@@ -44,7 +44,7 @@ class Application extends StatelessWidget {
],
supportedLocales: S.delegate.supportedLocales,
builder: (context, child) => MediaQuery(
- data: MediaQuery.of(context).copyWith(textScaleFactor: 1.0),
+ data: MediaQuery.of(context).copyWith(textScaler: TextScaler.noScaling),
child: child!,
),
initialRoute: NavigationRoutes.meteringScreen.name,
diff --git a/test/application_mock.dart b/test/application_mock.dart
index 8475389..7034137 100644
--- a/test/application_mock.dart
+++ b/test/application_mock.dart
@@ -47,7 +47,7 @@ class WidgetTestApplicationMock extends StatelessWidget {
],
supportedLocales: S.delegate.supportedLocales,
builder: (context, child) => MediaQuery(
- data: MediaQuery.of(context).copyWith(textScaleFactor: 1.0),
+ data: MediaQuery.of(context).copyWith(textScaler: TextScaler.noScaling),
child: child!,
),
home: Scaffold(body: child),
@@ -124,7 +124,7 @@ class _GoldenTestApplicationMockState extends State {
],
supportedLocales: S.delegate.supportedLocales,
builder: (context, child) => MediaQuery(
- data: MediaQuery.of(context).copyWith(textScaleFactor: 1.0),
+ data: MediaQuery.of(context).copyWith(textScaler: TextScaler.noScaling),
child: child!,
),
home: widget.child,
From 050c536bac856d5f59288c58ce5b359122029a85 Mon Sep 17 00:00:00 2001
From: Vadim <44135514+vodemn@users.noreply.github.com>
Date: Mon, 6 Jan 2025 15:25:48 +0100
Subject: [PATCH 12/18] updated goldens
---
.../goldens/lightmeter_pro_screen.png | Bin 308354 -> 308443 bytes
.../metering/goldens/metering_screen.png | Bin 1626777 -> 1570244 bytes
.../settings/goldens/settings_screen.png | Bin 505778 -> 509945 bytes
test/screens/timer/goldens/timer_screen.png | Bin 878757 -> 883996 bytes
4 files changed, 0 insertions(+), 0 deletions(-)
diff --git a/test/screens/lightmeter_pro/goldens/lightmeter_pro_screen.png b/test/screens/lightmeter_pro/goldens/lightmeter_pro_screen.png
index 5ad139a3a5bfeb13a584ec935e4549ea805b9b59..ab9d347ba7ce3103db5f286062b17f655a847632 100644
GIT binary patch
literal 308443
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