added planner page
|
|
@ -24,7 +24,7 @@ android {
|
|||
applicationId = "com.example.lba"
|
||||
// You can update the following values to match your application needs.
|
||||
// For more information, see: https://flutter.dev/to/review-gradle-config.
|
||||
minSdk = flutter.minSdkVersion
|
||||
minSdk = 24
|
||||
targetSdk = flutter.targetSdkVersion
|
||||
versionCode = flutter.versionCode
|
||||
versionName = flutter.versionName
|
||||
|
|
|
|||
|
|
@ -8,6 +8,8 @@
|
|||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
|
||||
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
|
||||
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
|
||||
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
|
||||
<application
|
||||
android:label="lba"
|
||||
android:name="${applicationName}"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,8 @@
|
|||
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M26 11.4299V17.4299C26 18.9299 25.5 20.1799 24.62 21.0599C23.75 21.9299 22.5 22.4299 21 22.4299V24.5599C21 25.3599 20.11 25.84 19.45 25.4L15 22.4299H12.88C12.96 22.1299 13 21.8199 13 21.4999C13 20.4799 12.61 19.54 11.97 18.83C11.25 18.01 10.18 17.4999 9 17.4999C7.88 17.4999 6.86 17.96 6.13 18.71C6.04 18.31 6 17.8799 6 17.4299V11.4299C6 8.42993 8 6.42993 11 6.42993H21C24 6.42993 26 8.42993 26 11.4299Z" stroke="#2A2926" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M13 21.5C13 22.7 12.47 23.77 11.64 24.5C10.93 25.12 10.01 25.5 9 25.5C6.79 25.5 5 23.71 5 21.5C5 20.24 5.58 19.11 6.5 18.38C7.19 17.83 8.06 17.5 9 17.5C11.21 17.5 13 19.29 13 21.5Z" stroke="#2A2926" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M9.25 20.25V21.75L8 22.5" stroke="#2A2926" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M19.4956 14.5H19.5046" stroke="#2A2926" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M15.9955 14.5H16.0045" stroke="#2A2926" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M12.4955 14.5H12.5045" stroke="#2A2926" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
|
|
@ -0,0 +1,3 @@
|
|||
<svg width="41" height="40" viewBox="0 0 41 40" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M20.5 3.33337C11.3 3.33337 3.83334 10.8 3.83334 20C3.83334 29.2 11.3 36.6667 20.5 36.6667C29.7 36.6667 37.1667 29.2 37.1667 20C37.1667 10.8 29.7 3.33337 20.5 3.33337ZM26.3833 20.05C26.1333 20.3 25.8167 20.4167 25.5 20.4167C25.1833 20.4167 24.8667 20.3 24.6167 20.05L21.75 17.1834V25.8334C21.75 26.5167 21.1833 27.0834 20.5 27.0834C19.8167 27.0834 19.25 26.5167 19.25 25.8334V17.1834L16.3833 20.05C15.9 20.5334 15.1 20.5334 14.6167 20.05C14.1333 19.5667 14.1333 18.7667 14.6167 18.2834L19.6167 13.2834C20.1 12.8 20.9 12.8 21.3833 13.2834L26.3833 18.2834C26.8667 18.7667 26.8667 19.5667 26.3833 20.05Z" fill="#0E3F66"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 730 B |
|
|
@ -0,0 +1,5 @@
|
|||
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M5.07 16.5H12.93C15 16.5 15.825 15.2325 15.9225 13.6875L16.3125 7.4925C16.4175 5.8725 15.1275 4.5 13.5 4.5C13.0425 4.5 12.6225 4.2375 12.4125 3.8325L11.8725 2.745C11.5275 2.0625 10.6275 1.5 9.8625 1.5H8.145C7.3725 1.5 6.4725 2.0625 6.1275 2.745L5.5875 3.8325C5.3775 4.2375 4.9575 4.5 4.5 4.5C2.8725 4.5 1.5825 5.8725 1.6875 7.4925L2.0775 13.6875C2.1675 15.2325 3 16.5 5.07 16.5Z" stroke="#2196F3" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M7.875 6H10.125" stroke="#2196F3" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M9 13.5C10.3425 13.5 11.4375 12.405 11.4375 11.0625C11.4375 9.72 10.3425 8.625 9 8.625C7.6575 8.625 6.5625 9.72 6.5625 11.0625C6.5625 12.405 7.6575 13.5 9 13.5Z" stroke="#2196F3" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 887 B |
|
|
@ -0,0 +1,8 @@
|
|||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M12 21C17.5228 21 22 16.5228 22 11C22 5.47715 17.5228 1 12 1C6.47715 1 2 5.47715 2 11C2 16.5228 6.47715 21 12 21Z" fill="#FFF59D"/>
|
||||
<path d="M18.5 11C18.5 7.15 15.2 4.1 11.25 4.55C8.25 4.9 5.85 7.3 5.55 10.3C5.3 12.6 6.25 14.65 7.85 15.95C8.55 16.55 9 17.4 9 18.35V18.5H15V18.45C15 17.55 15.4 16.65 16.1 16.05C17.55 14.85 18.5 13.05 18.5 11Z" fill="#FBC02D"/>
|
||||
<path d="M15.3 10.1L13.8 9.10002C13.65 9.00002 13.4 9.00002 13.25 9.10002L12 9.90002L10.8 9.10002C10.65 9.00002 10.4 9.00002 10.25 9.10002L8.75 10.1C8.65 10.2 8.55 10.3 8.55 10.45C8.55 10.6 8.55 10.75 8.65 10.85L10.55 13.2V18.5H11.55V13C11.55 12.9 11.5 12.8 11.45 12.7L9.8 10.65L10.55 10.15L11.75 10.95C11.9 11.05 12.15 11.05 12.3 10.95L13.5 10.15L14.25 10.65L12.6 12.7C12.55 12.8 12.5 12.9 12.5 13V18.5H13.5V13.2L15.4 10.85C15.5 10.75 15.55 10.6 15.5 10.45C15.45 10.3 15.4 10.15 15.3 10.1Z" fill="#FFF59D"/>
|
||||
<path d="M12 23.5C12.8284 23.5 13.5 22.8284 13.5 22C13.5 21.1716 12.8284 20.5 12 20.5C11.1716 20.5 10.5 21.1716 10.5 22C10.5 22.8284 11.1716 23.5 12 23.5Z" fill="#5C6BC0"/>
|
||||
<path d="M13 22.5H11C9.9 22.5 9 21.6 9 20.5V18H15V20.5C15 21.6 14.1 22.5 13 22.5Z" fill="#9FA8DA"/>
|
||||
<path d="M15 20.5L9.2 21.3C9.35 21.65 9.65 22 10 22.2L14.7 21.55C14.9 21.25 15 20.9 15 20.5ZM9 19.35V20.35L15 19.5V18.5L9 19.35Z" fill="#5C6BC0"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
|
|
@ -0,0 +1,8 @@
|
|||
<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M2.5291 19V7H21.5291V19C21.5291 20.1 20.6291 21 19.5291 21H4.5291C3.4291 21 2.5291 20.1 2.5291 19Z" fill="#CFD8DC"/>
|
||||
<path d="M21.5291 5V8H2.5291V5C2.5291 3.9 3.4291 3 4.5291 3H19.5291C20.6291 3 21.5291 3.9 21.5291 5Z" fill="#F44336"/>
|
||||
<path d="M16.5291 6.5C17.3575 6.5 18.0291 5.82843 18.0291 5C18.0291 4.17157 17.3575 3.5 16.5291 3.5C15.7007 3.5 15.0291 4.17157 15.0291 5C15.0291 5.82843 15.7007 6.5 16.5291 6.5Z" fill="#B71C1C"/>
|
||||
<path d="M7.5291 6.5C8.35753 6.5 9.0291 5.82843 9.0291 5C9.0291 4.17157 8.35753 3.5 7.5291 3.5C6.70067 3.5 6.0291 4.17157 6.0291 5C6.0291 5.82843 6.70067 6.5 7.5291 6.5Z" fill="#B71C1C"/>
|
||||
<path d="M16.5291 1.5C15.9791 1.5 15.5291 1.95 15.5291 2.5V5C15.5291 5.55 15.9791 6 16.5291 6C17.0791 6 17.5291 5.55 17.5291 5V2.5C17.5291 1.95 17.0791 1.5 16.5291 1.5ZM7.5291 1.5C6.9791 1.5 6.5291 1.95 6.5291 2.5V5C6.5291 5.55 6.9791 6 7.5291 6C8.0791 6 8.5291 5.55 8.5291 5V2.5C8.5291 1.95 8.0791 1.5 7.5291 1.5ZM6.5291 10.5H9.5291V13.5H6.5291V10.5ZM10.5291 10.5H13.5291V13.5H10.5291V10.5ZM14.5291 10.5H17.5291V13.5H14.5291V10.5ZM6.5291 14.5H9.5291V17.5H6.5291V14.5ZM10.5291 14.5H13.5291V17.5H10.5291V14.5Z" fill="#B0BEC5"/>
|
||||
<path d="M14.5291 14.5H17.5291V17.5H14.5291V14.5Z" fill="#F44336"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
|
|
@ -0,0 +1,7 @@
|
|||
<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M9 10.8169C10.1046 10.8169 11 9.92146 11 8.81689C11 7.71232 10.1046 6.81689 9 6.81689C7.89543 6.81689 7 7.71232 7 8.81689C7 9.92146 7.89543 10.8169 9 10.8169Z" stroke="#2196F3" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M13 2.81689H9C4 2.81689 2 4.81689 2 9.81689V15.8169C2 20.8169 4 22.8169 9 22.8169H15C20 22.8169 22 20.8169 22 15.8169V10.8169" stroke="#2196F3" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M15.75 5.81689H21.25" stroke="#2196F3" stroke-width="1.5" stroke-linecap="round"/>
|
||||
<path d="M18.5 8.56689V3.06689" stroke="#2196F3" stroke-width="1.5" stroke-linecap="round"/>
|
||||
<path d="M2.66992 19.767L7.59992 16.457C8.38992 15.927 9.52992 15.987 10.2399 16.597L10.5699 16.887C11.3499 17.557 12.6099 17.557 13.3899 16.887L17.5499 13.317C18.3299 12.647 19.5899 12.647 20.3699 13.317L21.9999 14.717" stroke="#2196F3" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
|
|
@ -0,0 +1,4 @@
|
|||
<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M19.57 14.24C19.28 14.53 18.82 14.53 18.54 14.24C18.25 13.95 18.25 13.49 18.54 13.21C20.54 11.21 20.54 7.95998 18.54 5.96998C16.54 3.97998 13.29 3.96998 11.3 5.96998C9.31 7.96998 9.3 11.22 11.3 13.21C11.59 13.5 11.59 13.96 11.3 14.24C11.01 14.53 10.55 14.53 10.27 14.24C7.7 11.67 7.7 7.48998 10.27 4.92998C12.84 2.36998 17.02 2.35998 19.58 4.92998C22.14 7.49998 22.14 11.67 19.57 14.24Z" fill="#0E3F66"/>
|
||||
<path d="M5.43 9.75998C5.72 9.46998 6.18 9.46998 6.46 9.75998C6.75 10.05 6.75 10.51 6.46 10.79C4.46 12.79 4.46 16.04 6.46 18.03C8.46 20.02 11.71 20.03 13.7 18.03C15.69 16.03 15.7 12.78 13.7 10.79C13.41 10.5 13.41 10.04 13.7 9.75998C13.99 9.46998 14.45 9.46998 14.73 9.75998C17.3 12.33 17.3 16.51 14.73 19.07C12.16 21.63 7.98 21.64 5.42 19.07C2.86 16.5 2.86 12.33 5.43 9.75998Z" fill="#0E3F66"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 912 B |
|
|
@ -0,0 +1,7 @@
|
|||
<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M12.5 15.5C14.71 15.5 16.5 13.71 16.5 11.5V6C16.5 3.79 14.71 2 12.5 2C10.29 2 8.5 3.79 8.5 6V11.5C8.5 13.71 10.29 15.5 12.5 15.5Z" stroke="#0E3F66" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M4.85001 9.65002V11.35C4.85001 15.57 8.28001 19 12.5 19C16.72 19 20.15 15.57 20.15 11.35V9.65002" stroke="#0E3F66" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M11.11 6.43C12.01 6.1 12.99 6.1 13.89 6.43" stroke="#0E3F66" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M11.7 8.54995C12.23 8.40995 12.78 8.40995 13.31 8.54995" stroke="#0E3F66" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M12.5 19V22" stroke="#0E3F66" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 916 B |
|
|
@ -35,7 +35,7 @@ class _OTPVerificationPageState extends State<OTPVerificationPage> {
|
|||
}
|
||||
|
||||
void _initializeTimer() {
|
||||
_otpTimer.initializeFromExpiry(expiryTimeString: widget.timeDue);
|
||||
_otpTimer.initializeFromExpiry(expiryTime: widget.timeDue);
|
||||
}
|
||||
|
||||
void _resendOTP() {
|
||||
|
|
@ -80,8 +80,8 @@ class _OTPVerificationPageState extends State<OTPVerificationPage> {
|
|||
),
|
||||
focusedBorder: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
borderSide:
|
||||
const BorderSide(color: Color.fromARGB(255, 14, 63, 102)),
|
||||
borderSide: const BorderSide(
|
||||
color: Color.fromARGB(255, 14, 63, 102)),
|
||||
),
|
||||
),
|
||||
onChanged: (value) {
|
||||
|
|
@ -102,7 +102,7 @@ class _OTPVerificationPageState extends State<OTPVerificationPage> {
|
|||
return BlocListener<AuthBloc, AuthState>(
|
||||
listener: (context, state) {
|
||||
if (state is AuthSuccess) {
|
||||
_otpTimer.initializeFromExpiry(expiryTimeString: state.timeDue);
|
||||
_otpTimer.initializeFromExpiry(expiryTime: state.timeDue);
|
||||
}
|
||||
},
|
||||
child: Scaffold(
|
||||
|
|
|
|||
|
|
@ -24,6 +24,10 @@ class $AssetsIconsGen {
|
|||
/// File path: assets/icons/Line 4.svg
|
||||
SvgGenImage get line4 => const SvgGenImage('assets/icons/Line 4.svg');
|
||||
|
||||
/// File path: assets/icons/MDS-Public-TW-Button (1).svg
|
||||
SvgGenImage get mDSPublicTWButton1 =>
|
||||
const SvgGenImage('assets/icons/MDS-Public-TW-Button (1).svg');
|
||||
|
||||
/// File path: assets/icons/MDS-Public-TW-Button.svg
|
||||
SvgGenImage get mDSPublicTWButton =>
|
||||
const SvgGenImage('assets/icons/MDS-Public-TW-Button.svg');
|
||||
|
|
@ -66,6 +70,9 @@ class $AssetsIconsGen {
|
|||
SvgGenImage get arrowRight =>
|
||||
const SvgGenImage('assets/icons/arrow-right.svg');
|
||||
|
||||
/// File path: assets/icons/arrow-up.svg
|
||||
SvgGenImage get arrowUp => const SvgGenImage('assets/icons/arrow-up.svg');
|
||||
|
||||
/// File path: assets/icons/back.svg
|
||||
SvgGenImage get back => const SvgGenImage('assets/icons/back.svg');
|
||||
|
||||
|
|
@ -77,6 +84,9 @@ class $AssetsIconsGen {
|
|||
SvgGenImage get calendarTick =>
|
||||
const SvgGenImage('assets/icons/calendar-tick.svg');
|
||||
|
||||
/// File path: assets/icons/camera2.svg
|
||||
SvgGenImage get camera2 => const SvgGenImage('assets/icons/camera2.svg');
|
||||
|
||||
/// File path: assets/icons/card-add.svg
|
||||
SvgGenImage get cardAdd => const SvgGenImage('assets/icons/card-add.svg');
|
||||
|
||||
|
|
@ -120,10 +130,22 @@ class $AssetsIconsGen {
|
|||
/// File path: assets/icons/favorite.svg
|
||||
SvgGenImage get favorite => const SvgGenImage('assets/icons/favorite.svg');
|
||||
|
||||
/// File path: assets/icons/flat-color-icons_idea.svg
|
||||
SvgGenImage get flatColorIconsIdea =>
|
||||
const SvgGenImage('assets/icons/flat-color-icons_idea.svg');
|
||||
|
||||
/// File path: assets/icons/flat-color-icons_planner.svg
|
||||
SvgGenImage get flatColorIconsPlanner =>
|
||||
const SvgGenImage('assets/icons/flat-color-icons_planner.svg');
|
||||
|
||||
/// File path: assets/icons/fluent-color_location-ripple-16.svg
|
||||
SvgGenImage get fluentColorLocationRipple16 =>
|
||||
const SvgGenImage('assets/icons/fluent-color_location-ripple-16.svg');
|
||||
|
||||
/// File path: assets/icons/gallery-add.svg
|
||||
SvgGenImage get galleryAdd =>
|
||||
const SvgGenImage('assets/icons/gallery-add.svg');
|
||||
|
||||
/// File path: assets/icons/game 2.svg
|
||||
SvgGenImage get game2 => const SvgGenImage('assets/icons/game 2.svg');
|
||||
|
||||
|
|
@ -164,6 +186,9 @@ class $AssetsIconsGen {
|
|||
/// File path: assets/icons/like.svg
|
||||
SvgGenImage get like => const SvgGenImage('assets/icons/like.svg');
|
||||
|
||||
/// File path: assets/icons/link-2.svg
|
||||
SvgGenImage get link2 => const SvgGenImage('assets/icons/link-2.svg');
|
||||
|
||||
/// File path: assets/icons/list.svg
|
||||
SvgGenImage get list => const SvgGenImage('assets/icons/list.svg');
|
||||
|
||||
|
|
@ -205,6 +230,10 @@ class $AssetsIconsGen {
|
|||
SvgGenImage get materialSymbolsLocationWork =>
|
||||
const SvgGenImage('assets/icons/material-symbols_location-work.svg');
|
||||
|
||||
/// File path: assets/icons/microphone-2.svg
|
||||
SvgGenImage get microphone2 =>
|
||||
const SvgGenImage('assets/icons/microphone-2.svg');
|
||||
|
||||
/// File path: assets/icons/nearby.svg
|
||||
SvgGenImage get nearby => const SvgGenImage('assets/icons/nearby.svg');
|
||||
|
||||
|
|
@ -318,6 +347,7 @@ class $AssetsIconsGen {
|
|||
lBALogo,
|
||||
line1,
|
||||
line4,
|
||||
mDSPublicTWButton1,
|
||||
mDSPublicTWButton,
|
||||
mDSPublicTWTag,
|
||||
nextButton,
|
||||
|
|
@ -330,9 +360,11 @@ class $AssetsIconsGen {
|
|||
arrowDown,
|
||||
arrowLeft,
|
||||
arrowRight,
|
||||
arrowUp,
|
||||
back,
|
||||
calendarTick2,
|
||||
calendarTick,
|
||||
camera2,
|
||||
cardAdd,
|
||||
cardPos,
|
||||
category2,
|
||||
|
|
@ -346,7 +378,10 @@ class $AssetsIconsGen {
|
|||
down,
|
||||
elementEqual,
|
||||
favorite,
|
||||
flatColorIconsIdea,
|
||||
flatColorIconsPlanner,
|
||||
fluentColorLocationRipple16,
|
||||
galleryAdd,
|
||||
game2,
|
||||
gameIconsWinterGloves,
|
||||
game,
|
||||
|
|
@ -358,6 +393,7 @@ class $AssetsIconsGen {
|
|||
infoPic,
|
||||
ionFastFoodOutline,
|
||||
like,
|
||||
link2,
|
||||
list,
|
||||
location,
|
||||
mapSelected,
|
||||
|
|
@ -369,6 +405,7 @@ class $AssetsIconsGen {
|
|||
materialSymbolsLocationOn,
|
||||
materialSymbolsLocationOnn,
|
||||
materialSymbolsLocationWork,
|
||||
microphone2,
|
||||
nearby,
|
||||
nearby2,
|
||||
next,
|
||||
|
|
|
|||
|
|
@ -24,4 +24,5 @@ class LightAppColors{
|
|||
static const divider = Color.fromARGB(255, 189, 189, 188);
|
||||
static const textPrice = Color.fromARGB(255, 85, 84, 81);
|
||||
static const deliverySelectedButton = Color.fromARGB(255, 237, 247, 238);
|
||||
static const loadingBorder = Color.fromARGB(255, 239, 239, 239);
|
||||
}
|
||||
|
|
@ -17,7 +17,8 @@ class OTPVerification extends StatefulWidget {
|
|||
|
||||
class _OTPVerificationState extends State<OTPVerification> {
|
||||
final List<FocusNode> _focusNodes = List.generate(5, (_) => FocusNode());
|
||||
final List<TextEditingController> _controllers = List.generate(5, (_) => TextEditingController());
|
||||
final List<TextEditingController> _controllers =
|
||||
List.generate(5, (_) => TextEditingController());
|
||||
late RemainingTime _otpTimer;
|
||||
|
||||
@override
|
||||
|
|
@ -29,7 +30,7 @@ class _OTPVerificationState extends State<OTPVerification> {
|
|||
|
||||
void _initializeTimer() {
|
||||
final authCubit = context.read<AuthCubit>();
|
||||
_otpTimer.initializeFromExpiry(expiryTimeString: authCubit.timeDue);
|
||||
_otpTimer.initializeFromExpiry(expiryTime: authCubit.timeDue);
|
||||
}
|
||||
|
||||
void _resendOTP() {
|
||||
|
|
@ -74,7 +75,8 @@ class _OTPVerificationState extends State<OTPVerification> {
|
|||
),
|
||||
focusedBorder: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
borderSide: const BorderSide(color: Color.fromARGB(255, 14, 63, 102)),
|
||||
borderSide: const BorderSide(
|
||||
color: Color.fromARGB(255, 14, 63, 102)),
|
||||
),
|
||||
),
|
||||
onChanged: (value) {
|
||||
|
|
@ -109,21 +111,27 @@ class _OTPVerificationState extends State<OTPVerification> {
|
|||
],
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 24),
|
||||
padding:
|
||||
const EdgeInsets.symmetric(horizontal: 24, vertical: 24),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Center(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(top: 0),
|
||||
child: SvgPicture.asset(Assets.images.logo.path, height: height / 5.2),
|
||||
child: SvgPicture.asset(Assets.images.logo.path,
|
||||
height: height / 5.2),
|
||||
),
|
||||
),
|
||||
SizedBox(height: height / 20),
|
||||
const Text("OTP Verification", style: TextStyle(fontSize: 33, fontWeight: FontWeight.bold)),
|
||||
const Text("OTP Verification",
|
||||
style: TextStyle(
|
||||
fontSize: 33, fontWeight: FontWeight.bold)),
|
||||
const SizedBox(height: 8),
|
||||
Text("Enter the verification code we just sent to your device.",
|
||||
style: TextStyle(fontSize: 17, fontWeight: FontWeight.w500),
|
||||
const Text(
|
||||
"Enter the verification code we just sent to your device.",
|
||||
style:
|
||||
TextStyle(fontSize: 17, fontWeight: FontWeight.w500),
|
||||
),
|
||||
const SizedBox(height: 25),
|
||||
_buildOTPFields(),
|
||||
|
|
@ -134,10 +142,14 @@ class _OTPVerificationState extends State<OTPVerification> {
|
|||
child: Button(
|
||||
text: "Verify",
|
||||
onPressed: () {
|
||||
final otpCode = _controllers.map((c) => c.text).join();
|
||||
final otpCode =
|
||||
_controllers.map((c) => c.text).join();
|
||||
if (otpCode.length == 5) {
|
||||
context.read<AuthCubit>().verifyOTP(otpCode);
|
||||
Navigator.push(context, MaterialPageRoute(builder: (context) => UserInfo()));
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => const UserInfo()));
|
||||
}
|
||||
},
|
||||
color: const Color.fromARGB(255, 30, 137, 221),
|
||||
|
|
@ -150,22 +162,27 @@ class _OTPVerificationState extends State<OTPVerification> {
|
|||
Row(
|
||||
children: [
|
||||
const Expanded(
|
||||
child: Divider(thickness: 1, color: Colors.grey),
|
||||
child:
|
||||
Divider(thickness: 1, color: Colors.grey),
|
||||
),
|
||||
ValueListenableBuilder<int>(
|
||||
valueListenable: _otpTimer.remainingSeconds,
|
||||
builder: (context, seconds, _) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 8.0),
|
||||
padding: const EdgeInsets.symmetric(
|
||||
horizontal: 8.0),
|
||||
child: Text(
|
||||
"Resend OTP in ${_otpTimer.formatTime()}",
|
||||
style: const TextStyle(fontWeight: FontWeight.w500, fontSize: 18),
|
||||
style: const TextStyle(
|
||||
fontWeight: FontWeight.w500,
|
||||
fontSize: 18),
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
const Expanded(
|
||||
child: Divider(thickness: 1, color: Colors.grey),
|
||||
child:
|
||||
Divider(thickness: 1, color: Colors.grey),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
|
@ -179,7 +196,9 @@ class _OTPVerificationState extends State<OTPVerification> {
|
|||
"Resend OTP",
|
||||
style: TextStyle(
|
||||
fontSize: 16,
|
||||
color: canResend ? const Color.fromARGB(255, 0, 0, 0) : Colors.grey,
|
||||
color: canResend
|
||||
? const Color.fromARGB(255, 0, 0, 0)
|
||||
: Colors.grey,
|
||||
),
|
||||
),
|
||||
);
|
||||
|
|
|
|||
|
|
@ -98,7 +98,8 @@ class _DiscoverState extends State<Discover> with TickerProviderStateMixin {
|
|||
showGeneralDialog(
|
||||
context: context,
|
||||
barrierDismissible: true,
|
||||
barrierLabel: MaterialLocalizations.of(context).modalBarrierDismissLabel,
|
||||
barrierLabel:
|
||||
MaterialLocalizations.of(context).modalBarrierDismissLabel,
|
||||
barrierColor: Colors.black.withOpacity(0.1),
|
||||
transitionDuration: const Duration(milliseconds: 400),
|
||||
pageBuilder: (context, animation1, animation2) {
|
||||
|
|
@ -108,7 +109,8 @@ class _DiscoverState extends State<Discover> with TickerProviderStateMixin {
|
|||
alignment: Alignment.topRight,
|
||||
child: Container(
|
||||
width: 250,
|
||||
margin: const EdgeInsets.only(top: kToolbarHeight + 65, right: 16),
|
||||
margin:
|
||||
const EdgeInsets.only(top: kToolbarHeight + 65, right: 16),
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.circular(20),
|
||||
|
|
@ -131,7 +133,8 @@ class _DiscoverState extends State<Discover> with TickerProviderStateMixin {
|
|||
onTap: () {
|
||||
setDialogState(() {
|
||||
setState(() {
|
||||
_filters[filterName] = !_filters[filterName]!;
|
||||
_filters[filterName] =
|
||||
!_filters[filterName]!;
|
||||
});
|
||||
});
|
||||
},
|
||||
|
|
@ -139,13 +142,15 @@ class _DiscoverState extends State<Discover> with TickerProviderStateMixin {
|
|||
padding: const EdgeInsets.symmetric(
|
||||
horizontal: 18.0, vertical: 12.0),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
filterName,
|
||||
style: TextStyle(fontSize: 16),
|
||||
style: const TextStyle(fontSize: 16),
|
||||
),
|
||||
_buildCustomCheckbox(_filters[filterName]!),
|
||||
_buildCustomCheckbox(
|
||||
_filters[filterName]!),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
|
@ -167,7 +172,8 @@ class _DiscoverState extends State<Discover> with TickerProviderStateMixin {
|
|||
);
|
||||
|
||||
return ScaleTransition(
|
||||
scale: Tween<double>(begin: 0.8, end: 1.0).animate(curvedAnimation),
|
||||
scale:
|
||||
Tween<double>(begin: 0.8, end: 1.0).animate(curvedAnimation),
|
||||
alignment: Alignment.topRight,
|
||||
child: FadeTransition(
|
||||
opacity: curvedAnimation,
|
||||
|
|
@ -226,7 +232,8 @@ class _DiscoverState extends State<Discover> with TickerProviderStateMixin {
|
|||
const SizedBox(height: 12),
|
||||
_buildAnimatedSection(_buildFlashSaleSection(), 6),
|
||||
const SizedBox(height: 24),
|
||||
_buildAnimatedSection(_buildSectionTitle("Special Discount"), 7),
|
||||
_buildAnimatedSection(
|
||||
_buildSectionTitle("Special Discount"), 7),
|
||||
const SizedBox(height: 12),
|
||||
_buildAnimatedSection(_buildSpecialDiscountSection(), 1),
|
||||
const SizedBox(height: 24),
|
||||
|
|
@ -237,7 +244,8 @@ class _DiscoverState extends State<Discover> with TickerProviderStateMixin {
|
|||
const SizedBox(height: 12),
|
||||
_buildAnimatedSection(_buildSeasonalDiscountSection(), 3),
|
||||
const SizedBox(height: 24),
|
||||
_buildAnimatedSection(_buildSectionTitle("Occasion Specials"), 4),
|
||||
_buildAnimatedSection(
|
||||
_buildSectionTitle("Occasion Specials"), 4),
|
||||
const SizedBox(height: 12),
|
||||
_buildAnimatedSection(_buildCraftingSomethingSection(), 5),
|
||||
const SizedBox(height: 24),
|
||||
|
|
@ -291,7 +299,8 @@ class _DiscoverState extends State<Discover> with TickerProviderStateMixin {
|
|||
borderRadius: BorderRadius.circular(12),
|
||||
),
|
||||
child: IconButton(
|
||||
icon: SvgPicture.asset(Assets.icons.sort.path, color: Colors.white),
|
||||
icon:
|
||||
SvgPicture.asset(Assets.icons.sort.path, color: Colors.white),
|
||||
onPressed: _showFilterMenu,
|
||||
),
|
||||
);
|
||||
|
|
@ -307,7 +316,8 @@ class _DiscoverState extends State<Discover> with TickerProviderStateMixin {
|
|||
color: isChecked ? LightAppColors.primary : Colors.transparent,
|
||||
border: isChecked
|
||||
? null
|
||||
: Border.all(color: Color.fromARGB(255, 89, 93, 98), width: 2),
|
||||
: Border.all(
|
||||
color: const Color.fromARGB(255, 89, 93, 98), width: 2),
|
||||
borderRadius: BorderRadius.circular(6),
|
||||
),
|
||||
child: AnimatedSwitcher(
|
||||
|
|
@ -359,7 +369,8 @@ class _DiscoverState extends State<Discover> with TickerProviderStateMixin {
|
|||
color: backgroundColor,
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
),
|
||||
child: SvgPicture.asset(categoryIcons[index], color: iconColor),
|
||||
child:
|
||||
SvgPicture.asset(categoryIcons[index], color: iconColor),
|
||||
);
|
||||
},
|
||||
separatorBuilder: (context, index) => const SizedBox(width: 12),
|
||||
|
|
@ -516,7 +527,8 @@ class _DiscoverState extends State<Discover> with TickerProviderStateMixin {
|
|||
children: [
|
||||
Text(
|
||||
title,
|
||||
style: const TextStyle(fontSize: 18, fontWeight: FontWeight.normal),
|
||||
style: const TextStyle(
|
||||
fontSize: 18, fontWeight: FontWeight.normal),
|
||||
),
|
||||
const SizedBox(width: 8),
|
||||
const Expanded(
|
||||
|
|
@ -576,7 +588,8 @@ class _DiscoverState extends State<Discover> with TickerProviderStateMixin {
|
|||
SizedBox(
|
||||
width: 250,
|
||||
child: FlashSaleCard(
|
||||
imagePath: Assets.images.wp1929534FastFoodWallpapers1.path,
|
||||
imagePath:
|
||||
Assets.images.wp1929534FastFoodWallpapers1.path,
|
||||
title: "Tulip Luncheon Meat",
|
||||
location: "Fresno (2km away)",
|
||||
originalPrice: "370",
|
||||
|
|
@ -601,7 +614,8 @@ class _DiscoverState extends State<Discover> with TickerProviderStateMixin {
|
|||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(15),
|
||||
image: DecorationImage(
|
||||
image: AssetImage(Assets.images.wp1929534FastFoodWallpapers1.path),
|
||||
image: AssetImage(
|
||||
Assets.images.wp1929534FastFoodWallpapers1.path),
|
||||
fit: BoxFit.cover,
|
||||
),
|
||||
),
|
||||
|
|
@ -746,7 +760,8 @@ class _DiscoverState extends State<Discover> with TickerProviderStateMixin {
|
|||
category: "Fast Food",
|
||||
discount: "Up to 25% Off",
|
||||
rating: 4.2,
|
||||
imagePath: Assets.images.wp1929534FastFoodWallpapers1.path,
|
||||
imagePath:
|
||||
Assets.images.wp1929534FastFoodWallpapers1.path,
|
||||
),
|
||||
const SizedBox(width: 16),
|
||||
FirstPurchaseCard(
|
||||
|
|
@ -797,7 +812,7 @@ class FlashSaleCard extends StatelessWidget {
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final timer = RemainingTime()
|
||||
..initializeFromExpiry(expiryTimeString: expiryTimeString);
|
||||
..initializeFromExpiry(expiryTime: expiryTimeString);
|
||||
return Container(
|
||||
decoration: BoxDecoration(
|
||||
color: LightAppColors.cardBackground,
|
||||
|
|
@ -902,7 +917,8 @@ class FlashSaleCard extends StatelessWidget {
|
|||
Text(
|
||||
location,
|
||||
style: const TextStyle(
|
||||
color: LightAppColors.offerCardDetail, fontSize: 12),
|
||||
color: LightAppColors.offerCardDetail,
|
||||
fontSize: 12),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
|
@ -960,7 +976,9 @@ class FlashSaleCard extends StatelessWidget {
|
|||
Container(
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(25),
|
||||
border: Border.all(color: const Color.fromARGB(255, 76, 175, 80), width: 1.0),
|
||||
border: Border.all(
|
||||
color: const Color.fromARGB(255, 76, 175, 80),
|
||||
width: 1.0),
|
||||
color: Colors.transparent,
|
||||
),
|
||||
child: Padding(
|
||||
|
|
@ -969,7 +987,8 @@ class FlashSaleCard extends StatelessWidget {
|
|||
children: [
|
||||
SvgPicture.asset(
|
||||
Assets.icons.cardPos.path,
|
||||
color: const Color.fromARGB(255, 95, 95, 95),
|
||||
color:
|
||||
const Color.fromARGB(255, 95, 95, 95),
|
||||
height: 17,
|
||||
),
|
||||
const SizedBox(width: 4),
|
||||
|
|
@ -989,7 +1008,9 @@ class FlashSaleCard extends StatelessWidget {
|
|||
Container(
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(25),
|
||||
border: Border.all(color: const Color.fromARGB(255, 76, 175, 80), width: 1.0),
|
||||
border: Border.all(
|
||||
color: const Color.fromARGB(255, 76, 175, 80),
|
||||
width: 1.0),
|
||||
color: Colors.transparent,
|
||||
),
|
||||
child: Padding(
|
||||
|
|
@ -998,7 +1019,8 @@ class FlashSaleCard extends StatelessWidget {
|
|||
children: [
|
||||
SvgPicture.asset(
|
||||
Assets.icons.shoppingCart.path,
|
||||
color: const Color.fromARGB(255, 95, 95, 95),
|
||||
color:
|
||||
const Color.fromARGB(255, 95, 95, 95),
|
||||
height: 17,
|
||||
),
|
||||
const SizedBox(width: 4),
|
||||
|
|
@ -1187,7 +1209,8 @@ class FirstPurchaseCard extends StatelessWidget {
|
|||
Text(
|
||||
category,
|
||||
style: const TextStyle(
|
||||
color: LightAppColors.nearbyPopuphint, fontSize: 14),
|
||||
color: LightAppColors.nearbyPopuphint,
|
||||
fontSize: 14),
|
||||
),
|
||||
const SizedBox(height: 5),
|
||||
Text(
|
||||
|
|
@ -1199,7 +1222,8 @@ class FirstPurchaseCard extends StatelessWidget {
|
|||
const SizedBox(height: 5),
|
||||
Row(
|
||||
children: [
|
||||
SvgPicture.asset(Assets.icons.star.path, width: 16),
|
||||
SvgPicture.asset(Assets.icons.star.path,
|
||||
width: 16),
|
||||
const SizedBox(width: 4),
|
||||
Text(
|
||||
rating.toString(),
|
||||
|
|
|
|||
|
|
@ -10,16 +10,14 @@ import 'package:lba/widgets/remainingTime.dart';
|
|||
class ListScreen extends StatefulWidget {
|
||||
final bool delivery;
|
||||
final bool pickup;
|
||||
int initialTimerStatus;
|
||||
final String expiryTimeString;
|
||||
final DateTime expiryTime;
|
||||
final VoidCallback? ontap;
|
||||
|
||||
ListScreen({
|
||||
const ListScreen({
|
||||
super.key,
|
||||
required this.delivery,
|
||||
required this.pickup,
|
||||
this.initialTimerStatus=3,
|
||||
required this.expiryTimeString,
|
||||
required this.expiryTime,
|
||||
this.ontap,
|
||||
});
|
||||
|
||||
|
|
@ -35,15 +33,16 @@ class _ListScreenState extends State<ListScreen> {
|
|||
void initState() {
|
||||
super.initState();
|
||||
_timer = RemainingTime();
|
||||
_timerStatus = ValueNotifier<int>(widget.initialTimerStatus);
|
||||
_timer.initializeFromExpiry(expiryTimeString: widget.expiryTimeString);
|
||||
_timerStatus = ValueNotifier<int>(3);
|
||||
_timer.initializeFromExpiry(expiryTime: widget.expiryTime);
|
||||
|
||||
_timer.remainingSeconds.addListener(() {
|
||||
if (_timer.remainingSeconds.value <= 0) {
|
||||
final secondsLeft = _timer.remainingSeconds.value;
|
||||
if (secondsLeft <= 0) {
|
||||
_timerStatus.value = 3;
|
||||
} else if (_timer.remainingSeconds.value < 18000) {
|
||||
} else if (secondsLeft < 18000) {
|
||||
_timerStatus.value = 1;
|
||||
} else if (_timer.remainingSeconds.value > 18000) {
|
||||
} else {
|
||||
_timerStatus.value = 2;
|
||||
}
|
||||
});
|
||||
|
|
@ -60,213 +59,228 @@ class _ListScreenState extends State<ListScreen> {
|
|||
Widget build(BuildContext context) {
|
||||
final width = context.screenWidth;
|
||||
final height = context.screenHeight;
|
||||
return
|
||||
GestureDetector(
|
||||
onTap: widget.ontap,
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(bottom: 16),
|
||||
child: Stack(
|
||||
children: [
|
||||
Container(
|
||||
margin: const EdgeInsets.only(top: 60),
|
||||
padding: const EdgeInsets.only(top: 80),
|
||||
decoration: BoxDecoration(
|
||||
color: const Color.fromARGB(255, 242, 242, 241),
|
||||
borderRadius: BorderRadius.circular(10),
|
||||
),
|
||||
child: Padding(
|
||||
padding: EdgeInsets.fromLTRB(12, 0, width/50, 15),
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
Expanded(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
SvgPicture.asset(Assets.icons.phCheese.path),
|
||||
const SizedBox(width: 5),
|
||||
const Text(
|
||||
"Amul Cheese Slices",
|
||||
style: TextStyle(fontWeight: FontWeight.bold),
|
||||
),
|
||||
],
|
||||
),
|
||||
const SizedBox(height: 10),
|
||||
Row(
|
||||
children: [
|
||||
SvgPicture.asset(
|
||||
Assets.icons.location.path,
|
||||
color: const Color.fromARGB(255, 157, 157, 155),
|
||||
width: 14,
|
||||
),
|
||||
const SizedBox(width: 5),
|
||||
const Text("Sharjah (750m away)",style: TextStyle(
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.w500
|
||||
),),
|
||||
],
|
||||
),
|
||||
const SizedBox(height: 10),
|
||||
Row(
|
||||
children: [
|
||||
SvgPicture.asset(
|
||||
Assets.icons.coin.path,
|
||||
width: 14,
|
||||
),
|
||||
const SizedBox(width: 5),
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: const [
|
||||
Text(
|
||||
"18.15 AED",
|
||||
style: TextStyle(
|
||||
color: Color.fromARGB(255, 157, 157, 155),
|
||||
fontSize: 10,
|
||||
decoration: TextDecoration.lineThrough,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 0),
|
||||
Row(
|
||||
children: [
|
||||
Text("15.84 AED",style: TextStyle(
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.w500
|
||||
),),
|
||||
SizedBox(width: 4),
|
||||
Text(
|
||||
"(13% off)",
|
||||
style: TextStyle(
|
||||
color: Color.fromARGB(255, 76, 175, 80),
|
||||
fontSize: 10,
|
||||
fontWeight: FontWeight.w500
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: EdgeInsets.fromLTRB(0, 35, widget.delivery == false || widget.pickup == false ? width/5 : width/60, 0),
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
SvgPicture.asset(
|
||||
Assets.icons.star.path,
|
||||
width: 14,
|
||||
),
|
||||
const SizedBox(width: 2),
|
||||
const Text(
|
||||
"4.8",
|
||||
style: TextStyle(
|
||||
color: Color.fromARGB(255, 112, 112, 110),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
const SizedBox(height: 10),
|
||||
Row(
|
||||
children: [
|
||||
if (widget.delivery)
|
||||
OrderType(
|
||||
icon: Assets.icons.cardPos.path,
|
||||
typename: "Delivery",
|
||||
fill: false,
|
||||
),
|
||||
if (widget.delivery) const SizedBox(width: 5),
|
||||
if (widget.pickup)
|
||||
OrderType(
|
||||
icon: Assets.icons.shoppingCart.path,
|
||||
typename: "Pickup",
|
||||
fill: false,
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
return GestureDetector(
|
||||
onTap: widget.ontap,
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(bottom: 16),
|
||||
child: Stack(
|
||||
children: [
|
||||
Container(
|
||||
margin: const EdgeInsets.only(top: 60),
|
||||
padding: const EdgeInsets.only(top: 80),
|
||||
decoration: BoxDecoration(
|
||||
color: const Color.fromARGB(255, 242, 242, 241),
|
||||
borderRadius: BorderRadius.circular(10),
|
||||
),
|
||||
ClipRRect(
|
||||
borderRadius: const BorderRadius.only(
|
||||
topRight: Radius.circular(10),
|
||||
topLeft: Radius.circular(10),
|
||||
),
|
||||
child: Image.asset(
|
||||
Assets.images.media.path,
|
||||
width: double.infinity,
|
||||
height: 130,
|
||||
fit: BoxFit.cover,
|
||||
),
|
||||
),
|
||||
Positioned(
|
||||
top: 10,
|
||||
left: 10,
|
||||
child: ValueListenableBuilder<int>(
|
||||
valueListenable: _timerStatus,
|
||||
builder: (context, timerStatus, child) {
|
||||
return Container(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 6),
|
||||
height: 20,
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(6),
|
||||
color: timerStatus == 1
|
||||
? const Color.fromARGB(255, 255, 193, 7)
|
||||
: timerStatus == 2
|
||||
? const Color.fromARGB(255, 76, 175, 80)
|
||||
: timerStatus == 3
|
||||
? const Color.fromARGB(255, 244, 67, 54)
|
||||
: const Color.fromARGB(255, 244, 67, 54),
|
||||
),
|
||||
child: Row(
|
||||
child: Padding(
|
||||
padding: EdgeInsets.fromLTRB(12, 0, width / 50, 15),
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
Expanded(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: [
|
||||
SvgPicture.asset(
|
||||
timerStatus == 1
|
||||
? Assets.icons.timer.path
|
||||
: timerStatus == 2
|
||||
? Assets.icons.timerStart.path
|
||||
: Assets.icons.timerPause.path,
|
||||
width: 12,
|
||||
height: 12,
|
||||
Row(
|
||||
children: [
|
||||
SvgPicture.asset(Assets.icons.phCheese.path),
|
||||
const SizedBox(width: 5),
|
||||
const Text(
|
||||
"Amul Cheese Slices",
|
||||
style: TextStyle(fontWeight: FontWeight.bold),
|
||||
),
|
||||
],
|
||||
),
|
||||
const SizedBox(width: 5),
|
||||
ValueListenableBuilder<int>(
|
||||
valueListenable: _timer.remainingSeconds,
|
||||
builder: (context, seconds, child) {
|
||||
return Text(
|
||||
timerStatus==3? "Unavailable":"${_timer.formatTime()} left",
|
||||
style: const TextStyle(
|
||||
color: Colors.white,
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.w400,
|
||||
),
|
||||
);
|
||||
},
|
||||
const SizedBox(height: 10),
|
||||
Row(
|
||||
children: [
|
||||
SvgPicture.asset(
|
||||
Assets.icons.location.path,
|
||||
color:
|
||||
const Color.fromARGB(255, 157, 157, 155),
|
||||
width: 14,
|
||||
),
|
||||
const SizedBox(width: 5),
|
||||
const Text(
|
||||
"Sharjah (750m away)",
|
||||
style: TextStyle(
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.w500),
|
||||
),
|
||||
],
|
||||
),
|
||||
const SizedBox(height: 10),
|
||||
Row(
|
||||
children: [
|
||||
SvgPicture.asset(
|
||||
Assets.icons.coin.path,
|
||||
width: 14,
|
||||
),
|
||||
const SizedBox(width: 5),
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: const [
|
||||
Text(
|
||||
"18.15 AED",
|
||||
style: TextStyle(
|
||||
color: Color.fromARGB(
|
||||
255, 157, 157, 155),
|
||||
fontSize: 10,
|
||||
decoration:
|
||||
TextDecoration.lineThrough,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 0),
|
||||
Row(
|
||||
children: [
|
||||
Text(
|
||||
"15.84 AED",
|
||||
style: TextStyle(
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.w500),
|
||||
),
|
||||
SizedBox(width: 4),
|
||||
Text(
|
||||
"(13% off)",
|
||||
style: TextStyle(
|
||||
color: Color.fromARGB(
|
||||
255, 76, 175, 80),
|
||||
fontSize: 10,
|
||||
fontWeight: FontWeight.w500),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
Padding(
|
||||
padding: EdgeInsets.fromLTRB(
|
||||
0,
|
||||
35,
|
||||
widget.delivery == false || widget.pickup == false
|
||||
? width / 5
|
||||
: width / 60,
|
||||
0),
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
SvgPicture.asset(
|
||||
Assets.icons.star.path,
|
||||
width: 14,
|
||||
),
|
||||
const SizedBox(width: 2),
|
||||
const Text(
|
||||
"4.8",
|
||||
style: TextStyle(
|
||||
color:
|
||||
Color.fromARGB(255, 112, 112, 110),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
const SizedBox(height: 10),
|
||||
Row(
|
||||
children: [
|
||||
if (widget.delivery)
|
||||
OrderType(
|
||||
icon: Assets.icons.cardPos.path,
|
||||
typename: "Delivery",
|
||||
fill: false,
|
||||
),
|
||||
if (widget.delivery)
|
||||
const SizedBox(width: 5),
|
||||
if (widget.pickup)
|
||||
OrderType(
|
||||
icon: Assets.icons.shoppingCart.path,
|
||||
typename: "Pickup",
|
||||
fill: false,
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
ClipRRect(
|
||||
borderRadius: const BorderRadius.only(
|
||||
topRight: Radius.circular(10),
|
||||
topLeft: Radius.circular(10),
|
||||
),
|
||||
child: Image.asset(
|
||||
Assets.images.media.path,
|
||||
width: double.infinity,
|
||||
height: 130,
|
||||
fit: BoxFit.cover,
|
||||
),
|
||||
),
|
||||
Positioned(
|
||||
top: 10,
|
||||
left: 10,
|
||||
child: ValueListenableBuilder<int>(
|
||||
valueListenable: _timerStatus,
|
||||
builder: (context, timerStatus, child) {
|
||||
return Container(
|
||||
padding:
|
||||
const EdgeInsets.symmetric(horizontal: 6),
|
||||
height: 20,
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(6),
|
||||
color: timerStatus == 1
|
||||
? const Color.fromARGB(255, 255, 193, 7)
|
||||
: timerStatus == 2
|
||||
? const Color.fromARGB(255, 76, 175, 80)
|
||||
: const Color.fromARGB(255, 244, 67, 54),
|
||||
),
|
||||
child: Row(
|
||||
children: [
|
||||
SvgPicture.asset(
|
||||
timerStatus == 1
|
||||
? Assets.icons.timer.path
|
||||
: timerStatus == 2
|
||||
? Assets.icons.timerStart.path
|
||||
: Assets.icons.timerPause.path,
|
||||
width: 12,
|
||||
height: 12,
|
||||
),
|
||||
const SizedBox(width: 5),
|
||||
ValueListenableBuilder<int>(
|
||||
valueListenable: _timer.remainingSeconds,
|
||||
builder: (context, seconds, child) {
|
||||
return Text(
|
||||
timerStatus == 3
|
||||
? "Unavailable"
|
||||
: "${_timer.formatTime()} left",
|
||||
style: const TextStyle(
|
||||
color: Colors.white,
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.w400,
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -370,7 +370,7 @@ class _CustomMapState extends State<CustomMap>
|
|||
TileLayer(
|
||||
urlTemplate:
|
||||
'https://tile.openstreetmap.org/{z}/{x}/{y}.png',
|
||||
userAgentPackageName: 'com.example.app',
|
||||
userAgentPackageName: 'com.example.lba',
|
||||
),
|
||||
MarkerLayer(markers: _markers),
|
||||
],
|
||||
|
|
|
|||
|
|
@ -92,7 +92,8 @@ class _NearbyState extends State<Nearby> with TickerProviderStateMixin {
|
|||
),
|
||||
),
|
||||
filled: true,
|
||||
fillColor: const Color.fromARGB(255, 248, 248, 248),
|
||||
fillColor:
|
||||
const Color.fromARGB(255, 248, 248, 248),
|
||||
contentPadding: const EdgeInsets.symmetric(
|
||||
horizontal: 16.0,
|
||||
),
|
||||
|
|
@ -149,11 +150,14 @@ class _NearbyState extends State<Nearby> with TickerProviderStateMixin {
|
|||
Expanded(
|
||||
child: AnimatedSwitcher(
|
||||
duration: const Duration(milliseconds: 500),
|
||||
transitionBuilder: (Widget child, Animation<double> animation) {
|
||||
transitionBuilder:
|
||||
(Widget child, Animation<double> animation) {
|
||||
final slideAnimation = Tween<Offset>(
|
||||
begin: Offset(child.key == const ValueKey('list') ? -1.0 : 1.0, 0.0),
|
||||
begin: Offset(
|
||||
child.key == const ValueKey('list') ? -1.0 : 1.0, 0.0),
|
||||
end: Offset.zero,
|
||||
).animate(CurvedAnimation(parent: animation, curve: Curves.easeInOutCubic));
|
||||
).animate(CurvedAnimation(
|
||||
parent: animation, curve: Curves.easeInOutCubic));
|
||||
|
||||
return ClipRect(
|
||||
child: SlideTransition(
|
||||
|
|
@ -231,10 +235,12 @@ class _NearbyState extends State<Nearby> with TickerProviderStateMixin {
|
|||
borderRadius: BorderRadius.only(
|
||||
topLeft: const Radius.circular(12),
|
||||
bottomLeft: const Radius.circular(12),
|
||||
topRight:
|
||||
selectedIndex == 1 ? const Radius.circular(12) : Radius.zero,
|
||||
bottomRight:
|
||||
selectedIndex == 1 ? const Radius.circular(12) : Radius.zero,
|
||||
topRight: selectedIndex == 1
|
||||
? const Radius.circular(12)
|
||||
: Radius.zero,
|
||||
bottomRight: selectedIndex == 1
|
||||
? const Radius.circular(12)
|
||||
: Radius.zero,
|
||||
),
|
||||
),
|
||||
),
|
||||
|
|
@ -254,10 +260,12 @@ class _NearbyState extends State<Nearby> with TickerProviderStateMixin {
|
|||
borderRadius: BorderRadius.only(
|
||||
topRight: const Radius.circular(12),
|
||||
bottomRight: const Radius.circular(12),
|
||||
bottomLeft:
|
||||
selectedIndex == 0 ? const Radius.circular(12) : Radius.zero,
|
||||
topLeft:
|
||||
selectedIndex == 0 ? const Radius.circular(12) : Radius.zero,
|
||||
bottomLeft: selectedIndex == 0
|
||||
? const Radius.circular(12)
|
||||
: Radius.zero,
|
||||
topLeft: selectedIndex == 0
|
||||
? const Radius.circular(12)
|
||||
: Radius.zero,
|
||||
),
|
||||
),
|
||||
),
|
||||
|
|
@ -268,26 +276,29 @@ class _NearbyState extends State<Nearby> with TickerProviderStateMixin {
|
|||
}
|
||||
|
||||
Widget _buildListContent({Key? key}) {
|
||||
final now = DateTime.now();
|
||||
|
||||
final listItems = [
|
||||
ListScreen(
|
||||
delivery: true,
|
||||
pickup: false,
|
||||
expiryTimeString: "2025-05-19T13:30:49.623619357Z",
|
||||
expiryTime: now.add(const Duration(hours: 10)),
|
||||
ontap: () {
|
||||
Navigator.of(context).push(
|
||||
MaterialPageRoute(builder: (context) => const Productdetail()),
|
||||
MaterialPageRoute(
|
||||
builder: (context) => const Productdetail()),
|
||||
);
|
||||
},
|
||||
),
|
||||
ListScreen(
|
||||
delivery: false,
|
||||
pickup: true,
|
||||
expiryTimeString: "2025-05-25T05:20:49.623619357Z",
|
||||
expiryTime: now.add(const Duration(hours: 2)),
|
||||
),
|
||||
ListScreen(
|
||||
delivery: true,
|
||||
pickup: true,
|
||||
expiryTimeString: "2025-05-12T13:20:37.435249520Z",
|
||||
expiryTime: now.subtract(const Duration(minutes: 10)),
|
||||
),
|
||||
];
|
||||
|
||||
|
|
@ -308,7 +319,8 @@ class _NearbyState extends State<Nearby> with TickerProviderStateMixin {
|
|||
value: selectedOption,
|
||||
icon: Padding(
|
||||
padding: const EdgeInsets.only(left: 6),
|
||||
child: SvgPicture.asset(Assets.icons.arrowDown.path),
|
||||
child:
|
||||
SvgPicture.asset(Assets.icons.arrowDown.path),
|
||||
),
|
||||
elevation: 16,
|
||||
dropdownColor: Colors.white,
|
||||
|
|
@ -322,8 +334,8 @@ class _NearbyState extends State<Nearby> with TickerProviderStateMixin {
|
|||
selectedOption = newValue!;
|
||||
});
|
||||
},
|
||||
items:
|
||||
options.map<DropdownMenuItem<String>>((String value) {
|
||||
items: options
|
||||
.map<DropdownMenuItem<String>>((String value) {
|
||||
return DropdownMenuItem<String>(
|
||||
value: value,
|
||||
child: Text(value),
|
||||
|
|
@ -338,7 +350,8 @@ class _NearbyState extends State<Nearby> with TickerProviderStateMixin {
|
|||
physics: const NeverScrollableScrollPhysics(),
|
||||
itemCount: listItems.length,
|
||||
itemBuilder: (context, index) {
|
||||
final animation = Tween<double>(begin: 0.0, end: 1.0).animate(
|
||||
final animation =
|
||||
Tween<double>(begin: 0.0, end: 1.0).animate(
|
||||
CurvedAnimation(
|
||||
parent: _listAnimationController,
|
||||
curve: Interval(
|
||||
|
|
@ -413,7 +426,8 @@ class _NearbyState extends State<Nearby> with TickerProviderStateMixin {
|
|||
child: Padding(
|
||||
padding: const EdgeInsets.all(1.0),
|
||||
child: Center(
|
||||
child: SvgPicture.asset(icon, color: iconColor),
|
||||
child:
|
||||
SvgPicture.asset(icon, color: iconColor),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
|
@ -421,7 +435,8 @@ class _NearbyState extends State<Nearby> with TickerProviderStateMixin {
|
|||
Text(
|
||||
text,
|
||||
style: TextStyle(
|
||||
color: isSelected ? Colors.white : Colors.black87,
|
||||
color:
|
||||
isSelected ? Colors.white : Colors.black87,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
|
|
@ -433,7 +448,8 @@ class _NearbyState extends State<Nearby> with TickerProviderStateMixin {
|
|||
bottom: 0,
|
||||
left: 0,
|
||||
right: 0,
|
||||
child: SvgPicture.asset(Assets.icons.shape.path, height: 4),
|
||||
child:
|
||||
SvgPicture.asset(Assets.icons.shape.path, height: 4),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
|
|
|||
|
|
@ -116,7 +116,7 @@ class _MapSelectionScreenState extends State<MapSelectionScreen> {
|
|||
children: [
|
||||
TileLayer(
|
||||
urlTemplate: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png',
|
||||
userAgentPackageName: 'com.example.app',
|
||||
userAgentPackageName: 'com.example.lba',
|
||||
),
|
||||
],
|
||||
),
|
||||
|
|
|
|||
|
|
@ -15,13 +15,13 @@ class Productdetail extends StatefulWidget {
|
|||
|
||||
class _ProductdetailState extends State<Productdetail>
|
||||
with SingleTickerProviderStateMixin {
|
||||
String selectedImage = Assets.images.media.path;
|
||||
String selectedImage = Assets.images.wp1929534FastFoodWallpapers1.path;
|
||||
int selectedIndex = 0;
|
||||
|
||||
final List<String> imageList = [
|
||||
Assets.images.wp1929534FastFoodWallpapers1.path,
|
||||
Assets.images.media.path,
|
||||
Assets.images.topDealsAndStores.path,
|
||||
Assets.images.wp1929534FastFoodWallpapers1.path,
|
||||
Assets.images.image.path,
|
||||
];
|
||||
|
||||
|
|
|
|||
|
|
@ -260,11 +260,11 @@ class _ShopState extends State<Shop> with TickerProviderStateMixin {
|
|||
style: TextStyle(color: isOpen ? Colors.green : Colors.red),
|
||||
),
|
||||
const SizedBox(width: 5),
|
||||
Container(
|
||||
isOpen? Container(
|
||||
color: LightAppColors.productDetailDivider,
|
||||
width: 1,
|
||||
height: 13,
|
||||
),
|
||||
) : SizedBox(),
|
||||
const SizedBox(width: 5),
|
||||
Text(
|
||||
timeRange,
|
||||
|
|
|
|||
|
|
@ -7,9 +7,21 @@ class RemainingTime {
|
|||
DateTime? _expiryTime;
|
||||
Timer? _timer;
|
||||
|
||||
void initializeFromExpiry({required String expiryTimeString}) {
|
||||
void initializeFromExpiry({required dynamic expiryTime}) {
|
||||
try {
|
||||
_expiryTime = DateTime.fromMillisecondsSinceEpoch(int.parse(expiryTimeString)).toUtc();
|
||||
if (expiryTime is DateTime) {
|
||||
_expiryTime = expiryTime.toUtc();
|
||||
} else if (expiryTime is String) {
|
||||
if (expiryTime.contains('-') && expiryTime.contains(':')) {
|
||||
_expiryTime = DateTime.parse(expiryTime).toUtc();
|
||||
} else {
|
||||
_expiryTime =
|
||||
DateTime.fromMillisecondsSinceEpoch(int.parse(expiryTime))
|
||||
.toUtc();
|
||||
}
|
||||
} else {
|
||||
throw ArgumentError("Invalid type for expiryTime");
|
||||
}
|
||||
_updateRemainingSeconds();
|
||||
startTimer();
|
||||
} catch (e) {
|
||||
|
|
|
|||
|
|
@ -6,11 +6,15 @@
|
|||
|
||||
#include "generated_plugin_registrant.h"
|
||||
|
||||
#include <audioplayers_linux/audioplayers_linux_plugin.h>
|
||||
#include <file_selector_linux/file_selector_plugin.h>
|
||||
#include <maps_launcher/maps_launcher_plugin.h>
|
||||
#include <url_launcher_linux/url_launcher_plugin.h>
|
||||
|
||||
void fl_register_plugins(FlPluginRegistry* registry) {
|
||||
g_autoptr(FlPluginRegistrar) audioplayers_linux_registrar =
|
||||
fl_plugin_registry_get_registrar_for_plugin(registry, "AudioplayersLinuxPlugin");
|
||||
audioplayers_linux_plugin_register_with_registrar(audioplayers_linux_registrar);
|
||||
g_autoptr(FlPluginRegistrar) file_selector_linux_registrar =
|
||||
fl_plugin_registry_get_registrar_for_plugin(registry, "FileSelectorPlugin");
|
||||
file_selector_plugin_register_with_registrar(file_selector_linux_registrar);
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
#
|
||||
|
||||
list(APPEND FLUTTER_PLUGIN_LIST
|
||||
audioplayers_linux
|
||||
file_selector_linux
|
||||
maps_launcher
|
||||
url_launcher_linux
|
||||
|
|
|
|||
|
|
@ -5,20 +5,24 @@
|
|||
import FlutterMacOS
|
||||
import Foundation
|
||||
|
||||
import audioplayers_darwin
|
||||
import file_selector_macos
|
||||
import geolocator_apple
|
||||
import location
|
||||
import maps_launcher
|
||||
import mobile_scanner
|
||||
import path_provider_foundation
|
||||
import shared_preferences_foundation
|
||||
import url_launcher_macos
|
||||
|
||||
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
||||
AudioplayersDarwinPlugin.register(with: registry.registrar(forPlugin: "AudioplayersDarwinPlugin"))
|
||||
FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin"))
|
||||
GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin"))
|
||||
LocationPlugin.register(with: registry.registrar(forPlugin: "LocationPlugin"))
|
||||
MapsLauncherPlugin.register(with: registry.registrar(forPlugin: "MapsLauncherPlugin"))
|
||||
MobileScannerPlugin.register(with: registry.registrar(forPlugin: "MobileScannerPlugin"))
|
||||
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
|
||||
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
|
||||
UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
|
||||
}
|
||||
|
|
|
|||
112
pubspec.lock
|
|
@ -41,6 +41,62 @@ packages:
|
|||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.12.0"
|
||||
audioplayers:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: audioplayers
|
||||
sha256: e653f162ddfcec1da2040ba2d8553fff1662b5c2a5c636f4c21a3b11bee497de
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.5.0"
|
||||
audioplayers_android:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: audioplayers_android
|
||||
sha256: "60a6728277228413a85755bd3ffd6fab98f6555608923813ce383b190a360605"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "5.2.1"
|
||||
audioplayers_darwin:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: audioplayers_darwin
|
||||
sha256: "0811d6924904ca13f9ef90d19081e4a87f7297ddc19fc3d31f60af1aaafee333"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.3.0"
|
||||
audioplayers_linux:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: audioplayers_linux
|
||||
sha256: f75bce1ce864170ef5e6a2c6a61cd3339e1a17ce11e99a25bae4474ea491d001
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.2.1"
|
||||
audioplayers_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: audioplayers_platform_interface
|
||||
sha256: "0e2f6a919ab56d0fec272e801abc07b26ae7f31980f912f24af4748763e5a656"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "7.1.1"
|
||||
audioplayers_web:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: audioplayers_web
|
||||
sha256: "1c0f17cec68455556775f1e50ca85c40c05c714a99c5eb1d2d57cc17ba5522d7"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "5.1.1"
|
||||
audioplayers_windows:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: audioplayers_windows
|
||||
sha256: "4048797865105b26d47628e6abb49231ea5de84884160229251f37dfcbe52fd7"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.2.1"
|
||||
bloc:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
|
@ -374,6 +430,30 @@ packages:
|
|||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.29"
|
||||
flutter_sound:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: flutter_sound
|
||||
sha256: ef89477f6e8ce2fa395158ebc4a8b11982e3ada440b4021c06fd97a4e771554b
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "9.28.0"
|
||||
flutter_sound_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: flutter_sound_platform_interface
|
||||
sha256: "3394d7e664a09796818014ff85a81db0dec397f4c286cbe52f8783886fa5a497"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "9.28.0"
|
||||
flutter_sound_web:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: flutter_sound_web
|
||||
sha256: "4e10c94a8574bd93bb8668af59bf76f5312a890bccd3778d73168a7133217dc5"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "9.28.0"
|
||||
flutter_svg:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
|
@ -776,6 +856,30 @@ packages:
|
|||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.1.0"
|
||||
path_provider:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: path_provider
|
||||
sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.5"
|
||||
path_provider_android:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: path_provider_android
|
||||
sha256: d0d310befe2c8ab9e7f393288ccbb11b60c019c6b5afc21973eeee4dda2b35e9
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.2.17"
|
||||
path_provider_foundation:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: path_provider_foundation
|
||||
sha256: "16eef174aacb07e09c351502740fa6254c165757638eba1e9116b0a781201bbd"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.4.2"
|
||||
path_provider_linux:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
@ -1053,6 +1157,14 @@ packages:
|
|||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.4.1"
|
||||
synchronized:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: synchronized
|
||||
sha256: "0669c70faae6270521ee4f05bffd2919892d42d1276e6c495be80174b6bc0ef6"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.3.1"
|
||||
term_glyph:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
|
|||
|
|
@ -51,6 +51,9 @@ dependencies:
|
|||
mobile_scanner: ^5.1.1
|
||||
image_picker: ^1.1.2
|
||||
permission_handler: ^11.3.1
|
||||
flutter_sound: ^9.8.4
|
||||
audioplayers: ^6.1.0
|
||||
path_provider: ^2.1.4
|
||||
# geocoding: ^3.0.0
|
||||
|
||||
dev_dependencies:
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@
|
|||
|
||||
#include "generated_plugin_registrant.h"
|
||||
|
||||
#include <audioplayers_windows/audioplayers_windows_plugin.h>
|
||||
#include <file_selector_windows/file_selector_windows.h>
|
||||
#include <geolocator_windows/geolocator_windows.h>
|
||||
#include <maps_launcher/maps_launcher_plugin.h>
|
||||
|
|
@ -13,6 +14,8 @@
|
|||
#include <url_launcher_windows/url_launcher_windows.h>
|
||||
|
||||
void RegisterPlugins(flutter::PluginRegistry* registry) {
|
||||
AudioplayersWindowsPluginRegisterWithRegistrar(
|
||||
registry->GetRegistrarForPlugin("AudioplayersWindowsPlugin"));
|
||||
FileSelectorWindowsRegisterWithRegistrar(
|
||||
registry->GetRegistrarForPlugin("FileSelectorWindows"));
|
||||
GeolocatorWindowsRegisterWithRegistrar(
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
#
|
||||
|
||||
list(APPEND FLUTTER_PLUGIN_LIST
|
||||
audioplayers_windows
|
||||
file_selector_windows
|
||||
geolocator_windows
|
||||
maps_launcher
|
||||
|
|
|
|||