Feat: complete logic get data for features information users and slicing UI for change password screen

This commit is contained in:
orangdeso 2025-05-12 17:47:54 +07:00
parent 624c008499
commit e8ce225010
16 changed files with 850 additions and 143 deletions

View File

@ -680,7 +680,7 @@
"languageVersion": "3.4"
}
],
"generated": "2025-05-10T18:42:15.590215Z",
"generated": "2025-05-12T05:36:15.239350Z",
"generator": "pub",
"generatorVersion": "3.5.0",
"flutterRoot": "file:///D:/Flutter/flutter_sdk/flutter_3.24.0",

View File

@ -2,10 +2,24 @@
<library name="Dart Packages" type="DartPackagesLibraryType">
<properties>
<option name="packageNameToDirsMap">
<entry key="_flutterfire_internals">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/_flutterfire_internals-1.3.54/lib" />
</list>
</value>
</entry>
<entry key="archive">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/archive-4.0.7/lib" />
</list>
</value>
</entry>
<entry key="args">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/args-2.6.0/lib" />
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/args-2.7.0/lib" />
</list>
</value>
</entry>
@ -16,6 +30,27 @@
</list>
</value>
</entry>
<entry key="barcode">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/barcode-2.2.9/lib" />
</list>
</value>
</entry>
<entry key="barcode_widget">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/barcode_widget-2.0.4/lib" />
</list>
</value>
</entry>
<entry key="bidi">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/bidi-2.0.13/lib" />
</list>
</value>
</entry>
<entry key="boolean_selector">
<value>
<list>
@ -23,6 +58,13 @@
</list>
</value>
</entry>
<entry key="carousel_slider">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/carousel_slider-5.0.0/lib" />
</list>
</value>
</entry>
<entry key="characters">
<value>
<list>
@ -37,6 +79,27 @@
</list>
</value>
</entry>
<entry key="cloud_firestore">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/cloud_firestore-5.6.6/lib" />
</list>
</value>
</entry>
<entry key="cloud_firestore_platform_interface">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/cloud_firestore_platform_interface-6.6.6/lib" />
</list>
</value>
</entry>
<entry key="cloud_firestore_web">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/cloud_firestore_web-4.4.6/lib" />
</list>
</value>
</entry>
<entry key="collection">
<value>
<list>
@ -44,6 +107,20 @@
</list>
</value>
</entry>
<entry key="cross_file">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/cross_file-0.3.4+2/lib" />
</list>
</value>
</entry>
<entry key="crypto">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/crypto-3.0.6/lib" />
</list>
</value>
</entry>
<entry key="cupertino_icons">
<value>
<list>
@ -51,17 +128,31 @@
</list>
</value>
</entry>
<entry key="dio">
<entry key="device_info_plus">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/dio-5.8.0+1/lib" />
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/device_info_plus-11.3.0/lib" />
</list>
</value>
</entry>
<entry key="dio_web_adapter">
<entry key="device_info_plus_platform_interface">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/dio_web_adapter-2.1.0/lib" />
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/device_info_plus_platform_interface-7.0.2/lib" />
</list>
</value>
</entry>
<entry key="dotted_dashed_line">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/dotted_dashed_line-0.0.3/lib" />
</list>
</value>
</entry>
<entry key="dropdown_button2">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/dropdown_button2-2.3.9/lib" />
</list>
</value>
</entry>
@ -72,10 +163,52 @@
</list>
</value>
</entry>
<entry key="ffi">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/ffi-2.1.3/lib" />
</list>
</value>
</entry>
<entry key="file">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/file-7.0.1/lib" />
</list>
</value>
</entry>
<entry key="file_picker">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/file_picker-10.0.0/lib" />
</list>
</value>
</entry>
<entry key="firebase_auth">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_auth-5.5.2/lib" />
</list>
</value>
</entry>
<entry key="firebase_auth_platform_interface">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_auth_platform_interface-7.6.2/lib" />
</list>
</value>
</entry>
<entry key="firebase_auth_web">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_auth_web-5.14.2/lib" />
</list>
</value>
</entry>
<entry key="firebase_core">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_core-3.11.0/lib" />
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_core-3.13.0/lib" />
</list>
</value>
</entry>
@ -89,7 +222,56 @@
<entry key="firebase_core_web">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_core_web-2.20.0/lib" />
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_core_web-2.22.0/lib" />
</list>
</value>
</entry>
<entry key="firebase_database">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_database-11.3.5/lib" />
</list>
</value>
</entry>
<entry key="firebase_database_platform_interface">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_database_platform_interface-0.2.6+5/lib" />
</list>
</value>
</entry>
<entry key="firebase_database_web">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_database_web-0.2.6+11/lib" />
</list>
</value>
</entry>
<entry key="firebase_storage">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_storage-12.4.5/lib" />
</list>
</value>
</entry>
<entry key="firebase_storage_platform_interface">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_storage_platform_interface-5.2.5/lib" />
</list>
</value>
</entry>
<entry key="firebase_storage_web">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_storage_web-3.10.12/lib" />
</list>
</value>
</entry>
<entry key="fixnum">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/fixnum-1.1.1/lib" />
</list>
</value>
</entry>
@ -100,6 +282,20 @@
</list>
</value>
</entry>
<entry key="flutter_picker">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/flutter_picker-2.1.0/lib" />
</list>
</value>
</entry>
<entry key="flutter_plugin_android_lifecycle">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.26/lib" />
</list>
</value>
</entry>
<entry key="flutter_screenutil">
<value>
<list>
@ -114,6 +310,13 @@
</list>
</value>
</entry>
<entry key="flutter_switch">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/flutter_switch-0.3.2/lib" />
</list>
</value>
</entry>
<entry key="flutter_test">
<value>
<list>
@ -131,7 +334,14 @@
<entry key="get">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/get-4.6.6/lib" />
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/get-4.7.2/lib" />
</list>
</value>
</entry>
<entry key="google_fonts">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/google_fonts-6.2.1/lib" />
</list>
</value>
</entry>
@ -149,6 +359,20 @@
</list>
</value>
</entry>
<entry key="image">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/image-4.5.4/lib" />
</list>
</value>
</entry>
<entry key="intl">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/intl-0.20.2/lib" />
</list>
</value>
</entry>
<entry key="leak_tracker">
<value>
<list>
@ -170,6 +394,13 @@
</list>
</value>
</entry>
<entry key="logger">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/logger-2.5.0/lib" />
</list>
</value>
</entry>
<entry key="matcher">
<value>
<list>
@ -191,6 +422,13 @@
</list>
</value>
</entry>
<entry key="mobile_scanner">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/mobile_scanner-6.0.10/lib" />
</list>
</value>
</entry>
<entry key="path">
<value>
<list>
@ -205,6 +443,104 @@
</list>
</value>
</entry>
<entry key="path_provider">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider-2.1.5/lib" />
</list>
</value>
</entry>
<entry key="path_provider_android">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider_android-2.2.15/lib" />
</list>
</value>
</entry>
<entry key="path_provider_foundation">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider_foundation-2.4.1/lib" />
</list>
</value>
</entry>
<entry key="path_provider_linux">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider_linux-2.2.1/lib" />
</list>
</value>
</entry>
<entry key="path_provider_platform_interface">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider_platform_interface-2.1.2/lib" />
</list>
</value>
</entry>
<entry key="path_provider_windows">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider_windows-2.3.0/lib" />
</list>
</value>
</entry>
<entry key="pdf">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/pdf-3.11.3/lib" />
</list>
</value>
</entry>
<entry key="pdf_widget_wrapper">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/pdf_widget_wrapper-1.0.4/lib" />
</list>
</value>
</entry>
<entry key="permission_handler">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/permission_handler-11.4.0/lib" />
</list>
</value>
</entry>
<entry key="permission_handler_android">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/permission_handler_android-12.1.0/lib" />
</list>
</value>
</entry>
<entry key="permission_handler_apple">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/permission_handler_apple-9.4.6/lib" />
</list>
</value>
</entry>
<entry key="permission_handler_html">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/permission_handler_html-0.1.3+5/lib" />
</list>
</value>
</entry>
<entry key="permission_handler_platform_interface">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/permission_handler_platform_interface-4.3.0/lib" />
</list>
</value>
</entry>
<entry key="permission_handler_windows">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/permission_handler_windows-0.2.1/lib" />
</list>
</value>
</entry>
<entry key="petitparser">
<value>
<list>
@ -212,10 +548,10 @@
</list>
</value>
</entry>
<entry key="pin_code_fields">
<entry key="platform">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/pin_code_fields-8.0.1/lib" />
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/platform-3.1.6/lib" />
</list>
</value>
</entry>
@ -226,6 +562,83 @@
</list>
</value>
</entry>
<entry key="posix">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/posix-6.0.2/lib" />
</list>
</value>
</entry>
<entry key="printing">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/printing-5.14.2/lib" />
</list>
</value>
</entry>
<entry key="qr">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/qr-3.0.2/lib" />
</list>
</value>
</entry>
<entry key="shared_preferences">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences-2.5.3/lib" />
</list>
</value>
</entry>
<entry key="shared_preferences_android">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences_android-2.4.7/lib" />
</list>
</value>
</entry>
<entry key="shared_preferences_foundation">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences_foundation-2.5.4/lib" />
</list>
</value>
</entry>
<entry key="shared_preferences_linux">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences_linux-2.4.1/lib" />
</list>
</value>
</entry>
<entry key="shared_preferences_platform_interface">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences_platform_interface-2.4.1/lib" />
</list>
</value>
</entry>
<entry key="shared_preferences_web">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences_web-2.4.3/lib" />
</list>
</value>
</entry>
<entry key="shared_preferences_windows">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences_windows-2.4.1/lib" />
</list>
</value>
</entry>
<entry key="shimmer">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/shimmer-3.0.0/lib" />
</list>
</value>
</entry>
<entry key="sky_engine">
<value>
<list>
@ -240,6 +653,13 @@
</list>
</value>
</entry>
<entry key="sprintf">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/sprintf-7.0.0/lib" />
</list>
</value>
</entry>
<entry key="stack_trace">
<value>
<list>
@ -282,6 +702,13 @@
</list>
</value>
</entry>
<entry key="uuid">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/uuid-4.5.1/lib" />
</list>
</value>
</entry>
<entry key="vector_graphics">
<value>
<list>
@ -320,7 +747,28 @@
<entry key="web">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/web-1.1.0/lib" />
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/web-1.1.1/lib" />
</list>
</value>
</entry>
<entry key="win32">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/win32-5.10.1/lib" />
</list>
</value>
</entry>
<entry key="win32_registry">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/win32_registry-1.1.5/lib" />
</list>
</value>
</entry>
<entry key="xdg_directories">
<value>
<list>
<option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/xdg_directories-1.1.0/lib" />
</list>
</value>
</entry>
@ -341,48 +789,112 @@
</option>
</properties>
<CLASSES>
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/args-2.6.0/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/_flutterfire_internals-1.3.54/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/archive-4.0.7/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/args-2.7.0/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/async-2.11.0/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/barcode-2.2.9/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/barcode_widget-2.0.4/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/bidi-2.0.13/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/boolean_selector-2.1.1/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/carousel_slider-5.0.0/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/characters-1.3.0/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/clock-1.1.1/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/cloud_firestore-5.6.6/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/cloud_firestore_platform_interface-6.6.6/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/cloud_firestore_web-4.4.6/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/collection-1.18.0/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/cross_file-0.3.4+2/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/crypto-3.0.6/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/cupertino_icons-1.0.8/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/dio-5.8.0+1/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/dio_web_adapter-2.1.0/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/device_info_plus-11.3.0/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/device_info_plus_platform_interface-7.0.2/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/dotted_dashed_line-0.0.3/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/dropdown_button2-2.3.9/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/fake_async-1.3.1/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_core-3.11.0/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/ffi-2.1.3/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/file-7.0.1/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/file_picker-10.0.0/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_auth-5.5.2/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_auth_platform_interface-7.6.2/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_auth_web-5.14.2/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_core-3.13.0/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_core_platform_interface-5.4.0/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_core_web-2.20.0/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_core_web-2.22.0/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_database-11.3.5/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_database_platform_interface-0.2.6+5/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_database_web-0.2.6+11/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_storage-12.4.5/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_storage_platform_interface-5.2.5/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_storage_web-3.10.12/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/fixnum-1.1.1/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/flutter_picker-2.1.0/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.26/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/flutter_screenutil-5.9.3/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/flutter_svg-2.0.17/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/get-4.6.6/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/flutter_switch-0.3.2/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/get-4.7.2/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/google_fonts-6.2.1/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/http-1.3.0/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/http_parser-4.0.2/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/image-4.5.4/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/intl-0.20.2/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/leak_tracker-10.0.5/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/leak_tracker_flutter_testing-3.0.5/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/leak_tracker_testing-3.0.1/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/logger-2.5.0/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/matcher-0.12.16+1/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/material_color_utilities-0.11.1/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/meta-1.15.0/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/mobile_scanner-6.0.10/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/path-1.9.0/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/path_parsing-1.1.0/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider-2.1.5/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider_android-2.2.15/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider_foundation-2.4.1/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider_linux-2.2.1/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider_platform_interface-2.1.2/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider_windows-2.3.0/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/pdf-3.11.3/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/pdf_widget_wrapper-1.0.4/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/permission_handler-11.4.0/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/permission_handler_android-12.1.0/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/permission_handler_apple-9.4.6/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/permission_handler_html-0.1.3+5/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/permission_handler_platform_interface-4.3.0/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/permission_handler_windows-0.2.1/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/petitparser-6.0.2/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/pin_code_fields-8.0.1/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/platform-3.1.6/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/plugin_platform_interface-2.1.8/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/posix-6.0.2/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/printing-5.14.2/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/qr-3.0.2/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences-2.5.3/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences_android-2.4.7/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences_foundation-2.5.4/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences_linux-2.4.1/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences_platform_interface-2.4.1/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences_web-2.4.3/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences_windows-2.4.1/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/shimmer-3.0.0/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/source_span-1.10.0/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/sprintf-7.0.0/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/stack_trace-1.11.1/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/stream_channel-2.1.2/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/string_scanner-1.2.0/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/term_glyph-1.2.1/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/test_api-0.7.2/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/typed_data-1.4.0/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/uuid-4.5.1/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/vector_graphics-1.1.18/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/vector_graphics_codec-1.1.13/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/vector_graphics_compiler-1.1.16/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/vector_math-2.1.4/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/vm_service-14.2.4/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/web-1.1.0/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/web-1.1.1/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/win32-5.10.1/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/win32_registry-1.1.5/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/xdg_directories-1.1.0/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/xml-6.5.0/lib" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/zoom_tap_animation-1.1.0/lib" />
<root url="file://$PROJECT_DIR$/../../flutter_sdk/flutter_3.24.0/bin/cache/pkg/sky_engine/lib" />

View File

@ -1,20 +1,33 @@
<component name="libraryTable">
<library name="Flutter Plugins" type="FlutterPluginsLibraryType">
<CLASSES>
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences_android-2.4.6" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider_windows-2.3.0" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/device_info_plus-11.3.0" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences_foundation-2.5.4" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_auth_web-5.14.1" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/cloud_firestore-5.6.4" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences_linux-2.4.1" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences_windows-2.4.1" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences-2.5.2" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/cloud_firestore-5.6.6" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences-2.5.3" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences_web-2.4.3" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_core_web-2.21.1" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_core_web-2.22.0" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/printing-5.14.2" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider_linux-2.2.1" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_core-3.12.1" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_auth-5.5.1" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/cloud_firestore_web-4.4.4" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider_android-2.2.15" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_auth-5.5.2" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_storage_web-3.10.12" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_database_web-0.2.6+11" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_database-11.3.5" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_core-3.13.0" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_storage-12.4.5" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/mobile_scanner-6.0.10" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider-2.1.5" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_auth_web-5.14.2" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences_linux-2.4.1" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/permission_handler_html-0.1.3+5" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences_windows-2.4.1" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/permission_handler-11.4.0" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/file_picker-10.0.0" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider_foundation-2.4.1" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/cloud_firestore_web-4.4.6" />
<root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences_android-2.4.7" />
</CLASSES>
<JAVADOC />
<SOURCES />

View File

@ -47,7 +47,7 @@ class TextFieldComponent extends StatelessWidget {
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(10.r),
borderSide: BorderSide(width: 1.5.w, color: PrimaryColors.primary800),
borderSide: BorderSide(width: 2.w, color: PrimaryColors.primary800),
),
contentPadding: EdgeInsets.symmetric(vertical: 16.h),
),

View File

@ -4,20 +4,17 @@ import '../../_core/service/logger_service.dart';
import '../../domain/models/user_entity.dart';
class ProfilRepositoryImpl implements ProfilRepository {
final FirebaseFirestore _firestore = FirebaseFirestore.instance;
final FirebaseFirestore _firestore = FirebaseFirestore.instance;
@override
Future<void> createPassenger({
required String userId,
required PassengerModel passenger,
}) async {
try {
DocumentReference docRef = await _firestore
.collection('users')
.doc(userId)
.collection('passenger')
.add(passenger.toMap());
logger.d("Passenger doc id: ${docRef.id}");
try {
DocumentReference docRef =
await _firestore.collection('users').doc(userId).collection('passenger').add(passenger.toMap());
logger.d("Passenger doc id: ${docRef.id}");
} catch (e) {
rethrow;
}
@ -26,16 +23,23 @@ class ProfilRepositoryImpl implements ProfilRepository {
@override
Future<List<PassengerModel>> getPassengerById(String userId) async {
try {
QuerySnapshot querySnapshot = await _firestore
.collection('users')
.doc(userId)
.collection('passenger')
.get();
return querySnapshot.docs
.map((doc) => PassengerModel.fromMap(doc.data() as Map<String, dynamic>))
.toList();
QuerySnapshot querySnapshot = await _firestore.collection('users').doc(userId).collection('passenger').get();
return querySnapshot.docs.map((doc) => PassengerModel.fromMap(doc.data() as Map<String, dynamic>)).toList();
} catch (e) {
rethrow;
}
}
}
@override
Future<UserData> getUserById(String userId) async {
try {
final doc = await _firestore.collection('users').doc(userId).get();
if (!doc.exists) {
throw Exception("User with id $userId not found");
}
return UserData.fromMap(doc.data()!);
} catch (e) {
rethrow;
}
}
}

View File

@ -8,17 +8,18 @@ import '../usecases/profil_usecase.dart';
class ProfilBinding extends Bindings {
@override
void dependencies() {
// Injeksi repository
Get.lazyPut<ProfilRepository>(() => ProfilRepositoryImpl());
// Injeksi use case, menggunakan repository yang telah di-inject
Get.lazyPut(() => CreatePassengerUseCase(Get.find()));
Get.lazyPut(() => GetPassengerByIdUseCase(Get.find()));
Get.lazyPut(() => GetUserByIdUseCase(Get.find()));
// Injeksi controller, menggunakan use case yang sudah tersedia
Get.lazyPut(() => ProfilController(
createPassengerUseCase: Get.find(),
getPassengerByIdUseCase: Get.find(),
));
Get.lazyPut(
() => ProfilController(
createPassengerUseCase: Get.find(),
getPassengerByIdUseCase: Get.find(),
getUserByIdUseCase: Get.find(),
),
);
}
}

View File

@ -7,4 +7,5 @@ abstract class ProfilRepository {
});
Future<List<PassengerModel>> getPassengerById(String userId);
Future<UserData> getUserById(String userId);
}

View File

@ -19,10 +19,17 @@ class CreatePassengerUseCase {
class GetPassengerByIdUseCase {
final ProfilRepository profilRepository;
GetPassengerByIdUseCase(this.profilRepository);
Future<List<PassengerModel>> call(String userId) async {
return await profilRepository.getPassengerById(userId);
}
}
class GetUserByIdUseCase {
final ProfilRepository profilRepository;
GetUserByIdUseCase(this.profilRepository);
Future<UserData> call(String userId) => profilRepository.getUserById(userId);
}

View File

@ -1,4 +1,8 @@
import 'dart:developer';
import 'package:e_porter/_core/service/logger_service.dart';
import 'package:e_porter/_core/service/preferences_service.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:get/get.dart';
import '../../domain/models/user_entity.dart';
@ -7,10 +11,45 @@ import '../../domain/usecases/profil_usecase.dart';
class ProfilController extends GetxController {
final CreatePassengerUseCase createPassengerUseCase;
final GetPassengerByIdUseCase getPassengerByIdUseCase;
final GetUserByIdUseCase getUserByIdUseCase;
var passengerList = <PassengerModel>[].obs;
var userData = Rxn<UserData>();
var isLoading = false.obs;
ProfilController({required this.createPassengerUseCase, required this.getPassengerByIdUseCase});
ProfilController({
required this.createPassengerUseCase,
required this.getPassengerByIdUseCase,
required this.getUserByIdUseCase,
});
@override
void onInit() {
super.onInit();
_loadProfile();
}
Future<void> _loadProfile() async {
isLoading.value = true;
try {
final cached = await PreferencesService.getUserData();
String? uid = cached?.uid;
uid ??= FirebaseAuth.instance.currentUser?.uid;
if (uid == null) {
log("Tidak ditemukan user yang sedang login");
return;
}
final fresh = await getUserByIdUseCase(uid);
userData.value = fresh;
await PreferencesService.saveUserData(fresh);
} catch (e) {
log("Error fetching profile: $e");
} finally {
isLoading.value = false;
}
}
Future<void> addPassenger({
required String userId,

View File

@ -40,10 +40,8 @@ class _InputFormState extends State<InputForm> {
controller: widget.controller,
validator: widget.validator,
keyboardType: widget.textInputType,
inputFormatters: widget.inputFormatters ??
<TextInputFormatter>[
FilteringTextInputFormatter.singleLineFormatter
],
inputFormatters:
widget.inputFormatters ?? <TextInputFormatter>[FilteringTextInputFormatter.singleLineFormatter],
decoration: InputDecoration(
hintText: widget.hintText,
hintStyle: TextStyle(
@ -69,8 +67,8 @@ class _InputFormState extends State<InputForm> {
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(10.r),
borderSide: BorderSide(
width: 1.w,
color: GrayColors.gray200,
width: 2.w,
color: PrimaryColors.primary800,
),
),
border: OutlineInputBorder(

View File

@ -55,24 +55,14 @@ class _InputPasswordState extends State<InputPassword> {
letterSpacing: 1.w,
),
prefixIcon: Padding(
padding: EdgeInsets.symmetric(
vertical: 14.h,
horizontal: 13.w,
),
child: SvgPicture.asset(
widget.svgIconPath,
color: GrayColors.gray500,
),
padding: EdgeInsets.symmetric(vertical: 14.h, horizontal: 13.w),
child: SvgPicture.asset(widget.svgIconPath, color: GrayColors.gray500),
),
suffixIcon: Padding(
padding: EdgeInsets.symmetric(
horizontal: 16.w,
),
padding: EdgeInsets.symmetric(horizontal: 16.w),
child: IconButton(
icon: Icon(
_isObscure
? Icons.visibility_off_outlined
: Icons.visibility_outlined,
_isObscure ? Icons.visibility_off_outlined : Icons.visibility_outlined,
color: GrayColors.gray500,
),
onPressed: () {
@ -84,24 +74,15 @@ class _InputPasswordState extends State<InputPassword> {
),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(10.r),
borderSide: BorderSide(
width: 1.w,
color: GrayColors.gray200,
),
borderSide: BorderSide(width: 1.w, color: GrayColors.gray200),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(10.r),
borderSide: BorderSide(
width: 1.w,
color: GrayColors.gray200,
),
borderSide: BorderSide(width: 2.w, color: PrimaryColors.primary800),
),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(10.r),
borderSide: BorderSide(
width: 1.w,
color: GrayColors.gray200,
),
borderSide: BorderSide(width: 1.w, color: GrayColors.gray200),
),
),
),

View File

@ -0,0 +1,37 @@
import 'package:e_porter/_core/constants/colors.dart';
import 'package:e_porter/_core/constants/typography.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
class HeaderInformation extends StatelessWidget {
final String title;
const HeaderInformation({
Key? key,
required this.title,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Row(
children: [
Icon(
Icons.info_outline_rounded,
color: GrayColors.gray500,
size: 24.sp,
),
Expanded(
child: Padding(
padding: EdgeInsets.only(left: 16.w),
child: TypographyStyles.caption(
title,
color: GrayColors.gray500,
maxlines: 5,
fontWeight: FontWeight.w400,
),
),
)
],
);
}
}

View File

@ -0,0 +1,106 @@
import 'package:e_porter/_core/component/appbar/appbar_component.dart';
import 'package:e_porter/_core/component/button/button_fill.dart';
import 'package:e_porter/_core/component/card/custome_shadow_cotainner.dart';
import 'package:e_porter/_core/constants/colors.dart';
import 'package:e_porter/_core/constants/typography.dart';
import 'package:e_porter/_core/validators/validators.dart';
import 'package:e_porter/presentation/screens/auth/component/Input_password.dart';
import 'package:e_porter/presentation/screens/profile/component/header_information.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
class ChangePasswordScreen extends StatefulWidget {
const ChangePasswordScreen({super.key});
@override
State<ChangePasswordScreen> createState() => _ChangePasswordScreenState();
}
class _ChangePasswordScreenState extends State<ChangePasswordScreen> {
final _formKey = GlobalKey<FormState>();
final _oldPassword = TextEditingController();
final _newPassword = TextEditingController();
final _confirmPassword = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: GrayColors.gray50,
appBar: DefaultAppbarComponent(
title: 'Ganti Kata Sandi',
textColor: Colors.white,
backgroundColors: PrimaryColors.primary800,
onTab: () {
Get.back();
},
),
body: SafeArea(
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 20.h),
child: SingleChildScrollView(
child: Form(
key: _formKey,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
HeaderInformation(
title:
'Apakah anda yakin ingin mengganti kata sandi? Silahkan masukkan kata sandi lama anda dan kata sandi baru anda',
),
SizedBox(height: 32.h),
textTitle(title: 'Password Lama'),
SizedBox(height: 16.h),
InputPassword(
controller: _oldPassword,
hintText: '••••••••••',
svgIconPath: 'assets/icons/ic_padlock.svg',
validator: Validators.validatorPassword,
),
SizedBox(height: 20.h),
textTitle(title: 'Password Baru'),
SizedBox(height: 16.h),
InputPassword(
controller: _newPassword,
hintText: '••••••••••',
svgIconPath: 'assets/icons/ic_padlock.svg',
validator: Validators.validatorPassword,
),
SizedBox(height: 20.h),
textTitle(title: 'Konfirmasi Password'),
SizedBox(height: 16.h),
InputPassword(
controller: _confirmPassword,
hintText: '••••••••••',
svgIconPath: 'assets/icons/ic_padlock.svg',
validator: Validators.validatorPassword,
),
],
),
),
),
),
),
bottomNavigationBar: CustomeShadowCotainner(
child: ButtonFill(
text: 'Simpan',
textColor: Colors.white,
onTap: () {
if (_formKey.currentState!.validate()) {}
},
),
),
);
}
Widget textTitle({required String title}) {
return Padding(
padding: EdgeInsets.symmetric(horizontal: 8.w),
child: TypographyStyles.body(
title,
color: GrayColors.gray800,
fontWeight: FontWeight.w500,
),
);
}
}

View File

@ -3,6 +3,9 @@ import 'package:e_porter/_core/component/button/button_outline.dart';
import 'package:e_porter/_core/component/card/custome_shadow_cotainner.dart';
import 'package:e_porter/_core/constants/colors.dart';
import 'package:e_porter/_core/constants/typography.dart';
import 'package:e_porter/domain/models/user_entity.dart';
import 'package:e_porter/presentation/controllers/profil_controller.dart';
import 'package:e_porter/presentation/screens/profile/component/header_information.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
@ -15,6 +18,8 @@ class InformationUsersScreen extends StatefulWidget {
}
class _InformationUsersScreenState extends State<InformationUsersScreen> {
final ProfilController _profilController = Get.find<ProfilController>();
@override
Widget build(BuildContext context) {
return Scaffold(
@ -27,22 +32,30 @@ class _InformationUsersScreenState extends State<InformationUsersScreen> {
Get.back();
},
),
body: SafeArea(
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 20.h),
child: SingleChildScrollView(
child: Form(
child: Column(
children: [
_buildHeaderInformation(),
_buildCardMain(),
_buildCardSecondary(),
],
body: Obx(() {
final fetchData = _profilController.userData.value;
if (fetchData == null) {
return Center(child: CircularProgressIndicator(color: PrimaryColors.primary800));
}
return SafeArea(
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 20.h),
child: SingleChildScrollView(
child: Form(
child: Column(
children: [
HeaderInformation(
title:
'Semua informasi mengenai data diri Anda, akan ditampilkan di halaman ini. Lengkapi data diri anda untuk menikmati semua layanan E-Porter'),
_buildCardMain(fetchData),
_buildCardSecondary(fetchData),
],
),
),
),
),
),
),
);
}),
bottomNavigationBar: CustomeShadowCotainner(
child: ButtonOutline(
text: 'Hapus Akun',
@ -54,68 +67,46 @@ class _InformationUsersScreenState extends State<InformationUsersScreen> {
);
}
Widget _buildHeaderInformation() {
return Row(
children: [
Icon(
Icons.info_outline_rounded,
color: GrayColors.gray500,
size: 24.sp,
),
Expanded(
child: Padding(
padding: EdgeInsets.only(left: 16.w),
child: TypographyStyles.caption(
'Semua informasi mengenai data diri Anda, akan ditampilkan di halaman ini. Lengkapi data diri anda untuk menikmati semua layanan E-Porter',
color: GrayColors.gray500,
maxlines: 5,
fontWeight: FontWeight.w400,
),
),
)
],
);
}
Widget _buildCardMain() {
Widget _buildCardMain(UserData userData) {
return Padding(
padding: EdgeInsets.only(top: 32.h),
child: CustomeShadowCotainner(
child: Column(
children: [
itemWithButton(label: 'Nomor Telepon', value: 'value'),
itemWithButton(label: 'Nomor Telepon', value: userData.phone ?? '-'),
SizedBox(height: 24.h),
itemWithButton(label: 'Email', value: 'ahmadzaqi98mmmmmm@gmail.com'),
itemWithButton(label: 'Email', value: userData.email ?? '-'),
SizedBox(height: 24.h),
itemDoubleWithButton(label1: 'Tipe ID', value2: 'value', label2: 'No ID', value1: 'value'),
itemDoubleWithButton(
label1: 'Tipe ID', value1: userData.tipeId ?? '-', label2: 'No ID', value2: userData.noId ?? '-'),
],
),
),
);
}
Widget _buildCardSecondary() {
Widget _buildCardSecondary(UserData userData) {
return Padding(
padding: EdgeInsets.only(top: 20.h),
child: CustomeShadowCotainner(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
itemWithButton(label: 'Nama Lengkap', value: 'Ahmad Zaqi', isDivider: false),
itemWithButton(label: 'Nama Lengkap', value: userData.name ?? '-', isDivider: false),
SizedBox(height: 24.h),
Row(
children: [
infoDoubleItem(label: 'Jenis Kelamin', value: 'value'),
infoDoubleItem(label: 'Jenis Kelamin', value: userData.gender ?? '-'),
SizedBox(width: 20.w),
infoDoubleItem(label: 'Tanggal Lahir', value: 'value'),
infoDoubleItem(label: 'Tanggal Lahir', value: userData.birthDate ?? '-'),
],
),
SizedBox(height: 24.h),
infoDoubleItem(label: 'Alamat', value: 'value'),
infoDoubleItem(label: 'Alamat', value: userData.address ?? '-'),
SizedBox(height: 24.h),
infoDoubleItem(label: 'Kota / Kabupaten', value: 'value'),
infoDoubleItem(label: 'Kota / Kabupaten', value: userData.city ?? '-'),
SizedBox(height: 24.h),
infoDoubleItem(label: 'Pekerjaan', value: 'value')
infoDoubleItem(label: 'Pekerjaan', value: userData.work ?? '-'),
],
),
),

View File

@ -96,7 +96,9 @@ class _ProfileScreenState extends State<ProfileScreen> {
ProfileMenu(
label: 'Ganti Kata Sandi',
svgIcon: 'assets/icons/ic_lock.svg',
onTap: () {},
onTap: () {
Get.toNamed(Routes.CHANGEPASSWORD);
},
),
Padding(
padding: EdgeInsets.symmetric(vertical: 20.h),

View File

@ -34,6 +34,7 @@ import 'package:e_porter/presentation/screens/home/pages/ticket_booking_step4_sc
import 'package:e_porter/presentation/screens/home/pages/upload_file_screen.dart';
import 'package:e_porter/presentation/screens/navigation/main_navigation.dart';
import 'package:e_porter/presentation/screens/onboarding/onboarding_screen.dart';
import 'package:e_porter/presentation/screens/profile/pages/change_password_screen.dart';
import 'package:e_porter/presentation/screens/profile/pages/information_users_screen.dart';
import 'package:e_porter/presentation/screens/profile/pages/profile_screen.dart';
import 'package:e_porter/presentation/screens/profile/pages/add_passenger_screen.dart';
@ -197,22 +198,30 @@ class AppRoutes {
GetPage(
name: Routes.INFORMATIONS,
page: () => InformationUsersScreen(),
binding: ProfilBinding(),
),
GetPage(
name: Routes.CHANGEPASSWORD,
page: () => ChangePasswordScreen(),
),
];
}
class Routes {
static const NAVBAR = '/navigation';
// Auth
static const SPLASH = '/splash';
static const ONBOARDING = '/onboarding';
static const LOGIN = '/login';
static const VERIFICATION = '/verification';
static const HOME = '/home';
static const BOARDINGPASS = '/boarding_pass';
static const PROFILE = '/profile';
static const REGISTER = '/register';
static const FORGETPASSWORD = '/forget_password';
static const VERIFICATION = '/verification';
static const STATESUCCES = '/state_succes';
// Navbar
static const NAVBAR = '/navigation';
// Home
static const HOME = '/home';
static const OURSERVICE = '/our_service';
static const BOOKINGTICKETS = '/booking_tickets';
static const SEARCHFLIGHT = '/search_flight';
@ -224,6 +233,9 @@ class Routes {
static const CHOOSECHAIR = '/choose_chair';
static const PAYMENT = '/payment';
static const UPLOADFILE = '/upload_file';
// Boarding Pass
static const BOARDINGPASS = '/boarding_pass';
static const TRANSACTIONHISTORY = '/transaction_history';
static const DETAILTICKET = '/detail_ticket';
static const PRINTBOARDINGPASS = '/print_boarding_pass';
@ -232,6 +244,9 @@ class Routes {
static const HISTORYPORTER = '/history_porter';
static const DETAILHISTORYPORTER = '/detail_history_porter';
// Profile
static const PROFILE = '/profile';
static const ADDPASSENGER = '/add_passenger';
static const INFORMATIONS = '/informations';
static const CHANGEPASSWORD = '/change_password';
}