diff --git a/.dart_tool/extension_discovery/README.md b/.dart_tool/extension_discovery/README.md
new file mode 100644
index 00000000..9dc6757b
--- /dev/null
+++ b/.dart_tool/extension_discovery/README.md
@@ -0,0 +1,31 @@
+Extension Discovery Cache
+=========================
+
+This folder is used by `package:extension_discovery` to cache lists of
+packages that contains extensions for other packages.
+
+DO NOT USE THIS FOLDER
+----------------------
+
+ * Do not read (or rely) the contents of this folder.
+ * Do write to this folder.
+
+If you're interested in the lists of extensions stored in this folder use the
+API offered by package `extension_discovery` to get this information.
+
+If this package doesn't work for your use-case, then don't try to read the
+contents of this folder. It may change, and will not remain stable.
+
+Use package `extension_discovery`
+---------------------------------
+
+If you want to access information from this folder.
+
+Feel free to delete this folder
+-------------------------------
+
+Files in this folder act as a cache, and the cache is discarded if the files
+are older than the modification time of `.dart_tool/package_config.json`.
+
+Hence, it should never be necessary to clear this cache manually, if you find a
+need to do please file a bug.
diff --git a/.dart_tool/extension_discovery/vs_code.json b/.dart_tool/extension_discovery/vs_code.json
new file mode 100644
index 00000000..ae1a36a6
--- /dev/null
+++ b/.dart_tool/extension_discovery/vs_code.json
@@ -0,0 +1 @@
+{"version":2,"entries":[{"package":"sf_app_platform_mono_repo","rootUri":"../","packageUri":"lib/"}]}
\ No newline at end of file
diff --git a/.dart_tool/package_config.json b/.dart_tool/package_config.json
new file mode 100644
index 00000000..3b00a9d9
--- /dev/null
+++ b/.dart_tool/package_config.json
@@ -0,0 +1,364 @@
+{
+ "configVersion": 2,
+ "packages": [
+ {
+ "name": "ansi_styles",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/ansi_styles-0.3.2+1",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "args",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/args-2.7.0",
+ "packageUri": "lib/",
+ "languageVersion": "3.3"
+ },
+ {
+ "name": "async",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/async-2.13.0",
+ "packageUri": "lib/",
+ "languageVersion": "3.4"
+ },
+ {
+ "name": "characters",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/characters-1.4.0",
+ "packageUri": "lib/",
+ "languageVersion": "3.4"
+ },
+ {
+ "name": "charcode",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/charcode-1.4.0",
+ "packageUri": "lib/",
+ "languageVersion": "3.0"
+ },
+ {
+ "name": "checked_yaml",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/checked_yaml-2.0.4",
+ "packageUri": "lib/",
+ "languageVersion": "3.8"
+ },
+ {
+ "name": "cli_launcher",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/cli_launcher-0.3.2+1",
+ "packageUri": "lib/",
+ "languageVersion": "3.8"
+ },
+ {
+ "name": "cli_util",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/cli_util-0.4.2",
+ "packageUri": "lib/",
+ "languageVersion": "3.4"
+ },
+ {
+ "name": "collection",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/collection-1.19.1",
+ "packageUri": "lib/",
+ "languageVersion": "3.4"
+ },
+ {
+ "name": "conventional_commit",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/conventional_commit-0.6.1+1",
+ "packageUri": "lib/",
+ "languageVersion": "3.8"
+ },
+ {
+ "name": "ffi",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/ffi-2.1.4",
+ "packageUri": "lib/",
+ "languageVersion": "3.7"
+ },
+ {
+ "name": "file",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/file-7.0.1",
+ "packageUri": "lib/",
+ "languageVersion": "3.0"
+ },
+ {
+ "name": "flutter",
+ "rootUri": "file:///Users/juliandalcalaf/Development/flutter/packages/flutter",
+ "packageUri": "lib/",
+ "languageVersion": "3.8"
+ },
+ {
+ "name": "flutter_secure_storage",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/flutter_secure_storage-9.2.4",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "flutter_secure_storage_linux",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/flutter_secure_storage_linux-1.2.3",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "flutter_secure_storage_macos",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/flutter_secure_storage_macos-3.1.3",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "flutter_secure_storage_platform_interface",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/flutter_secure_storage_platform_interface-1.1.2",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "flutter_secure_storage_web",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/flutter_secure_storage_web-1.2.1",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "flutter_secure_storage_windows",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/flutter_secure_storage_windows-3.1.2",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "flutter_web_plugins",
+ "rootUri": "file:///Users/juliandalcalaf/Development/flutter/packages/flutter_web_plugins",
+ "packageUri": "lib/",
+ "languageVersion": "3.8"
+ },
+ {
+ "name": "glob",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/glob-2.1.3",
+ "packageUri": "lib/",
+ "languageVersion": "3.3"
+ },
+ {
+ "name": "graphs",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/graphs-2.3.2",
+ "packageUri": "lib/",
+ "languageVersion": "3.4"
+ },
+ {
+ "name": "http",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/http-1.5.0",
+ "packageUri": "lib/",
+ "languageVersion": "3.4"
+ },
+ {
+ "name": "http_parser",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/http_parser-4.1.2",
+ "packageUri": "lib/",
+ "languageVersion": "3.4"
+ },
+ {
+ "name": "io",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/io-1.0.5",
+ "packageUri": "lib/",
+ "languageVersion": "3.4"
+ },
+ {
+ "name": "js",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/js-0.6.7",
+ "packageUri": "lib/",
+ "languageVersion": "2.19"
+ },
+ {
+ "name": "json_annotation",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/json_annotation-4.9.0",
+ "packageUri": "lib/",
+ "languageVersion": "3.0"
+ },
+ {
+ "name": "material_color_utilities",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/material_color_utilities-0.11.1",
+ "packageUri": "lib/",
+ "languageVersion": "2.17"
+ },
+ {
+ "name": "melos",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/melos-6.3.3",
+ "packageUri": "lib/",
+ "languageVersion": "3.8"
+ },
+ {
+ "name": "meta",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/meta-1.16.0",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "mustache_template",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/mustache_template-2.0.2",
+ "packageUri": "lib/",
+ "languageVersion": "3.7"
+ },
+ {
+ "name": "path",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/path-1.9.1",
+ "packageUri": "lib/",
+ "languageVersion": "3.4"
+ },
+ {
+ "name": "path_provider",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/path_provider-2.1.5",
+ "packageUri": "lib/",
+ "languageVersion": "3.4"
+ },
+ {
+ "name": "path_provider_android",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/path_provider_android-2.2.20",
+ "packageUri": "lib/",
+ "languageVersion": "3.9"
+ },
+ {
+ "name": "path_provider_foundation",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.3",
+ "packageUri": "lib/",
+ "languageVersion": "3.9"
+ },
+ {
+ "name": "path_provider_linux",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1",
+ "packageUri": "lib/",
+ "languageVersion": "2.19"
+ },
+ {
+ "name": "path_provider_platform_interface",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/path_provider_platform_interface-2.1.2",
+ "packageUri": "lib/",
+ "languageVersion": "3.0"
+ },
+ {
+ "name": "path_provider_windows",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/path_provider_windows-2.3.0",
+ "packageUri": "lib/",
+ "languageVersion": "3.2"
+ },
+ {
+ "name": "platform",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/platform-3.1.6",
+ "packageUri": "lib/",
+ "languageVersion": "3.2"
+ },
+ {
+ "name": "plugin_platform_interface",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/plugin_platform_interface-2.1.8",
+ "packageUri": "lib/",
+ "languageVersion": "3.0"
+ },
+ {
+ "name": "pool",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/pool-1.5.2",
+ "packageUri": "lib/",
+ "languageVersion": "3.4"
+ },
+ {
+ "name": "process",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/process-5.0.5",
+ "packageUri": "lib/",
+ "languageVersion": "3.5"
+ },
+ {
+ "name": "prompts",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/prompts-2.0.0",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "pub_semver",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/pub_semver-2.2.0",
+ "packageUri": "lib/",
+ "languageVersion": "3.4"
+ },
+ {
+ "name": "pub_updater",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/pub_updater-0.5.0",
+ "packageUri": "lib/",
+ "languageVersion": "3.5"
+ },
+ {
+ "name": "pubspec_parse",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/pubspec_parse-1.5.0",
+ "packageUri": "lib/",
+ "languageVersion": "3.6"
+ },
+ {
+ "name": "sky_engine",
+ "rootUri": "file:///Users/juliandalcalaf/Development/flutter/bin/cache/pkg/sky_engine",
+ "packageUri": "lib/",
+ "languageVersion": "3.8"
+ },
+ {
+ "name": "source_span",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/source_span-1.10.1",
+ "packageUri": "lib/",
+ "languageVersion": "3.1"
+ },
+ {
+ "name": "stack_trace",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/stack_trace-1.12.1",
+ "packageUri": "lib/",
+ "languageVersion": "3.4"
+ },
+ {
+ "name": "string_scanner",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/string_scanner-1.4.1",
+ "packageUri": "lib/",
+ "languageVersion": "3.1"
+ },
+ {
+ "name": "term_glyph",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/term_glyph-1.2.2",
+ "packageUri": "lib/",
+ "languageVersion": "3.1"
+ },
+ {
+ "name": "typed_data",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/typed_data-1.4.0",
+ "packageUri": "lib/",
+ "languageVersion": "3.5"
+ },
+ {
+ "name": "vector_math",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/vector_math-2.2.0",
+ "packageUri": "lib/",
+ "languageVersion": "3.1"
+ },
+ {
+ "name": "web",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/web-1.1.1",
+ "packageUri": "lib/",
+ "languageVersion": "3.4"
+ },
+ {
+ "name": "win32",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/win32-5.15.0",
+ "packageUri": "lib/",
+ "languageVersion": "3.8"
+ },
+ {
+ "name": "xdg_directories",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/xdg_directories-1.1.0",
+ "packageUri": "lib/",
+ "languageVersion": "3.3"
+ },
+ {
+ "name": "yaml",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/yaml-3.1.3",
+ "packageUri": "lib/",
+ "languageVersion": "3.4"
+ },
+ {
+ "name": "yaml_edit",
+ "rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/yaml_edit-2.2.2",
+ "packageUri": "lib/",
+ "languageVersion": "3.1"
+ },
+ {
+ "name": "sf_app_platform_mono_repo",
+ "rootUri": "../",
+ "packageUri": "lib/",
+ "languageVersion": "3.0"
+ }
+ ],
+ "generator": "pub",
+ "generatorVersion": "3.9.2",
+ "flutterRoot": "file:///Users/juliandalcalaf/Development/flutter",
+ "flutterVersion": "3.35.7",
+ "pubCache": "file:///Users/juliandalcalaf/.pub-cache"
+}
diff --git a/.dart_tool/package_graph.json b/.dart_tool/package_graph.json
new file mode 100644
index 00000000..c8198228
--- /dev/null
+++ b/.dart_tool/package_graph.json
@@ -0,0 +1,491 @@
+{
+ "roots": [
+ "sf_app_platform_mono_repo"
+ ],
+ "packages": [
+ {
+ "name": "sf_app_platform_mono_repo",
+ "version": "0.0.0",
+ "dependencies": [
+ "flutter_secure_storage"
+ ],
+ "devDependencies": [
+ "melos"
+ ]
+ },
+ {
+ "name": "flutter_secure_storage",
+ "version": "9.2.4",
+ "dependencies": [
+ "flutter",
+ "flutter_secure_storage_linux",
+ "flutter_secure_storage_macos",
+ "flutter_secure_storage_platform_interface",
+ "flutter_secure_storage_web",
+ "flutter_secure_storage_windows",
+ "meta"
+ ]
+ },
+ {
+ "name": "melos",
+ "version": "6.3.3",
+ "dependencies": [
+ "ansi_styles",
+ "args",
+ "async",
+ "cli_launcher",
+ "cli_util",
+ "collection",
+ "conventional_commit",
+ "file",
+ "glob",
+ "graphs",
+ "http",
+ "meta",
+ "mustache_template",
+ "path",
+ "platform",
+ "pool",
+ "prompts",
+ "pub_semver",
+ "pub_updater",
+ "pubspec_parse",
+ "string_scanner",
+ "yaml",
+ "yaml_edit"
+ ]
+ },
+ {
+ "name": "meta",
+ "version": "1.16.0",
+ "dependencies": []
+ },
+ {
+ "name": "flutter_secure_storage_windows",
+ "version": "3.1.2",
+ "dependencies": [
+ "ffi",
+ "flutter",
+ "flutter_secure_storage_platform_interface",
+ "path",
+ "path_provider",
+ "win32"
+ ]
+ },
+ {
+ "name": "flutter_secure_storage_web",
+ "version": "1.2.1",
+ "dependencies": [
+ "flutter",
+ "flutter_secure_storage_platform_interface",
+ "flutter_web_plugins",
+ "js"
+ ]
+ },
+ {
+ "name": "flutter_secure_storage_platform_interface",
+ "version": "1.1.2",
+ "dependencies": [
+ "flutter",
+ "plugin_platform_interface"
+ ]
+ },
+ {
+ "name": "flutter_secure_storage_macos",
+ "version": "3.1.3",
+ "dependencies": [
+ "flutter",
+ "flutter_secure_storage_platform_interface"
+ ]
+ },
+ {
+ "name": "flutter_secure_storage_linux",
+ "version": "1.2.3",
+ "dependencies": [
+ "flutter",
+ "flutter_secure_storage_platform_interface"
+ ]
+ },
+ {
+ "name": "flutter",
+ "version": "0.0.0",
+ "dependencies": [
+ "characters",
+ "collection",
+ "material_color_utilities",
+ "meta",
+ "sky_engine",
+ "vector_math"
+ ]
+ },
+ {
+ "name": "yaml_edit",
+ "version": "2.2.2",
+ "dependencies": [
+ "collection",
+ "meta",
+ "source_span",
+ "yaml"
+ ]
+ },
+ {
+ "name": "yaml",
+ "version": "3.1.3",
+ "dependencies": [
+ "collection",
+ "source_span",
+ "string_scanner"
+ ]
+ },
+ {
+ "name": "string_scanner",
+ "version": "1.4.1",
+ "dependencies": [
+ "source_span"
+ ]
+ },
+ {
+ "name": "pubspec_parse",
+ "version": "1.5.0",
+ "dependencies": [
+ "checked_yaml",
+ "collection",
+ "json_annotation",
+ "pub_semver",
+ "yaml"
+ ]
+ },
+ {
+ "name": "pub_updater",
+ "version": "0.5.0",
+ "dependencies": [
+ "http",
+ "json_annotation",
+ "process",
+ "pub_semver"
+ ]
+ },
+ {
+ "name": "pub_semver",
+ "version": "2.2.0",
+ "dependencies": [
+ "collection"
+ ]
+ },
+ {
+ "name": "prompts",
+ "version": "2.0.0",
+ "dependencies": [
+ "charcode",
+ "io"
+ ]
+ },
+ {
+ "name": "pool",
+ "version": "1.5.2",
+ "dependencies": [
+ "async",
+ "stack_trace"
+ ]
+ },
+ {
+ "name": "platform",
+ "version": "3.1.6",
+ "dependencies": []
+ },
+ {
+ "name": "path",
+ "version": "1.9.1",
+ "dependencies": []
+ },
+ {
+ "name": "mustache_template",
+ "version": "2.0.2",
+ "dependencies": []
+ },
+ {
+ "name": "http",
+ "version": "1.5.0",
+ "dependencies": [
+ "async",
+ "http_parser",
+ "meta",
+ "web"
+ ]
+ },
+ {
+ "name": "graphs",
+ "version": "2.3.2",
+ "dependencies": [
+ "collection"
+ ]
+ },
+ {
+ "name": "glob",
+ "version": "2.1.3",
+ "dependencies": [
+ "async",
+ "collection",
+ "file",
+ "path",
+ "string_scanner"
+ ]
+ },
+ {
+ "name": "file",
+ "version": "7.0.1",
+ "dependencies": [
+ "meta",
+ "path"
+ ]
+ },
+ {
+ "name": "conventional_commit",
+ "version": "0.6.1+1",
+ "dependencies": []
+ },
+ {
+ "name": "collection",
+ "version": "1.19.1",
+ "dependencies": []
+ },
+ {
+ "name": "cli_util",
+ "version": "0.4.2",
+ "dependencies": [
+ "meta",
+ "path"
+ ]
+ },
+ {
+ "name": "cli_launcher",
+ "version": "0.3.2+1",
+ "dependencies": [
+ "path",
+ "yaml"
+ ]
+ },
+ {
+ "name": "async",
+ "version": "2.13.0",
+ "dependencies": [
+ "collection",
+ "meta"
+ ]
+ },
+ {
+ "name": "args",
+ "version": "2.7.0",
+ "dependencies": []
+ },
+ {
+ "name": "ansi_styles",
+ "version": "0.3.2+1",
+ "dependencies": []
+ },
+ {
+ "name": "win32",
+ "version": "5.15.0",
+ "dependencies": [
+ "ffi"
+ ]
+ },
+ {
+ "name": "path_provider",
+ "version": "2.1.5",
+ "dependencies": [
+ "flutter",
+ "path_provider_android",
+ "path_provider_foundation",
+ "path_provider_linux",
+ "path_provider_platform_interface",
+ "path_provider_windows"
+ ]
+ },
+ {
+ "name": "ffi",
+ "version": "2.1.4",
+ "dependencies": []
+ },
+ {
+ "name": "js",
+ "version": "0.6.7",
+ "dependencies": [
+ "meta"
+ ]
+ },
+ {
+ "name": "flutter_web_plugins",
+ "version": "0.0.0",
+ "dependencies": [
+ "flutter"
+ ]
+ },
+ {
+ "name": "plugin_platform_interface",
+ "version": "2.1.8",
+ "dependencies": [
+ "meta"
+ ]
+ },
+ {
+ "name": "sky_engine",
+ "version": "0.0.0",
+ "dependencies": []
+ },
+ {
+ "name": "vector_math",
+ "version": "2.2.0",
+ "dependencies": []
+ },
+ {
+ "name": "material_color_utilities",
+ "version": "0.11.1",
+ "dependencies": [
+ "collection"
+ ]
+ },
+ {
+ "name": "characters",
+ "version": "1.4.0",
+ "dependencies": []
+ },
+ {
+ "name": "source_span",
+ "version": "1.10.1",
+ "dependencies": [
+ "collection",
+ "path",
+ "term_glyph"
+ ]
+ },
+ {
+ "name": "json_annotation",
+ "version": "4.9.0",
+ "dependencies": [
+ "meta"
+ ]
+ },
+ {
+ "name": "checked_yaml",
+ "version": "2.0.4",
+ "dependencies": [
+ "json_annotation",
+ "source_span",
+ "yaml"
+ ]
+ },
+ {
+ "name": "process",
+ "version": "5.0.5",
+ "dependencies": [
+ "file",
+ "path",
+ "platform"
+ ]
+ },
+ {
+ "name": "io",
+ "version": "1.0.5",
+ "dependencies": [
+ "meta",
+ "path",
+ "string_scanner"
+ ]
+ },
+ {
+ "name": "charcode",
+ "version": "1.4.0",
+ "dependencies": []
+ },
+ {
+ "name": "stack_trace",
+ "version": "1.12.1",
+ "dependencies": [
+ "path"
+ ]
+ },
+ {
+ "name": "web",
+ "version": "1.1.1",
+ "dependencies": []
+ },
+ {
+ "name": "http_parser",
+ "version": "4.1.2",
+ "dependencies": [
+ "collection",
+ "source_span",
+ "string_scanner",
+ "typed_data"
+ ]
+ },
+ {
+ "name": "path_provider_windows",
+ "version": "2.3.0",
+ "dependencies": [
+ "ffi",
+ "flutter",
+ "path",
+ "path_provider_platform_interface"
+ ]
+ },
+ {
+ "name": "path_provider_platform_interface",
+ "version": "2.1.2",
+ "dependencies": [
+ "flutter",
+ "platform",
+ "plugin_platform_interface"
+ ]
+ },
+ {
+ "name": "path_provider_linux",
+ "version": "2.2.1",
+ "dependencies": [
+ "ffi",
+ "flutter",
+ "path",
+ "path_provider_platform_interface",
+ "xdg_directories"
+ ]
+ },
+ {
+ "name": "path_provider_foundation",
+ "version": "2.4.3",
+ "dependencies": [
+ "flutter",
+ "path_provider_platform_interface"
+ ]
+ },
+ {
+ "name": "path_provider_android",
+ "version": "2.2.20",
+ "dependencies": [
+ "flutter",
+ "path_provider_platform_interface"
+ ]
+ },
+ {
+ "name": "term_glyph",
+ "version": "1.2.2",
+ "dependencies": []
+ },
+ {
+ "name": "typed_data",
+ "version": "1.4.0",
+ "dependencies": [
+ "collection"
+ ]
+ },
+ {
+ "name": "xdg_directories",
+ "version": "1.1.0",
+ "dependencies": [
+ "meta",
+ "path"
+ ]
+ }
+ ],
+ "configVersion": 1
+}
\ No newline at end of file
diff --git a/.dart_tool/pub/bin/melos/melos.dart-3.9.2.snapshot b/.dart_tool/pub/bin/melos/melos.dart-3.9.2.snapshot
new file mode 100644
index 00000000..4d144da8
Binary files /dev/null and b/.dart_tool/pub/bin/melos/melos.dart-3.9.2.snapshot differ
diff --git a/.dart_tool/pub/workspace_ref.json b/.dart_tool/pub/workspace_ref.json
new file mode 100644
index 00000000..308baae2
--- /dev/null
+++ b/.dart_tool/pub/workspace_ref.json
@@ -0,0 +1,3 @@
+{
+ "workspaceRoot": "../.."
+}
diff --git a/.dart_tool/version b/.dart_tool/version
new file mode 100644
index 00000000..e119acda
--- /dev/null
+++ b/.dart_tool/version
@@ -0,0 +1 @@
+3.35.7
\ No newline at end of file
diff --git a/.flutter-plugins-dependencies b/.flutter-plugins-dependencies
new file mode 100644
index 00000000..13ad00d0
--- /dev/null
+++ b/.flutter-plugins-dependencies
@@ -0,0 +1 @@
+{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"flutter_secure_storage","path":"/Users/juliandalcalaf/.pub-cache/hosted/pub.dev/flutter_secure_storage-9.2.4/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"path_provider_foundation","path":"/Users/juliandalcalaf/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.3/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false}],"android":[{"name":"flutter_secure_storage","path":"/Users/juliandalcalaf/.pub-cache/hosted/pub.dev/flutter_secure_storage-9.2.4/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"path_provider_android","path":"/Users/juliandalcalaf/.pub-cache/hosted/pub.dev/path_provider_android-2.2.20/","native_build":true,"dependencies":[],"dev_dependency":false}],"macos":[{"name":"flutter_secure_storage_macos","path":"/Users/juliandalcalaf/.pub-cache/hosted/pub.dev/flutter_secure_storage_macos-3.1.3/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"path_provider_foundation","path":"/Users/juliandalcalaf/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.3/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false}],"linux":[{"name":"flutter_secure_storage_linux","path":"/Users/juliandalcalaf/.pub-cache/hosted/pub.dev/flutter_secure_storage_linux-1.2.3/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"path_provider_linux","path":"/Users/juliandalcalaf/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1/","native_build":false,"dependencies":[],"dev_dependency":false}],"windows":[{"name":"flutter_secure_storage_windows","path":"/Users/juliandalcalaf/.pub-cache/hosted/pub.dev/flutter_secure_storage_windows-3.1.2/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"path_provider_windows","path":"/Users/juliandalcalaf/.pub-cache/hosted/pub.dev/path_provider_windows-2.3.0/","native_build":false,"dependencies":[],"dev_dependency":false}],"web":[{"name":"flutter_secure_storage_web","path":"/Users/juliandalcalaf/.pub-cache/hosted/pub.dev/flutter_secure_storage_web-1.2.1/","dependencies":[],"dev_dependency":false}]},"dependencyGraph":[{"name":"flutter_secure_storage","dependencies":["flutter_secure_storage_linux","flutter_secure_storage_macos","flutter_secure_storage_web","flutter_secure_storage_windows"]},{"name":"flutter_secure_storage_linux","dependencies":[]},{"name":"flutter_secure_storage_macos","dependencies":[]},{"name":"flutter_secure_storage_web","dependencies":[]},{"name":"flutter_secure_storage_windows","dependencies":["path_provider"]},{"name":"path_provider","dependencies":["path_provider_android","path_provider_foundation","path_provider_linux","path_provider_windows"]},{"name":"path_provider_android","dependencies":[]},{"name":"path_provider_foundation","dependencies":[]},{"name":"path_provider_linux","dependencies":[]},{"name":"path_provider_windows","dependencies":[]}],"date_created":"2025-11-10 13:39:20.696891","version":"3.35.7","swift_package_manager_enabled":{"ios":false,"macos":false}}
\ No newline at end of file
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 00000000..2408ee7f
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+sf-app-platform
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 00000000..48de06f6
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/melos_bootstrap.xml b/.idea/runConfigurations/melos_bootstrap.xml
new file mode 100644
index 00000000..0365420f
--- /dev/null
+++ b/.idea/runConfigurations/melos_bootstrap.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.idea/runConfigurations/melos_clean.xml b/.idea/runConfigurations/melos_clean.xml
new file mode 100644
index 00000000..82bd9567
--- /dev/null
+++ b/.idea/runConfigurations/melos_clean.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.idea/runConfigurations/melos_flutter_run_sf_app_platform.xml b/.idea/runConfigurations/melos_flutter_run_sf_app_platform.xml
new file mode 100644
index 00000000..e2a9ffba
--- /dev/null
+++ b/.idea/runConfigurations/melos_flutter_run_sf_app_platform.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/melos_flutter_test_auth.xml b/.idea/runConfigurations/melos_flutter_test_auth.xml
new file mode 100644
index 00000000..7ccb196b
--- /dev/null
+++ b/.idea/runConfigurations/melos_flutter_test_auth.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/melos_flutter_test_dashboard_shell.xml b/.idea/runConfigurations/melos_flutter_test_dashboard_shell.xml
new file mode 100644
index 00000000..368577a4
--- /dev/null
+++ b/.idea/runConfigurations/melos_flutter_test_dashboard_shell.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/melos_flutter_test_design_system.xml b/.idea/runConfigurations/melos_flutter_test_design_system.xml
new file mode 100644
index 00000000..5f9f3264
--- /dev/null
+++ b/.idea/runConfigurations/melos_flutter_test_design_system.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/melos_flutter_test_home.xml b/.idea/runConfigurations/melos_flutter_test_home.xml
new file mode 100644
index 00000000..745b2563
--- /dev/null
+++ b/.idea/runConfigurations/melos_flutter_test_home.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/melos_flutter_test_notifications.xml b/.idea/runConfigurations/melos_flutter_test_notifications.xml
new file mode 100644
index 00000000..dbb9e750
--- /dev/null
+++ b/.idea/runConfigurations/melos_flutter_test_notifications.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/melos_flutter_test_profile.xml b/.idea/runConfigurations/melos_flutter_test_profile.xml
new file mode 100644
index 00000000..d725a00e
--- /dev/null
+++ b/.idea/runConfigurations/melos_flutter_test_profile.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/melos_flutter_test_sf_shared.xml b/.idea/runConfigurations/melos_flutter_test_sf_shared.xml
new file mode 100644
index 00000000..0f8426a0
--- /dev/null
+++ b/.idea/runConfigurations/melos_flutter_test_sf_shared.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/melos_flutter_test_utils.xml b/.idea/runConfigurations/melos_flutter_test_utils.xml
new file mode 100644
index 00000000..4a2783eb
--- /dev/null
+++ b/.idea/runConfigurations/melos_flutter_test_utils.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/melos_run_bootstrap.xml b/.idea/runConfigurations/melos_run_bootstrap.xml
new file mode 100644
index 00000000..10011a79
--- /dev/null
+++ b/.idea/runConfigurations/melos_run_bootstrap.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.vscode/launch.json b/.vscode/launch.json
new file mode 100644
index 00000000..7f88519d
--- /dev/null
+++ b/.vscode/launch.json
@@ -0,0 +1,18 @@
+{
+ // Use IntelliSense to learn about possible attributes.
+ // Hover to view descriptions of existing attributes.
+ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "name": "sf_app_platform",
+ "cwd": "apps/mobile_app",
+ "request": "launch",
+ "type": "dart",
+ // "toolArgs": [
+ // "--dart-define=ELEVENLABS_API_KEY=sk_2351c16102e66b5b5c26d022d73e8af203fda111f60516f6",
+ // "--dart-define=ELEVENLABS_VOICE_ID=kaOF79CUr1VcYoAoVbqa"
+ // ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 00000000..487fdbe0
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,11 @@
+{
+ "dart.flutterSdkPath": "/Users/juliandalcalaf/Development/flutter",
+ "dart.sdkPath": "/Users/juliandalcalaf/Development/flutter/bin/cache/dart-sdk",
+ "dart.enableSdkFormatter": true,
+ "dart.analysisExcludedFolders": [
+ "**/build",
+ "**/.dart_tool"
+ ],
+ "editor.formatOnSave": true,
+ "editor.tabSize": 2
+}
\ No newline at end of file
diff --git a/README.md b/README.md
index e7cc6955..d9d0db10 100644
--- a/README.md
+++ b/README.md
@@ -1,16 +1 @@
-# sf-app-platform
-
-A new Flutter project.
-
-## Getting Started
-
-This project is a starting point for a Flutter application.
-
-A few resources to get you started if this is your first Flutter project:
-
-- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab)
-- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook)
-
-For help getting started with Flutter development, view the
-[online documentation](https://docs.flutter.dev/), which offers tutorials,
-samples, guidance on mobile development, and a full API reference.
+# SF-APP-PLATFORM
\ No newline at end of file
diff --git a/.gitignore b/apps/mobile_app/.gitignore
similarity index 100%
rename from .gitignore
rename to apps/mobile_app/.gitignore
diff --git a/.metadata b/apps/mobile_app/.metadata
similarity index 100%
rename from .metadata
rename to apps/mobile_app/.metadata
diff --git a/apps/mobile_app/README.md b/apps/mobile_app/README.md
new file mode 100644
index 00000000..e7cc6955
--- /dev/null
+++ b/apps/mobile_app/README.md
@@ -0,0 +1,16 @@
+# sf-app-platform
+
+A new Flutter project.
+
+## Getting Started
+
+This project is a starting point for a Flutter application.
+
+A few resources to get you started if this is your first Flutter project:
+
+- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab)
+- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook)
+
+For help getting started with Flutter development, view the
+[online documentation](https://docs.flutter.dev/), which offers tutorials,
+samples, guidance on mobile development, and a full API reference.
diff --git a/analysis_options.yaml b/apps/mobile_app/analysis_options.yaml
similarity index 100%
rename from analysis_options.yaml
rename to apps/mobile_app/analysis_options.yaml
diff --git a/android/.gitignore b/apps/mobile_app/android/.gitignore
similarity index 100%
rename from android/.gitignore
rename to apps/mobile_app/android/.gitignore
diff --git a/android/app/build.gradle.kts b/apps/mobile_app/android/app/build.gradle.kts
similarity index 100%
rename from android/app/build.gradle.kts
rename to apps/mobile_app/android/app/build.gradle.kts
diff --git a/android/app/src/debug/AndroidManifest.xml b/apps/mobile_app/android/app/src/debug/AndroidManifest.xml
similarity index 100%
rename from android/app/src/debug/AndroidManifest.xml
rename to apps/mobile_app/android/app/src/debug/AndroidManifest.xml
diff --git a/android/app/src/main/AndroidManifest.xml b/apps/mobile_app/android/app/src/main/AndroidManifest.xml
similarity index 100%
rename from android/app/src/main/AndroidManifest.xml
rename to apps/mobile_app/android/app/src/main/AndroidManifest.xml
diff --git a/android/app/src/main/kotlin/com/savefamily/sf_payments/MainActivity.kt b/apps/mobile_app/android/app/src/main/kotlin/com/savefamily/sf_payments/MainActivity.kt
similarity index 100%
rename from android/app/src/main/kotlin/com/savefamily/sf_payments/MainActivity.kt
rename to apps/mobile_app/android/app/src/main/kotlin/com/savefamily/sf_payments/MainActivity.kt
diff --git a/android/app/src/main/res/drawable-v21/launch_background.xml b/apps/mobile_app/android/app/src/main/res/drawable-v21/launch_background.xml
similarity index 100%
rename from android/app/src/main/res/drawable-v21/launch_background.xml
rename to apps/mobile_app/android/app/src/main/res/drawable-v21/launch_background.xml
diff --git a/android/app/src/main/res/drawable/launch_background.xml b/apps/mobile_app/android/app/src/main/res/drawable/launch_background.xml
similarity index 100%
rename from android/app/src/main/res/drawable/launch_background.xml
rename to apps/mobile_app/android/app/src/main/res/drawable/launch_background.xml
diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/apps/mobile_app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
similarity index 100%
rename from android/app/src/main/res/mipmap-hdpi/ic_launcher.png
rename to apps/mobile_app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/apps/mobile_app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
similarity index 100%
rename from android/app/src/main/res/mipmap-mdpi/ic_launcher.png
rename to apps/mobile_app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/apps/mobile_app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
similarity index 100%
rename from android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
rename to apps/mobile_app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/apps/mobile_app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
similarity index 100%
rename from android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
rename to apps/mobile_app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/apps/mobile_app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
similarity index 100%
rename from android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
rename to apps/mobile_app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
diff --git a/android/app/src/main/res/values-night/styles.xml b/apps/mobile_app/android/app/src/main/res/values-night/styles.xml
similarity index 100%
rename from android/app/src/main/res/values-night/styles.xml
rename to apps/mobile_app/android/app/src/main/res/values-night/styles.xml
diff --git a/android/app/src/main/res/values/styles.xml b/apps/mobile_app/android/app/src/main/res/values/styles.xml
similarity index 100%
rename from android/app/src/main/res/values/styles.xml
rename to apps/mobile_app/android/app/src/main/res/values/styles.xml
diff --git a/android/app/src/profile/AndroidManifest.xml b/apps/mobile_app/android/app/src/profile/AndroidManifest.xml
similarity index 100%
rename from android/app/src/profile/AndroidManifest.xml
rename to apps/mobile_app/android/app/src/profile/AndroidManifest.xml
diff --git a/android/build.gradle.kts b/apps/mobile_app/android/build.gradle.kts
similarity index 100%
rename from android/build.gradle.kts
rename to apps/mobile_app/android/build.gradle.kts
diff --git a/android/gradle.properties b/apps/mobile_app/android/gradle.properties
similarity index 100%
rename from android/gradle.properties
rename to apps/mobile_app/android/gradle.properties
diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/apps/mobile_app/android/gradle/wrapper/gradle-wrapper.properties
similarity index 100%
rename from android/gradle/wrapper/gradle-wrapper.properties
rename to apps/mobile_app/android/gradle/wrapper/gradle-wrapper.properties
diff --git a/android/settings.gradle.kts b/apps/mobile_app/android/settings.gradle.kts
similarity index 100%
rename from android/settings.gradle.kts
rename to apps/mobile_app/android/settings.gradle.kts
diff --git a/assets/images/ui/ahorros.svg b/apps/mobile_app/assets/images/ui/ahorros.svg
similarity index 100%
rename from assets/images/ui/ahorros.svg
rename to apps/mobile_app/assets/images/ui/ahorros.svg
diff --git a/assets/images/ui/banco.svg b/apps/mobile_app/assets/images/ui/banco.svg
similarity index 100%
rename from assets/images/ui/banco.svg
rename to apps/mobile_app/assets/images/ui/banco.svg
diff --git a/assets/images/ui/bienvenida_paso1.svg b/apps/mobile_app/assets/images/ui/bienvenida_paso1.svg
similarity index 100%
rename from assets/images/ui/bienvenida_paso1.svg
rename to apps/mobile_app/assets/images/ui/bienvenida_paso1.svg
diff --git a/assets/images/ui/bienvenida_paso2.svg b/apps/mobile_app/assets/images/ui/bienvenida_paso2.svg
similarity index 100%
rename from assets/images/ui/bienvenida_paso2.svg
rename to apps/mobile_app/assets/images/ui/bienvenida_paso2.svg
diff --git a/assets/images/ui/bienvenida_paso3.svg b/apps/mobile_app/assets/images/ui/bienvenida_paso3.svg
similarity index 100%
rename from assets/images/ui/bienvenida_paso3.svg
rename to apps/mobile_app/assets/images/ui/bienvenida_paso3.svg
diff --git a/assets/images/ui/connection_error.svg b/apps/mobile_app/assets/images/ui/connection_error.svg
similarity index 100%
rename from assets/images/ui/connection_error.svg
rename to apps/mobile_app/assets/images/ui/connection_error.svg
diff --git a/assets/images/ui/face.svg b/apps/mobile_app/assets/images/ui/face.svg
similarity index 100%
rename from assets/images/ui/face.svg
rename to apps/mobile_app/assets/images/ui/face.svg
diff --git a/assets/images/ui/formulario.svg b/apps/mobile_app/assets/images/ui/formulario.svg
similarity index 100%
rename from assets/images/ui/formulario.svg
rename to apps/mobile_app/assets/images/ui/formulario.svg
diff --git a/assets/images/ui/logo_sf.svg b/apps/mobile_app/assets/images/ui/logo_sf.svg
similarity index 100%
rename from assets/images/ui/logo_sf.svg
rename to apps/mobile_app/assets/images/ui/logo_sf.svg
diff --git a/assets/images/ui/paypal.svg b/apps/mobile_app/assets/images/ui/paypal.svg
similarity index 100%
rename from assets/images/ui/paypal.svg
rename to apps/mobile_app/assets/images/ui/paypal.svg
diff --git a/assets/images/ui/qr.svg b/apps/mobile_app/assets/images/ui/qr.svg
similarity index 100%
rename from assets/images/ui/qr.svg
rename to apps/mobile_app/assets/images/ui/qr.svg
diff --git a/assets/images/ui/server_error.svg b/apps/mobile_app/assets/images/ui/server_error.svg
similarity index 100%
rename from assets/images/ui/server_error.svg
rename to apps/mobile_app/assets/images/ui/server_error.svg
diff --git a/assets/images/ui/tareas.svg b/apps/mobile_app/assets/images/ui/tareas.svg
similarity index 100%
rename from assets/images/ui/tareas.svg
rename to apps/mobile_app/assets/images/ui/tareas.svg
diff --git a/assets/images/ui/visa.svg b/apps/mobile_app/assets/images/ui/visa.svg
similarity index 100%
rename from assets/images/ui/visa.svg
rename to apps/mobile_app/assets/images/ui/visa.svg
diff --git a/apps/mobile_app/devtools_options.yaml b/apps/mobile_app/devtools_options.yaml
new file mode 100644
index 00000000..fa0b357c
--- /dev/null
+++ b/apps/mobile_app/devtools_options.yaml
@@ -0,0 +1,3 @@
+description: This file stores settings for Dart & Flutter DevTools.
+documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states
+extensions:
diff --git a/ios/.gitignore b/apps/mobile_app/ios/.gitignore
similarity index 100%
rename from ios/.gitignore
rename to apps/mobile_app/ios/.gitignore
diff --git a/ios/Flutter/AppFrameworkInfo.plist b/apps/mobile_app/ios/Flutter/AppFrameworkInfo.plist
similarity index 100%
rename from ios/Flutter/AppFrameworkInfo.plist
rename to apps/mobile_app/ios/Flutter/AppFrameworkInfo.plist
diff --git a/ios/Flutter/Debug.xcconfig b/apps/mobile_app/ios/Flutter/Debug.xcconfig
similarity index 100%
rename from ios/Flutter/Debug.xcconfig
rename to apps/mobile_app/ios/Flutter/Debug.xcconfig
diff --git a/ios/Flutter/Release.xcconfig b/apps/mobile_app/ios/Flutter/Release.xcconfig
similarity index 100%
rename from ios/Flutter/Release.xcconfig
rename to apps/mobile_app/ios/Flutter/Release.xcconfig
diff --git a/ios/Runner.xcodeproj/project.pbxproj b/apps/mobile_app/ios/Runner.xcodeproj/project.pbxproj
similarity index 100%
rename from ios/Runner.xcodeproj/project.pbxproj
rename to apps/mobile_app/ios/Runner.xcodeproj/project.pbxproj
diff --git a/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/apps/mobile_app/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
similarity index 100%
rename from ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
rename to apps/mobile_app/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
diff --git a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/apps/mobile_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
similarity index 100%
rename from ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
rename to apps/mobile_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
diff --git a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/apps/mobile_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
similarity index 100%
rename from ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
rename to apps/mobile_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/apps/mobile_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
similarity index 100%
rename from ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
rename to apps/mobile_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
diff --git a/ios/Runner.xcworkspace/contents.xcworkspacedata b/apps/mobile_app/ios/Runner.xcworkspace/contents.xcworkspacedata
similarity index 100%
rename from ios/Runner.xcworkspace/contents.xcworkspacedata
rename to apps/mobile_app/ios/Runner.xcworkspace/contents.xcworkspacedata
diff --git a/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/apps/mobile_app/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
similarity index 100%
rename from ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
rename to apps/mobile_app/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
diff --git a/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/apps/mobile_app/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
similarity index 100%
rename from ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
rename to apps/mobile_app/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
diff --git a/ios/Runner/AppDelegate.swift b/apps/mobile_app/ios/Runner/AppDelegate.swift
similarity index 100%
rename from ios/Runner/AppDelegate.swift
rename to apps/mobile_app/ios/Runner/AppDelegate.swift
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/apps/mobile_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
similarity index 100%
rename from ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
rename to apps/mobile_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/apps/mobile_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
similarity index 100%
rename from ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
rename to apps/mobile_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/apps/mobile_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
similarity index 100%
rename from ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
rename to apps/mobile_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/apps/mobile_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
similarity index 100%
rename from ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
rename to apps/mobile_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/apps/mobile_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
similarity index 100%
rename from ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
rename to apps/mobile_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/apps/mobile_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
similarity index 100%
rename from ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
rename to apps/mobile_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/apps/mobile_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
similarity index 100%
rename from ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
rename to apps/mobile_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/apps/mobile_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
similarity index 100%
rename from ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
rename to apps/mobile_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/apps/mobile_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
similarity index 100%
rename from ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
rename to apps/mobile_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/apps/mobile_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
similarity index 100%
rename from ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
rename to apps/mobile_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/apps/mobile_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
similarity index 100%
rename from ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
rename to apps/mobile_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/apps/mobile_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
similarity index 100%
rename from ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
rename to apps/mobile_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/apps/mobile_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
similarity index 100%
rename from ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
rename to apps/mobile_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/apps/mobile_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
similarity index 100%
rename from ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
rename to apps/mobile_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/apps/mobile_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
similarity index 100%
rename from ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
rename to apps/mobile_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/apps/mobile_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
similarity index 100%
rename from ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
rename to apps/mobile_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/apps/mobile_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
similarity index 100%
rename from ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
rename to apps/mobile_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/apps/mobile_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
similarity index 100%
rename from ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
rename to apps/mobile_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/apps/mobile_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
similarity index 100%
rename from ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
rename to apps/mobile_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/apps/mobile_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
similarity index 100%
rename from ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
rename to apps/mobile_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/apps/mobile_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
similarity index 100%
rename from ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
rename to apps/mobile_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
diff --git a/ios/Runner/Base.lproj/LaunchScreen.storyboard b/apps/mobile_app/ios/Runner/Base.lproj/LaunchScreen.storyboard
similarity index 100%
rename from ios/Runner/Base.lproj/LaunchScreen.storyboard
rename to apps/mobile_app/ios/Runner/Base.lproj/LaunchScreen.storyboard
diff --git a/ios/Runner/Base.lproj/Main.storyboard b/apps/mobile_app/ios/Runner/Base.lproj/Main.storyboard
similarity index 100%
rename from ios/Runner/Base.lproj/Main.storyboard
rename to apps/mobile_app/ios/Runner/Base.lproj/Main.storyboard
diff --git a/ios/Runner/Info.plist b/apps/mobile_app/ios/Runner/Info.plist
similarity index 100%
rename from ios/Runner/Info.plist
rename to apps/mobile_app/ios/Runner/Info.plist
diff --git a/ios/Runner/Runner-Bridging-Header.h b/apps/mobile_app/ios/Runner/Runner-Bridging-Header.h
similarity index 100%
rename from ios/Runner/Runner-Bridging-Header.h
rename to apps/mobile_app/ios/Runner/Runner-Bridging-Header.h
diff --git a/ios/RunnerTests/RunnerTests.swift b/apps/mobile_app/ios/RunnerTests/RunnerTests.swift
similarity index 100%
rename from ios/RunnerTests/RunnerTests.swift
rename to apps/mobile_app/ios/RunnerTests/RunnerTests.swift
diff --git a/apps/mobile_app/lib/main.dart b/apps/mobile_app/lib/main.dart
new file mode 100644
index 00000000..fc55dcc4
--- /dev/null
+++ b/apps/mobile_app/lib/main.dart
@@ -0,0 +1,49 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_localizations/flutter_localizations.dart';
+import 'package:flutter_riverpod/flutter_riverpod.dart';
+import 'package:design_system/design_system.dart';
+import 'package:sf_app_platform/navigation/app_router.dart';
+import 'package:navigation/navigation_module.dart';
+import 'package:sf_localizations/sf_localizations.dart';
+
+Future main() async {
+ WidgetsFlutterBinding.ensureInitialized();
+ navigationModule();
+ configureAppRouter();
+ themePackages();
+
+ runApp(const ProviderScope(child: PlatformApp()));
+}
+
+class PlatformApp extends ConsumerWidget {
+ const PlatformApp({super.key});
+
+ @override
+ Widget build(BuildContext context, WidgetRef ref) {
+ return MaterialApp.router(
+ title: 'SaveFamily',
+ theme: ThemeData(
+ colorScheme: ColorScheme.fromSeed(seedColor: Color(0xFF329E95)),
+ ),
+ routerConfig: appRouter,
+ debugShowCheckedModeBanner: false,
+ localizationsDelegates: const [
+ SFLocalizations.delegate,
+ GlobalMaterialLocalizations.delegate,
+ GlobalCupertinoLocalizations.delegate,
+ GlobalWidgetsLocalizations.delegate,
+ ],
+
+ supportedLocales: [for (final lang in supportedLanguages) Locale(lang)],
+ localeResolutionCallback: (locale, supportedLocales) {
+ if (locale == null) return supportedLocales.first;
+ for (var supportedLocale in supportedLocales) {
+ if (supportedLocale.languageCode == locale.languageCode) {
+ return supportedLocale;
+ }
+ }
+ return supportedLocales.first;
+ },
+ );
+ }
+}
diff --git a/apps/mobile_app/lib/navigation/app_router.dart b/apps/mobile_app/lib/navigation/app_router.dart
new file mode 100644
index 00000000..29b62ad3
--- /dev/null
+++ b/apps/mobile_app/lib/navigation/app_router.dart
@@ -0,0 +1,94 @@
+import 'package:auth/auth.dart';
+import 'package:dashboard_shell/dashboard_builder.dart';
+import 'package:flutter/material.dart';
+import 'package:get_it/get_it.dart';
+import 'package:go_router/go_router.dart';
+import 'package:home/home.dart';
+import 'package:navigation/navigation.dart';
+import 'package:notifications/notifications.dart';
+import 'package:profile/profile.dart';
+
+final GlobalKey rootNavigatorKey = GlobalKey();
+
+late final GoRouter appRouter;
+
+void configureAppRouter() {
+ appRouter = GoRouter(
+ navigatorKey: rootNavigatorKey,
+ initialLocation: AppRoutes.login,
+ debugLogDiagnostics: true,
+ routes: [
+ GoRoute(
+ path: AppRoutes.login,
+ name: 'login',
+ pageBuilder: LoginBuilder().buildPage,
+ ),
+ GoRoute(
+ path: AppRoutes.onboarding,
+ name: 'onboarding',
+ pageBuilder: OnboardingBuilder().buildPage,
+ ),
+ GoRoute(
+ path: AppRoutes.linkPhone,
+ name: 'link_phone',
+ pageBuilder: LinkPhoneBuilder().buildPage,
+ ),
+ GoRoute(
+ path: AppRoutes.phoneCode,
+ name: 'phone_code',
+ pageBuilder: PhoneCodeBuilder().buildPage,
+ ),
+ GoRoute(
+ path: AppRoutes.recoverPassword,
+ name: 'recover_password',
+ pageBuilder: RecoverPasswordBuilder().buildPage,
+ ),
+
+ StatefulShellRoute.indexedStack(
+ builder: (context, state, navShell) {
+ return DashboardBuilder().build(context, navShell);
+ },
+ branches: [
+ StatefulShellBranch(
+ routes: [
+ GoRoute(
+ path: AppRoutes.dashboardHome,
+ name: 'home',
+ pageBuilder: const HomeBuilder().buildPage,
+ ),
+ ],
+ ),
+ StatefulShellBranch(
+ routes: [
+ GoRoute(
+ path: AppRoutes.dashboardActivity,
+ name: 'activity',
+ pageBuilder: const ActivityBuilder().buildPage,
+ ),
+ ],
+ ),
+ StatefulShellBranch(
+ routes: [
+ GoRoute(
+ path: AppRoutes.dashboardNotifications,
+ name: 'notifications',
+ pageBuilder: const NotificationsBuilder().buildPage,
+ ),
+ ],
+ ),
+ StatefulShellBranch(
+ routes: [
+ GoRoute(
+ path: AppRoutes.dashboardProfile,
+ name: 'profile',
+ pageBuilder: const ProfileBuilder().buildPage,
+ ),
+ ],
+ ),
+ ],
+ ),
+ ],
+ );
+
+ GetIt.I().setRouter(appRouter);
+}
diff --git a/linux/.gitignore b/apps/mobile_app/linux/.gitignore
similarity index 100%
rename from linux/.gitignore
rename to apps/mobile_app/linux/.gitignore
diff --git a/linux/CMakeLists.txt b/apps/mobile_app/linux/CMakeLists.txt
similarity index 100%
rename from linux/CMakeLists.txt
rename to apps/mobile_app/linux/CMakeLists.txt
diff --git a/linux/flutter/CMakeLists.txt b/apps/mobile_app/linux/flutter/CMakeLists.txt
similarity index 100%
rename from linux/flutter/CMakeLists.txt
rename to apps/mobile_app/linux/flutter/CMakeLists.txt
diff --git a/linux/flutter/generated_plugin_registrant.cc b/apps/mobile_app/linux/flutter/generated_plugin_registrant.cc
similarity index 100%
rename from linux/flutter/generated_plugin_registrant.cc
rename to apps/mobile_app/linux/flutter/generated_plugin_registrant.cc
diff --git a/linux/flutter/generated_plugin_registrant.h b/apps/mobile_app/linux/flutter/generated_plugin_registrant.h
similarity index 100%
rename from linux/flutter/generated_plugin_registrant.h
rename to apps/mobile_app/linux/flutter/generated_plugin_registrant.h
diff --git a/linux/flutter/generated_plugins.cmake b/apps/mobile_app/linux/flutter/generated_plugins.cmake
similarity index 100%
rename from linux/flutter/generated_plugins.cmake
rename to apps/mobile_app/linux/flutter/generated_plugins.cmake
diff --git a/linux/runner/CMakeLists.txt b/apps/mobile_app/linux/runner/CMakeLists.txt
similarity index 100%
rename from linux/runner/CMakeLists.txt
rename to apps/mobile_app/linux/runner/CMakeLists.txt
diff --git a/linux/runner/main.cc b/apps/mobile_app/linux/runner/main.cc
similarity index 100%
rename from linux/runner/main.cc
rename to apps/mobile_app/linux/runner/main.cc
diff --git a/linux/runner/my_application.cc b/apps/mobile_app/linux/runner/my_application.cc
similarity index 100%
rename from linux/runner/my_application.cc
rename to apps/mobile_app/linux/runner/my_application.cc
diff --git a/linux/runner/my_application.h b/apps/mobile_app/linux/runner/my_application.h
similarity index 100%
rename from linux/runner/my_application.h
rename to apps/mobile_app/linux/runner/my_application.h
diff --git a/apps/mobile_app/pubspec.lock b/apps/mobile_app/pubspec.lock
new file mode 100644
index 00000000..50d39056
--- /dev/null
+++ b/apps/mobile_app/pubspec.lock
@@ -0,0 +1,877 @@
+# Generated by pub
+# See https://dart.dev/tools/pub/glossary#lockfile
+packages:
+ _fe_analyzer_shared:
+ dependency: transitive
+ description:
+ name: _fe_analyzer_shared
+ sha256: da0d9209ca76bde579f2da330aeb9df62b6319c834fa7baae052021b0462401f
+ url: "https://pub.dev"
+ source: hosted
+ version: "85.0.0"
+ analyzer:
+ dependency: transitive
+ description:
+ name: analyzer
+ sha256: "974859dc0ff5f37bc4313244b3218c791810d03ab3470a579580279ba971a48d"
+ url: "https://pub.dev"
+ source: hosted
+ version: "7.7.1"
+ args:
+ dependency: transitive
+ description:
+ name: args
+ sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.7.0"
+ async:
+ dependency: transitive
+ description:
+ name: async
+ sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.13.0"
+ auth:
+ dependency: "direct main"
+ description:
+ path: "../../modules/auth"
+ relative: true
+ source: path
+ version: "0.0.1"
+ boolean_selector:
+ dependency: transitive
+ description:
+ name: boolean_selector
+ sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.2"
+ build:
+ dependency: transitive
+ description:
+ name: build
+ sha256: ce76b1d48875e3233fde17717c23d1f60a91cc631597e49a400c89b475395b1d
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.1.0"
+ build_config:
+ dependency: transitive
+ description:
+ name: build_config
+ sha256: "4f64382b97504dc2fcdf487d5aae33418e08b4703fc21249e4db6d804a4d0187"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.2.0"
+ build_daemon:
+ dependency: transitive
+ description:
+ name: build_daemon
+ sha256: bf05f6e12cfea92d3c09308d7bcdab1906cd8a179b023269eed00c071004b957
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.1.1"
+ build_resolvers:
+ dependency: transitive
+ description:
+ name: build_resolvers
+ sha256: d1d57f7807debd7349b4726a19fd32ec8bc177c71ad0febf91a20f84cd2d4b46
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.3"
+ build_runner:
+ dependency: "direct main"
+ description:
+ name: build_runner
+ sha256: b24597fceb695969d47025c958f3837f9f0122e237c6a22cb082a5ac66c3ca30
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.7.1"
+ build_runner_core:
+ dependency: transitive
+ description:
+ name: build_runner_core
+ sha256: "066dda7f73d8eb48ba630a55acb50c4a84a2e6b453b1cb4567f581729e794f7b"
+ url: "https://pub.dev"
+ source: hosted
+ version: "9.3.1"
+ 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: a30f0a0e38671e89a492c44d005b5545b830a961575bbd8336d42869ff71066d
+ url: "https://pub.dev"
+ source: hosted
+ version: "8.12.0"
+ characters:
+ dependency: transitive
+ description:
+ name: characters
+ sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.0"
+ checked_yaml:
+ dependency: transitive
+ description:
+ name: checked_yaml
+ sha256: "959525d3162f249993882720d52b7e0c833978df229be20702b33d48d91de70f"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.0.4"
+ cli_config:
+ dependency: transitive
+ description:
+ name: cli_config
+ sha256: ac20a183a07002b700f0c25e61b7ee46b23c309d76ab7b7640a028f18e4d99ec
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.2.0"
+ clock:
+ dependency: transitive
+ description:
+ name: clock
+ sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.2"
+ code_builder:
+ dependency: transitive
+ description:
+ name: code_builder
+ sha256: "11654819532ba94c34de52ff5feb52bd81cba1de00ef2ed622fd50295f9d4243"
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.11.0"
+ collection:
+ dependency: transitive
+ description:
+ name: collection
+ sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.19.1"
+ 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: "5da775aa218eaf2151c721b16c01c7676fbfdd99cebba2bf64e8b807a28ff94d"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.15.0"
+ crypto:
+ dependency: transitive
+ description:
+ name: crypto
+ sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.7"
+ cupertino_icons:
+ dependency: "direct main"
+ description:
+ name: cupertino_icons
+ sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.8"
+ dart_style:
+ dependency: transitive
+ description:
+ name: dart_style
+ sha256: "8a0e5fba27e8ee025d2ffb4ee820b4e6e2cf5e4246a6b1a477eb66866947e0bb"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.1.1"
+ dashboard_shell:
+ dependency: "direct main"
+ description:
+ path: "../../modules/dashboard_shell"
+ relative: true
+ source: path
+ version: "0.0.1"
+ design_system:
+ dependency: "direct main"
+ description:
+ path: "../../packages/design_system"
+ relative: true
+ source: path
+ version: "0.0.1"
+ equatable:
+ dependency: transitive
+ description:
+ name: equatable
+ sha256: "567c64b3cb4cf82397aac55f4f0cbd3ca20d77c6c03bedbc4ceaddc08904aef7"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.0.7"
+ fake_async:
+ dependency: transitive
+ description:
+ name: fake_async
+ sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.3.3"
+ file:
+ dependency: transitive
+ description:
+ name: file
+ sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4
+ url: "https://pub.dev"
+ source: hosted
+ version: "7.0.1"
+ fixnum:
+ dependency: transitive
+ description:
+ name: fixnum
+ sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.1"
+ fl_chart:
+ dependency: transitive
+ description:
+ name: fl_chart
+ sha256: "7ca9a40f4eb85949190e54087be8b4d6ac09dc4c54238d782a34cf1f7c011de9"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.1"
+ flutter:
+ dependency: "direct main"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ flutter_lints:
+ dependency: "direct dev"
+ description:
+ name: flutter_lints
+ sha256: "5398f14efa795ffb7a33e9b6a08798b26a180edac4ad7db3f231e40f82ce11e1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "5.0.0"
+ flutter_localizations:
+ dependency: "direct main"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ flutter_riverpod:
+ dependency: "direct main"
+ description:
+ name: flutter_riverpod
+ sha256: "9e2d6907f12cc7d23a846847615941bddee8709bf2bfd274acdf5e80bcf22fde"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.3"
+ flutter_svg:
+ dependency: "direct main"
+ description:
+ name: flutter_svg
+ sha256: b9c2ad5872518a27507ab432d1fb97e8813b05f0fc693f9d40fad06d073e0678
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.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"
+ freezed:
+ dependency: transitive
+ description:
+ name: freezed
+ sha256: "13065f10e135263a4f5a4391b79a8efc5fb8106f8dd555a9e49b750b45393d77"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.2.3"
+ freezed_annotation:
+ dependency: transitive
+ description:
+ name: freezed_annotation
+ sha256: "7294967ff0a6d98638e7acb774aac3af2550777accd8149c90af5b014e6d44d8"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.1.0"
+ frontend_server_client:
+ dependency: transitive
+ description:
+ name: frontend_server_client
+ sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.0.0"
+ get_it:
+ dependency: "direct main"
+ description:
+ name: get_it
+ sha256: "84792561b731b6463d053e9761a5236da967c369da10b134b8585a5e18429956"
+ url: "https://pub.dev"
+ source: hosted
+ version: "9.0.5"
+ glob:
+ dependency: transitive
+ description:
+ name: glob
+ sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.3"
+ go_router:
+ dependency: "direct main"
+ description:
+ name: go_router
+ sha256: c92d18e1fe994cb06d48aa786c46b142a5633067e8297cff6b5a3ac742620104
+ url: "https://pub.dev"
+ source: hosted
+ version: "17.0.0"
+ go_router_builder:
+ dependency: "direct main"
+ description:
+ name: go_router_builder
+ sha256: e0646fb5586e04e1df92678f539059f38e4314848f06dd4f3cd87fed434e16b5
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.1.1"
+ graphs:
+ dependency: transitive
+ description:
+ name: graphs
+ sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.3.2"
+ home:
+ dependency: "direct main"
+ description:
+ path: "../../modules/home"
+ relative: true
+ source: path
+ version: "0.0.1"
+ http:
+ dependency: transitive
+ description:
+ name: http
+ sha256: bb2ce4590bc2667c96f318d68cac1b5a7987ec819351d32b1c987239a815e007
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.5.0"
+ 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"
+ intl:
+ dependency: transitive
+ description:
+ name: intl
+ sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.20.2"
+ 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: "53385261521cc4a0c4658fd0ad07a7d14591cf8fc33abbceae306ddb974888dc"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.7.2"
+ 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: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
+ url: "https://pub.dev"
+ source: hosted
+ version: "11.0.2"
+ leak_tracker_flutter_testing:
+ dependency: transitive
+ description:
+ name: leak_tracker_flutter_testing
+ sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.10"
+ leak_tracker_testing:
+ dependency: transitive
+ description:
+ name: leak_tracker_testing
+ sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.2"
+ lints:
+ dependency: transitive
+ description:
+ name: lints
+ sha256: c35bb79562d980e9a453fc715854e1ed39e24e7d0297a880ef54e17f9874a9d7
+ url: "https://pub.dev"
+ source: hosted
+ version: "5.1.1"
+ logging:
+ dependency: transitive
+ description:
+ name: logging
+ sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.3.0"
+ matcher:
+ dependency: transitive
+ description:
+ name: matcher
+ sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.12.17"
+ material_color_utilities:
+ dependency: transitive
+ description:
+ name: material_color_utilities
+ sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.11.1"
+ meta:
+ dependency: transitive
+ description:
+ name: meta
+ sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.16.0"
+ mime:
+ dependency: transitive
+ description:
+ name: mime
+ sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.0.0"
+ navigation:
+ dependency: "direct main"
+ description:
+ path: "../../packages/navigation"
+ relative: true
+ source: path
+ version: "0.0.1"
+ node_preamble:
+ dependency: transitive
+ description:
+ name: node_preamble
+ sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.0.2"
+ notifications:
+ dependency: "direct main"
+ description:
+ path: "../../modules/notifications"
+ relative: true
+ source: path
+ version: "0.0.1"
+ package_config:
+ dependency: transitive
+ description:
+ name: package_config
+ sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.0"
+ path:
+ dependency: transitive
+ description:
+ name: path
+ sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.9.1"
+ path_parsing:
+ dependency: transitive
+ description:
+ name: path_parsing
+ sha256: "883402936929eac138ee0a45da5b0f2c80f89913e6dc3bf77eb65b84b409c6ca"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.0"
+ petitparser:
+ dependency: transitive
+ description:
+ name: petitparser
+ sha256: "1a97266a94f7350d30ae522c0af07890c70b8e62c71e8e3920d1db4d23c057d1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "7.0.1"
+ pool:
+ dependency: transitive
+ description:
+ name: pool
+ sha256: "978783255c543aa3586a1b3c21f6e9d720eb315376a915872c61ef8b5c20177d"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.5.2"
+ profile:
+ dependency: "direct main"
+ description:
+ path: "../../modules/profile"
+ relative: true
+ source: path
+ version: "0.0.1"
+ pub_semver:
+ dependency: transitive
+ description:
+ name: pub_semver
+ sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.0"
+ pubspec_parse:
+ dependency: transitive
+ description:
+ name: pubspec_parse
+ sha256: "0560ba233314abbed0a48a2956f7f022cce7c3e1e73df540277da7544cad4082"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.5.0"
+ riverpod:
+ dependency: transitive
+ description:
+ name: riverpod
+ sha256: c406de02bff19d920b832bddfb8283548bfa05ce41c59afba57ce643e116aa59
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.3"
+ sf_localizations:
+ dependency: "direct main"
+ description:
+ path: "../../packages/sf_localizations"
+ relative: true
+ source: path
+ version: "0.0.1"
+ sf_shared:
+ dependency: "direct overridden"
+ description:
+ path: "../../packages/sf_shared"
+ relative: true
+ source: path
+ version: "0.0.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: "3632775c8e90d6c9712f883e633716432a27758216dfb61bd86a8321c0580925"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.0"
+ sky_engine:
+ dependency: transitive
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ source_gen:
+ dependency: transitive
+ description:
+ name: source_gen
+ sha256: "800f12fb87434defa13432ab37e33051b43b290a174e15259563b043cda40c46"
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.0.0"
+ source_helper:
+ dependency: transitive
+ description:
+ name: source_helper
+ sha256: "6a3c6cc82073a8797f8c4dc4572146114a39652851c157db37e964d9c7038723"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.3.8"
+ 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: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.10.1"
+ stack_trace:
+ dependency: transitive
+ description:
+ name: stack_trace
+ sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.12.1"
+ state_notifier:
+ dependency: transitive
+ description:
+ name: state_notifier
+ sha256: b8677376aa54f2d7c58280d5a007f9e8774f1968d1fb1c096adcb4792fba29bb
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.0"
+ stream_channel:
+ dependency: transitive
+ description:
+ name: stream_channel
+ sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.4"
+ 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: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.1"
+ term_glyph:
+ dependency: transitive
+ description:
+ name: term_glyph
+ sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.2.2"
+ test:
+ dependency: transitive
+ description:
+ name: test
+ sha256: "65e29d831719be0591f7b3b1a32a3cda258ec98c58c7b25f7b84241bc31215bb"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.26.2"
+ test_api:
+ dependency: transitive
+ description:
+ name: test_api
+ sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.7.6"
+ test_core:
+ dependency: transitive
+ description:
+ name: test_core
+ sha256: "80bf5a02b60af04b09e14f6fe68b921aad119493e26e490deaca5993fef1b05a"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.6.11"
+ 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"
+ utils:
+ dependency: "direct overridden"
+ description:
+ path: "../../packages/utils"
+ relative: true
+ source: path
+ version: "0.0.1"
+ vector_graphics:
+ dependency: transitive
+ description:
+ name: vector_graphics
+ sha256: a4f059dc26fc8295b5921376600a194c4ec7d55e72f2fe4c7d2831e103d461e6
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.19"
+ vector_graphics_codec:
+ dependency: transitive
+ description:
+ name: vector_graphics_codec
+ sha256: "99fd9fbd34d9f9a32efd7b6a6aae14125d8237b10403b422a6a6dfeac2806146"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.13"
+ vector_graphics_compiler:
+ dependency: transitive
+ description:
+ name: vector_graphics_compiler
+ sha256: d354a7ec6931e6047785f4db12a1f61ec3d43b207fc0790f863818543f8ff0dc
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.19"
+ vector_math:
+ dependency: transitive
+ description:
+ name: vector_math
+ sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.0"
+ vm_service:
+ dependency: transitive
+ description:
+ name: vm_service
+ sha256: "45caa6c5917fa127b5dbcfbd1fa60b14e583afdc08bfc96dda38886ca252eb60"
+ url: "https://pub.dev"
+ source: hosted
+ version: "15.0.2"
+ watcher:
+ dependency: transitive
+ description:
+ name: watcher
+ sha256: "592ab6e2892f67760543fb712ff0177f4ec76c031f02f5b4ff8d3fc5eb9fb61a"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.4"
+ web:
+ dependency: transitive
+ description:
+ name: web
+ sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.1"
+ web_socket:
+ dependency: transitive
+ description:
+ name: web_socket
+ sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.1"
+ web_socket_channel:
+ dependency: transitive
+ description:
+ name: web_socket_channel
+ sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.3"
+ webkit_inspection_protocol:
+ dependency: transitive
+ description:
+ name: webkit_inspection_protocol
+ sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.2.1"
+ xml:
+ dependency: transitive
+ description:
+ name: xml
+ sha256: "971043b3a0d3da28727e40ed3e0b5d18b742fa5a68665cca88e74b7876d5e025"
+ url: "https://pub.dev"
+ source: hosted
+ version: "6.6.1"
+ yaml:
+ dependency: transitive
+ description:
+ name: yaml
+ sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.1.3"
+sdks:
+ dart: ">=3.9.2 <4.0.0"
+ flutter: ">=3.29.0"
diff --git a/apps/mobile_app/pubspec.yaml b/apps/mobile_app/pubspec.yaml
new file mode 100644
index 00000000..08cf42f3
--- /dev/null
+++ b/apps/mobile_app/pubspec.yaml
@@ -0,0 +1,115 @@
+name: sf_app_platform
+description: "A new Flutter project."
+# The following line prevents the package from being accidentally published to
+# pub.dev using `flutter pub publish`. This is preferred for private packages.
+publish_to: 'none' # Remove this line if you wish to publish to pub.dev
+
+# The following defines the version and build number for your application.
+# A version number is three numbers separated by dots, like 1.2.43
+# followed by an optional build number separated by a +.
+# Both the version and the builder number may be overridden in flutter
+# build by specifying --build-name and --build-number, respectively.
+# In Android, build-name is used as versionName while build-number used as versionCode.
+# Read more about Android versioning at https://developer.android.com/studio/publish/versioning
+# In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion.
+# Read more about iOS versioning at
+# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
+# In Windows, build-name is used as the major, minor, and patch parts
+# of the product and file versions while build-number is used as the build suffix.
+version: 1.0.0+1
+
+environment:
+ sdk: ^3.9.2
+
+# Dependencies specify other packages that your package needs in order to work.
+# To automatically upgrade your package dependencies to the latest versions
+# consider running `flutter pub upgrade --major-versions`. Alternatively,
+# dependencies can be manually updated by changing the version numbers below to
+# the latest version available on pub.dev. To see which dependencies have newer
+# versions available, run `flutter pub outdated`.
+dependencies:
+ flutter:
+ sdk: flutter
+ flutter_localizations:
+ sdk: flutter
+ flutter_riverpod: ^3.0.3
+ get_it: ^9.0.5
+ go_router: ^17.0.0
+
+ #modules dependencies go here
+ auth:
+ path: ../../modules/auth
+ home:
+ path: ../../modules/home
+ profile:
+ path: ../../modules/profile
+ notifications:
+ path: ../../modules/notifications
+ dashboard_shell:
+ path: ../../modules/dashboard_shell
+
+ #packages dependencies go here
+ navigation:
+ path: ../../packages/navigation
+ design_system:
+ path: ../../packages/design_system
+ sf_localizations:
+ path: ../../packages/sf_localizations
+
+ #dependencies go here
+ cupertino_icons: ^1.0.8
+ flutter_svg: ^2.2.1
+ go_router_builder: ^4.1.1
+ build_runner: ^2.7.1
+
+dev_dependencies:
+ flutter_test:
+ sdk: flutter
+
+ # The "flutter_lints" package below contains a set of recommended lints to
+ # encourage good coding practices. The lint set provided by the package is
+ # activated in the `analysis_options.yaml` file located at the root of your
+ # package. See that file for information about deactivating specific lint
+ # rules and activating additional ones.
+ flutter_lints: ^5.0.0
+
+# For information on the generic Dart part of this file, see the
+# following page: https://dart.dev/tools/pub/pubspec
+
+# The following section is specific to Flutter packages.
+flutter:
+
+ # The following line ensures that the Material Icons font is
+ # included with your application, so that you can use the icons in
+ # the material Icons class.
+ uses-material-design: true
+
+ # To add assets to your application, add an assets section, like this:
+ assets:
+ - assets/images/ui/
+
+ # An image asset can refer to one or more resolution-specific "variants", see
+ # https://flutter.dev/to/resolution-aware-images
+
+ # For details regarding adding assets from package dependencies, see
+ # https://flutter.dev/to/asset-from-package
+
+ # To add custom fonts to your application, add a fonts section here,
+ # in this "flutter" section. Each entry in this list should have a
+ # "family" key with the font family name, and a "fonts" key with a
+ # list giving the asset and other descriptors for the font. For
+ # example:
+ # fonts:
+ # - family: Schyler
+ # fonts:
+ # - asset: fonts/Schyler-Regular.ttf
+ # - asset: fonts/Schyler-Italic.ttf
+ # style: italic
+ # - family: Trajan Pro
+ # fonts:
+ # - asset: fonts/TrajanPro.ttf
+ # - asset: fonts/TrajanPro_Bold.ttf
+ # weight: 700
+ #
+ # For details regarding fonts from package dependencies,
+ # see https://flutter.dev/to/font-from-package
diff --git a/apps/mobile_app/pubspec_overrides.yaml b/apps/mobile_app/pubspec_overrides.yaml
new file mode 100644
index 00000000..95453ac6
--- /dev/null
+++ b/apps/mobile_app/pubspec_overrides.yaml
@@ -0,0 +1,22 @@
+# melos_managed_dependency_overrides: auth,dashboard_shell,design_system,home,navigation,notifications,profile,sf_shared,utils,sf_localizations
+dependency_overrides:
+ auth:
+ path: ../../modules/auth
+ dashboard_shell:
+ path: ../../modules/dashboard_shell
+ design_system:
+ path: ../../packages/design_system
+ home:
+ path: ../../modules/home
+ navigation:
+ path: ../../packages/navigation
+ notifications:
+ path: ../../modules/notifications
+ profile:
+ path: ../../modules/profile
+ sf_localizations:
+ path: ../../packages/sf_localizations
+ sf_shared:
+ path: ../../packages/sf_shared
+ utils:
+ path: ../../packages/utils
diff --git a/test/widget_test.dart b/apps/mobile_app/test/widget_test.dart
similarity index 100%
rename from test/widget_test.dart
rename to apps/mobile_app/test/widget_test.dart
diff --git a/web/favicon.png b/apps/mobile_app/web/favicon.png
similarity index 100%
rename from web/favicon.png
rename to apps/mobile_app/web/favicon.png
diff --git a/web/icons/Icon-192.png b/apps/mobile_app/web/icons/Icon-192.png
similarity index 100%
rename from web/icons/Icon-192.png
rename to apps/mobile_app/web/icons/Icon-192.png
diff --git a/web/icons/Icon-512.png b/apps/mobile_app/web/icons/Icon-512.png
similarity index 100%
rename from web/icons/Icon-512.png
rename to apps/mobile_app/web/icons/Icon-512.png
diff --git a/web/icons/Icon-maskable-192.png b/apps/mobile_app/web/icons/Icon-maskable-192.png
similarity index 100%
rename from web/icons/Icon-maskable-192.png
rename to apps/mobile_app/web/icons/Icon-maskable-192.png
diff --git a/web/icons/Icon-maskable-512.png b/apps/mobile_app/web/icons/Icon-maskable-512.png
similarity index 100%
rename from web/icons/Icon-maskable-512.png
rename to apps/mobile_app/web/icons/Icon-maskable-512.png
diff --git a/web/index.html b/apps/mobile_app/web/index.html
similarity index 100%
rename from web/index.html
rename to apps/mobile_app/web/index.html
diff --git a/web/manifest.json b/apps/mobile_app/web/manifest.json
similarity index 100%
rename from web/manifest.json
rename to apps/mobile_app/web/manifest.json
diff --git a/lib/main.dart b/lib/main.dart
deleted file mode 100644
index 8bf97999..00000000
--- a/lib/main.dart
+++ /dev/null
@@ -1,66 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:sf_app_platform/payments/apps/di_container.dart';
-import 'package:sf_app_platform/payments/domain/ports/theme_port.dart';
-import 'package:flutter_riverpod/flutter_riverpod.dart' hide Provider;
-
-import 'package:provider/provider.dart';
-import 'package:sf_app_platform/payments/view/screens/account_created_screen.dart';
-import 'package:sf_app_platform/payments/view/screens/add_kid_screen.dart';
-import 'package:sf_app_platform/payments/view/screens/alert_screen.dart';
-import 'package:sf_app_platform/payments/view/screens/core/dashboard_screen.dart';
-import 'package:sf_app_platform/payments/view/screens/errors/connection_error_screen.dart';
-import 'package:sf_app_platform/payments/view/screens/errors/no_plan_error_screen.dart';
-import 'package:sf_app_platform/payments/view/screens/errors/server_error_screen.dart';
-import 'package:sf_app_platform/payments/view/screens/kid_wallet_screen.dart';
-import 'package:sf_app_platform/payments/view/screens/link_phone_screen.dart';
-import 'package:sf_app_platform/payments/view/screens/loading_google_screen.dart';
-import 'package:sf_app_platform/payments/view/screens/loading_screen.dart';
-import 'package:sf_app_platform/payments/view/screens/restore_password/restore_password_screen.dart';
-import 'package:sf_app_platform/payments/view/screens/settings_screen.dart';
-import 'package:sf_app_platform/payments/view/screens/signup/signup_screen.dart';
-import 'package:sf_app_platform/payments/view/screens/welcome_screen.dart';
-
-Future main() async {
- // DI bootstrap
- final di = await DiContainer.bootstrap();
-
- runApp(PlatformApp(di: di));
-}
-
-class PlatformApp extends StatelessWidget {
- final DiContainer di;
- const PlatformApp({super.key, required this.di});
-
- // This widget is the root of your application.
- @override
- Widget build(BuildContext context) {
- return MultiProvider(
- providers: [
- // Puertos (desde DI)
- Provider.value(value: di.theme)
- ],
- child: ProviderScope(child: MaterialApp(
- title: 'SaveFamily',
- theme: ThemeData(
- // This is the theme of your application.
- //
- // TRY THIS: Try running your application with "flutter run". You'll see
- // the application has a purple toolbar. Then, without quitting the app,
- // try changing the seedColor in the colorScheme below to Colors.green
- // and then invoke "hot reload" (save your changes or press the "hot
- // reload" button in a Flutter-supported IDE, or press "r" if you used
- // the command line to start the app).
- //
- // Notice that the counter didn't reset back to zero; the application
- // state is not lost during the reload. To reset the state, use hot
- // restart instead.
- //
- // This works for code too, not just values: Most code changes can be
- // tested with just a hot reload.
- colorScheme: ColorScheme.fromSeed(seedColor: Color(0xFF329E95)),
- ),
- home: DashboardScreen(),
- ))
- );
- }
-}
\ No newline at end of file
diff --git a/lib/payments/apps/di_container.dart b/lib/payments/apps/di_container.dart
deleted file mode 100644
index 8dea0bd3..00000000
--- a/lib/payments/apps/di_container.dart
+++ /dev/null
@@ -1,17 +0,0 @@
-import '../domain/ports/theme_port.dart';
-import '../infrastructure/adapteres/theme_adapter/theme_sf_adapter.dart';
-
-class DiContainer{
- final ThemePort theme;
-
- DiContainer._({
- required this.theme
- });
-
- static Future bootstrap({Map? overrides}) async {
- //assets y temas
- final ThemePort theme = ThemeSfAdapter();
-
- return DiContainer._(theme: theme);
- }
-}
\ No newline at end of file
diff --git a/lib/payments/domain/ports/theme_port.dart b/lib/payments/domain/ports/theme_port.dart
deleted file mode 100644
index 7d4999c3..00000000
--- a/lib/payments/domain/ports/theme_port.dart
+++ /dev/null
@@ -1,30 +0,0 @@
-import 'dart:ui';
-
-enum ThemeCode{
- background_primary,
- background_secondary,
- background_tertiary,
- text_primary,
- text_secondary,
- text_tertiary,
- button_primary,
- button_secondary
-}
-
-abstract class ThemePort {
- late Map theme;
- late List> cardColors;
-
- Color getColorFor(ThemeCode code){
- Color? c = theme[code];
- if (c == null) {
- throw Exception("Theme key not found");
- }
- return c;
- }
-
- List getCardColorFor(int index){
- return cardColors[index % cardColors.length];
- }
-
-}
\ No newline at end of file
diff --git a/lib/payments/infrastructure/adapteres/theme_adapter/theme_sf_adapter.dart b/lib/payments/infrastructure/adapteres/theme_adapter/theme_sf_adapter.dart
deleted file mode 100644
index 4d77b721..00000000
--- a/lib/payments/infrastructure/adapteres/theme_adapter/theme_sf_adapter.dart
+++ /dev/null
@@ -1,37 +0,0 @@
-import 'dart:collection';
-import 'dart:ui';
-
-import 'package:flutter/material.dart';
-
-import '../../../domain/ports/theme_port.dart';
-
-class ThemeSfAdapter extends ThemePort{
-
- @override
- Map theme = HashMap.from(
- {
- ThemeCode.background_primary: Color(0xFFFFFFFF),
- ThemeCode.background_secondary: Color(0xFFF7F7F7),
- ThemeCode.background_tertiary: Color(0x4D329E95),
- ThemeCode.text_primary: Color(0xFF4B4B4B),
- ThemeCode.text_secondary: Color(0xFFFFFFFF),
- ThemeCode.text_tertiary: Color(0xFFE0E0E0),
- ThemeCode.button_primary: Color(0xFF329e95),
- ThemeCode.button_secondary: Color(0xFF4B4B4B)
- }
- );
-
- @override
- List> cardColors = [
- [
- Color(0xFFFA5C9F),
- Color(0xFFEB2579),
- Color(0xFFE60866),
- ],
- [
- Color(0xFF00A1C6),
- Color(0xFF00819E),
- ],
- ];
-
-}
\ No newline at end of file
diff --git a/lib/payments/view/screens/account_created_screen.dart b/lib/payments/view/screens/account_created_screen.dart
deleted file mode 100644
index 4d63d2ef..00000000
--- a/lib/payments/view/screens/account_created_screen.dart
+++ /dev/null
@@ -1,45 +0,0 @@
-import 'package:flutter/cupertino.dart';
-import 'package:flutter/material.dart';
-import 'package:provider/provider.dart';
-import 'package:sf_app_platform/payments/view/screens/add_kid_screen.dart';
-import 'package:sf_app_platform/payments/view/screens/core/dashboard_screen.dart';
-
-import '../../domain/ports/theme_port.dart';
-
-class AccountCreatedScreen extends StatelessWidget {
-
- @override
- Widget build(BuildContext context) {
- ThemePort theme = context.read();
-
- final email = "usuario@example.com";
- final fullName = "Carlos Pérez Cruz";
-
- return Scaffold(
- backgroundColor: theme.getColorFor(ThemeCode.background_primary),
- body: Container(
- margin: EdgeInsets.all(30),
- child: Center(
- child: Column(
- spacing: 20,
- children: [
- Spacer(flex: 10),
- Icon(Icons.check, color: theme.getColorFor(ThemeCode.background_primary), size: 50),
- Text("Cuenta creada", style: TextStyle(fontSize: 30, fontWeight: FontWeight.bold)),
- Text.rich(TextSpan(text:"Has creado la cuenta para:\n",
- children: [TextSpan(text: fullName, style: TextStyle(fontWeight: FontWeight.bold))])),
- Text.rich(TextSpan(text:"Hemos enviado un email de verificación a:\n",
- children: [TextSpan(text: email, style: TextStyle(fontWeight: FontWeight.bold))])),
- Text("Crea la cuenta de tu peque e ingresa su \nprimera paga para utilizarla con su reloj"),
- FilledButton(onPressed: ()=>{
- Navigator.pushReplacement(context, MaterialPageRoute(builder: (_)=>AddKidScreen()))
- }, child: Text("Continuar")),
- Spacer(flex: 8)
- ],
- ),
- )
- )
- );
- }
-
-}
\ No newline at end of file
diff --git a/lib/payments/view/screens/activity_screen.dart b/lib/payments/view/screens/activity_screen.dart
deleted file mode 100644
index f47ba8e7..00000000
--- a/lib/payments/view/screens/activity_screen.dart
+++ /dev/null
@@ -1,56 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:provider/provider.dart';
-import 'package:sf_app_platform/payments/view/screens/core/activity_list.dart';
-import 'package:sf_app_platform/payments/view/screens/core/line_graph.dart';
-
-import '../../domain/ports/theme_port.dart';
-
-class ActivityScreen extends StatefulWidget{
- const ActivityScreen({super.key});
-
- @override
- State createState() => ActivityScreenState();
-}
-
-class ActivityScreenState extends State{
- final activity = [
- {"type": "goal"},
- {"type": "wage", "amount": 5},
- {"type": "lock"},
- {"type": "lock"}
- ];
-
- @override
- Widget build(BuildContext context) {
- ThemePort theme = context.read();
-
- final content = [
- Text("Movimientos recientes", style: TextStyle(fontWeight: FontWeight.bold, fontSize: 30),),
- Row(
- spacing: 20,
- children: [
- FilledButton(onPressed: ()=>{}, child: Text("Hoy")),
- Spacer(),
- TextButton(onPressed: ()=>{}, child: Text("Última semana")),
- TextButton(onPressed: ()=>{}, child: Text("Mes"))
- ],
- ),
- SizedBox(height: 200, child: LineGraph()),
- ActivityList(activity: activity, edit: false)
- ];
-
- return Scaffold(
- backgroundColor: theme.getColorFor(ThemeCode.background_secondary),
- body: Container(
- margin: EdgeInsets.fromLTRB(30, 30, 30, 0),
- child: Center(child: ListView.separated(
- itemBuilder: (BuildContext context, int index) {return content[index];},
- separatorBuilder: (BuildContext context, int index) {
- return Divider(color: Colors.transparent, height: 30);
- },
- itemCount: content.length)
- )
- )
- );
- }
-}
\ No newline at end of file
diff --git a/lib/payments/view/screens/alert_screen.dart b/lib/payments/view/screens/alert_screen.dart
deleted file mode 100644
index 2c7016e8..00000000
--- a/lib/payments/view/screens/alert_screen.dart
+++ /dev/null
@@ -1,55 +0,0 @@
-import 'package:flutter/cupertino.dart';
-import 'package:flutter/material.dart';
-import 'package:provider/provider.dart';
-import 'package:sf_app_platform/payments/domain/ports/theme_port.dart';
-import 'package:sf_app_platform/payments/view/screens/core/activity_list.dart';
-
-class AlertScreen extends StatefulWidget {
- const AlertScreen({super.key});
-
- @override
- State createState() => AlertScreenState();
-}
-
-class AlertScreenState extends State {
-
- final activity = [
- {"type": "goal"},
- {"type": "wage", "amount": 5},
- {"type": "lock"},
- {"type": "lock"}
- ];
- bool edit = false;
-
- @override
- void initState() {
- edit = false;
- super.initState();
- }
-
- @override
- Widget build(BuildContext context) {
- ThemePort theme = context.read();
-
- return Scaffold(
- backgroundColor: theme.getColorFor(ThemeCode.background_secondary),
- body: Container(
- margin: EdgeInsets.all(30),
- child: Column(
- children: [
- Row(
- children: [
- Text("Alertas"),
- Spacer(),
- TextButton(
- onPressed: () => setState(() {edit = !edit;}),
- child: Text("Editar"))
- ],
- ),
- ActivityList(activity: activity, edit: edit)
- ],
- ),
- ),
- );
- }
-}
\ No newline at end of file
diff --git a/lib/payments/view/screens/contact_screen.dart b/lib/payments/view/screens/contact_screen.dart
deleted file mode 100644
index d7fea3ee..00000000
--- a/lib/payments/view/screens/contact_screen.dart
+++ /dev/null
@@ -1,63 +0,0 @@
-import 'package:flutter/cupertino.dart';
-import 'package:flutter/material.dart';
-
-class ContactScreen extends StatelessWidget{
-
- @override
- Widget build(BuildContext context) {
- return Scaffold(
- body: Container(
- margin: EdgeInsets.all(30),
- child: Center(
- child: Column(
- spacing: 10,
- children: [
- Text("Contáctanos", style: TextStyle(fontWeight: FontWeight.bold, fontSize: 30)),
- Text("Trasládanos tus dudas e intentaremos responderte lo antes posible"),
- DropdownMenu(
- initialSelection: "es",
- label: Text("PaÃs"),
- dropdownMenuEntries: [
- DropdownMenuEntry(value: "es", label: "España"),
- DropdownMenuEntry(value: "fr", label: "Francia"),
- DropdownMenuEntry(value: "pt", label: "Portugal"),
- ]
- ),
- DropdownMenu(
- initialSelection: "online",
- label: Text("Canal de compra"),
- dropdownMenuEntries: [
- DropdownMenuEntry(value: "online", label: "SF online shop"),
- ]
- ),
- Expanded(child: TextField(
- decoration: InputDecoration(
- labelText: "Nombre",
- hintText: "Nombre y apellidos",
- border: OutlineInputBorder()
- )
- )),
- Expanded(child: TextField(
- decoration: InputDecoration(
- labelText: "Correo electrónico",
- hintText: "Correo electrónico",
- border: OutlineInputBorder()
- )
- )),
- Expanded(child: TextField(
- minLines: 3,
- maxLines: 3,
- decoration: InputDecoration(
- labelText: "Asunto del mensaje",
- hintText: "Escribe tu mensaje",
- border: OutlineInputBorder()
- )
- )),
- Expanded(child: FilledButton(onPressed: ()=>Navigator.pop(context), child: Text("Enviar")))
- ],
- ),
- ),
- ),
- );
- }
-}
\ No newline at end of file
diff --git a/lib/payments/view/screens/core/activity_list.dart b/lib/payments/view/screens/core/activity_list.dart
deleted file mode 100644
index 7a7ef483..00000000
--- a/lib/payments/view/screens/core/activity_list.dart
+++ /dev/null
@@ -1,87 +0,0 @@
-import 'dart:developer';
-
-import 'package:flutter/cupertino.dart';
-import 'package:flutter/material.dart';
-import 'package:provider/provider.dart';
-
-import '../../../domain/ports/theme_port.dart';
-
-class ActivityList extends StatefulWidget {
- final List activity;
- bool edit = false;
-
- ActivityList({super.key, required this.activity, required this.edit});
-
- @override
- State createState() => ActivityListState();
-}
-
-class ActivityListState extends State{
-
- late List values;
-
- @override
- void initState() {
- values = List.generate(widget.activity.length, (_)=>false);
- super.initState();
- }
-
- @override
- Widget build(BuildContext context) {
- ThemePort theme = context.read();
-
- final colors = [Colors.cyan, Colors.pinkAccent, Colors.deepOrangeAccent, Colors.red];
- final icons = {"wage": Icons.wallet, "goal": Icons.emoji_events_outlined, "lock": Icons.lock_outline, "reload": Icons.attach_money_outlined};
- final titles = {"wage": "Entrega de paga", "goal": "¡Objetivo cumplido!", "lock": "Bloqueo de pago", "reload": "Recarga familiar"};
-
- return Column(
- spacing: 20,
- children: List.generate(widget.activity.length, (int index) {
- var logItem = Container(
- padding: EdgeInsets.all(20),
- decoration: BoxDecoration(
- color: theme.getColorFor(ThemeCode.background_primary),
- borderRadius: BorderRadius.all(Radius.circular(20)),
- border: BoxBorder.fromLTRB(left: BorderSide(
- color: colors[index % colors.length], width: 5))
- ),
- child: Column(
- spacing: 15,
- children: [
- Row(
- children: [
- Icon(icons[widget.activity[index]["type"]],
- color: colors[index % colors.length]),
- Text(titles[widget.activity[index]["type"]]!,
- style: TextStyle(fontWeight: FontWeight.bold, fontSize: 16)),
- Spacer(),
- Text("14/01/2005")
- ]
- ),
- Align(
- alignment: Alignment.topLeft,
- child: Text("Ana ya tiene su paga de 5€ en el reloj"),
- )
- ]
- )
- );
-
- if (widget.edit) {
- return Row(children: [
- Checkbox(
- value: values[index],
- onChanged: (value) => {
- setState(() {
- values[index] = !values[index];
- })},
- activeColor: theme.getColorFor(ThemeCode.button_primary),
- semanticLabel: "Eliminar"),
- Expanded(child: logItem)
- ]);
- } else {
- return logItem;
- }
- })
- );
- }
-}
\ No newline at end of file
diff --git a/lib/payments/view/screens/core/dashboard_screen.dart b/lib/payments/view/screens/core/dashboard_screen.dart
deleted file mode 100644
index 65b699f2..00000000
--- a/lib/payments/view/screens/core/dashboard_screen.dart
+++ /dev/null
@@ -1,53 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:provider/provider.dart';
-import 'package:sf_app_platform/payments/view/screens/activity_screen.dart';
-import 'package:sf_app_platform/payments/view/screens/alert_screen.dart';
-import 'package:sf_app_platform/payments/view/screens/home_screen.dart';
-import 'package:sf_app_platform/payments/view/screens/profile_screen.dart';
-
-import '../../../domain/ports/theme_port.dart';
-
-class DashboardScreen extends StatefulWidget {
- const DashboardScreen({super.key});
-
- @override
- State createState() => _DashboardScreenState();
-}
-
-class _DashboardScreenState extends State{
-
- int currentPageIndex = 0;
-
- @override
- Widget build(BuildContext context) {
- ThemePort theme = context.read();
-
- final bodies = [
- HomeScreen(),
- ActivityScreen(),
- AlertScreen(),
- ProfileScreen()
- ];
-
- return Scaffold(
- bottomNavigationBar: NavigationBar(
- backgroundColor: theme.getColorFor(ThemeCode.background_primary),
- onDestinationSelected: (int index) {
- setState(() {
- currentPageIndex = index;
- });
- },
- selectedIndex: currentPageIndex,
- destinations: [
- NavigationDestination(icon: Icon(Icons.home_outlined), label: "Inicio"),
- NavigationDestination(icon: Icon(Icons.watch_outlined), label: "Movimientos"),
- NavigationDestination(icon: Icon(Icons.notifications_outlined), label: "Alertas"),
- NavigationDestination(icon: Icon(Icons.person_outline_outlined), label: "Mi perfil"),
- ]
- ),
- body: bodies[currentPageIndex],
- );
- }
-
-
-}
\ No newline at end of file
diff --git a/lib/payments/view/screens/core/deposit_block.dart b/lib/payments/view/screens/core/deposit_block.dart
deleted file mode 100644
index cf5ed669..00000000
--- a/lib/payments/view/screens/core/deposit_block.dart
+++ /dev/null
@@ -1,51 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:flutter/services.dart';
-import 'package:provider/provider.dart';
-
-import '../../../domain/ports/theme_port.dart';
-
-class DepositBlock extends StatelessWidget{
- final double max;
-
- const DepositBlock({super.key, required this.max});
-
- @override
- Widget build(BuildContext context) {
- ThemePort theme = context.read();
-
- return Container(
- padding: EdgeInsets.all(20),
- decoration: BoxDecoration(color: theme.getColorFor(ThemeCode.background_primary), borderRadius: BorderRadius.all(Radius.circular(20))),
- margin: EdgeInsets.only(top: 10),
- child: Column(
- children: [
- Text("Ingresar dinero en el wallet", style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20)),
- Row(
- spacing: 10,
- children: [
- Expanded(
- child: TextField(
- decoration: InputDecoration(labelText: "Cantidad", hintText: "0€", border: OutlineInputBorder()),
- keyboardType: TextInputType.number,
- inputFormatters: [
- FilteringTextInputFormatter.digitsOnly
- ]
- )
- ),
- FilledButton(
- onPressed: ()=>{},
- style: ButtonStyle(backgroundColor: WidgetStatePropertyAll(theme.getColorFor(ThemeCode.button_primary))),
- child: Text("Ingresar")
- )
- ],
- ),
- Align(
- alignment: Alignment.topLeft,
- child: Text("Máximo que puedes añadir: $max€"),
- )
- ],
- ),
- );
- }
-
-}
\ No newline at end of file
diff --git a/lib/payments/view/screens/core/line_graph.dart b/lib/payments/view/screens/core/line_graph.dart
deleted file mode 100644
index 3b3b30b3..00000000
--- a/lib/payments/view/screens/core/line_graph.dart
+++ /dev/null
@@ -1,169 +0,0 @@
-import 'dart:developer';
-
-import 'package:flutter/material.dart';
-import 'package:fl_chart/fl_chart.dart';
-import 'package:provider/provider.dart';
-
-import '../../../domain/ports/theme_port.dart';
-
-class LineGraph extends StatefulWidget {
- final lines = [[0,1,0,1,0,1,0],[1,0,1,0,1,0,1]];
-
- LineGraph({super.key});
-
- @override
- State createState() => LineGraphState();
-}
-
-class LineGraphState extends State {
-
- final weekDays = ["L", "M", "X", "J", "V", "S", "D"];
- String? timeSpan;
- late var days = weekDays;
-
- @override
- void initState() {
- timeSpan = "week";
- super.initState();
- }
-
- @override
- Widget build(BuildContext context) {
- ThemePort theme = context.read();
-
- return Container(
- padding: EdgeInsets.all(15),
- decoration: BoxDecoration(
- border: BoxBorder.fromLTRB(left: BorderSide(color: Colors.cyan, width: 5)),
- borderRadius: BorderRadius.all(Radius.circular(20)),
- color: theme.getColorFor(ThemeCode.background_primary)
- ),
- child: Column(
- spacing: 10,
- children: [
- Row(children: [
- Text("Gastos", style: TextStyle(fontWeight: FontWeight.bold)),
- Spacer(),
- Container(
- padding: EdgeInsets.symmetric(horizontal: 10),
- decoration: BoxDecoration(
- borderRadius: BorderRadius.all(Radius.circular(10)),
- color: theme.getColorFor(ThemeCode.background_secondary),
- ),
- child: DropdownButton(
- underline: Container(),
- value: timeSpan,
- onChanged: (String? value) {
- setState(() {
- timeSpan = value;
- });
- },
- dropdownColor: theme.getColorFor(ThemeCode.background_primary),
- items: [
- DropdownMenuItem(value: "day", child: Text("Hoy")),
- DropdownMenuItem(value: "week", child: Text("Esta semana")),
- DropdownMenuItem(value: "month", child: Text("Este mes")),
- ]
- ),
- )
- ]),
- Expanded(child: LineChart(LineChartData(
- gridData: FlGridData(
- show: true,
- drawHorizontalLine: false,
- drawVerticalLine: true,
- verticalInterval: 1
- ),
- titlesData: FlTitlesData(
- //show: false,
- bottomTitles: AxisTitles(
- sideTitles: SideTitles(
- showTitles: true,
- reservedSize: 40,
- getTitlesWidget: (double value, TitleMeta meta)=>SideTitleWidget(
- space: 4,
- meta: meta,
- /*fitInside: fitInsideBottomTitle
- ? SideTitleFitInsideData.fromTitleMeta(meta, distanceFromEdge: 0)
- : SideTitleFitInsideData.disable(),*/
- child: Text(
- weekDays[value.toInt()]
- ),
- ),
- ),
- ),
- leftTitles: AxisTitles(),
- topTitles: AxisTitles(),
- rightTitles: AxisTitles()
- ),
- lineTouchData: LineTouchData(
- touchTooltipData: LineTouchTooltipData(
- getTooltipColor: (touchedSpot) => theme.getColorFor(ThemeCode.button_secondary),
- getTooltipItems: (List touchedBarSpots){
- return touchedBarSpots.map(
- (barSpot) {
- return LineTooltipItem("${barSpot.y} €", TextStyle(color: theme.getColorFor(ThemeCode.text_secondary)));
- }
- ).toList();
- }
- )
- ),
- borderData: FlBorderData(
- show: true,
- border: Border(
- bottom: BorderSide(
- color: Colors.lightBlue.withValues(alpha: 0.2),
- width: 4
- ),
- left: const BorderSide(color: Colors.transparent),
- right: const BorderSide(color: Colors.transparent),
- top: const BorderSide(color: Colors.transparent),
- ),
- ),
- lineBarsData: [
- LineChartBarData(
- isCurved: true,
- color: Colors.pink,
- barWidth: 5,
- isStrokeCapRound: true,
- dotData: const FlDotData(show: false),
- belowBarData: BarAreaData(show: false),
- spots: const [
- FlSpot(0, 1),
- FlSpot(1, 0),
- FlSpot(2, 1),
- FlSpot(3, 0),
- FlSpot(4, 1),
- FlSpot(5, 0),
- FlSpot(6, 1),
- ],
- ),
- LineChartBarData(
- isCurved: true,
- color: Colors.cyan,
- barWidth: 5,
- isStrokeCapRound: true,
- dotData: const FlDotData(show: false),
- belowBarData: BarAreaData(show: false),
- spots: const [
- FlSpot(0, 0),
- FlSpot(1, 1),
- FlSpot(2, 0),
- FlSpot(3, 1),
- FlSpot(4, 0),
- FlSpot(5, 1),
- FlSpot(6, 0),
- ],
- ),
- ],
- minX: 0,
- maxX: days.length-1,
- maxY: 1,
- minY: 0,
- )))
- ],
- ),
- );
- }
-
-}
\ No newline at end of file
diff --git a/lib/payments/view/screens/core/wallet_management_layout.dart b/lib/payments/view/screens/core/wallet_management_layout.dart
deleted file mode 100644
index d66573ae..00000000
--- a/lib/payments/view/screens/core/wallet_management_layout.dart
+++ /dev/null
@@ -1,70 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:provider/provider.dart';
-
-import '../../../domain/entities/kid.dart';
-import '../../../domain/ports/theme_port.dart';
-
-class WalletManagementLayout extends StatefulWidget {
- final List children;
- final Widget footer;
- final Kid kid;
-
- const WalletManagementLayout({super.key, required this.kid, required this.children, required this.footer});
-
- @override
- State createState() => WalletManagementLayoutState();
-}
-
-class WalletManagementLayoutState extends State{
-
- @override
- Widget build(BuildContext context) {
- final theme = context.read();
-
- final content = [
- Container(
- padding: EdgeInsets.symmetric(horizontal: 15, vertical: 20),
- child: Stack(
- children: [
- IconButton(onPressed: ()=>Navigator.pop(context), icon: Icon(Icons.arrow_back_ios_outlined, color: theme.getColorFor(ThemeCode.text_secondary))),
- Expanded(child: Center(child: Column(children: [
- Text(widget.kid.name, style: TextStyle(fontWeight: FontWeight.bold, fontSize: 30, color: theme.getColorFor(ThemeCode.text_secondary))),
- Text.rich(TextSpan(
- text: "Saldo disponible: ",
- style: TextStyle(color: theme.getColorFor(ThemeCode.text_secondary)),
- children: [
- TextSpan(text: "${widget.kid.balance}", style: TextStyle(fontWeight: FontWeight.bold, color: theme.getColorFor(ThemeCode.text_secondary))),
- TextSpan(text: "€", style: TextStyle(color: theme.getColorFor(ThemeCode.text_secondary)))
- ]))
- ])))
- ],
- )
- ),
- ...widget.children
- ];
-
- return Scaffold(
- backgroundColor: theme.getColorFor(ThemeCode.background_secondary),
- body: Stack(children: [
- DecoratedBox(
- decoration: BoxDecoration(
- borderRadius: const BorderRadius.all(Radius.circular(30)),
- gradient: LinearGradient(
- begin: Alignment.topLeft,
- end: Alignment.bottomRight,
- colors: theme.getCardColorFor(0)
- ),
- ),
- child: SizedBox(width: double.infinity, height: 200),
- ),
- Column(children: [
- Expanded(child: ListView.separated(
- itemBuilder: (BuildContext context, int index) {return Container(margin: EdgeInsets.symmetric(horizontal: 20), child: content[index]);},
- separatorBuilder: (BuildContext context, int index) {return Divider(height: 30, color: Colors.transparent);},
- itemCount: content.length)),
- widget.footer
- ])
- ])
- );
- }
-}
\ No newline at end of file
diff --git a/lib/payments/view/screens/deposit_screen.dart b/lib/payments/view/screens/deposit_screen.dart
deleted file mode 100644
index d97f5611..00000000
--- a/lib/payments/view/screens/deposit_screen.dart
+++ /dev/null
@@ -1,183 +0,0 @@
-import 'package:flutter/cupertino.dart';
-import 'package:flutter/material.dart';
-import 'package:flutter/services.dart';
-import 'package:provider/provider.dart';
-import 'package:sf_app_platform/payments/view/screens/core/wallet_management_layout.dart';
-
-import '../../domain/entities/kid.dart';
-import '../../domain/ports/theme_port.dart';
-
-class DepositScreen extends StatefulWidget{
- final Kid kid;
-
- const DepositScreen({super.key, required this.kid});
-
- @override
- State createState() => DepositScreenState();
-
-}
-
-class DepositScreenState extends State{
- String reason = "other";
- bool program = false;
-
- @override
- Widget build(BuildContext context) {
- ThemePort theme = context.read();
-
- return WalletManagementLayout(
- kid: widget.kid,
- children: [
- Container(
- decoration: BoxDecoration(
- color: theme.getColorFor(ThemeCode.background_primary),
- borderRadius: BorderRadius.all(Radius.circular(20)),
- ),
- padding: EdgeInsets.all(10),
- child: Column(
- spacing: 10,
- children: [
- Text("Ingresar dinero en el wallet", style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20)),
- TextField(
- decoration: InputDecoration(labelText: "Cantidad", hintText: "0€", border: OutlineInputBorder()),
- keyboardType: TextInputType.number,
- inputFormatters: [
- FilteringTextInputFormatter.digitsOnly
- ]
- ),
- Align(
- alignment: Alignment.topLeft,
- child: Text("Saldo total disponible después: 30 €")
- )
- ],
- ),
- ),
- Container(
- decoration: BoxDecoration(
- color: theme.getColorFor(ThemeCode.background_primary),
- borderRadius: BorderRadius.all(Radius.circular(20)),
- ),
- padding: EdgeInsets.all(10),
- child: Column(
- spacing: 10,
- children: [
- Text("Motivo", style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20)),
- Text("Este dato aparecerá en el reloj del peque"),
- CheckboxListTile(
- title: Text('Paga semanal'),
- controlAffinity: ListTileControlAffinity.leading,
- value: reason=="weekly",
- onChanged: (value) {
- setState(() {
- reason="weekly";
- });
- },
- activeColor: theme.getColorFor(ThemeCode.button_primary),
- ),
- CheckboxListTile(
- title: Text('Objetivo semanal cumplido'),
- controlAffinity: ListTileControlAffinity.leading,
- value: reason=="goal",
- onChanged: (value) {
- setState(() {
- reason="goal";
- });
- },
- activeColor: theme.getColorFor(ThemeCode.button_primary),
- ),
- CheckboxListTile(
- title: Text('Gastos extraordinarios'),
- controlAffinity: ListTileControlAffinity.leading,
- value: reason=="extraordinary",
- onChanged: (value) {
- setState(() {
- reason="extraordinary";
- });
- },
- activeColor: theme.getColorFor(ThemeCode.button_primary),
- ),
- CheckboxListTile(
- title: Text('Otro'),
- controlAffinity: ListTileControlAffinity.leading,
- value: reason=="other",
- onChanged: (value) {
- setState(() {
- reason="other";
- });
- },
- activeColor: theme.getColorFor(ThemeCode.button_primary),
- ),
- TextField(
- minLines: 3,
- maxLines: 3,
- maxLength: 150,
- decoration: InputDecoration(
- labelText: "Escribir mensaje a ${widget.kid.name} del motivo del ingreso",
- hintText: "Escribe tu mensaje",
- border: OutlineInputBorder(),
- )
- ),
- Align(
- alignment: Alignment.topLeft,
- child: Text("Máximo 150 caracteres")
- )
- ],
- ),
- ),
- Container(
- decoration: BoxDecoration(
- color: theme.getColorFor(ThemeCode.background_primary),
- borderRadius: BorderRadius.all(Radius.circular(20)),
- ),
- padding: EdgeInsets.all(10),
- child: Column(
- spacing: 10,
- children: [
- Text("Cuándo se envÃa el dinero", style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20)),
- Text("Este dato aparecerá en el reloj del peque"),
- CheckboxListTile(
- title: Text('Ahora'),
- controlAffinity: ListTileControlAffinity.leading,
- value: program==false,
- onChanged: (value) {
- setState(() {
- program=false;
- });
- },
- activeColor: theme.getColorFor(ThemeCode.button_primary),
- ),
- CheckboxListTile(
- title: Text('Programar'),
- controlAffinity: ListTileControlAffinity.leading,
- value: program==true,
- onChanged: (value) {
- setState(() {
- program=true;
- });
- },
- activeColor: theme.getColorFor(ThemeCode.button_primary),
- ),
- if (program) TextField()
- ],
- ),
- ),
- ],
- footer: Container(
- decoration: BoxDecoration(
- color: theme.getColorFor(ThemeCode.background_primary),
- borderRadius: BorderRadius.all(Radius.circular(20)),
- ),
- padding: EdgeInsets.all(10),
- child: Column(children: [
- FilledButton(onPressed: ()=>{}, child: Container(
- width: double.infinity,
- padding: EdgeInsets.all(20),
- child: Center(child: Text("Añadir dinero"))
- )),
- TextButton(onPressed: ()=>Navigator.pop(context), child: Text("Cancelar"))
- ])
- )
- );
- }
-
-}
\ No newline at end of file
diff --git a/lib/payments/view/screens/errors/no_plan_error_screen.dart b/lib/payments/view/screens/errors/no_plan_error_screen.dart
deleted file mode 100644
index 3fbbc4cf..00000000
--- a/lib/payments/view/screens/errors/no_plan_error_screen.dart
+++ /dev/null
@@ -1,56 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:provider/provider.dart';
-import 'package:sf_app_platform/payments/domain/ports/theme_port.dart';
-
-class NoPlanErrorScreen extends StatelessWidget{
-
- const NoPlanErrorScreen({super.key});
-
- @override
- Widget build(BuildContext context) {
- ThemePort theme = context.read();
-
- return Scaffold(
- body: Container(
- margin: EdgeInsets.all(30),
- child: Center(
- child: Column(
- children: [
- Spacer(flex: 3),
- Text("Estamos mejorando el servicio",
- style: TextStyle(fontWeight: FontWeight.bold, fontSize: 25)
- ),
- Text("Asocia tu reloj a SaveFamily y ayuda a tus peques a aprender a usar el dinero con responsabilidad"),
- Container(
- margin: EdgeInsets.symmetric(vertical: 20),
- child: Column(
- children: [
- Row(children: [
- Icon(Icons.check, color: theme.getColorFor(ThemeCode.button_primary)),
- Text("Desarrollarán hábitos financieros sanos")
- ]),
- Row(children: [
- Icon(Icons.check, color: theme.getColorFor(ThemeCode.button_primary)),
- Text("Gestiona sus gastos")
- ]),
- ],
- ),
- ),
- Text("Selecciona tu plan en nuestra web y empieza a enseñar a los peques a entender el valor del dinero"),
- Spacer(flex: 1),
- FilledButton(
- onPressed: ()=>{},
- child: Container(
- width: double.infinity,
- padding: EdgeInsets.all(20),
- child: Text("Seleccionar plan")
- )
- ),
- Spacer(flex: 3)
- ]
- ),
- )
- )
- );
- }
-}
\ No newline at end of file
diff --git a/lib/payments/view/screens/home_screen.dart b/lib/payments/view/screens/home_screen.dart
deleted file mode 100644
index fd3be2b1..00000000
--- a/lib/payments/view/screens/home_screen.dart
+++ /dev/null
@@ -1,210 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:flutter/services.dart';
-import 'package:flutter_svg/svg.dart';
-import 'package:provider/provider.dart';
-import 'package:sf_app_platform/payments/view/screens/core/deposit_block.dart';
-import 'package:sf_app_platform/payments/view/screens/core/money_text.dart';
-import 'package:sf_app_platform/payments/view/screens/link_watch/create_profile_screen.dart';
-
-import '../../domain/entities/kid.dart';
-import '../../domain/ports/theme_port.dart';
-import 'deposit_screen.dart';
-import 'kid_wallet_screen.dart';
-
-
-class HomeScreen extends StatelessWidget{
- final String name = "Juan";
- final double total = 95.03;
- final List kids = [
- Kid(name:"Carlos", balance:25.47),
- Kid(name:"Ana", balance:25.47),
- ];
- late final double available = double.parse(kids.fold(total, (t, e) => t - e.balance).toStringAsFixed(2));
-
- HomeScreen({super.key});
-
- @override
- Widget build(BuildContext context) {
- ThemePort theme = context.read();
-
- return SingleChildScrollView( child: Container(
- color: theme.getColorFor(ThemeCode.background_secondary),
- margin: EdgeInsets.all(30),
- child: Column(
- children: [
- Align(
- alignment: Alignment.topLeft,
- child: Text.rich(
- TextSpan(
- text: "Hola, ",
- style: TextStyle(fontSize: 25),
- children: [
- TextSpan(text: name, style: TextStyle(fontWeight: FontWeight.bold)),
- ],
- ),
- )
- ),
- walletsList(context, kids),
- Align(
- alignment: Alignment.topLeft,
- child: TextButton(
- onPressed: ()=>Navigator.push(context, MaterialPageRoute(builder: (_)=>CreateProfileScreen())),
- child: Text("+ Añadir otro peque", style: TextStyle(
- fontWeight: FontWeight.bold,
- color: theme.getColorFor(ThemeCode.text_primary)
- ))
- )
- ),
- Container(
- padding: EdgeInsets.all(20),
- decoration: BoxDecoration(color: theme.getColorFor(ThemeCode.background_primary), borderRadius: BorderRadius.all(Radius.circular(20))),
- child: Column(
- spacing: 5,
- children: [
- Row(
- children: [
- Text("Wallet", style: TextStyle(
- fontWeight: FontWeight.bold,
- fontSize: 20
- )),
- Spacer(),
- MoneyText(
- text: "$total€ total",
- size: 25,
- resize: true,
- color: theme.getColorFor(ThemeCode.text_primary)
- )
- ]
- ),
- Stack(
- children: [
- LinearProgressIndicator(
- value: available/total,
- minHeight: 70,
- borderRadius: BorderRadius.all(Radius.circular(16)),
- color: theme.getColorFor(ThemeCode.button_primary),
- backgroundColor: theme.getColorFor(ThemeCode.background_tertiary),
- ),
- FractionallySizedBox(
- widthFactor: available/total,
- child: Container(
- padding: EdgeInsets.symmetric(vertical: 10),
- child: Center(
- child: MoneyText(
- text: "$available€",
- size: 35,
- resize: true,
- color: theme.getColorFor(ThemeCode.text_secondary)
- ),
- )
- )
- ),
- ],
- ),
- Center(child: Text("Disponible"))
- ],
- ),
- ),
- DepositBlock(max: 150-total)
- ]
- ),
- ));
- }
-
- Widget walletsList(BuildContext context, List kids) {
- final theme = context.read();
-
- return Column(
- spacing: 20,
- children: List.generate(kids.length, (int index) {
- return
- GestureDetector(
- onTap: ()=>{Navigator.push(context, MaterialPageRoute(builder: (_)=>KidWalletScreen(kid: kids[index])))},
- child: ClipRRect(
- borderRadius: const BorderRadius.all(Radius.circular(16.0)),
- child: Container(
- padding: EdgeInsets.symmetric(horizontal: 20, vertical: 8),
- decoration: BoxDecoration(
- gradient: LinearGradient(
- begin: Alignment.topLeft,
- end: Alignment.bottomRight,
- colors: theme.getCardColorFor(index)
- )
- ),
- child: Column(
- children: [
- Align(
- alignment: Alignment.topLeft,
- child: Text(kids[index].name,
- style: TextStyle(
- fontWeight: FontWeight.bold,
- fontSize: 25,
- color: theme.getColorFor(ThemeCode.text_secondary)
- )
- )
- ),
- Row(
- spacing: 10,
- children: [
- SizedBox(
- height: 60,
- width: 60,
- child: SvgPicture.asset("assets/images/ui/face.svg"),
- ),
- Spacer(),
- Column(children: [
- MoneyText(
- text: "${kids[index].balance}€",
- size: 50,
- resize: true,
- color: theme.getColorFor(ThemeCode.text_secondary)
- ),
- Text("en su hucha", style: TextStyle(color: theme.getColorFor(ThemeCode.text_secondary)))
- ])
-
- ]
- ),
- Row(
- children: [
- TextButton(
- onPressed: ()=>showDialog(
- context: context,
- builder: (BuildContext context) => Dialog(
- child: Container(height: 100, width: double.infinity, child: Column(
- children: [
- FilledButton(onPressed: ()=>{}, child: Text("Cámara")),
- OutlinedButton(onPressed: ()=>{}, child: Text("GalerÃa de fotos"))
- ],
- )),
- )
- ),
- child: Row(
- spacing: 10,
- children: [
- Icon(Icons.edit, color: theme.getColorFor(ThemeCode.text_secondary)),
- Text("Editar", style: TextStyle(color: theme.getColorFor(ThemeCode.text_secondary)))
- ]
- )
- ),
- Spacer(),
- FilledButton(
- onPressed: ()=>Navigator.push(context, MaterialPageRoute(builder: (_)=>DepositScreen(kid: kids[index]))),
- style: ButtonStyle(
- backgroundColor: WidgetStatePropertyAll(theme.getColorFor(ThemeCode.button_secondary)),
- ),
- child: Container(
- padding: EdgeInsets.symmetric(horizontal: 0,vertical: 10),
- child: Text("+ Añadir dinero")
- )
- )
- ],
- )
- ]
- ),
- )
- )
- );
- })
- );
- }
-}
\ No newline at end of file
diff --git a/lib/payments/view/screens/kid_wallet_screen.dart b/lib/payments/view/screens/kid_wallet_screen.dart
deleted file mode 100644
index 4679d7a6..00000000
--- a/lib/payments/view/screens/kid_wallet_screen.dart
+++ /dev/null
@@ -1,202 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:flutter_svg/svg.dart';
-import 'package:provider/provider.dart';
-import 'package:sf_app_platform/payments/view/screens/core/money_text.dart';
-import 'package:sf_app_platform/payments/view/screens/deposit_screen.dart';
-import 'package:sf_app_platform/payments/view/screens/limits_screen.dart';
-import 'package:sf_app_platform/payments/view/screens/wage_screen.dart';
-
-import '../../domain/entities/kid.dart';
-import '../../domain/ports/theme_port.dart';
-
-class KidWalletScreen extends StatefulWidget{
- final Kid kid;
-
- const KidWalletScreen({super.key, required this.kid});
-
- @override
- State createState() => _KidWalletScreenState();
-}
-
-class _KidWalletScreenState extends State {
-
- @override
- Widget build(BuildContext context) {
-
- final theme = context.read();
-
- return Scaffold(
- backgroundColor: theme.getColorFor(ThemeCode.background_secondary),
- body: Stack(
- children: [
- DecoratedBox(
- decoration: BoxDecoration(
- borderRadius: const BorderRadius.all(Radius.circular(30)),
- gradient: LinearGradient(
- begin: Alignment.topLeft,
- end: Alignment.bottomRight,
- colors: theme.getCardColorFor(0)
- ),
- ),
- child: SizedBox(width: double.infinity, height: 300),
- ),
- Container(
- margin: EdgeInsets.symmetric(vertical: 50, horizontal: 20),
- child: Column(
- spacing: 15,
- children: [
- Row(
- spacing: 7,
- children: [
- IconButton(
- onPressed: ()=>Navigator.pop(context),
- icon: Icon(Icons.arrow_back_ios_new_outlined, color: theme.getColorFor(ThemeCode.background_primary),)
- ),
- SizedBox(height: 50, child: SvgPicture.asset("assets/images/ui/face.svg")),
- Text(widget.kid.name,
- style: TextStyle(
- color: theme.getColorFor(ThemeCode.background_primary),
- fontWeight: FontWeight.bold,
- fontSize: 20
- )
- ),
- Spacer(),
- SizedBox(height: 30, child: SvgPicture.asset("assets/images/ui/face.svg")),
- ],
- ),
- MoneyText(
- text: "${widget.kid.balance.toString()}€",
- size: 60,
- resize: true,
- color: theme.getColorFor(ThemeCode.text_secondary)
- ),
- Text("Saldo disponible", style: TextStyle(color: theme.getColorFor(ThemeCode.background_primary))),
- LinearProgressIndicator(
- value: 0.7,
- color: theme.getColorFor(ThemeCode.background_primary),
- backgroundColor: theme.getColorFor(ThemeCode.background_primary).withAlpha(0x4C),
- minHeight: 10,
- borderRadius: BorderRadius.all(Radius.circular(5)),
- ),
- Container(
- padding: EdgeInsets.all(10),
- margin: EdgeInsets.only(top: 30),
- decoration: BoxDecoration(
- color: theme.getColorFor(ThemeCode.background_primary),
- borderRadius: BorderRadius.all(Radius.circular(20)),
- ),
- child: Expanded(child: Center( child: Row(
- spacing: 10,
- children: [
- TextButton(onPressed: ()=>Navigator.push(context, MaterialPageRoute(builder: (_)=>DepositScreen(kid: widget.kid))),
- child: Column(
- spacing: 10,
- children: [
- Icon(Icons.add_circle_outline, color: theme.getColorFor(ThemeCode.text_primary)),
- Text("Añadir", style: TextStyle(color: theme.getColorFor(ThemeCode.text_primary)))
- ]
- )
- ),
- Spacer(),
- TextButton(onPressed: ()=>Navigator.push(context, MaterialPageRoute(builder: (_)=>WageScreen(kid: widget.kid))),
- child: Column(
- spacing: 10,
- children: [
- Icon(Icons.account_balance_wallet_outlined, color: theme.getColorFor(ThemeCode.text_primary)),
- Text("Paga", style: TextStyle(color: theme.getColorFor(ThemeCode.text_primary)))
- ]
- )
- ),
- Spacer(),
- TextButton(onPressed: ()=>Navigator.push(context, MaterialPageRoute(builder: (_)=>LimitsScreen(kid: widget.kid))),
- child: Column(
- spacing: 10,
- children: [
- Icon(Icons.list_alt_outlined, color: theme.getColorFor(ThemeCode.text_primary)),
- Text("LÃmites", style: TextStyle(color: theme.getColorFor(ThemeCode.text_primary)))
- ]
- )
- ),
- Spacer(),
- TextButton(onPressed: ()=>{},
- child: Column(
- spacing: 10,
- children: [
- Icon(Icons.emoji_events_outlined, color: theme.getColorFor(ThemeCode.text_primary)),
- Text("Metas", style: TextStyle(color: theme.getColorFor(ThemeCode.text_primary)))
- ]
- )
- )
- ],
- )
- ))),
- Container(
- padding: EdgeInsets.all(15),
- height: 400,
- decoration: BoxDecoration(
- color: theme.getColorFor(ThemeCode.background_primary),
- borderRadius: BorderRadius.all(Radius.circular(20)),
- ), child: Column(
- children: [
- Text("Últimos movimientos"),
- activityList(context),
- TextButton(onPressed: ()=>{}, child: Text("Ver todos"))
- ],
- )
- )
- ],
- )
- )
- ],
- ),
- );
- }
-
- Widget activityList(BuildContext context){
- final theme = context.read();
-
- final activity = [{"date": "10/05", "payments": [1, 2, 3]}, {"date": "10/04", "payments":[1, 2]}, {"date": "10/02", "payments":[1, 2, 3, 4]}];
-
- return Expanded(child: ListView(
- children: List.generate(activity.length, (int index) {
- return Column(
- spacing: 20,
- children: [
- Text(activity[index]["date"].toString()),
- Column(
- spacing: 15,
- children: List.generate((activity[index]["payments"] as List