Feat: update progress slicing design

This commit is contained in:
orangdeso 2025-03-02 05:24:09 +07:00
parent bf54344bdd
commit ea005fba9c
58 changed files with 1040 additions and 138 deletions

View File

@ -332,7 +332,7 @@
"languageVersion": "3.4"
}
],
"generated": "2025-02-22T08:35:03.059143Z",
"generated": "2025-02-28T02:58:44.585666Z",
"generator": "pub",
"generatorVersion": "3.5.0",
"flutterRoot": "file:///D:/Flutter/flutter_sdk/flutter_3.24.0",

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.2 KiB

View File

@ -0,0 +1,3 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M30.6667 10.3333V21.6666C30.6667 23.688 29.022 25.3333 27 25.3333H21C19.9487 25.3333 19.0013 24.886 18.332 24.174C17.664 24.886 16.718 25.3333 15.6667 25.3333H5.00001C2.97801 25.3333 1.33334 23.688 1.33334 21.6666V10.3333C1.33334 8.31196 2.97801 6.66663 5.00001 6.66663H15.6667C16.718 6.66663 17.664 7.11396 18.332 7.82596C19.0013 7.11396 19.9487 6.66663 21 6.66663H27C29.022 6.66663 30.6667 8.31196 30.6667 10.3333ZM27.3333 17.6666C27.3333 17.1146 26.886 16.6666 26.3333 16.6666H23C22.4473 16.6666 22 17.1146 22 17.6666C22 18.2186 22.4473 18.6666 23 18.6666H26.3333C26.886 18.6666 27.3333 18.2186 27.3333 17.6666ZM14 11C14 10.448 13.5527 9.99996 13 9.99996H5.66668C5.11401 9.99996 4.66668 10.448 4.66668 11C4.66668 11.552 5.11401 12 5.66668 12H13C13.5527 12 14 11.552 14 11ZM12 15C12 14.448 11.5527 14 11 14H5.66668C5.11401 14 4.66668 14.448 4.66668 15C4.66668 15.552 5.11401 16 5.66668 16H11C11.5527 16 12 15.552 12 15ZM27.3333 21C27.3333 20.448 26.886 20 26.3333 20H23C22.4473 20 22 20.448 22 21C22 21.552 22.4473 22 23 22H26.3333C26.886 22 27.3333 21.552 27.3333 21ZM19.3333 11.6666V11C19.3333 10.448 18.886 9.99996 18.3333 9.99996C17.7807 9.99996 17.3333 10.448 17.3333 11V11.6666C17.3333 12.2186 17.7807 12.6666 18.3333 12.6666C18.886 12.6666 19.3333 12.2186 19.3333 11.6666ZM19.3333 16.3333V15.6666C19.3333 15.1146 18.886 14.6666 18.3333 14.6666C17.7807 14.6666 17.3333 15.1146 17.3333 15.6666V16.3333C17.3333 16.8853 17.7807 17.3333 18.3333 17.3333C18.886 17.3333 19.3333 16.8853 19.3333 16.3333ZM19.3333 21V20.3333C19.3333 19.7813 18.886 19.3333 18.3333 19.3333C17.7807 19.3333 17.3333 19.7813 17.3333 20.3333V21C17.3333 21.552 17.7807 22 18.3333 22C18.886 22 19.3333 21.552 19.3333 21ZM27.3333 13.3333V11.3333C27.3333 10.5966 26.7367 9.99996 26 9.99996H23.3333C22.5967 9.99996 22 10.5966 22 11.3333V13.3333C22 14.07 22.5967 14.6666 23.3333 14.6666H26C26.7367 14.6666 27.3333 14.07 27.3333 13.3333Z" fill="#004B87"/>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

3
assets/icons/ic_home.svg Normal file
View File

@ -0,0 +1,3 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M15.9674 2.66662C15.7542 2.6739 15.5489 2.74918 15.3815 2.88147L5.90625 10.3463C4.70365 11.2941 4 12.7423 4 14.2734V27C4 27.909 4.7576 28.6666 5.66667 28.6666H12.3333C13.2424 28.6666 14 27.909 14 27V20.3333C14 20.1366 14.1366 20 14.3333 20H17.6667C17.8634 20 18 20.1366 18 20.3333V27C18 27.909 18.7576 28.6666 19.6667 28.6666H26.3333C27.2424 28.6666 28 27.909 28 27V14.2734C28 12.7423 27.2963 11.2941 26.0938 10.3463L16.6185 2.88147C16.4336 2.73538 16.203 2.65929 15.9674 2.66662ZM16 4.94006L24.8568 11.9179C25.5795 12.4875 26 13.3538 26 14.2734V26.6666H20V20.3333C20 19.0567 18.9433 18 17.6667 18H14.3333C13.0567 18 12 19.0567 12 20.3333V26.6666H6V14.2734C6 13.3538 6.42049 12.4875 7.14323 11.9179L16 4.94006Z" fill="#9CA3AF"/>
</svg>

After

Width:  |  Height:  |  Size: 841 B

View File

@ -0,0 +1,3 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M26.3333 28.6666H20.3333C19.4127 28.6666 18.6667 27.9206 18.6667 27V21C18.6667 20.2633 18.07 19.6666 17.3333 19.6666H14.6667C13.93 19.6666 13.3333 20.2633 13.3333 21V27C13.3333 27.9206 12.5873 28.6666 11.6667 28.6666H5.66667C4.746 28.6666 4 27.9206 4 27V14.2753C4 12.7426 4.70267 11.2946 5.906 10.3466L15.3807 2.88063C15.744 2.59529 16.256 2.59529 16.6187 2.88063L26.0947 10.3466C27.298 11.2946 28 12.742 28 14.274V27C28 27.9206 27.254 28.6666 26.3333 28.6666Z" fill="#004B87"/>
</svg>

After

Width:  |  Height:  |  Size: 591 B

View File

@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M6.25 2.5C5.0095 2.5 4 3.5095 4 4.75V16.5H3.25C2.836 16.5 2.5 16.8355 2.5 17.25V18.25C2.5 20.042 3.958 21.5 5.75 21.5H12.7373C12.4928 21.031 12.3057 20.5275 12.1807 20H5.75C4.785 20 4 19.215 4 18.25V18H12.0254C12.0649 17.4805 12.1629 16.978 12.3174 16.5H5.5V4.75C5.5 4.3365 5.8365 4 6.25 4H17.75C18.1635 4 18.5 4.3365 18.5 4.75V12C19.017 12 19.5175 12.0667 20 12.1807V4.75C20 3.5095 18.9905 2.5 17.75 2.5H6.25ZM8.25 6.5C8.05109 6.5 7.86032 6.57902 7.71967 6.71967C7.57902 6.86032 7.5 7.05109 7.5 7.25C7.5 7.44891 7.57902 7.63968 7.71967 7.78033C7.86032 7.92098 8.05109 8 8.25 8C8.44891 8 8.63968 7.92098 8.78033 7.78033C8.92098 7.63968 9 7.44891 9 7.25C9 7.05109 8.92098 6.86032 8.78033 6.71967C8.63968 6.57902 8.44891 6.5 8.25 6.5ZM10.75 6.5C10.6506 6.49859 10.5519 6.51696 10.4597 6.55402C10.3675 6.59108 10.2836 6.6461 10.2128 6.71588C10.142 6.78566 10.0858 6.86882 10.0474 6.96051C10.0091 7.0522 9.98932 7.15061 9.98932 7.25C9.98932 7.34939 10.0091 7.4478 10.0474 7.53949C10.0858 7.63118 10.142 7.71434 10.2128 7.78412C10.2836 7.8539 10.3675 7.90892 10.4597 7.94598C10.5519 7.98304 10.6506 8.00141 10.75 8H15.75C15.8494 8.00141 15.9481 7.98304 16.0403 7.94598C16.1325 7.90892 16.2164 7.8539 16.2872 7.78412C16.358 7.71434 16.4142 7.63118 16.4526 7.53949C16.4909 7.4478 16.5107 7.34939 16.5107 7.25C16.5107 7.15061 16.4909 7.0522 16.4526 6.96051C16.4142 6.86882 16.358 6.78566 16.2872 6.71588C16.2164 6.6461 16.1325 6.59108 16.0403 6.55402C15.9481 6.51696 15.8494 6.49859 15.75 6.5H10.75ZM8.25 9.5C8.05109 9.5 7.86032 9.57902 7.71967 9.71967C7.57902 9.86032 7.5 10.0511 7.5 10.25C7.5 10.4489 7.57902 10.6397 7.71967 10.7803C7.86032 10.921 8.05109 11 8.25 11C8.44891 11 8.63968 10.921 8.78033 10.7803C8.92098 10.6397 9 10.4489 9 10.25C9 10.0511 8.92098 9.86032 8.78033 9.71967C8.63968 9.57902 8.44891 9.5 8.25 9.5ZM10.75 9.5C10.6506 9.49859 10.5519 9.51696 10.4597 9.55402C10.3675 9.59108 10.2836 9.6461 10.2128 9.71588C10.142 9.78566 10.0858 9.86882 10.0474 9.96051C10.0091 10.0522 9.98932 10.1506 9.98932 10.25C9.98932 10.3494 10.0091 10.4478 10.0474 10.5395C10.0858 10.6312 10.142 10.7143 10.2128 10.7841C10.2836 10.8539 10.3675 10.9089 10.4597 10.946C10.5519 10.983 10.6506 11.0014 10.75 11H15.75C15.8494 11.0014 15.9481 10.983 16.0403 10.946C16.1325 10.9089 16.2164 10.8539 16.2872 10.7841C16.358 10.7143 16.4142 10.6312 16.4526 10.5395C16.4909 10.4478 16.5107 10.3494 16.5107 10.25C16.5107 10.1506 16.4909 10.0522 16.4526 9.96051C16.4142 9.86882 16.358 9.78566 16.2872 9.71588C16.2164 9.6461 16.1325 9.59108 16.0403 9.55402C15.9481 9.51696 15.8494 9.49859 15.75 9.5H10.75ZM8.25 12.5C8.05109 12.5 7.86032 12.579 7.71967 12.7197C7.57902 12.8603 7.5 13.0511 7.5 13.25C7.5 13.4489 7.57902 13.6397 7.71967 13.7803C7.86032 13.921 8.05109 14 8.25 14C8.44891 14 8.63968 13.921 8.78033 13.7803C8.92098 13.6397 9 13.4489 9 13.25C9 13.0511 8.92098 12.8603 8.78033 12.7197C8.63968 12.579 8.44891 12.5 8.25 12.5ZM10.75 12.5C10.336 12.5 10 12.8355 10 13.25C10 13.6645 10.336 14 10.75 14H13.8164C14.4144 13.3775 15.133 12.8719 15.9375 12.5264C15.877 12.5109 15.815 12.5 15.75 12.5H10.75ZM18.5 13C15.4625 13 13 15.4625 13 18.5C13 21.5375 15.4625 24 18.5 24C21.5375 24 24 21.5375 24 18.5C24 15.4625 21.5375 13 18.5 13ZM16.5 15H20.5C20.7765 15 21 15.224 21 15.5C21 15.776 20.7765 16 20.5 16V17C20.5 17.6 20.2286 18.133 19.8086 18.5C20.2286 18.867 20.5 19.4 20.5 20V21C20.7765 21 21 21.224 21 21.5C21 21.776 20.7765 22 20.5 22H20H17H16.5C16.2235 22 16 21.776 16 21.5C16 21.224 16.2235 21 16.5 21V20C16.5 19.4 16.7714 18.867 17.1914 18.5C16.7714 18.133 16.5 17.6 16.5 17V16C16.2235 16 16 15.776 16 15.5C16 15.224 16.2235 15 16.5 15ZM17.5 16V17H19.5V16H17.5ZM18.5 19C17.9485 19 17.5 19.4485 17.5 20V20.8057L18.3418 20.5254C18.4443 20.4914 18.5557 20.4914 18.6582 20.5254L19.5 20.8057V20C19.5 19.4485 19.0515 19 18.5 19Z" fill="#004B87"/>
</svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@ -0,0 +1,3 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M16 2.66663C12.3299 2.66663 9.33333 5.66324 9.33333 9.33329C9.33333 13.0033 12.3299 16 16 16C19.67 16 22.6667 13.0033 22.6667 9.33329C22.6667 5.66324 19.67 2.66663 16 2.66663ZM16 4.66663C18.5892 4.66663 20.6667 6.74412 20.6667 9.33329C20.6667 11.9225 18.5892 14 16 14C13.4108 14 11.3333 11.9225 11.3333 9.33329C11.3333 6.74412 13.4108 4.66663 16 4.66663ZM7.98567 18.6666C6.53246 18.6666 5.33333 19.8658 5.33333 21.319V22.3333C5.33333 24.7361 6.85284 26.5948 8.87109 27.7083C10.8893 28.8218 13.4454 29.3333 16 29.3333C18.5546 29.3333 21.1107 28.8218 23.1289 27.7083C24.8498 26.7589 26.1449 25.2417 26.5078 23.3333H26.668V21.319C26.668 19.8658 25.4675 18.6666 24.0143 18.6666H7.98567ZM7.98567 20.6666H24.0143C24.3864 20.6666 24.668 20.9468 24.668 21.319V21.3333H24.6667V22.3333C24.6667 23.9305 23.7695 25.0718 22.1628 25.9583C20.556 26.8448 18.2787 27.3333 16 27.3333C13.7213 27.3333 11.444 26.8448 9.83723 25.9583C8.23048 25.0718 7.33333 23.9305 7.33333 22.3333V21.319C7.33333 20.9468 7.61355 20.6666 7.98567 20.6666Z" fill="#9CA3AF"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,3 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M16 2.66663C14.2319 2.66663 12.5362 3.369 11.2859 4.61925C10.0357 5.86949 9.33333 7.56518 9.33333 9.33329C9.33333 11.1014 10.0357 12.7971 11.2859 14.0473C12.5362 15.2976 14.2319 16 16 16C17.7681 16 19.4638 15.2976 20.714 14.0473C21.9643 12.7971 22.6667 11.1014 22.6667 9.33329C22.6667 7.56518 21.9643 5.86949 20.714 4.61925C19.4638 3.369 17.7681 2.66663 16 2.66663ZM24.014 18.6666H7.986C6.52333 18.6666 5.33333 19.8566 5.33333 21.3193V22.3333C5.33333 24.5413 6.59 26.4506 8.87133 27.7086C10.7693 28.7566 13.3013 29.3333 16 29.3333C21.1373 29.3333 26.6667 27.1426 26.6667 22.3333V21.3193C26.6667 19.8566 25.4767 18.6666 24.014 18.6666Z" fill="#004B87"/>
</svg>

After

Width:  |  Height:  |  Size: 765 B

View File

@ -1 +1 @@
.env  asset.envassets/icons/ic_account.svg  assetassets/icons/ic_account.svgassets/icons/ic_calendar.svg  assetassets/icons/ic_calendar.svg!assets/icons/ic_data_transfer.svg  asset!assets/icons/ic_data_transfer.svgassets/icons/ic_edit.svg  assetassets/icons/ic_edit.svgassets/icons/ic_email.svg  assetassets/icons/ic_email.svgassets/icons/ic_flight_seat.svg  assetassets/icons/ic_flight_seat.svg&assets/icons/ic_flight_seat_filled.svg  asset&assets/icons/ic_flight_seat_filled.svgassets/icons/ic_left.svg  assetassets/icons/ic_left.svgassets/icons/ic_less_than.svg  assetassets/icons/ic_less_than.svgassets/icons/ic_more _than.svg  assetassets/icons/ic_more _than.svg assets/icons/ic_notification.svg  asset assets/icons/ic_notification.svgassets/icons/ic_padlock.svg  assetassets/icons/ic_padlock.svgassets/icons/ic_passenger.svg  assetassets/icons/ic_passenger.svg assets/icons/ic_plane_filled.svg  asset assets/icons/ic_plane_filled.svgassets/icons/ic_plane_left.svg  assetassets/icons/ic_plane_left.svgassets/icons/ic_plane_right.svg  .env  assetassets/icons/ic_flight_seat.svg&assets/icons/ic_flight_seat_filled.svg  .svgassets/icons/ic_right.svg  assetassets/icons/ic_right.svgassets/icons/ic_search.svg  assetassets/icons/ic_search.svgassets/icons/ic_sent.svg  assetassets/icons/ic_sent.svgassets/images/banner.png  assetassets/images/banner.pngassets/images/citilink.svg  assetassets/images/citilink.svg!assets/images/divider_custome.svg  asset!assets/images/divider_custome.svg"assets/images/ilustrasi_flight.svg  asset"assets/images/ilustrasi_flight.svgassets/images/ornamen.svg  assetassets/images/ornamen.svgassets/images/taxi_female.svg  assetassets/images/taxi_female.svgassets/images/taxi_homework.svg  assetassets/images/taxi_homework.svg2packages/cupertino_icons/assets/CupertinoIcons.ttf  asset2packages/cupertino_icons/assets/CupertinoIcons.ttf
.env  asset&assets/icons/ic_flight_seat_filled.svgassets/icons/ic_left.svg  asset.envassets/icons/ic_account.svg  assetassets/icons/ic_account.svg!assets/icons/ic_boarding_pass.svg  asset!assets/icons/ic_boarding_pass.svg(assets/icons/ic_boarding_pass_filled.svg  asset(assets/icons/ic_boarding_pass_filled.svgassets/icons/ic_calendar.svg  assetassets/icons/ic_calendar.svg!assets/icons/ic_data_transfer.svg  asset!assets/icons/ic_data_transfer.svgassets/icons/ic_edit.svg  assetassets/icons/ic_edit.svgassets/icons/ic_email.svg  assetassets/icons/ic_email.svgassets/icons/ic_flight_seat.svg  assetassets/icons/ic_flight_seat.svg&assets/icons/ic_flight_seat_filled.svg  asset&assets/icons/ic_flight_seat_filled.svgassets/icons/ic_home.svg  assetassets/icons/ic_home.svgassets/icons/ic_home_filled.svg  assetassets/icons/ic_home_filled.svgassets/icons/ic_left.svg  assetassets/icons/ic_left.svgassets/icons/ic_less_than.svg  assetassets/icons/ic_less_than.svgassets/icons/ic_more _than.svg  assetassets/icons/ic_more _than.svg assets/icons/ic_notification.svg  asset assets/icons/ic_notification.svg!assets/icons/ic_order_history.svg  asset!assets/icons/ic_order_history.svgassets/icons/ic_padlock.svg  assetassets/icons/ic_padlock.svgassets/icons/ic_passenger.svg  assetassets/icons/ic_passenger.svg assets/icons/ic_plane_filled.svg  asset assets/icons/ic_plane_filled.svgassets/icons/ic_plane_left.svg  assetassets/icons/ic_plane_left.svgassets/icons/ic_plane_right.svg  asset.envassets/icons/ic_account.svg  assetassets/icons/ic_flight_seat.svg&assets/icons/ic_flight_seat_filled.svg  assetassets/icons/ic_profile.svg"assets/icons/ic_profile_filled.svg  asset"assets/icons/ic_profile_filled.svgassets/icons/ic_right.svg  assetassets/icons/ic_right.svgassets/icons/ic_search.svg  assetassets/icons/ic_search.svgassets/icons/ic_sent.svg  assetassets/icons/ic_sent.svgassets/images/banner.png  assetassets/images/banner.pngassets/images/citilink.svg  assetassets/images/citilink.svg!assets/images/divider_custome.svg  asset!assets/images/divider_custome.svg"assets/images/ilustrasi_flight.svg  asset"assets/images/ilustrasi_flight.svgassets/images/ornamen.svg  assetassets/images/ornamen.svgassets/images/taxi_female.svg  assetassets/images/taxi_female.svgassets/images/taxi_homework.svg  assetassets/images/taxi_homework.svg2packages/cupertino_icons/assets/CupertinoIcons.ttf  asset2packages/cupertino_icons/assets/CupertinoIcons.ttf

View File

@ -1 +1 @@
{".env":[".env"],"assets/icons/ic_account.svg":["assets/icons/ic_account.svg"],"assets/icons/ic_calendar.svg":["assets/icons/ic_calendar.svg"],"assets/icons/ic_data_transfer.svg":["assets/icons/ic_data_transfer.svg"],"assets/icons/ic_edit.svg":["assets/icons/ic_edit.svg"],"assets/icons/ic_email.svg":["assets/icons/ic_email.svg"],"assets/icons/ic_flight_seat.svg":["assets/icons/ic_flight_seat.svg"],"assets/icons/ic_flight_seat_filled.svg":["assets/icons/ic_flight_seat_filled.svg"],"assets/icons/ic_left.svg":["assets/icons/ic_left.svg"],"assets/icons/ic_less_than.svg":["assets/icons/ic_less_than.svg"],"assets/icons/ic_more _than.svg":["assets/icons/ic_more _than.svg"],"assets/icons/ic_notification.svg":["assets/icons/ic_notification.svg"],"assets/icons/ic_padlock.svg":["assets/icons/ic_padlock.svg"],"assets/icons/ic_passenger.svg":["assets/icons/ic_passenger.svg"],"assets/icons/ic_plane_filled.svg":["assets/icons/ic_plane_filled.svg"],"assets/icons/ic_plane_left.svg":["assets/icons/ic_plane_left.svg"],"assets/icons/ic_plane_right.svg":["assets/icons/ic_plane_right.svg"],"assets/icons/ic_right.svg":["assets/icons/ic_right.svg"],"assets/icons/ic_search.svg":["assets/icons/ic_search.svg"],"assets/icons/ic_sent.svg":["assets/icons/ic_sent.svg"],"assets/images/banner.png":["assets/images/banner.png"],"assets/images/citilink.svg":["assets/images/citilink.svg"],"assets/images/divider_custome.svg":["assets/images/divider_custome.svg"],"assets/images/ilustrasi_flight.svg":["assets/images/ilustrasi_flight.svg"],"assets/images/ornamen.svg":["assets/images/ornamen.svg"],"assets/images/taxi_female.svg":["assets/images/taxi_female.svg"],"assets/images/taxi_homework.svg":["assets/images/taxi_homework.svg"],"packages/cupertino_icons/assets/CupertinoIcons.ttf":["packages/cupertino_icons/assets/CupertinoIcons.ttf"]}
{".env":[".env"],"assets/icons/ic_account.svg":["assets/icons/ic_account.svg"],"assets/icons/ic_boarding_pass.svg":["assets/icons/ic_boarding_pass.svg"],"assets/icons/ic_boarding_pass_filled.svg":["assets/icons/ic_boarding_pass_filled.svg"],"assets/icons/ic_calendar.svg":["assets/icons/ic_calendar.svg"],"assets/icons/ic_data_transfer.svg":["assets/icons/ic_data_transfer.svg"],"assets/icons/ic_edit.svg":["assets/icons/ic_edit.svg"],"assets/icons/ic_email.svg":["assets/icons/ic_email.svg"],"assets/icons/ic_flight_seat.svg":["assets/icons/ic_flight_seat.svg"],"assets/icons/ic_flight_seat_filled.svg":["assets/icons/ic_flight_seat_filled.svg"],"assets/icons/ic_home.svg":["assets/icons/ic_home.svg"],"assets/icons/ic_home_filled.svg":["assets/icons/ic_home_filled.svg"],"assets/icons/ic_left.svg":["assets/icons/ic_left.svg"],"assets/icons/ic_less_than.svg":["assets/icons/ic_less_than.svg"],"assets/icons/ic_more _than.svg":["assets/icons/ic_more _than.svg"],"assets/icons/ic_notification.svg":["assets/icons/ic_notification.svg"],"assets/icons/ic_order_history.svg":["assets/icons/ic_order_history.svg"],"assets/icons/ic_padlock.svg":["assets/icons/ic_padlock.svg"],"assets/icons/ic_passenger.svg":["assets/icons/ic_passenger.svg"],"assets/icons/ic_plane_filled.svg":["assets/icons/ic_plane_filled.svg"],"assets/icons/ic_plane_left.svg":["assets/icons/ic_plane_left.svg"],"assets/icons/ic_plane_right.svg":["assets/icons/ic_plane_right.svg"],"assets/icons/ic_profile.svg":["assets/icons/ic_profile.svg"],"assets/icons/ic_profile_filled.svg":["assets/icons/ic_profile_filled.svg"],"assets/icons/ic_right.svg":["assets/icons/ic_right.svg"],"assets/icons/ic_search.svg":["assets/icons/ic_search.svg"],"assets/icons/ic_sent.svg":["assets/icons/ic_sent.svg"],"assets/images/banner.png":["assets/images/banner.png"],"assets/images/citilink.svg":["assets/images/citilink.svg"],"assets/images/divider_custome.svg":["assets/images/divider_custome.svg"],"assets/images/ilustrasi_flight.svg":["assets/images/ilustrasi_flight.svg"],"assets/images/ornamen.svg":["assets/images/ornamen.svg"],"assets/images/taxi_female.svg":["assets/images/taxi_female.svg"],"assets/images/taxi_homework.svg":["assets/images/taxi_homework.svg"],"packages/cupertino_icons/assets/CupertinoIcons.ttf":["packages/cupertino_icons/assets/CupertinoIcons.ttf"]}

View File

@ -1 +1 @@
a98642f7ec914a49407a786c86b25205
e5a42601b737771ef8a4800cd9e66dbd

View File

@ -1 +1 @@
.env  asset.envassets/icons/ic_account.svg  assetassets/icons/ic_account.svgassets/icons/ic_calendar.svg  assetassets/icons/ic_calendar.svg!assets/icons/ic_data_transfer.svg  asset!assets/icons/ic_data_transfer.svgassets/icons/ic_edit.svg  assetassets/icons/ic_edit.svgassets/icons/ic_email.svg  assetassets/icons/ic_email.svgassets/icons/ic_flight_seat.svg  assetassets/icons/ic_flight_seat.svg&assets/icons/ic_flight_seat_filled.svg  asset&assets/icons/ic_flight_seat_filled.svgassets/icons/ic_left.svg  assetassets/icons/ic_left.svgassets/icons/ic_less_than.svg  assetassets/icons/ic_less_than.svgassets/icons/ic_more _than.svg  assetassets/icons/ic_more _than.svg assets/icons/ic_notification.svg  asset assets/icons/ic_notification.svgassets/icons/ic_padlock.svg  assetassets/icons/ic_padlock.svgassets/icons/ic_passenger.svg  assetassets/icons/ic_passenger.svg assets/icons/ic_plane_filled.svg  asset assets/icons/ic_plane_filled.svgassets/icons/ic_plane_left.svg  assetassets/icons/ic_plane_left.svgassets/icons/ic_plane_right.svg  .env  assetassets/icons/ic_flight_seat.svg&assets/icons/ic_flight_seat_filled.svg  .svgassets/icons/ic_right.svg  assetassets/icons/ic_right.svgassets/icons/ic_search.svg  assetassets/icons/ic_search.svgassets/icons/ic_sent.svg  assetassets/icons/ic_sent.svgassets/images/banner.png  assetassets/images/banner.pngassets/images/citilink.svg  assetassets/images/citilink.svg!assets/images/divider_custome.svg  asset!assets/images/divider_custome.svg"assets/images/ilustrasi_flight.svg  asset"assets/images/ilustrasi_flight.svgassets/images/ornamen.svg  assetassets/images/ornamen.svgassets/images/taxi_female.svg  assetassets/images/taxi_female.svgassets/images/taxi_homework.svg  assetassets/images/taxi_homework.svg2packages/cupertino_icons/assets/CupertinoIcons.ttf  asset2packages/cupertino_icons/assets/CupertinoIcons.ttf
.env  asset&assets/icons/ic_flight_seat_filled.svgassets/icons/ic_left.svg  asset.envassets/icons/ic_account.svg  assetassets/icons/ic_account.svg!assets/icons/ic_boarding_pass.svg  asset!assets/icons/ic_boarding_pass.svg(assets/icons/ic_boarding_pass_filled.svg  asset(assets/icons/ic_boarding_pass_filled.svgassets/icons/ic_calendar.svg  assetassets/icons/ic_calendar.svg!assets/icons/ic_data_transfer.svg  asset!assets/icons/ic_data_transfer.svgassets/icons/ic_edit.svg  assetassets/icons/ic_edit.svgassets/icons/ic_email.svg  assetassets/icons/ic_email.svgassets/icons/ic_flight_seat.svg  assetassets/icons/ic_flight_seat.svg&assets/icons/ic_flight_seat_filled.svg  asset&assets/icons/ic_flight_seat_filled.svgassets/icons/ic_home.svg  assetassets/icons/ic_home.svgassets/icons/ic_home_filled.svg  assetassets/icons/ic_home_filled.svgassets/icons/ic_left.svg  assetassets/icons/ic_left.svgassets/icons/ic_less_than.svg  assetassets/icons/ic_less_than.svgassets/icons/ic_more _than.svg  assetassets/icons/ic_more _than.svg assets/icons/ic_notification.svg  asset assets/icons/ic_notification.svg!assets/icons/ic_order_history.svg  asset!assets/icons/ic_order_history.svgassets/icons/ic_padlock.svg  assetassets/icons/ic_padlock.svgassets/icons/ic_passenger.svg  assetassets/icons/ic_passenger.svg assets/icons/ic_plane_filled.svg  asset assets/icons/ic_plane_filled.svgassets/icons/ic_plane_left.svg  assetassets/icons/ic_plane_left.svgassets/icons/ic_plane_right.svg  asset.envassets/icons/ic_account.svg  assetassets/icons/ic_flight_seat.svg&assets/icons/ic_flight_seat_filled.svg  assetassets/icons/ic_profile.svg"assets/icons/ic_profile_filled.svg  asset"assets/icons/ic_profile_filled.svgassets/icons/ic_right.svg  assetassets/icons/ic_right.svgassets/icons/ic_search.svg  assetassets/icons/ic_search.svgassets/icons/ic_sent.svg  assetassets/icons/ic_sent.svgassets/images/banner.png  assetassets/images/banner.pngassets/images/citilink.svg  assetassets/images/citilink.svg!assets/images/divider_custome.svg  asset!assets/images/divider_custome.svg"assets/images/ilustrasi_flight.svg  asset"assets/images/ilustrasi_flight.svgassets/images/ornamen.svg  assetassets/images/ornamen.svgassets/images/taxi_female.svg  assetassets/images/taxi_female.svgassets/images/taxi_homework.svg  assetassets/images/taxi_homework.svg2packages/cupertino_icons/assets/CupertinoIcons.ttf  asset2packages/cupertino_icons/assets/CupertinoIcons.ttf

View File

@ -1 +1 @@
{".env":[".env"],"assets/icons/ic_account.svg":["assets/icons/ic_account.svg"],"assets/icons/ic_calendar.svg":["assets/icons/ic_calendar.svg"],"assets/icons/ic_data_transfer.svg":["assets/icons/ic_data_transfer.svg"],"assets/icons/ic_edit.svg":["assets/icons/ic_edit.svg"],"assets/icons/ic_email.svg":["assets/icons/ic_email.svg"],"assets/icons/ic_flight_seat.svg":["assets/icons/ic_flight_seat.svg"],"assets/icons/ic_flight_seat_filled.svg":["assets/icons/ic_flight_seat_filled.svg"],"assets/icons/ic_left.svg":["assets/icons/ic_left.svg"],"assets/icons/ic_less_than.svg":["assets/icons/ic_less_than.svg"],"assets/icons/ic_more _than.svg":["assets/icons/ic_more _than.svg"],"assets/icons/ic_notification.svg":["assets/icons/ic_notification.svg"],"assets/icons/ic_padlock.svg":["assets/icons/ic_padlock.svg"],"assets/icons/ic_passenger.svg":["assets/icons/ic_passenger.svg"],"assets/icons/ic_plane_filled.svg":["assets/icons/ic_plane_filled.svg"],"assets/icons/ic_plane_left.svg":["assets/icons/ic_plane_left.svg"],"assets/icons/ic_plane_right.svg":["assets/icons/ic_plane_right.svg"],"assets/icons/ic_right.svg":["assets/icons/ic_right.svg"],"assets/icons/ic_search.svg":["assets/icons/ic_search.svg"],"assets/icons/ic_sent.svg":["assets/icons/ic_sent.svg"],"assets/images/banner.png":["assets/images/banner.png"],"assets/images/citilink.svg":["assets/images/citilink.svg"],"assets/images/divider_custome.svg":["assets/images/divider_custome.svg"],"assets/images/ilustrasi_flight.svg":["assets/images/ilustrasi_flight.svg"],"assets/images/ornamen.svg":["assets/images/ornamen.svg"],"assets/images/taxi_female.svg":["assets/images/taxi_female.svg"],"assets/images/taxi_homework.svg":["assets/images/taxi_homework.svg"],"packages/cupertino_icons/assets/CupertinoIcons.ttf":["packages/cupertino_icons/assets/CupertinoIcons.ttf"]}
{".env":[".env"],"assets/icons/ic_account.svg":["assets/icons/ic_account.svg"],"assets/icons/ic_boarding_pass.svg":["assets/icons/ic_boarding_pass.svg"],"assets/icons/ic_boarding_pass_filled.svg":["assets/icons/ic_boarding_pass_filled.svg"],"assets/icons/ic_calendar.svg":["assets/icons/ic_calendar.svg"],"assets/icons/ic_data_transfer.svg":["assets/icons/ic_data_transfer.svg"],"assets/icons/ic_edit.svg":["assets/icons/ic_edit.svg"],"assets/icons/ic_email.svg":["assets/icons/ic_email.svg"],"assets/icons/ic_flight_seat.svg":["assets/icons/ic_flight_seat.svg"],"assets/icons/ic_flight_seat_filled.svg":["assets/icons/ic_flight_seat_filled.svg"],"assets/icons/ic_home.svg":["assets/icons/ic_home.svg"],"assets/icons/ic_home_filled.svg":["assets/icons/ic_home_filled.svg"],"assets/icons/ic_left.svg":["assets/icons/ic_left.svg"],"assets/icons/ic_less_than.svg":["assets/icons/ic_less_than.svg"],"assets/icons/ic_more _than.svg":["assets/icons/ic_more _than.svg"],"assets/icons/ic_notification.svg":["assets/icons/ic_notification.svg"],"assets/icons/ic_order_history.svg":["assets/icons/ic_order_history.svg"],"assets/icons/ic_padlock.svg":["assets/icons/ic_padlock.svg"],"assets/icons/ic_passenger.svg":["assets/icons/ic_passenger.svg"],"assets/icons/ic_plane_filled.svg":["assets/icons/ic_plane_filled.svg"],"assets/icons/ic_plane_left.svg":["assets/icons/ic_plane_left.svg"],"assets/icons/ic_plane_right.svg":["assets/icons/ic_plane_right.svg"],"assets/icons/ic_profile.svg":["assets/icons/ic_profile.svg"],"assets/icons/ic_profile_filled.svg":["assets/icons/ic_profile_filled.svg"],"assets/icons/ic_right.svg":["assets/icons/ic_right.svg"],"assets/icons/ic_search.svg":["assets/icons/ic_search.svg"],"assets/icons/ic_sent.svg":["assets/icons/ic_sent.svg"],"assets/images/banner.png":["assets/images/banner.png"],"assets/images/citilink.svg":["assets/images/citilink.svg"],"assets/images/divider_custome.svg":["assets/images/divider_custome.svg"],"assets/images/ilustrasi_flight.svg":["assets/images/ilustrasi_flight.svg"],"assets/images/ornamen.svg":["assets/images/ornamen.svg"],"assets/images/taxi_female.svg":["assets/images/taxi_female.svg"],"assets/images/taxi_homework.svg":["assets/images/taxi_homework.svg"],"packages/cupertino_icons/assets/CupertinoIcons.ttf":["packages/cupertino_icons/assets/CupertinoIcons.ttf"]}

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
#Sat Feb 22 11:14:48 WIB 2025
#Fri Feb 28 10:15:11 WIB 2025
com.example.e_porter.app-main-26\:/drawable-v21/launch_background.xml=D\:\\Flutter\\Flutter Project\\e_porter\\build\\app\\intermediates\\merged_res\\debug\\drawable-v21_launch_background.xml.flat
com.example.e_porter.app-main-26\:/mipmap-hdpi/ic_launcher.png=D\:\\Flutter\\Flutter Project\\e_porter\\build\\app\\intermediates\\merged_res\\debug\\mipmap-hdpi_ic_launcher.png.flat
com.example.e_porter.app-main-26\:/mipmap-mdpi/ic_launcher.png=D\:\\Flutter\\Flutter Project\\e_porter\\build\\app\\intermediates\\merged_res\\debug\\mipmap-mdpi_ic_launcher.png.flat

View File

@ -1,4 +1,4 @@
#Mon Feb 24 14:49:56 WIB 2025
#Sun Mar 02 05:14:00 WIB 2025
base.0=D\:\\Flutter\\Flutter Project\\e_porter\\build\\app\\intermediates\\dex\\debug\\mergeExtDexDebug\\classes.dex
base.1=D\:\\Flutter\\Flutter Project\\e_porter\\build\\app\\intermediates\\dex\\debug\\mergeLibDexDebug\\0\\classes.dex
base.2=D\:\\Flutter\\Flutter Project\\e_porter\\build\\app\\intermediates\\dex\\debug\\mergeProjectDexDebug\\0\\classes.dex

View File

@ -4,6 +4,7 @@ import 'package:e_porter/_core/constants/typography.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:zoom_tap_animation/zoom_tap_animation.dart';
class HomeAppbarComponent extends StatelessWidget implements PreferredSizeWidget {
final String title;
@ -115,8 +116,8 @@ class DefaultAppbarComponent extends StatelessWidget implements PreferredSizeWid
}
class CustomeAppbarComponent extends StatelessWidget implements PreferredSizeWidget {
final String valueDari;
final String valueKe;
final String? valueDari;
final String? valueKe;
final String date;
final String passenger;
final Color? color;
@ -124,8 +125,8 @@ class CustomeAppbarComponent extends StatelessWidget implements PreferredSizeWid
const CustomeAppbarComponent({
Key? key,
required this.valueDari,
required this.valueKe,
this.valueDari,
this.valueKe,
required this.date,
required this.passenger,
this.color = Colors.white,
@ -147,7 +148,7 @@ class CustomeAppbarComponent extends StatelessWidget implements PreferredSizeWid
GestureDetector(
onTap: onTab,
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 16.w),
padding: EdgeInsets.only(left: 16.w),
child: SvgPicture.asset(
'assets/icons/ic_less_than.svg',
width: 14.w,
@ -163,11 +164,23 @@ class CustomeAppbarComponent extends StatelessWidget implements PreferredSizeWid
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
TypographyStyles.body(valueDari, color: color, letterSpacing: 1),
SizedBox(width: 20.w),
SvgPicture.asset('assets/icons/ic_right.svg'),
SizedBox(width: 20.w),
TypographyStyles.body(valueKe, color: color, letterSpacing: 1),
if (valueDari != null)
TypographyStyles.body(
valueDari!,
color: color,
letterSpacing: 0.2,
),
if (valueDari != null && valueKe != null) ...[
SizedBox(width: 20.w),
SvgPicture.asset('assets/icons/ic_right.svg'),
SizedBox(width: 20.w),
],
if (valueKe != null)
TypographyStyles.body(
valueKe!,
color: color,
letterSpacing: 0.2,
),
],
),
SizedBox(height: 8.h),
@ -246,3 +259,58 @@ class ProgressAppbarComponent extends StatelessWidget implements PreferredSizeWi
@override
Size get preferredSize => Size.fromHeight(kToolbarHeight + 20.h);
}
class SimpleAppbarComponent extends StatelessWidget implements PreferredSizeWidget {
final String title;
final String subTitle;
final Color? colorText;
final VoidCallback? onTab;
const SimpleAppbarComponent({
Key? key,
required this.title,
required this.subTitle,
this.colorText = GrayColors.gray800,
this.onTab,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return AppBar(
toolbarHeight: 70.h,
automaticallyImplyLeading: false,
backgroundColor: Colors.white,
elevation: 0,
title: Padding(
padding: EdgeInsets.only(top: 8.h),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
SizedBox(width: 10.h),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TypographyStyles.h6(title, color: colorText),
SizedBox(height: 10.h),
TypographyStyles.small(subTitle, color: colorText, fontWeight: FontWeight.w400, maxlines: 2),
],
),
),
],
),
),
actions: [
ZoomTapAnimation(
child: IconButton(
onPressed: onTab,
icon: CustomeIcons.OrderHistoryOutline(),
),
)
],
);
}
@override
Size get preferredSize => Size.fromHeight(kToolbarHeight + 20.h);
}

View File

@ -43,11 +43,11 @@ class ButtonListTile extends StatelessWidget {
onTap: onTab,
leading: CircleAvatar(
backgroundColor: PrimaryColors.primary800,
radius: 22,
radius: 20,
child: SvgPicture.asset(
imageAssets,
width: 24.w,
height: 24.w,
height: 24.h,
),
),
title: TypographyStyles.body(

View File

@ -7,13 +7,13 @@ class CustomeIcons {
static SvgPicture getIcon(
String fileName, {
// double? size,
double? size,
Color? color,
}) {
return SvgPicture.asset(
'$_iconPath$fileName.svg',
// width: size ?? IconDefaults.defaultWidth,
// height: size ?? IconDefaults.defaultHeight,
width: size,
height: size,
colorFilter: ColorFilter.mode(
color ?? PrimaryColors.primary800,
BlendMode.srcIn,
@ -39,6 +39,7 @@ class CustomeIcons {
static SvgPicture SentOutline({double? size, Color? color}) => getIcon('ic_notification', color: color);
static SvgPicture SearchOutline({double? size, Color? color}) => getIcon('ic_search', color: color);
static SvgPicture EditOutline({double? size, Color? color}) => getIcon('ic_edit', color: color);
static SvgPicture OrderHistoryOutline({double? size, Color? color}) => getIcon('ic_order_history', color: color);
static SvgPicture FlightSeatFilled({double? size, Color? color}) => getIcon('ic_flight_seat_filled', color: color);
static SvgPicture PlaneRightFilled({double? size, Color? color}) => getIcon('ic_plane_filled', color: color);

View File

@ -41,7 +41,7 @@ class TypographyStyles extends StatelessWidget {
fontWeight: fontWeight ?? FontWeight.w900,
color: color,
height: height,
letterSpacing: letterSpacing ?? 0,
letterSpacing: letterSpacing ?? 0.2,
);
TypographyStyles.h2(this.text,
@ -60,7 +60,7 @@ class TypographyStyles extends StatelessWidget {
fontWeight: fontWeight ?? FontWeight.w900,
color: color,
height: height,
letterSpacing: letterSpacing ?? 0,
letterSpacing: letterSpacing ?? 0.2,
);
TypographyStyles.h3(this.text,
@ -79,7 +79,7 @@ class TypographyStyles extends StatelessWidget {
fontWeight: fontWeight ?? FontWeight.w900,
color: color,
height: height,
letterSpacing: letterSpacing ?? 0,
letterSpacing: letterSpacing ?? 0.2,
);
TypographyStyles.h4(this.text,
@ -98,7 +98,7 @@ class TypographyStyles extends StatelessWidget {
fontWeight: fontWeight ?? FontWeight.w900,
color: color,
height: height,
letterSpacing: letterSpacing ?? 0,
letterSpacing: letterSpacing ?? 0.2,
);
TypographyStyles.h5(this.text,
@ -117,7 +117,7 @@ class TypographyStyles extends StatelessWidget {
fontWeight: fontWeight ?? FontWeight.w900,
color: color,
height: height,
letterSpacing: letterSpacing ?? 0,
letterSpacing: letterSpacing ?? 0.2,
);
TypographyStyles.h6(this.text,
@ -136,7 +136,7 @@ class TypographyStyles extends StatelessWidget {
fontWeight: fontWeight ?? FontWeight.w900,
color: color,
height: height,
letterSpacing: letterSpacing ?? 0,
letterSpacing: letterSpacing ?? 0.2,
);
TypographyStyles.body(this.text,
@ -155,7 +155,7 @@ class TypographyStyles extends StatelessWidget {
fontWeight: fontWeight ?? FontWeight.w900,
color: color,
height: height,
letterSpacing: letterSpacing ?? 0,
letterSpacing: letterSpacing ?? 0.2,
);
TypographyStyles.caption(this.text,
@ -174,7 +174,7 @@ class TypographyStyles extends StatelessWidget {
fontWeight: fontWeight ?? FontWeight.w900,
color: color,
height: height,
letterSpacing: letterSpacing ?? 0,
letterSpacing: letterSpacing ?? 0.2,
);
TypographyStyles.small(this.text,
@ -193,7 +193,7 @@ class TypographyStyles extends StatelessWidget {
fontWeight: fontWeight ?? FontWeight.w900,
color: color,
height: height,
letterSpacing: letterSpacing ?? 0,
letterSpacing: letterSpacing ?? 0.2,
);
TypographyStyles.tiny(this.text,
@ -212,7 +212,7 @@ class TypographyStyles extends StatelessWidget {
fontWeight: fontWeight ?? FontWeight.w900,
color: color,
height: height,
letterSpacing: letterSpacing ?? 0,
letterSpacing: letterSpacing ?? 0.2,
);
@override

View File

@ -0,0 +1,9 @@
import 'package:e_porter/presentation/controllers/navigation_controller.dart';
import 'package:get/get.dart';
class MainNavigationBinding extends Bindings {
@override
void dependencies() {
Get.lazyPut<NavigationController>(() => NavigationController());
}
}

View File

@ -2,7 +2,7 @@ import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:get/get.dart';
import '../../data/repositories/airport_repository.dart';
import '../controller/search_flight_controller.dart';
import '../../presentation/controllers/search_flight_controller.dart';
import '../usecases/get_airport.dart';
class SearchFlightBinding extends Bindings {

View File

@ -1,4 +1,4 @@
import 'package:e_porter/routes/app_rountes.dart';
import 'package:e_porter/presentation/screens/routes/app_rountes.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';

View File

@ -1,9 +0,0 @@
import 'package:get/get.dart';
class BookingTiketcController extends GetxController {
var selectedNumber = 1.obs;
void updateNumber(int newNumber) {
selectedNumber.value = newNumber;
}
}

View File

@ -0,0 +1,9 @@
import 'package:get/get.dart';
class NavigationController extends GetxController {
RxInt currentPage = 0.obs;
void goToTab(int page) {
currentPage.value = page;
}
}

View File

@ -1,7 +1,7 @@
import 'package:get/get.dart';
import '../models/airport.dart';
import '../usecases/get_airport.dart';
import '../../domain/models/airport.dart';
import '../../domain/usecases/get_airport.dart';
class SearchFlightController extends GetxController {
final GetAirports getAirports;

View File

@ -1,7 +1,7 @@
import 'package:e_porter/_core/component/button/button_fill.dart';
import 'package:e_porter/_core/component/button/button_no_fill.dart';
import 'package:e_porter/presentation/screens/auth/component/header_text.dart';
import 'package:e_porter/routes/app_rountes.dart';
import 'package:e_porter/presentation/screens/routes/app_rountes.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_svg/flutter_svg.dart';

View File

@ -6,7 +6,7 @@ import 'package:e_porter/presentation/screens/auth/component/Input_password.dart
import 'package:e_porter/presentation/screens/auth/component/footer_text.dart';
import 'package:e_porter/presentation/screens/auth/component/forget_password.dart';
import 'package:e_porter/presentation/screens/auth/component/header_text.dart';
import 'package:e_porter/routes/app_rountes.dart';
import 'package:e_porter/presentation/screens/routes/app_rountes.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
@ -20,6 +20,8 @@ class LoginScreen extends StatefulWidget {
}
class _LoginScreenState extends State<LoginScreen> {
final String? role = Get.arguments as String;
@override
Widget build(BuildContext context) {
return Scaffold(
@ -34,8 +36,7 @@ class _LoginScreenState extends State<LoginScreen> {
children: [
HeaderText(
firstText: 'Masuk',
secondText:
'Selamat datang kembali! Masuk untuk mengakses pengalaman personal Anda'),
secondText: 'Selamat datang kembali! Masuk untuk mengakses pengalaman personal Anda'),
SizedBox(height: 50.h),
Padding(
padding: EdgeInsets.symmetric(horizontal: 8.w),
@ -76,7 +77,7 @@ class _LoginScreenState extends State<LoginScreen> {
text: 'Masuk',
textColor: Colors.white,
onTap: () {
Get.toNamed(Routes.HOME);
Get.offAllNamed(Routes.NAVBAR, arguments: role);
},
),
),

View File

@ -1,5 +1,5 @@
import 'package:e_porter/presentation/screens/auth/component/header_text.dart';
import 'package:e_porter/routes/app_rountes.dart';
import 'package:e_porter/presentation/screens/routes/app_rountes.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';

View File

@ -0,0 +1,44 @@
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import '../../../../_core/component/card/custome_shadow_cotainner.dart';
import '../../../../_core/constants/colors.dart';
import '../../../../_core/constants/typography.dart';
class CardBoardingPass extends StatelessWidget {
const CardBoardingPass({super.key});
@override
Widget build(BuildContext context) {
return CustomeShadowCotainner(
child: Column(
children: [
Container(
padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 10.h),
decoration: BoxDecoration(
color: GrayColors.gray500,
borderRadius: BorderRadius.only(topLeft: Radius.circular(10.r), topRight: Radius.circular(10.r)),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Row(
children: [
TypographyStyles.body('Kode Booking', color: Colors.white, fontWeight: FontWeight.w400),
SizedBox(width: 20.w),
TypographyStyles.body('I2L8JRL', color: Colors.white),
],
),
Container(
padding: EdgeInsets.symmetric(horizontal: 10.w, vertical: 6.h),
decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(8.r)),
child: TypographyStyles.caption('Keberangkatan', color: GrayColors.gray800),
)
],
),
)
],
),
);
}
}

View File

@ -0,0 +1,83 @@
import 'package:e_porter/_core/component/appbar/appbar_component.dart';
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';
import '../component/card_boarding_pass.dart';
class BoardingPassScreen extends StatefulWidget {
const BoardingPassScreen({super.key});
@override
State<BoardingPassScreen> createState() => _BoardingPassScreenState();
}
class _BoardingPassScreenState extends State<BoardingPassScreen> with SingleTickerProviderStateMixin {
late TabController _tabController;
@override
void initState() {
super.initState();
_tabController = TabController(length: 2, vsync: this);
}
@override
void dispose() {
_tabController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: GrayColors.gray50,
appBar: SimpleAppbarComponent(
title: 'Boarding Pass',
subTitle: 'Semua boarding pass pesawat yang aktif ditampilkan dihalaman ini',
onTab: () {},
),
body: SafeArea(
child: Column(
children: [
Container(
color: Colors.white,
child: TabBar(
controller: _tabController,
labelColor: PrimaryColors.primary800,
unselectedLabelColor: GrayColors.gray400,
indicatorColor: PrimaryColors.primary800,
tabs: const [
Tab(text: 'Belum dibayar'),
Tab(text: 'Sedang aktif'),
],
),
),
Expanded(
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 20.h),
child: TabBarView(
controller: _tabController,
children: [
ListView.builder(
itemCount: 1,
itemBuilder: (context, index) {
return CardBoardingPass();
},
),
ListView.builder(
itemCount: 2,
itemBuilder: (context, index) {
return TypographyStyles.body('Belum bayar');
},
),
],
),
),
),
],
),
),
);
}
}

View File

@ -0,0 +1,40 @@
import 'package:e_porter/_core/constants/typography.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import '../../../../_core/constants/colors.dart';
class CardIndicator extends StatelessWidget {
final String text;
final Color? textColor;
final Color? boxColor;
final Border? border;
const CardIndicator({
Key? key,
required this.text,
this.textColor,
this.boxColor,
this.border,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
width: 18.w,
height: 18.h,
decoration: BoxDecoration(
border: border ?? Border(),
borderRadius: BorderRadius.circular(4.r),
color: boxColor ?? Colors.white,
),
),
SizedBox(width: 16.w),
TypographyStyles.small(text, color: textColor ?? GrayColors.gray800, fontWeight: FontWeight.w400)
],
);
}
}

View File

@ -0,0 +1,32 @@
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:zoom_tap_animation/zoom_tap_animation.dart';
class CardSeat extends StatelessWidget {
// final VoidCallback onTap;
const CardSeat({
Key? key,
// required this.onTap,
});
@override
Widget build(BuildContext context) {
return Row(
children: [
ZoomTapAnimation(
child: GestureDetector(
child: Container(
width: 32.w,
height: 32.h,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(6.r),
color: Colors.grey,
),
),
),
),
],
);
}
}

View File

@ -1,12 +1,15 @@
import 'package:e_porter/_core/constants/typography.dart';
import 'package:flutter/material.dart';
import 'dart:math';
class ProfileAvatar extends StatefulWidget {
final String fullName;
final double? radius;
const ProfileAvatar({
Key? key,
required this.fullName,
this.radius,
}) : super(key: key);
@override
@ -34,11 +37,12 @@ class _ProfileAvatarState extends State<ProfileAvatar> {
Widget build(BuildContext context) {
final initials = _getInitials(widget.fullName);
return CircleAvatar(
radius: 26,
radius: widget.radius ?? 24,
backgroundColor: _randomColor,
child: Text(
child: TypographyStyles.body(
initials,
style: const TextStyle(color: Colors.white),
color: Colors.white,
fontWeight: FontWeight.w500,
),
);
}
@ -48,8 +52,7 @@ class _ProfileAvatarState extends State<ProfileAvatar> {
if (parts.length == 1) {
return parts.first.substring(0, 1).toUpperCase();
} else {
return parts[0].substring(0, 1).toUpperCase() +
parts[1].substring(0, 1).toUpperCase();
return parts[0].substring(0, 1).toUpperCase() + parts[1].substring(0, 1).toUpperCase();
}
}
}

View File

@ -0,0 +1,53 @@
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import '../../../../_core/component/card/custome_shadow_cotainner.dart';
import '../../../../_core/constants/colors.dart';
import '../../../../_core/constants/typography.dart';
class SummaryCard extends StatelessWidget {
final String label;
final String value;
final Widget icon;
const SummaryCard({
Key? key,
required this.label,
required this.value,
required this.icon,
});
@override
Widget build(BuildContext context) {
return Expanded(
child: CustomeShadowCotainner(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
icon,
SizedBox(width: 16.w),
Expanded(
child: TypographyStyles.caption(
label,
color: GrayColors.gray600,
fontWeight: FontWeight.w600,
overflow: TextOverflow.ellipsis,
maxlines: 1,
),
),
],
),
SizedBox(height: 10.h),
TypographyStyles.body(
value,
color: GrayColors.gray800,
overflow: TextOverflow.ellipsis,
maxlines: 1,
)
],
),
),
);
}
}

View File

@ -4,11 +4,10 @@ import 'package:e_porter/_core/component/card/custome_shadow_cotainner.dart';
import 'package:e_porter/_core/component/icons/icons_library.dart';
import 'package:e_porter/_core/constants/colors.dart';
import 'package:e_porter/_core/constants/typography.dart';
import 'package:e_porter/presentation/controllers/booking_tiketc_controller.dart';
import 'package:e_porter/presentation/screens/home/component/flight_class_radio.dart';
import 'package:e_porter/presentation/screens/home/component/flight_date_selector.dart';
import 'package:e_porter/presentation/screens/home/component/flight_selector.dart';
import 'package:e_porter/routes/app_rountes.dart';
import 'package:e_porter/presentation/screens/routes/app_rountes.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
@ -28,7 +27,6 @@ class _BookingTicketsState extends State<BookingTickets> {
String selectedDateText = 'dd/mm/yyyy';
final ValueNotifier<String> selectedClass = ValueNotifier<String>('Economy');
final BookingTiketcController bookingTiketcController = Get.put(BookingTiketcController());
@override
Widget build(BuildContext context) {

View File

@ -1,18 +0,0 @@
import 'package:e_porter/_core/constants/colors.dart';
import 'package:flutter/material.dart';
class ChooseChairScreen extends StatefulWidget {
const ChooseChairScreen({super.key});
@override
State<ChooseChairScreen> createState() => _ChooseChairScreenState();
}
class _ChooseChairScreenState extends State<ChooseChairScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: GrayColors.gray50,
);
}
}

View File

@ -0,0 +1,283 @@
import 'package:e_porter/_core/component/appbar/appbar_component.dart';
import 'package:e_porter/_core/component/card/custome_shadow_cotainner.dart';
import 'package:e_porter/_core/component/icons/icons_library.dart';
import 'package:e_porter/_core/constants/colors.dart';
import 'package:e_porter/_core/constants/typography.dart';
import 'package:e_porter/presentation/screens/home/component/card_indicator.dart';
import 'package:e_porter/presentation/screens/home/component/card_seat.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart';
import 'package:zoom_tap_animation/zoom_tap_animation.dart';
import '../../../../_core/component/button/button_fill.dart';
class ChooseSeatScreen extends StatefulWidget {
const ChooseSeatScreen({super.key});
@override
State<ChooseSeatScreen> createState() => _ChooseSeatScreenState();
}
class _ChooseSeatScreenState extends State<ChooseSeatScreen> {
// Menyimpan status setiap kursi apakah terpilih atau tidak
final List<bool> selectedSeats = List.generate(3, (_) => false);
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: GrayColors.gray50,
appBar: CustomeAppbarComponent(
valueDari: 'Pilih Kursi',
valueKe: null,
date: 'Yogyakarta - Lombok',
passenger: '2',
onTab: () {
Get.back();
},
),
body: SafeArea(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
_buildCardFlight('YIA', 'LOP', 'Economy', '5j 40m'),
SizedBox(height: 20.h),
SizedBox(
height: 84.h,
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 16.w),
child: ListView.builder(
scrollDirection: Axis.horizontal,
itemCount: 3,
itemBuilder: (context, index) {
return Padding(
padding: EdgeInsets.only(right: 16.w),
child: _buildPassengerCard('Ahmad', 'Economy', '10F', index),
);
},
),
),
),
SizedBox(height: 32.h),
CustomeShadowCotainner(
borderRadius: 0.r,
child: Column(
children: [
_buildCardInformationStatus(),
SizedBox(height: 20.h),
Row(
children: [
_buildCardSeat(context, label: 'A'),
_buildCardSeat(context, label: 'B'),
_buildCardSeat(context, label: 'C'),
],
)
],
),
)
],
),
),
bottomNavigationBar: CustomeShadowCotainner(
padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 20.h),
child: ZoomTapAnimation(
child: ButtonFill(
text: 'Lanjutkan',
textColor: Colors.white,
onTap: () {
// Get.toNamed(Routes.TICKETBOOKINGSTEP3);
},
),
),
),
);
}
Widget _buildCardFlight(String departureCode, String arrivalCode, String kelas, String duration) {
return Padding(
padding: EdgeInsets.only(left: 16.w, right: 16.w, top: 20.h),
child: CustomeShadowCotainner(
child: Row(
children: [
SvgPicture.asset('assets/images/citilink.svg', width: 40.w, height: 10.h),
SizedBox(width: 16.w),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
TypographyStyles.body(departureCode, color: GrayColors.gray800, letterSpacing: 0.2),
SizedBox(width: 10.w),
CustomeIcons.RightOutline(color: GrayColors.gray800, size: 14),
SizedBox(width: 10.w),
TypographyStyles.body(arrivalCode, color: GrayColors.gray800, letterSpacing: 0.2),
],
),
SizedBox(height: 4.h),
Row(
children: [
TypographyStyles.small(
kelas,
color: GrayColors.gray600,
letterSpacing: 0.2,
fontWeight: FontWeight.w400,
),
SizedBox(width: 10.w),
CircleAvatar(radius: 2.r, backgroundColor: Color(0xFFD9D9D9)),
SizedBox(width: 10.w),
TypographyStyles.small(
duration,
color: GrayColors.gray600,
letterSpacing: 0.2,
fontWeight: FontWeight.w400,
),
],
),
],
)
],
),
),
);
}
Widget _buildPassengerCard(String name, String kelas, String seat, int index) {
return ZoomTapAnimation(
child: GestureDetector(
onTap: () {
setState(() {
for (int i = 0; i < selectedSeats.length; i++) {
selectedSeats[i] = false;
}
selectedSeats[index] = true;
});
},
child: Container(
padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 16.h),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(10.r),
border: Border.all(
color: selectedSeats[index] ? PrimaryColors.primary800 : GrayColors.gray200,
width: 1.w,
),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TypographyStyles.body(
name,
color: GrayColors.gray800,
fontWeight: FontWeight.w500,
),
SizedBox(height: 2.h),
TypographyStyles.caption(
'${kelas} / Kursi ${seat}',
color: GrayColors.gray600,
fontWeight: FontWeight.w400,
),
],
),
),
),
);
}
Widget _buildCardInformationStatus() {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
CardIndicator(
text: 'Kosong',
border: Border.all(width: 1.w, color: PrimaryColors.primary800),
),
SizedBox(width: 32.w),
CardIndicator(
text: 'Terisi',
boxColor: GrayColors.gray300,
),
SizedBox(width: 32.w),
CardIndicator(
text: 'Dipilih',
textColor: PrimaryColors.primary800,
boxColor: PrimaryColors.primary900,
)
],
);
}
Widget _buildCardSeat(
BuildContext context, {
required label,
}) {
return Expanded(
child: Column(
children: [
Container(
width: 32.w,
height: 32.h,
child: TypographyStyles.body(label, color: GrayColors.gray800, fontWeight: FontWeight.w500),
),
SizedBox(height: 6.h),
SizedBox(
height: 330.h,
child: ListView.builder(
itemCount: 50,
shrinkWrap: true,
itemBuilder: (context, index) {
return Padding(
padding: EdgeInsets.symmetric(vertical: 6.h),
child: CardSeat(),
);
},
),
),
],
),
);
}
Widget _buildNumberSeat() {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
width: 32.w,
height: 32.h,
child: TypographyStyles.body('A', color: GrayColors.gray800, fontWeight: FontWeight.w500),
),
SizedBox(width: 10.w),
Container(
width: 32.w,
height: 32.h,
child: TypographyStyles.body('B', color: GrayColors.gray800, fontWeight: FontWeight.w500),
),
SizedBox(width: 10.w),
Container(
width: 32.w,
height: 32.h,
child: TypographyStyles.body('C', color: GrayColors.gray800, fontWeight: FontWeight.w500),
),
SizedBox(width: 106.w),
Container(
width: 32.w,
height: 32.h,
child: TypographyStyles.body('D', color: GrayColors.gray800, fontWeight: FontWeight.w500),
),
SizedBox(width: 10.w),
Container(
width: 32.w,
height: 32.h,
child: TypographyStyles.body('E', color: GrayColors.gray800, fontWeight: FontWeight.w500),
),
SizedBox(width: 10.w),
Container(
width: 32.w,
height: 32.h,
child: TypographyStyles.body('F', color: GrayColors.gray800, fontWeight: FontWeight.w500),
),
],
);
}
}

View File

@ -1,14 +1,18 @@
import 'package:e_porter/_core/component/appbar/appbar_component.dart';
import 'package:e_porter/_core/component/button/button_list_tile.dart';
import 'package:e_porter/_core/component/card/custome_shadow_cotainner.dart';
import 'package:e_porter/_core/component/icons/icons_library.dart';
import 'package:e_porter/_core/constants/colors.dart';
import 'package:e_porter/_core/constants/typography.dart';
import 'package:e_porter/presentation/screens/home/component/profile_avatar.dart';
import 'package:e_porter/routes/app_rountes.dart';
import 'package:e_porter/presentation/screens/home/component/summary_card.dart';
import 'package:e_porter/presentation/screens/routes/app_rountes.dart';
import 'package:flutter/material.dart';
import 'package:carousel_slider/carousel_slider.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart';
import 'package:zoom_tap_animation/zoom_tap_animation.dart';
class HomeScreen extends StatefulWidget {
const HomeScreen({super.key});
@ -19,8 +23,8 @@ class HomeScreen extends StatefulWidget {
class _HomeScreenState extends State<HomeScreen> {
int _current = 0;
final CarouselSliderController _carouselController =
CarouselSliderController();
late final String role;
final CarouselSliderController _carouselController = CarouselSliderController();
final List<Widget> imageList = [
Container(
@ -35,8 +39,21 @@ class _HomeScreenState extends State<HomeScreen> {
)
];
@override
void initState() {
super.initState();
role = Get.arguments ?? 'passenger';
}
@override
Widget build(BuildContext context) {
if (role == 'porter') {
return _buildPorterUI();
}
return _buildPassengerUI();
}
Widget _buildPassengerUI() {
return Scaffold(
backgroundColor: GrayColors.gray50,
appBar: HomeAppbarComponent(
@ -63,8 +80,7 @@ class _HomeScreenState extends State<HomeScreen> {
child: ListView(
children: [
Container(
padding:
EdgeInsets.symmetric(horizontal: 16.w, vertical: 16.h),
padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 16.h),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(10.r),
@ -93,10 +109,7 @@ class _HomeScreenState extends State<HomeScreen> {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TypographyStyles.h6(
'Muhammad Al Kahfi',
letterSpacing: 1,
),
TypographyStyles.body('Muhammad Al Kahfi'),
SizedBox(height: 2.h),
TypographyStyles.caption(
'Jelajahi dunia dengan E-Porter',
@ -148,17 +161,14 @@ class _HomeScreenState extends State<HomeScreen> {
children: imageList.asMap().entries.map(
(entry) {
return GestureDetector(
onTap: () =>
_carouselController.animateToPage(entry.key),
onTap: () => _carouselController.animateToPage(entry.key),
child: Container(
width: 8.w,
height: 8.h,
margin: EdgeInsets.symmetric(
vertical: 8.h, horizontal: 4.w),
margin: EdgeInsets.symmetric(vertical: 8.h, horizontal: 4.w),
decoration: BoxDecoration(
shape: BoxShape.circle,
color: (Theme.of(context).brightness ==
Brightness.dark
color: (Theme.of(context).brightness == Brightness.dark
? Colors.white
: PrimaryColors.primary800)
.withOpacity(_current == entry.key ? 0.9 : 0.4),
@ -186,4 +196,107 @@ class _HomeScreenState extends State<HomeScreen> {
),
);
}
Widget _buildPorterUI() {
return Scaffold(
backgroundColor: GrayColors.gray50,
body: SafeArea(
child: Column(
children: [
_buildAppbar(
context,
nameAvatar: 'Muhammad Al Kahfi',
nameUser: 'Muhammad Al Kahfi',
subTitle: 'Selamat datang kembali Rekanku',
),
Expanded(
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 20.h),
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TypographyStyles.h6('Ringkasan Hari ini', color: GrayColors.gray800),
SizedBox(height: 16.h),
Row(
children: [
SummaryCard(
label: 'Pesanan Masuk',
value: '1000000000000000000000',
icon: CustomeIcons.PlaneLeftOutline(),
),
SizedBox(width: 16.w),
SummaryCard(
label: 'Pesanan Berjalan',
value: '1000000000000000000000',
icon: CustomeIcons.PlaneLeftOutline(),
)
],
),
SizedBox(height: 16.w),
Row(
children: [
SummaryCard(
label: 'Pesanan Selesai',
value: '1000000000000000000000',
icon: CustomeIcons.PlaneLeftOutline(),
),
SizedBox(width: 16.w),
SummaryCard(
label: 'Pendapatan',
value: 'Rp 500.000',
icon: CustomeIcons.PlaneLeftOutline(),
)
],
),
SizedBox(height: 32.w),
CustomeShadowCotainner(child: TypographyStyles.body('Mulai Antrian'))
],
),
),
),
)
],
),
),
);
}
}
Widget _buildAppbar(
BuildContext context, {
required String nameAvatar,
required String nameUser,
required String subTitle,
VoidCallback? onTap,
}) {
return CustomeShadowCotainner(
borderRadius: 0.r,
child: Row(
children: [
ProfileAvatar(fullName: nameAvatar),
SizedBox(width: 16.w),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TypographyStyles.h6(nameUser, color: GrayColors.gray800),
SizedBox(height: 4.h),
TypographyStyles.caption(
subTitle,
color: GrayColors.gray600,
fontWeight: FontWeight.w400,
),
],
),
),
ZoomTapAnimation(
child: IconButton(
onPressed: onTap,
icon: CustomeIcons.NotificationOutline(),
),
)
],
),
);
}

View File

@ -2,7 +2,7 @@ import 'package:e_porter/_core/component/appbar/appbar_component.dart';
import 'package:e_porter/_core/component/search_bar/search_bar_component.dart';
import 'package:e_porter/_core/constants/colors.dart';
import 'package:e_porter/_core/constants/typography.dart';
import 'package:e_porter/domain/controller/search_flight_controller.dart';
import 'package:e_porter/presentation/controllers/search_flight_controller.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';

View File

@ -2,7 +2,7 @@ import 'package:e_porter/_core/component/appbar/appbar_component.dart';
import 'package:e_porter/_core/constants/colors.dart';
import 'package:e_porter/_core/constants/typography.dart';
import 'package:e_porter/presentation/screens/home/component/card_tickets.dart';
import 'package:e_porter/routes/app_rountes.dart';
import 'package:e_porter/presentation/screens/routes/app_rountes.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';

View File

@ -6,7 +6,7 @@ import 'package:e_porter/_core/component/icons/icons_library.dart';
import 'package:e_porter/_core/constants/colors.dart';
import 'package:e_porter/_core/constants/typography.dart';
import 'package:e_porter/presentation/screens/home/component/card_flight_information.dart';
import 'package:e_porter/routes/app_rountes.dart';
import 'package:e_porter/presentation/screens/routes/app_rountes.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';

View File

@ -1,8 +1,7 @@
import 'package:e_porter/_core/component/appbar/appbar_component.dart';
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/routes/app_rountes.dart';
import 'package:e_porter/presentation/screens/routes/app_rountes.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
@ -48,9 +47,18 @@ class _TicketBookingStep2ScreenState extends State<TicketBookingStep2Screen> {
passenger: '2',
),
SizedBox(height: 32.h),
TypographyStyles.h6('Pilih Kursi', color: GrayColors.gray800, letterSpacing: 0.2),
TypographyStyles.h6('Pilih Kursi', color: GrayColors.gray800),
SizedBox(height: 20.h),
_buildCardSeatPessenger(),
_buildCardSeatPessenger(
context,
label: '1',
namePassenger: 'AHMAD CHOIRUL UMAM ALI R',
seatClass: 'Economy',
numberSeat: '10F',
onTap: () {
Get.toNamed(Routes.CHOOSECHAIR);
},
),
],
),
),
@ -63,7 +71,7 @@ class _TicketBookingStep2ScreenState extends State<TicketBookingStep2Screen> {
text: 'Lanjutkan',
textColor: Colors.white,
onTap: () {
Get.toNamed(Routes.CHOOSECHAIR);
Get.toNamed(Routes.TICKETBOOKINGSTEP3);
},
),
),
@ -71,22 +79,28 @@ class _TicketBookingStep2ScreenState extends State<TicketBookingStep2Screen> {
);
}
Widget _buildCardSeatPessenger() {
Widget _buildCardSeatPessenger(BuildContext context,
{required String label,
required String namePassenger,
required String seatClass,
required String numberSeat,
required VoidCallback onTap}) {
return CustomeShadowCotainner(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TypographyStyles.caption(
'Penumpang 1 (Dewasa)',
'Penumpang ${label} (Dewasa)',
color: GrayColors.gray600,
fontWeight: FontWeight.w400,
letterSpacing: 0.2,
),
SizedBox(height: 2.h),
TypographyStyles.body(
'AHMAD CHOIRUL UMAM ALI',
namePassenger,
color: GrayColors.gray800,
fontWeight: FontWeight.w500,
letterSpacing: 0.2,
@ -95,32 +109,29 @@ class _TicketBookingStep2ScreenState extends State<TicketBookingStep2Screen> {
),
SizedBox(height: 2.h),
TypographyStyles.caption(
'Economy / 10F',
'${seatClass} / ${numberSeat}',
color: GrayColors.gray600,
fontWeight: FontWeight.w400,
letterSpacing: 0.2,
)
],
),
Expanded(
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 18.w),
child: ZoomTapAnimation(
child: ButtonOutline(
text: 'Pilih Kursi',
padding: EdgeInsets.symmetric(vertical: 6.h),
textColor: PrimaryColors.primary800,
customTextStyle: TextStyle(
fontSize: 12.sp,
fontWeight: FontWeight.bold,
color: PrimaryColors.primary800,
letterSpacing: 0.1,
),
onTap: () {},
ZoomTapAnimation(
child: GestureDetector(
onTap: onTap,
child: Container(
padding: EdgeInsets.symmetric(horizontal: 10.w, vertical: 6.h),
decoration: BoxDecoration(
border: Border.all(width: 1.5.w, color: PrimaryColors.primary800),
borderRadius: BorderRadius.circular(35.r),
),
child: TypographyStyles.caption(
'Pilih Kursi',
color: PrimaryColors.primary800,
),
),
),
),
)
],
),
);

View File

@ -1,15 +1,128 @@
import 'package:e_porter/_core/constants/colors.dart';
import 'package:e_porter/presentation/screens/home/pages/home_screen.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart';
import 'package:zoom_tap_animation/zoom_tap_animation.dart';
import '../../../_core/constants/typography.dart';
import '../../controllers/navigation_controller.dart';
import '../boarding_pass/pages/boarding_pass_screen.dart';
import '../profile/profile_screen.dart';
class MainNavigation extends StatefulWidget {
const MainNavigation({super.key});
final int initialTabIndex;
const MainNavigation({Key? key, this.initialTabIndex = 0}) : super(key: key);
@override
State<MainNavigation> createState() => _MainNavigationState();
}
class _MainNavigationState extends State<MainNavigation> {
final NavigationController navigationController = Get.find<NavigationController>();
@override
void initState() {
super.initState();
navigationController.currentPage.value = widget.initialTabIndex;
}
@override
Widget build(BuildContext context) {
return const Placeholder();
return Scaffold(
body: Stack(
children: [
Obx(() {
final List<Widget> pages = [
HomeScreen(),
BoardingPassScreen(),
ProfileScreen(),
];
return IndexedStack(
index: navigationController.currentPage.value,
children: pages,
);
}),
],
),
bottomNavigationBar: Obx(() {
return BottomAppBar(
color: Colors.white,
child: Container(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
child: _bottomAppBarItem(
context,
iconPath: navigationController.currentPage.value == 0
? 'assets/icons/ic_home_filled.svg'
: 'assets/icons/ic_home.svg',
page: 0,
label: 'Home',
),
),
Expanded(
child: _bottomAppBarItem(
context,
iconPath: navigationController.currentPage.value == 1
? 'assets/icons/ic_boarding_pass_filled.svg'
: 'assets/icons/ic_boarding_pass.svg',
page: 1,
label: 'Boarding Pass',
),
),
Expanded(
child: _bottomAppBarItem(
context,
iconPath: navigationController.currentPage.value == 2
? 'assets/icons/ic_profile_filled.svg'
: 'assets/icons/ic_profile.svg',
page: 2,
label: 'Profil',
),
),
],
),
),
);
}),
);
}
}
Widget _bottomAppBarItem(
BuildContext context, {
required String iconPath,
required int page,
required String label,
}) {
final controller = Get.find<NavigationController>();
final isActive = controller.currentPage.value == page;
return ZoomTapAnimation(
onTap: () => controller.goToTab(page),
child: Container(
color: Colors.transparent,
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
SvgPicture.asset(
iconPath,
width: 24.w,
height: 24.h,
),
SizedBox(height: 4.h),
TypographyStyles.caption(
label,
color: isActive ? PrimaryColors.primary800 : GrayColors.gray400,
letterSpacing: 0.2,
fontWeight: isActive ? FontWeight.w700 : FontWeight.w500,
),
],
),
),
);
}
}

View File

@ -1,14 +1,17 @@
import 'package:e_porter/_core/component/button/button_fill.dart';
import 'package:e_porter/_core/component/button/button_outline.dart';
import 'package:e_porter/_core/constants/colors.dart';
import 'package:e_porter/routes/app_rountes.dart';
import 'package:e_porter/presentation/screens/routes/app_rountes.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:zoom_tap_animation/zoom_tap_animation.dart';
class OnboardingScreen extends StatelessWidget {
const OnboardingScreen({super.key});
OnboardingScreen({super.key});
late final passenger = '1';
late final porter = '2';
@override
Widget build(BuildContext context) {
@ -32,7 +35,7 @@ class OnboardingScreen extends StatelessWidget {
text: 'Masuk sebagai Penumpang',
textColor: Colors.white,
onTap: () {
Get.toNamed(Routes.LOGIN);
Get.toNamed(Routes.LOGIN, arguments: 'penumpang');
},
),
),
@ -43,7 +46,9 @@ class OnboardingScreen extends StatelessWidget {
child: ButtonOutline(
text: 'Masuk sebagai Porter',
textColor: PrimaryColors.primary800,
onTap: () {},
onTap: () {
Get.toNamed(Routes.LOGIN, arguments: 'porter');
},
),
),
],

View File

@ -0,0 +1,23 @@
import 'package:flutter/material.dart';
import '../../../_core/constants/colors.dart';
import '../../../_core/constants/typography.dart';
class ProfileScreen extends StatefulWidget {
const ProfileScreen({super.key});
@override
State<ProfileScreen> createState() => _ProfileScreenState();
}
class _ProfileScreenState extends State<ProfileScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: GrayColors.gray50,
body: Center(
child: TypographyStyles.h4('Profile'),
),
);
}
}

View File

@ -1,18 +1,21 @@
import 'package:e_porter/domain/bindings/navigation_binding.dart';
import 'package:e_porter/domain/bindings/search_flight_binding.dart';
import 'package:e_porter/presentation/screens/auth/pages/forget_password_screen.dart';
import 'package:e_porter/presentation/screens/auth/pages/login_screen.dart';
import 'package:e_porter/presentation/screens/auth/pages/register_screen.dart';
import 'package:e_porter/presentation/screens/auth/pages/state_succes_screen.dart';
import 'package:e_porter/presentation/screens/boarding_pass/pages/boarding_pass_screen.dart';
import 'package:e_porter/presentation/screens/home/pages/booking_tickets.dart';
import 'package:e_porter/presentation/screens/home/pages/choose_chair_screen.dart';
import 'package:e_porter/presentation/screens/home/pages/home_screen.dart';
import 'package:e_porter/presentation/screens/home/pages/choose_seat_screen.dart';
import 'package:e_porter/presentation/screens/home/pages/search_flight_screen.dart';
import 'package:e_porter/presentation/screens/home/pages/search_tickets_screen.dart';
import 'package:e_porter/presentation/screens/home/pages/ticket_booking_step1_screen.dart';
import 'package:e_porter/presentation/screens/home/pages/ticket_booking_step2_screen.dart';
import 'package:e_porter/presentation/screens/home/pages/ticket_booking_step3_screen.dart';
import 'package:e_porter/presentation/screens/home/pages/ticket_booking_step4_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/profile_screen.dart';
import 'package:e_porter/presentation/screens/splash/splash_screen.dart';
import 'package:get/get.dart';
@ -20,6 +23,11 @@ class AppRoutes {
static const INITIAL = Routes.SPLASH;
static final routes = [
GetPage(
name: Routes.NAVBAR,
page: () => MainNavigation(),
binding: MainNavigationBinding(),
),
GetPage(
name: Routes.SPLASH,
page: () => SplashScreen(),
@ -32,6 +40,18 @@ class AppRoutes {
name: Routes.LOGIN,
page: () => LoginScreen(),
),
GetPage(
name: Routes.HOME,
page: () => MainNavigation(),
),
GetPage(
name: Routes.BOARDINGPASS,
page: () => BoardingPassScreen(),
),
GetPage(
name: Routes.PROFILE,
page: () => ProfileScreen(),
),
GetPage(
name: Routes.REGISTER,
page: () => RegisterScreen(),
@ -44,10 +64,6 @@ class AppRoutes {
name: Routes.STATESUCCES,
page: () => StateSuccesScreen(),
),
GetPage(
name: Routes.HOME,
page: () => HomeScreen(),
),
GetPage(
name: Routes.BOOKINGTICKETS,
page: () => BookingTickets(),
@ -79,19 +95,22 @@ class AppRoutes {
),
GetPage(
name: Routes.CHOOSECHAIR,
page: () => ChooseChairScreen(),
page: () => ChooseSeatScreen(),
),
];
}
class Routes {
static const NAVBAR = '/navigation';
static const SPLASH = '/splash';
static const ONBOARDING = '/onboarding';
static const LOGIN = '/login';
static const HOME = '/home';
static const BOARDINGPASS = '/boarding_pass';
static const PROFILE = '/profile';
static const REGISTER = '/register';
static const FORGETPASSWORD = '/forget_password';
static const STATESUCCES = '/state_succes';
static const HOME = '/home';
static const BOOKINGTICKETS = '/booking_tickets';
static const SEARCHFLIGHT = '/search_flight';
static const SEARCHTICKETS = '/search_tickets';

View File

@ -1,4 +1,4 @@
import 'package:e_porter/routes/app_rountes.dart';
import 'package:e_porter/presentation/screens/routes/app_rountes.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';