diff --git a/.flutter-plugins-dependencies b/.flutter-plugins-dependencies index 04cfffa..b78976d 100644 --- a/.flutter-plugins-dependencies +++ b/.flutter-plugins-dependencies @@ -1 +1 @@ -{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"app_badge_plus","path":"/Users/anthony/.pub-cache/hosted/pub.dev/app_badge_plus-1.2.1/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"device_info_plus","path":"/Users/anthony/.pub-cache/hosted/pub.dev/device_info_plus-11.3.3/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_local_notifications","path":"/Users/anthony/.pub-cache/hosted/pub.dev/flutter_local_notifications-19.0.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage","path":"/Users/anthony/.pub-cache/hosted/pub.dev/flutter_secure_storage-9.2.4/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_timezone","path":"/Users/anthony/.pub-cache/hosted/pub.dev/flutter_timezone-4.1.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"path_provider_foundation","path":"/Users/anthony/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.0/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"shared_preferences_foundation","path":"/Users/anthony/.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.2.2/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"url_launcher_ios","path":"/Users/anthony/.pub-cache/hosted/pub.dev/url_launcher_ios-6.2.5/","native_build":true,"dependencies":[],"dev_dependency":false}],"android":[{"name":"app_badge_plus","path":"/Users/anthony/.pub-cache/hosted/pub.dev/app_badge_plus-1.2.1/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"device_info_plus","path":"/Users/anthony/.pub-cache/hosted/pub.dev/device_info_plus-11.3.3/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_local_notifications","path":"/Users/anthony/.pub-cache/hosted/pub.dev/flutter_local_notifications-19.0.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage","path":"/Users/anthony/.pub-cache/hosted/pub.dev/flutter_secure_storage-9.2.4/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_timezone","path":"/Users/anthony/.pub-cache/hosted/pub.dev/flutter_timezone-4.1.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"path_provider_android","path":"/Users/anthony/.pub-cache/hosted/pub.dev/path_provider_android-2.2.12/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"shared_preferences_android","path":"/Users/anthony/.pub-cache/hosted/pub.dev/shared_preferences_android-2.1.4/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"url_launcher_android","path":"/Users/anthony/.pub-cache/hosted/pub.dev/url_launcher_android-6.3.3/","native_build":true,"dependencies":[],"dev_dependency":false}],"macos":[{"name":"app_badge_plus","path":"/Users/anthony/.pub-cache/hosted/pub.dev/app_badge_plus-1.2.1/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"device_info_plus","path":"/Users/anthony/.pub-cache/hosted/pub.dev/device_info_plus-11.3.3/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_local_notifications","path":"/Users/anthony/.pub-cache/hosted/pub.dev/flutter_local_notifications-19.0.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage_macos","path":"/Users/anthony/.pub-cache/hosted/pub.dev/flutter_secure_storage_macos-3.1.3/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_timezone","path":"/Users/anthony/.pub-cache/hosted/pub.dev/flutter_timezone-4.1.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"path_provider_foundation","path":"/Users/anthony/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.0/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"shared_preferences_foundation","path":"/Users/anthony/.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.2.2/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"url_launcher_macos","path":"/Users/anthony/.pub-cache/hosted/pub.dev/url_launcher_macos-3.1.0/","native_build":true,"dependencies":[],"dev_dependency":false}],"linux":[{"name":"device_info_plus","path":"/Users/anthony/.pub-cache/hosted/pub.dev/device_info_plus-11.3.3/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"flutter_local_notifications_linux","path":"/Users/anthony/.pub-cache/hosted/pub.dev/flutter_local_notifications_linux-6.0.0/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage_linux","path":"/Users/anthony/.pub-cache/hosted/pub.dev/flutter_secure_storage_linux-1.2.2/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_timezone","path":"/Users/anthony/.pub-cache/hosted/pub.dev/flutter_timezone-4.1.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"path_provider_linux","path":"/Users/anthony/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"shared_preferences_linux","path":"/Users/anthony/.pub-cache/hosted/pub.dev/shared_preferences_linux-2.3.2/","native_build":false,"dependencies":["path_provider_linux"],"dev_dependency":false},{"name":"url_launcher_linux","path":"/Users/anthony/.pub-cache/hosted/pub.dev/url_launcher_linux-3.1.1/","native_build":true,"dependencies":[],"dev_dependency":false}],"windows":[{"name":"device_info_plus","path":"/Users/anthony/.pub-cache/hosted/pub.dev/device_info_plus-11.3.3/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"flutter_local_notifications_windows","path":"/Users/anthony/.pub-cache/hosted/pub.dev/flutter_local_notifications_windows-1.0.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage_windows","path":"/Users/anthony/.pub-cache/hosted/pub.dev/flutter_secure_storage_windows-3.1.2/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_timezone","path":"/Users/anthony/.pub-cache/hosted/pub.dev/flutter_timezone-4.1.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"path_provider_windows","path":"/Users/anthony/.pub-cache/hosted/pub.dev/path_provider_windows-2.3.0/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"shared_preferences_windows","path":"/Users/anthony/.pub-cache/hosted/pub.dev/shared_preferences_windows-2.3.2/","native_build":false,"dependencies":["path_provider_windows"],"dev_dependency":false},{"name":"url_launcher_windows","path":"/Users/anthony/.pub-cache/hosted/pub.dev/url_launcher_windows-3.1.1/","native_build":true,"dependencies":[],"dev_dependency":false}],"web":[{"name":"device_info_plus","path":"/Users/anthony/.pub-cache/hosted/pub.dev/device_info_plus-11.3.3/","dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage_web","path":"/Users/anthony/.pub-cache/hosted/pub.dev/flutter_secure_storage_web-1.2.1/","dependencies":[],"dev_dependency":false},{"name":"flutter_timezone","path":"/Users/anthony/.pub-cache/hosted/pub.dev/flutter_timezone-4.1.0/","dependencies":[],"dev_dependency":false},{"name":"shared_preferences_web","path":"/Users/anthony/.pub-cache/hosted/pub.dev/shared_preferences_web-2.1.0/","dependencies":[],"dev_dependency":false},{"name":"url_launcher_web","path":"/Users/anthony/.pub-cache/hosted/pub.dev/url_launcher_web-2.3.3/","dependencies":[],"dev_dependency":false}]},"dependencyGraph":[{"name":"app_badge_plus","dependencies":[]},{"name":"device_info_plus","dependencies":[]},{"name":"flutter_local_notifications","dependencies":["flutter_local_notifications_linux","flutter_local_notifications_windows"]},{"name":"flutter_local_notifications_linux","dependencies":[]},{"name":"flutter_local_notifications_windows","dependencies":[]},{"name":"flutter_secure_storage","dependencies":["flutter_secure_storage_linux","flutter_secure_storage_macos","flutter_secure_storage_web","flutter_secure_storage_windows"]},{"name":"flutter_secure_storage_linux","dependencies":[]},{"name":"flutter_secure_storage_macos","dependencies":[]},{"name":"flutter_secure_storage_web","dependencies":[]},{"name":"flutter_secure_storage_windows","dependencies":["path_provider"]},{"name":"flutter_timezone","dependencies":[]},{"name":"path_provider","dependencies":["path_provider_android","path_provider_foundation","path_provider_linux","path_provider_windows"]},{"name":"path_provider_android","dependencies":[]},{"name":"path_provider_foundation","dependencies":[]},{"name":"path_provider_linux","dependencies":[]},{"name":"path_provider_windows","dependencies":[]},{"name":"shared_preferences","dependencies":["shared_preferences_android","shared_preferences_foundation","shared_preferences_linux","shared_preferences_web","shared_preferences_windows"]},{"name":"shared_preferences_android","dependencies":[]},{"name":"shared_preferences_foundation","dependencies":[]},{"name":"shared_preferences_linux","dependencies":["path_provider_linux"]},{"name":"shared_preferences_web","dependencies":[]},{"name":"shared_preferences_windows","dependencies":["path_provider_windows"]},{"name":"url_launcher","dependencies":["url_launcher_android","url_launcher_ios","url_launcher_linux","url_launcher_macos","url_launcher_web","url_launcher_windows"]},{"name":"url_launcher_android","dependencies":[]},{"name":"url_launcher_ios","dependencies":[]},{"name":"url_launcher_linux","dependencies":[]},{"name":"url_launcher_macos","dependencies":[]},{"name":"url_launcher_web","dependencies":[]},{"name":"url_launcher_windows","dependencies":[]}],"date_created":"2025-03-27 10:47:50.624739","version":"3.29.2","swift_package_manager_enabled":{"ios":false,"macos":false}} \ No newline at end of file +{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"app_badge_plus","path":"/Users/anthony/.pub-cache/hosted/pub.dev/app_badge_plus-1.2.3/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"device_info_plus","path":"/Users/anthony/.pub-cache/hosted/pub.dev/device_info_plus-11.4.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_local_notifications","path":"/Users/anthony/.pub-cache/hosted/pub.dev/flutter_local_notifications-19.2.1/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage","path":"/Users/anthony/.pub-cache/hosted/pub.dev/flutter_secure_storage-9.2.4/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_timezone","path":"/Users/anthony/.pub-cache/hosted/pub.dev/flutter_timezone-4.1.1/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"path_provider_foundation","path":"/Users/anthony/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.0/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"shared_preferences_foundation","path":"/Users/anthony/.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.2.2/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"url_launcher_ios","path":"/Users/anthony/.pub-cache/hosted/pub.dev/url_launcher_ios-6.2.5/","native_build":true,"dependencies":[],"dev_dependency":false}],"android":[{"name":"app_badge_plus","path":"/Users/anthony/.pub-cache/hosted/pub.dev/app_badge_plus-1.2.3/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"device_info_plus","path":"/Users/anthony/.pub-cache/hosted/pub.dev/device_info_plus-11.4.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_local_notifications","path":"/Users/anthony/.pub-cache/hosted/pub.dev/flutter_local_notifications-19.2.1/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage","path":"/Users/anthony/.pub-cache/hosted/pub.dev/flutter_secure_storage-9.2.4/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_timezone","path":"/Users/anthony/.pub-cache/hosted/pub.dev/flutter_timezone-4.1.1/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"path_provider_android","path":"/Users/anthony/.pub-cache/hosted/pub.dev/path_provider_android-2.2.12/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"shared_preferences_android","path":"/Users/anthony/.pub-cache/hosted/pub.dev/shared_preferences_android-2.1.4/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"url_launcher_android","path":"/Users/anthony/.pub-cache/hosted/pub.dev/url_launcher_android-6.3.3/","native_build":true,"dependencies":[],"dev_dependency":false}],"macos":[{"name":"app_badge_plus","path":"/Users/anthony/.pub-cache/hosted/pub.dev/app_badge_plus-1.2.3/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"device_info_plus","path":"/Users/anthony/.pub-cache/hosted/pub.dev/device_info_plus-11.4.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_local_notifications","path":"/Users/anthony/.pub-cache/hosted/pub.dev/flutter_local_notifications-19.2.1/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage_macos","path":"/Users/anthony/.pub-cache/hosted/pub.dev/flutter_secure_storage_macos-3.1.3/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_timezone","path":"/Users/anthony/.pub-cache/hosted/pub.dev/flutter_timezone-4.1.1/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"path_provider_foundation","path":"/Users/anthony/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.0/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"shared_preferences_foundation","path":"/Users/anthony/.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.2.2/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"url_launcher_macos","path":"/Users/anthony/.pub-cache/hosted/pub.dev/url_launcher_macos-3.1.0/","native_build":true,"dependencies":[],"dev_dependency":false}],"linux":[{"name":"device_info_plus","path":"/Users/anthony/.pub-cache/hosted/pub.dev/device_info_plus-11.4.0/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"flutter_local_notifications_linux","path":"/Users/anthony/.pub-cache/hosted/pub.dev/flutter_local_notifications_linux-6.0.0/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage_linux","path":"/Users/anthony/.pub-cache/hosted/pub.dev/flutter_secure_storage_linux-1.2.2/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_timezone","path":"/Users/anthony/.pub-cache/hosted/pub.dev/flutter_timezone-4.1.1/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"path_provider_linux","path":"/Users/anthony/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"shared_preferences_linux","path":"/Users/anthony/.pub-cache/hosted/pub.dev/shared_preferences_linux-2.3.2/","native_build":false,"dependencies":["path_provider_linux"],"dev_dependency":false},{"name":"url_launcher_linux","path":"/Users/anthony/.pub-cache/hosted/pub.dev/url_launcher_linux-3.1.1/","native_build":true,"dependencies":[],"dev_dependency":false}],"windows":[{"name":"device_info_plus","path":"/Users/anthony/.pub-cache/hosted/pub.dev/device_info_plus-11.4.0/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"flutter_local_notifications_windows","path":"/Users/anthony/.pub-cache/hosted/pub.dev/flutter_local_notifications_windows-1.0.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage_windows","path":"/Users/anthony/.pub-cache/hosted/pub.dev/flutter_secure_storage_windows-3.1.2/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_timezone","path":"/Users/anthony/.pub-cache/hosted/pub.dev/flutter_timezone-4.1.1/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"path_provider_windows","path":"/Users/anthony/.pub-cache/hosted/pub.dev/path_provider_windows-2.3.0/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"shared_preferences_windows","path":"/Users/anthony/.pub-cache/hosted/pub.dev/shared_preferences_windows-2.3.2/","native_build":false,"dependencies":["path_provider_windows"],"dev_dependency":false},{"name":"url_launcher_windows","path":"/Users/anthony/.pub-cache/hosted/pub.dev/url_launcher_windows-3.1.1/","native_build":true,"dependencies":[],"dev_dependency":false}],"web":[{"name":"device_info_plus","path":"/Users/anthony/.pub-cache/hosted/pub.dev/device_info_plus-11.4.0/","dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage_web","path":"/Users/anthony/.pub-cache/hosted/pub.dev/flutter_secure_storage_web-1.2.1/","dependencies":[],"dev_dependency":false},{"name":"flutter_timezone","path":"/Users/anthony/.pub-cache/hosted/pub.dev/flutter_timezone-4.1.1/","dependencies":[],"dev_dependency":false},{"name":"shared_preferences_web","path":"/Users/anthony/.pub-cache/hosted/pub.dev/shared_preferences_web-2.1.0/","dependencies":[],"dev_dependency":false},{"name":"url_launcher_web","path":"/Users/anthony/.pub-cache/hosted/pub.dev/url_launcher_web-2.3.3/","dependencies":[],"dev_dependency":false}]},"dependencyGraph":[{"name":"app_badge_plus","dependencies":[]},{"name":"device_info_plus","dependencies":[]},{"name":"flutter_local_notifications","dependencies":["flutter_local_notifications_linux","flutter_local_notifications_windows"]},{"name":"flutter_local_notifications_linux","dependencies":[]},{"name":"flutter_local_notifications_windows","dependencies":[]},{"name":"flutter_secure_storage","dependencies":["flutter_secure_storage_linux","flutter_secure_storage_macos","flutter_secure_storage_web","flutter_secure_storage_windows"]},{"name":"flutter_secure_storage_linux","dependencies":[]},{"name":"flutter_secure_storage_macos","dependencies":[]},{"name":"flutter_secure_storage_web","dependencies":[]},{"name":"flutter_secure_storage_windows","dependencies":["path_provider"]},{"name":"flutter_timezone","dependencies":[]},{"name":"path_provider","dependencies":["path_provider_android","path_provider_foundation","path_provider_linux","path_provider_windows"]},{"name":"path_provider_android","dependencies":[]},{"name":"path_provider_foundation","dependencies":[]},{"name":"path_provider_linux","dependencies":[]},{"name":"path_provider_windows","dependencies":[]},{"name":"shared_preferences","dependencies":["shared_preferences_android","shared_preferences_foundation","shared_preferences_linux","shared_preferences_web","shared_preferences_windows"]},{"name":"shared_preferences_android","dependencies":[]},{"name":"shared_preferences_foundation","dependencies":[]},{"name":"shared_preferences_linux","dependencies":["path_provider_linux"]},{"name":"shared_preferences_web","dependencies":[]},{"name":"shared_preferences_windows","dependencies":["path_provider_windows"]},{"name":"url_launcher","dependencies":["url_launcher_android","url_launcher_ios","url_launcher_linux","url_launcher_macos","url_launcher_web","url_launcher_windows"]},{"name":"url_launcher_android","dependencies":[]},{"name":"url_launcher_ios","dependencies":[]},{"name":"url_launcher_linux","dependencies":[]},{"name":"url_launcher_macos","dependencies":[]},{"name":"url_launcher_web","dependencies":[]},{"name":"url_launcher_windows","dependencies":[]}],"date_created":"2025-05-23 15:00:48.065215","version":"3.32.0","swift_package_manager_enabled":{"ios":false,"macos":false}} \ No newline at end of file diff --git a/.idea/caches/deviceStreaming.xml b/.idea/caches/deviceStreaming.xml index be40440..61a0a4a 100644 --- a/.idea/caches/deviceStreaming.xml +++ b/.idea/caches/deviceStreaming.xml @@ -15,6 +15,30 @@ diff --git a/.idea/libraries/Dart_Packages.xml b/.idea/libraries/Dart_Packages.xml index 5056846..dab2ef7 100644 --- a/.idea/libraries/Dart_Packages.xml +++ b/.idea/libraries/Dart_Packages.xml @@ -5,30 +5,30 @@ - - - - @@ -49,8 +49,8 @@ + @@ -71,6 +71,7 @@ + @@ -78,21 +79,28 @@ - + + + + + + - - @@ -106,8 +114,8 @@ + @@ -121,14 +129,14 @@ - - @@ -142,7 +150,7 @@ - @@ -156,14 +164,14 @@ - - @@ -191,28 +199,28 @@ - - - - @@ -240,21 +248,28 @@ - - - + + + + + + @@ -268,14 +283,14 @@ - - @@ -338,7 +353,7 @@ - @@ -359,14 +374,14 @@ - - @@ -394,7 +409,7 @@ - @@ -415,14 +430,14 @@ - - @@ -436,8 +451,8 @@ - @@ -458,6 +473,7 @@ + @@ -472,7 +488,7 @@ - @@ -493,7 +509,7 @@ - @@ -507,7 +523,7 @@ - @@ -595,13 +611,6 @@ - - - - - - @@ -654,7 +663,7 @@ - @@ -675,7 +684,7 @@ - @@ -710,7 +719,7 @@ - @@ -738,8 +747,8 @@ + @@ -753,30 +762,31 @@ + + + + @@ -784,6 +794,7 @@ + @@ -791,6 +802,7 @@ + @@ -798,6 +810,7 @@ + @@ -812,7 +825,7 @@ - @@ -910,8 +923,8 @@ + @@ -946,21 +959,21 @@ - - - @@ -985,43 +998,46 @@ - - + + - + - - - + + + + + + - - - + + - + - - + + - - - - + + + + - - - - - + + + + + + @@ -1029,31 +1045,32 @@ - + - - + + - + - - + + + - + - + - + @@ -1066,7 +1083,6 @@ - @@ -1074,32 +1090,36 @@ - + - + - + - + - + - + - + + + + + - + @@ -1114,14 +1134,14 @@ - + - - - + + + diff --git a/.idea/libraries/Flutter_Plugins.xml b/.idea/libraries/Flutter_Plugins.xml index f3b7b1b..331e917 100644 --- a/.idea/libraries/Flutter_Plugins.xml +++ b/.idea/libraries/Flutter_Plugins.xml @@ -12,21 +12,22 @@ - - - - - - - + + + + + + + + diff --git a/CHANGELOG.md b/CHANGELOG.md index 69bfbe3..fc9ef1f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,15 @@ +## [4.2.0] - 2025-05-23 + +* Add money formatter into library + +## [4.1.6] - 2025-05-23 + +* Pubspec.yaml dependency updates. + +## [4.1.5] - 2025-04-09 + +* Pubspec.yaml dependency updates. + ## [4.1.4] - 2025-03-27 * Pubspec.yaml dependency updates. diff --git a/README.md b/README.md index 9ace4fa..7b23810 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ In your flutter project add the dependency: ``` dart dependencies: ... - woosignal: ^4.1.4 + woosignal: ^4.2.0 ``` ### Usage example # diff --git a/example/ios/Flutter/ephemeral/flutter_lldb_helper.py b/example/ios/Flutter/ephemeral/flutter_lldb_helper.py new file mode 100644 index 0000000..a88caf9 --- /dev/null +++ b/example/ios/Flutter/ephemeral/flutter_lldb_helper.py @@ -0,0 +1,32 @@ +# +# Generated file, do not edit. +# + +import lldb + +def handle_new_rx_page(frame: lldb.SBFrame, bp_loc, extra_args, intern_dict): + """Intercept NOTIFY_DEBUGGER_ABOUT_RX_PAGES and touch the pages.""" + base = frame.register["x0"].GetValueAsAddress() + page_len = frame.register["x1"].GetValueAsUnsigned() + + # Note: NOTIFY_DEBUGGER_ABOUT_RX_PAGES will check contents of the + # first page to see if handled it correctly. This makes diagnosing + # misconfiguration (e.g. missing breakpoint) easier. + data = bytearray(page_len) + data[0:8] = b'IHELPED!' + + error = lldb.SBError() + frame.GetThread().GetProcess().WriteMemory(base, data, error) + if not error.Success(): + print(f'Failed to write into {base}[+{page_len}]', error) + return + +def __lldb_init_module(debugger: lldb.SBDebugger, _): + target = debugger.GetDummyTarget() + # Caveat: must use BreakpointCreateByRegEx here and not + # BreakpointCreateByName. For some reasons callback function does not + # get carried over from dummy target for the later. + bp = target.BreakpointCreateByRegex("^NOTIFY_DEBUGGER_ABOUT_RX_PAGES$") + bp.SetScriptCallbackFunction('{}.handle_new_rx_page'.format(__name__)) + bp.SetAutoContinue(True) + print("-- LLDB integration loaded --") diff --git a/example/ios/Flutter/ephemeral/flutter_lldbinit b/example/ios/Flutter/ephemeral/flutter_lldbinit new file mode 100644 index 0000000..e3ba6fb --- /dev/null +++ b/example/ios/Flutter/ephemeral/flutter_lldbinit @@ -0,0 +1,5 @@ +# +# Generated file, do not edit. +# + +command script import --relative-to-command-file flutter_lldb_helper.py diff --git a/lib/money_formatter/money_formatter.dart b/lib/money_formatter/money_formatter.dart new file mode 100644 index 0000000..eb325a3 --- /dev/null +++ b/lib/money_formatter/money_formatter.dart @@ -0,0 +1,5 @@ +export 'src/utils/compact_format_type.dart'; +export 'src/utils/money_formatter_settings.dart'; +export 'src/utils/money_formatter_output.dart'; +export 'src/utils/money_formatter_compare.dart'; +export 'src/flutter_money_formatter_base.dart'; diff --git a/lib/money_formatter/src/flutter_money_formatter_base.dart b/lib/money_formatter/src/flutter_money_formatter_base.dart new file mode 100644 index 0000000..cbb8817 --- /dev/null +++ b/lib/money_formatter/src/flutter_money_formatter_base.dart @@ -0,0 +1,133 @@ +import 'package:intl/intl.dart'; + +import '/money_formatter/src/utils/compact_format_type.dart'; +import '/money_formatter/src/utils/money_formatter_settings.dart'; +import '/money_formatter/src/utils/money_formatter_output.dart'; +import '/money_formatter/src/utils/money_formatter_compare.dart'; + +part 'utils/utilities.dart'; + +/// [FlutterMoneyFormatter] instance +class MoneyFormatter { + late _Utilities _utilities; + + /// Init instance of [FlutterMoneyFormatter] + /// + /// [amount] (@required) the number that will be formatted + MoneyFormatter({required this.amount, this.settings}) { + settings = settings ?? MoneyFormatterSettings(); + output = _getOutput(); + comparator = MoneyFormatterCompare(amount: amount); + } + + /// Amount number that will be formatted. + double amount; + + /// The formatter settings + MoneyFormatterSettings? settings; + + /// Returns compiled and formatted output in several formats. + late MoneyFormatterOutput output; + + /// Comparator + late MoneyFormatterCompare comparator; + + /// output builder + MoneyFormatterOutput _getOutput() { + _utilities = _Utilities(amount: amount, settings: settings); + + String urs = _utilities.refineSeparator; + int decSepCharPos = urs.indexOf(settings?.decimalSeparator ?? '˘'); + + return MoneyFormatterOutput( + nonSymbol: urs, + symbolOnLeft: '${settings?.symbol ?? ''}${_utilities.spacer}$urs', + symbolOnRight: '$urs${_utilities.spacer}${settings?.symbol ?? ''}', + compactNonSymbol: _compactNonSymbol, + compactSymbolOnLeft: + '${settings?.symbol ?? ''}${_utilities.spacer}$_compactNonSymbol', + compactSymbolOnRight: + '$_compactNonSymbol${_utilities.spacer}${settings?.symbol ?? ''}', + fractionDigitsOnly: + urs.substring((-1 == decSepCharPos ? 0 : decSepCharPos + 1)), + withoutFractionDigits: urs.substring( + 0, -1 == decSepCharPos ? urs.length - 1 : decSepCharPos)); + } + + /// returns FlutterMoneyFormatter after calculating amount. + MoneyFormatter fastCalc( + {required FastCalcType type, required double amount}) { + switch (type) { + case FastCalcType.addition: + this.amount += amount; + break; + + case FastCalcType.substraction: + this.amount -= amount; + break; + + case FastCalcType.multiplication: + this.amount *= amount; + break; + + case FastCalcType.division: + this.amount /= amount; + break; + + case FastCalcType.percentageAddition: + this.amount += (amount / 100) * this.amount; + break; + + case FastCalcType.percentageSubstraction: + this.amount -= (amount / 100) * this.amount; + break; + } + + return this; + } + + /// Copies current instance and change some values to the new instance. + MoneyFormatter copyWith( + {double? amount, + String? symbol, + String? thousandSeparator, + String? decimalSeparator, + int? fractionDigits, + String? symbolAndNumberSeparator, + CompactFormatType? compactFormatType}) { + MoneyFormatterSettings? ts = settings; + + MoneyFormatterSettings mfs = MoneyFormatterSettings( + symbol: symbol ?? ts?.symbol, + thousandSeparator: thousandSeparator ?? ts?.thousandSeparator, + decimalSeparator: decimalSeparator ?? ts?.decimalSeparator, + symbolAndNumberSeparator: + symbolAndNumberSeparator ?? ts?.symbolAndNumberSeparator, + fractionDigits: fractionDigits ?? ts?.fractionDigits, + compactFormatType: compactFormatType ?? ts?.compactFormatType); + + return MoneyFormatter(amount: amount ?? this.amount, settings: mfs); + } + + /// Returns compact format number without currency symbol + String get _compactNonSymbol { + String compacted = _utilities.baseCompact.format(amount); + String numerics = RegExp(r'(\d+\.\d+)|(\d+)') + .allMatches(compacted) + // ignore: no_wildcard_variable_uses + .map((_) => _.group(0)) + .toString() + .replaceAll('(', '') + .replaceAll(')', ''); + + String alphas = compacted.replaceAll(numerics, ''); + + String reformat = NumberFormat.currency( + symbol: '', + decimalDigits: + !numerics.contains('.') ? 0 : settings?.fractionDigits) + .format(num.parse(numerics)); + + return '$reformat$alphas'; + } +} diff --git a/lib/money_formatter/src/utils/compact_format_type.dart b/lib/money_formatter/src/utils/compact_format_type.dart new file mode 100644 index 0000000..e489055 --- /dev/null +++ b/lib/money_formatter/src/utils/compact_format_type.dart @@ -0,0 +1,2 @@ +/// An enum to be used on compact text format +enum CompactFormatType { short, long } diff --git a/lib/money_formatter/src/utils/money_formatter_compare.dart b/lib/money_formatter/src/utils/money_formatter_compare.dart new file mode 100644 index 0000000..9f96fce --- /dev/null +++ b/lib/money_formatter/src/utils/money_formatter_compare.dart @@ -0,0 +1,23 @@ +/// [MoneyFormatterCompare] instance. +/// +/// This instance is used to hold utilities in comparing values held by [FlutterMoneyFormatter] +class MoneyFormatterCompare { + MoneyFormatterCompare({required this.amount}); + + final double amount; + + /// Check current instance amount is lower than [amount] or not + bool isLowerThan(double amount) => this.amount < amount; + + /// Check current instance amount is greater than [amount] or not + bool isGreaterThan(double amount) => this.amount > amount; + + /// Check current instance amount is equal than [amount] or not + bool isEqual(double amount) => this.amount == amount; + + /// Check current instance amount is equal or lower than [amount] or not + bool isEqualOrLowerThan(double amount) => this.amount <= amount; + + /// Check current instance amount is equal or greater than [amount] or not + bool isEqualOrGreaterThan(double amount) => this.amount >= amount; +} diff --git a/lib/money_formatter/src/utils/money_formatter_output.dart b/lib/money_formatter/src/utils/money_formatter_output.dart new file mode 100644 index 0000000..814df62 --- /dev/null +++ b/lib/money_formatter/src/utils/money_formatter_output.dart @@ -0,0 +1,36 @@ +class MoneyFormatterOutput { + /// Init instance of [MoneyFormatterOutput] + MoneyFormatterOutput( + {required this.nonSymbol, + required this.symbolOnLeft, + required this.symbolOnRight, + required this.compactNonSymbol, + required this.compactSymbolOnLeft, + required this.compactSymbolOnRight, + required this.fractionDigitsOnly, + required this.withoutFractionDigits}); + + /// Returns formatted number without currency symbol + final String nonSymbol; + + /// Returns formatted number with currency symbol on the left side. + final String symbolOnLeft; + + /// Returns formatted number with currency symbol on the right side. + final String symbolOnRight; + + /// Returns compact format number without currency symbol + final String compactNonSymbol; + + /// Returns compact format number with currency symbol on the left side. + final String compactSymbolOnLeft; + + /// Returns compact format number with currency symbol on the right side. + final String compactSymbolOnRight; + + /// Returns decimal-only with length as specified on fractionDigits. + final String fractionDigitsOnly; + + /// Returns formatted number without decimal. + final String withoutFractionDigits; +} diff --git a/lib/money_formatter/src/utils/money_formatter_settings.dart b/lib/money_formatter/src/utils/money_formatter_settings.dart new file mode 100644 index 0000000..26f39c9 --- /dev/null +++ b/lib/money_formatter/src/utils/money_formatter_settings.dart @@ -0,0 +1,41 @@ +import '/money_formatter/src/utils/compact_format_type.dart'; + +/// [MoneyFormatterSettings] instance. +/// +/// This instance is used as a configurator for the [FlutterMoneyFormatter] instance. +/// You can change the output of [FlutterMoneyFormatter] through this instance. +class MoneyFormatterSettings { + /// Init instance of [MoneyFormatterSettings] + MoneyFormatterSettings( + {this.symbol, + this.thousandSeparator, + this.decimalSeparator, + this.symbolAndNumberSeparator, + this.fractionDigits, + this.compactFormatType}) { + symbol = symbol ?? '\$'; + thousandSeparator = thousandSeparator ?? ','; + decimalSeparator = decimalSeparator ?? '.'; + symbolAndNumberSeparator = symbolAndNumberSeparator ?? ' '; + fractionDigits = fractionDigits ?? 2; + compactFormatType = compactFormatType ?? CompactFormatType.short; + } + + /// The [symbol] that will be used on formatted output, default value is $ (Dollar Sign) + String? symbol; + + // The character that will be used as thousand separator on formatted output, default value is ',' (comma) + String? thousandSeparator; + + /// The character that will be used as decimal separator on formatted output, default value is '.' (dot) + String? decimalSeparator; + + /// The character that will be used as separator between the numbers and the symbol. + String? symbolAndNumberSeparator; + + /// The fraction digits that will be used on formatted output, default value is 2. + int? fractionDigits; + + /// Compact format type, for example using 'million' or 'M' + CompactFormatType? compactFormatType; +} diff --git a/lib/money_formatter/src/utils/utilities.dart b/lib/money_formatter/src/utils/utilities.dart new file mode 100644 index 0000000..54087e9 --- /dev/null +++ b/lib/money_formatter/src/utils/utilities.dart @@ -0,0 +1,41 @@ +part of '../flutter_money_formatter_base.dart'; + +enum FastCalcType { + addition, + substraction, + multiplication, + division, + percentageAddition, + percentageSubstraction +} + +class _Utilities { + _Utilities({required this.amount, this.settings}) { + settings = settings ?? MoneyFormatterSettings(); + } + + final double amount; + + MoneyFormatterSettings? settings; + + /// Returns formatted number + String get baseFormat => NumberFormat.currency( + symbol: '', decimalDigits: settings?.fractionDigits, locale: 'en_US') + .format(amount); + + /// Returns formatted number with refined separator chars + String get refineSeparator => baseFormat + .replaceAll(',', '(,)') + .replaceAll('.', '(.)') + .replaceAll('(,)', settings?.thousandSeparator ?? ' ') + .replaceAll('(.)', settings?.decimalSeparator ?? ' '); + + /// Returns spacer as `spaceBetweenSymbolAndNumber` value + String get spacer => settings?.symbolAndNumberSeparator ?? ' '; + + /// Returns base compact format + NumberFormat get baseCompact => + settings?.compactFormatType == CompactFormatType.short + ? NumberFormat.compact() + : NumberFormat.compactLong(); +} diff --git a/lib/woosignal.dart b/lib/woosignal.dart index 43a54b0..4b77c1b 100644 --- a/lib/woosignal.dart +++ b/lib/woosignal.dart @@ -58,7 +58,7 @@ import 'package:encrypt/encrypt.dart' as enc; import 'package:encrypt/encrypt.dart'; /// WooSignal Package version -const String _wooSignalVersion = "4.1.4"; +const String _wooSignalVersion = "4.2.0"; class WooSignal { WooSignal._privateConstructor(); diff --git a/pubspec.yaml b/pubspec.yaml index c90c1f5..d53cedd 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: woosignal description: WooCommerce REST API for dart, connect a WooCommerce store and start developing with our interface for their API endpoints. -version: 4.1.4 +version: 4.2.0 homepage: https://woosignal.com repository: https://github.com/woosignal/flutter-woocommerce-api issue_tracker: https://github.com/woosignal/flutter-woocommerce-api/issues @@ -11,8 +11,9 @@ environment: dependencies: dio: ^5.8.0+1 - device_meta: ^2.1.5 + device_meta: ^2.1.7 encrypt: ^5.0.3 + intl: ^0.20.2 flutter: sdk: flutter