From 44d21b3f143df0b38deebfefed9843453d48509c Mon Sep 17 00:00:00 2001 From: Vus Khoza Date: Mon, 14 Jul 2025 01:04:53 +0200 Subject: [PATCH] prototype complete --- SPLASH_GIF_IMPLEMENTATION.md | 72 ++ SPLASH_SCREEN_FIX.md | 67 ++ android/app/build.gradle.kts | 8 +- android/app/src/main/AndroidManifest.xml | 9 +- .../kotlin/com/example/qpay/MainActivity.kt | 5 - .../kotlin/zw/co/qantra/qpay/MainActivity.kt | 5 + .../zw/co/qantra/qpay/SplashActivity.kt | 29 + .../res/drawable-v21/launch_background.xml | 16 +- .../main/res/drawable/launch_background.xml | 17 +- .../src/main/res/layout/activity_splash.xml | 15 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 544 -> 4492 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 442 -> 2563 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 721 -> 7118 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 1031 -> 12536 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 1443 -> 18880 bytes .../app/src/main/res/values-night/styles.xml | 11 +- android/app/src/main/res/values/colors.xml | 4 + android/app/src/main/res/values/strings.xml | 4 + android/app/src/main/res/values/styles.xml | 7 + assets/.env | 6 +- assets/ecocash.png | Bin 0 -> 4872 bytes assets/giphy.gif | Bin 0 -> 94371 bytes assets/icon.png | Bin 50012 -> 0 bytes assets/peak-gif.mp4 | Bin 0 -> 101759 bytes assets/peak.png | Bin 0 -> 72003 bytes assets/visa-mastercard.png | Bin 0 -> 120936 bytes ios/Runner.xcodeproj/project.pbxproj | 12 +- ios/Runner/Info.plist | 9 +- lib/http/http.dart | 27 +- lib/main.dart | 98 ++- lib/screens/confirm/confirm_controller.dart | 136 ++++ .../confirm/confirm_controller.freezed.dart | 151 ++++ lib/screens/confirm/confirm_controller.g.dart | 18 + lib/screens/confirm/confirm_screen.dart | 354 +++++++++ lib/screens/gateway/gateway_controller.dart | 112 +++ lib/screens/gateway/gateway_screen.dart | 86 +++ lib/screens/history/history_controller.dart | 94 +++ lib/screens/history/history_screen.dart | 271 +++++++ lib/screens/history_screen.dart | 349 --------- lib/screens/home/home_controller.dart | 95 ++- lib/screens/home/home_controller.freezed.dart | 31 +- lib/screens/home/home_controller.g.dart | 2 + lib/screens/home/home_screen.dart | 496 +++++++------ lib/screens/pay/pay_controller.dart | 190 ++++- lib/screens/pay/pay_controller.freezed.dart | 151 ++++ lib/screens/pay/pay_controller.g.dart | 22 + lib/screens/pay/pay_screen.dart | 635 ++++++++++++++--- lib/screens/receipt/receipt_controller.dart | 114 +++ lib/screens/receipt/receipt_screen.dart | 670 ++++++++++++++++++ .../recipient/recipients_controller.dart | 129 ++++ .../recipients_controller.freezed.dart | 169 +++++ .../recipient/recipients_controller.g.dart | 30 + lib/screens/recipient/recipients_screen.dart | 378 ++++++++++ lib/screens/splash_screen.dart | 112 +++ lib/screens/transaction_controller.dart | 115 +++ .../transaction_controller.freezed.dart | 228 ++++++ lib/screens/transaction_controller.g.dart | 67 ++ linux/CMakeLists.txt | 2 +- linux/flutter/generated_plugin_registrant.cc | 4 + linux/flutter/generated_plugins.cmake | 1 + macos/Flutter/GeneratedPluginRegistrant.swift | 4 + macos/Runner.xcodeproj/project.pbxproj | 6 +- macos/Runner/Configs/AppInfo.xcconfig | 4 +- pubspec.lock | 128 ++++ pubspec.yaml | 10 +- web/index.html | 1 + .../flutter/generated_plugin_registrant.cc | 6 + windows/flutter/generated_plugins.cmake | 2 + windows/runner/Runner.rc | 4 +- 69 files changed, 5033 insertions(+), 765 deletions(-) create mode 100644 SPLASH_GIF_IMPLEMENTATION.md create mode 100644 SPLASH_SCREEN_FIX.md delete mode 100644 android/app/src/main/kotlin/com/example/qpay/MainActivity.kt create mode 100644 android/app/src/main/kotlin/zw/co/qantra/qpay/MainActivity.kt create mode 100644 android/app/src/main/kotlin/zw/co/qantra/qpay/SplashActivity.kt create mode 100644 android/app/src/main/res/layout/activity_splash.xml create mode 100644 android/app/src/main/res/values/colors.xml create mode 100644 android/app/src/main/res/values/strings.xml create mode 100644 assets/ecocash.png create mode 100644 assets/giphy.gif delete mode 100644 assets/icon.png create mode 100644 assets/peak-gif.mp4 create mode 100644 assets/peak.png create mode 100644 assets/visa-mastercard.png create mode 100644 lib/screens/confirm/confirm_controller.dart create mode 100644 lib/screens/confirm/confirm_controller.freezed.dart create mode 100644 lib/screens/confirm/confirm_controller.g.dart create mode 100644 lib/screens/confirm/confirm_screen.dart create mode 100644 lib/screens/gateway/gateway_controller.dart create mode 100644 lib/screens/gateway/gateway_screen.dart create mode 100644 lib/screens/history/history_controller.dart create mode 100644 lib/screens/history/history_screen.dart delete mode 100644 lib/screens/history_screen.dart create mode 100644 lib/screens/receipt/receipt_controller.dart create mode 100644 lib/screens/receipt/receipt_screen.dart create mode 100644 lib/screens/recipient/recipients_controller.dart create mode 100644 lib/screens/recipient/recipients_controller.freezed.dart create mode 100644 lib/screens/recipient/recipients_controller.g.dart create mode 100644 lib/screens/recipient/recipients_screen.dart create mode 100644 lib/screens/splash_screen.dart create mode 100644 lib/screens/transaction_controller.dart create mode 100644 lib/screens/transaction_controller.freezed.dart create mode 100644 lib/screens/transaction_controller.g.dart diff --git a/SPLASH_GIF_IMPLEMENTATION.md b/SPLASH_GIF_IMPLEMENTATION.md new file mode 100644 index 0000000..112426a --- /dev/null +++ b/SPLASH_GIF_IMPLEMENTATION.md @@ -0,0 +1,72 @@ +# GIF Splash Screen Implementation + +## Overview + +This implementation adds a smooth GIF splash screen that appears after the native Android splash screen is removed. The GIF is displayed with elegant fade-in and scale animations, providing a seamless transition to the main app. + +## Features + +- **Smooth Animations**: Fade-in and scale animations for a polished look +- **GIF Support**: Displays the `assets/giphy.gif` file with proper frame rate +- **Error Handling**: Graceful fallback if animations fail +- **Responsive Design**: Adapts to different screen sizes +- **Clean Transition**: Smooth transition to the main app after completion + +## Implementation Details + +### Files Modified/Created + +1. **`pubspec.yaml`**: Added `gif_view: ^0.4.0` dependency +2. **`lib/screens/splash_screen.dart`**: New splash screen widget +3. **`lib/main.dart`**: Modified to show splash screen first + +### How It Works + +1. **App Launch**: The app starts with the native Android splash screen +2. **Flutter Initialization**: After Flutter initializes, the GIF splash screen appears +3. **Animation Sequence**: + - Fade-in animation (1 second) + - Scale animation with elastic curve (0.8 seconds) + - GIF plays for 3 seconds + - Fade-out animation (1 second) +4. **Transition**: Smoothly transitions to the main app + +### Animation Details + +- **Fade Animation**: Uses `Curves.easeInOut` for smooth opacity transitions +- **Scale Animation**: Uses `Curves.elasticOut` for a bouncy, engaging effect +- **Duration**: Total splash screen duration is approximately 5 seconds +- **Frame Rate**: GIF plays at 30 FPS for smooth playback + +### Customization + +To customize the splash screen: + +1. **Duration**: Modify the delay in `_startAnimations()` method +2. **GIF**: Replace `assets/giphy.gif` with your preferred GIF +3. **Animations**: Adjust animation curves and durations +4. **Styling**: Modify colors, shadows, and border radius + +### Dependencies + +- `gif_view: ^0.4.0` - For GIF playback support + +## Usage + +The splash screen automatically appears when the app launches. No additional configuration is required. + +## Testing + +The implementation has been tested with: +- ✅ Debug build compilation +- ✅ GIF asset loading +- ✅ Animation performance +- ✅ Error handling +- ✅ Responsive design + +## Notes + +- The GIF file must be placed in the `assets/` directory +- The splash screen respects the app's theme settings +- Animations are optimized for smooth performance +- Error handling ensures the app continues even if animations fail \ No newline at end of file diff --git a/SPLASH_SCREEN_FIX.md b/SPLASH_SCREEN_FIX.md new file mode 100644 index 0000000..e2adec1 --- /dev/null +++ b/SPLASH_SCREEN_FIX.md @@ -0,0 +1,67 @@ +# Splash Screen Fix Implementation + +## Issues Found and Fixed + +### 1. **Missing Splash Screen Assets** +- **Problem**: The `launch_background.xml` files were referencing non-existent splash screen images +- **Fix**: Updated to use the existing `@mipmap/ic_launcher` resource + +### 2. **Incorrect Night Mode Theme** +- **Problem**: Night mode theme was using `Theme.Light.NoTitleBar` instead of `Theme.Black.NoTitleBar` +- **Fix**: Updated `android/app/src/main/res/values-night/styles.xml` to use proper dark theme + +### 3. **Missing Dedicated Splash Activity** +- **Problem**: No dedicated splash screen activity to handle the initial app launch +- **Fix**: Created `SplashActivity.kt` with proper timing and transition + +### 4. **Incomplete Theme Configuration** +- **Problem**: Missing proper theme configuration for splash screen +- **Fix**: Added `SplashTheme` to both light and dark mode styles + +## Files Created/Modified + +### New Files: +1. `android/app/src/main/kotlin/com/example/qpay/SplashActivity.kt` - Dedicated splash activity +2. `android/app/src/main/res/layout/activity_splash.xml` - Splash screen layout +3. `android/app/src/main/res/values/colors.xml` - Color definitions +4. `android/app/src/main/res/values/strings.xml` - String resources + +### Modified Files: +1. `android/app/src/main/AndroidManifest.xml` - Added SplashActivity as launcher +2. `android/app/src/main/res/values/styles.xml` - Added SplashTheme +3. `android/app/src/main/res/values-night/styles.xml` - Fixed dark theme and added SplashTheme +4. `android/app/src/main/res/drawable/launch_background.xml` - Fixed image reference +5. `android/app/src/main/res/drawable-v21/launch_background.xml` - Fixed image reference +6. `android/app/build.gradle.kts` - Added AppCompat dependency +7. `lib/main.dart` - Added proper Flutter initialization + +## How It Works + +1. **App Launch**: When the app starts, `SplashActivity` is launched first +2. **Splash Display**: Shows the app icon and name for 2 seconds +3. **Transition**: Automatically transitions to `MainActivity` (Flutter app) +4. **Theme Support**: Properly handles both light and dark mode themes + +## Testing + +The splash screen has been tested with: +- ✅ Debug build compilation +- ✅ Proper resource references +- ✅ Theme compatibility +- ✅ Activity transitions + +## Usage + +The splash screen will now automatically display when the app launches. The implementation: +- Shows for 2 seconds (configurable in `SplashActivity.kt`) +- Displays the app icon and name +- Supports both light and dark themes +- Transitions smoothly to the main Flutter app + +## Customization + +To customize the splash screen: +1. **Duration**: Modify the delay in `SplashActivity.kt` (currently 2000ms) +2. **Logo**: Replace `@mipmap/ic_launcher` with your custom image +3. **Colors**: Update `@color/splash_background` in `colors.xml` +4. **Layout**: Modify `activity_splash.xml` for different designs \ No newline at end of file diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index 7d28a49..a4ee8f0 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -6,7 +6,7 @@ plugins { } android { - namespace = "com.example.qpay" + namespace = "zw.co.qantra.qpay" compileSdk = flutter.compileSdkVersion ndkVersion = "27.0.12077973" @@ -21,7 +21,7 @@ android { defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.qpay" + applicationId = "zw.co.qantra.qpay" // 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 @@ -39,6 +39,10 @@ android { } } +dependencies { + implementation("androidx.appcompat:appcompat:1.6.1") +} + flutter { source = "../.." } diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index cf3acc5..5a558c1 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,9 +1,14 @@ + + + android:icon="@mipmap/ic_launcher" + android:forceDarkAllowed="false"> + + - - + + - --> + android:gravity="fill" + android:src="@mipmap/ic_launcher" + android:mipMap="true"/> + + diff --git a/android/app/src/main/res/drawable/launch_background.xml b/android/app/src/main/res/drawable/launch_background.xml index 304732f..3d0d907 100644 --- a/android/app/src/main/res/drawable/launch_background.xml +++ b/android/app/src/main/res/drawable/launch_background.xml @@ -1,12 +1,17 @@ - + + + + - - + android:gravity="fill" + android:src="@mipmap/ic_launcher" + android:mipMap="true"/> + diff --git a/android/app/src/main/res/layout/activity_splash.xml b/android/app/src/main/res/layout/activity_splash.xml new file mode 100644 index 0000000..5eb2eb8 --- /dev/null +++ b/android/app/src/main/res/layout/activity_splash.xml @@ -0,0 +1,15 @@ + + + + + + \ No newline at end of file diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png index db77bb4b7b0906d62b1847e87f15cdcacf6a4f29..75f520d8384e8a23838d1cd6dc48dc86f0036e41 100644 GIT binary patch literal 4492 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 AQ2+n{ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png index 17987b79bb8a35cc66c3c1fd44f5a5526c1b78be..935e40992181a511b51b213896cad266a91a0cd7 100644 GIT binary patch literal 2563 zcmV+e3jFnnP)Px;y-7qtRA@u(R|{|z)fxWJ?%BuP`^wGx0TKk$Xo(Q4=un@Cv;!8XI4EPQwIIG) z1syAOS_KO-rAiA9v{a?GQt61Xq>2opf&zjls7NFsfh3q>ZW1o{wR`t*_MG;txoM24 zBf~JjOm^nZojv=X|Np=Lb-sh(EPv2h?mr9wINcc>$iP4bPBH=mC3KPjJn8KN893<> ze!T(_py#Y2{fQ1_;1p$m2bQU-I?i#Na#0jb+qTyOfYF^1mbH5(X25eE02Bq|BNicr z7>gjwN||98N6!WT0sv4|Rm*MLuA`L7nx-`vhH)WZKN|q>#&uPUud*rKLMerCIQ&{7 zk(dMk9=P6R+g}M~*RplS-}y%V{-w?R)IXQYmcaj$?X8dNr?R#Z{S&@62*8H{SPOVIJ;$(!UL`J@ zBnScsf^a1vswx#Vhp{+R@x=O(U>^yAT-h9-09RMUOppOV;7f6zn zDkvxzlT0S>vu*npN~tDEQWPO{n_(Cmvj9BQdlwh&xUk3=o3;f|6wOctL*pJ=4nW!h zn&)Ris~+Be+2YT}w6%fFLEkf}_>pVRGZ&-`8wA8a!XoGvg`f&>FrKsS;WbC62ZNA* z&9?%ZB*7kS*%Ty<00{_y@d`)a5C)1Q!23s}t6SRBTLGY06odws(h$bDO;MDix~`Au z&L}Tc!RPbs%VaX6IRLL5h7Sj2+XH3w0Wm$qaYa|f1gB`Qb;HMO-H<#s{JTS~sR@JH zg%K>@^*40mpEh;Ac*EGDn|^$Wxwa#2J0T5A4afa8@75dZCs(2QVU?7p9jWb()$yU@ zsa>x)O0TDxqA5n0A?;Fx+{T~llmmkS1idDm8w&s>-I5LTPk?@m<#fGNxJ49Brw zU<@pNp!s~hzh^R;ANc`_EsX03A-R6Pf3>dbGdTdS{%^W0=c=`LNL#v+wwoJL(Dkd( z*xK#U_W;1hmA<{8toD*J{Rgrtvd3!S-sg9)+9z&=Bgc~_$g*rKd5et*it?c8m!KuZ zYWh-HRbj~{I@&g@>BEZXLypUkL4!4$_8z+d0C;IS6@!D5MwUANbX^K5TY7WzK7Bj~ z76@qb(`n;TUe=1DbXt}*#P9c4+P3|o<2V(XrttxBrC}JKa{%7hnm09n_Tp)5m636v zF%j81>cQ5lIr{F=MUJc()DRYv6``;US3YJ}gaUZ<%(2eexWOo+;4*=kr8!cF5Er6p z`QUTg;hyaWj%~U5@?cXkWuBucqEHtV?%LmCJjNnYQc{@&G)4Z^_ab)#hALM6mER zxc}Gxi2Xi02IovJx&Dc1P7NUrY;O*&Te%g@`^^;l?f2>vrGh9jNnm1!8G3#9q0Fnz z?R599#^ig$0hGIcQdU#ndTdf#j9CE{l$N;q(C&uB60Z0BGHueg%h-CGP^ySb?qazQ zZTX;m$wd|6S#2H0)6ux&3IY;CT6kR2Nc@>nHar*%)}&G?p241Tsi%Z?E*!L>x;Qma zk}*tu${CaASMvM;%k zU~?T^-WfOIRp!m;sWs_NFfBJ}i);p*i;B)U`vDi8dCP zlpxB6j+C(OoUpTe^Cua<(>rQP^?Viluo2$(li?~2t z3aau2lR%75Itp=;bMTc<*b31}ETb*~$`Hts00J&SH++IQ-f_P;k$f^hR|??G zPYEzaArSC4q|8?X)x!KDzk3m<@C*=5+d|91 zsI-3FyU8WZ9eR|P#jt#|05PYOkA8=V4b8{!lOHw3o*7r2zp~J0&7zD-NWfij#*|Pf^indJyC%OwTOWZte!)Ziu*k6(~NvgFAHASOQ zy<5)fu}CBm&JPQfj3K9~wTn{{J|ey6+_L-%UqCMCh$RkncItd=b2`I)%k;8EgTY`v z#<-FY(veD~4)SjvfVq>4Zdy9sT}x~N|2m*NGwpZL+1=x{zk4VjyZp(Lvi^u1|K5Au z8`Zs$@cfKG_UbQj$O7?*3 z&(kw$%>%G^amkMJa`iDtQt9}`#;9G5=>z@Ue$FJvds1@2piu5dj|bZ%G3B#Jz!)*t zENP0xl6~)2~vnm>Gc z^c{EKM9*oH`MOK}X>;mC3=aS}k!YO?*?|n4im0B5&VdY^NVHCc>_7%iMO05j=UJbD Z{{TL2UIGKK9?1Xz002ovPDHLkV1nMx_HqCK literal 442 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 literal 721 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD3?#3*wSy!iOI#yLg7ec#$`gxH85~pclTsBt za}(23gHjVyDhp4h+5i=O3-AeX1=1l$e`s#|#^}+&7(N@w0CIr{$Oe+Uk^K-ZP~83C zcc@hG6rikF&NPT(23>y!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index d5f1c8d34e7a88e3f88bea192c3a370d44689c3c..ae86a4a21887dda07b0c9108cb6585238325a89e 100644 GIT binary patch literal 12536 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%0D9z%>%*5if+j=E zq&goXESUi>H_`)X*XHpcZyCmksOy=!OfOhbe>U`fgCa8WYW^iOTHT-PHTLZ zYQ*OpE&9ZCJoLxPkevP|h@bV(G*PeX%P%1d#bhylxUu|VVHm1Xv7C|lZm>R=vy*On zJay-rm^BcTs!y-g1il;cCC#1lGv!X=H++>yT?4U}o*bfD^Gc4NnHh@^(T$6rCeEK< z-ZhNxIsL)SwHrM5xHLFFySdP*sM#ydsYW$AoF?A{aeZ9%ZW?b%HxSsr!-4cskngN; z^ca-x6I63X#P)B`on(P^>(~&kw&lz?LN)xab2=pYP@mZYwV7h)^Lv>Yzx@yZ{=8mV z=gd)hBdc!mp^r3f9@cc2BIZQqPqPz|*<@7A%w<*fDo?xmt@;DVd=Sph_{Is@t=gM- z7Hg_uyQ=PEhz_|1mJ!yAt=%rae`r(aXCJdGcf+F)A5I z%j5>M6`l-Pl&~H)^+oE3YFzMLPkqWz=+`;4V`F~0EaD%c-87|~P;*+IB}RL1A_$k( zLCmk+UxsK@lxITjq{t0_&K^^Scg39emwh$tmf>07tb=PNJ zgiz9#ZODl}1eE5`byTOE0!pi?R;GrW0CQ8=8;fHufVoA?bMxJQwdCfAm#6!@fD`NR zhx+S(RrhSa9`7BA0r!n!ugmWL-2OjwzxD|iiePUiBCbSO2i=Wf1{5V ANdN!< literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index 4d6372eebdb28e45604e46eeda8dd24651419bc0..21c676324d7583007809590d20c4aeb4fa30bd35 100644 GIT binary patch literal 18880 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 Nz}mw89LdZl`G5J&BP##^ literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` diff --git a/android/app/src/main/res/values-night/styles.xml b/android/app/src/main/res/values-night/styles.xml index 06952be..8297fc5 100644 --- a/android/app/src/main/res/values-night/styles.xml +++ b/android/app/src/main/res/values-night/styles.xml @@ -1,7 +1,7 @@ - + + + diff --git a/android/app/src/main/res/values/colors.xml b/android/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..b78aaaa --- /dev/null +++ b/android/app/src/main/res/values/colors.xml @@ -0,0 +1,4 @@ + + + #FFFFFF + \ No newline at end of file diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..8e478ad --- /dev/null +++ b/android/app/src/main/res/values/strings.xml @@ -0,0 +1,4 @@ + + + Peak + \ No newline at end of file diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml index cb1ef88..8126a02 100644 --- a/android/app/src/main/res/values/styles.xml +++ b/android/app/src/main/res/values/styles.xml @@ -15,4 +15,11 @@ + + + diff --git a/assets/.env b/assets/.env index 1546950..8e8e1bf 100644 --- a/assets/.env +++ b/assets/.env @@ -1,2 +1,6 @@ +# BASE_URL=https://peakapi.qantra.co.zw/api BASE_URL=http://192.168.100.8:6950/api -; BASE_URL=http://192.168.1.164:6950/api \ No newline at end of file +# BASE_URL=http://192.168.1.164:6950/api +# BASE_URL=http://192.168.120.160:6950/api +# BASE_URL=http://10.10.2.92:6950/api +# BASE_URL=http://172.20.5.105:6950/api diff --git a/assets/ecocash.png b/assets/ecocash.png new file mode 100644 index 0000000000000000000000000000000000000000..96e4d1f915f9cc4a31eae1f96f6296d7b7aa304d GIT binary patch literal 4872 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
n;=#1s=g9IrU4gRo~ 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 literal 0 HcmV?d00001 diff --git a/assets/icon.png b/assets/icon.png deleted file mode 100644 index 41ffe477ecf04c68aac882695333718db5ab666e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50012 zcmb4rcRW`A8@|0)k-Zbr6SA`Ri0mYU$liPJoh?csyGSG>BO~LHhsX#aI~CcItnj-} zeZH^X@893|bzXgZ^Yol^-sgVb_jO(Ob)R@$Z8dTdMiMM6EOPa0%KBJXIGb2l*g8Z6 z@HfYP?40l)JTFCc10wieFp>2=`2P&vDn{Nn+-$x5EIn|EVkY%Y6QdD_^xdfB^q zZ{oJe!iO#+A5!wPvGjIub7ePhaIwLDR`A#SBqUq z!GQfS${7ob9ZOwV!NC8?+Kinald5pRTU;FmdCd}%kD|QIFp<*NIG9HpK$&@4KCKFO%$!>7c9KP*_D+hABnlW5Gq9? z4r{Jl-|X+=8~tpg9AAINKRU)D;)qTwcNLenV+&i(n-QdW>c#9gzlgqLMR7{TVcnv; zr464j<)pnAl;`&qgU+uF8uwWUU=^e(*pX(No>)T9S+Ug)Dqu@R4k;TQ6Y9M z;#H)Ip6l331bRWx;AYH=7xz?)J3>&jO46)q@TUkPdE~)DzYK@9h~D2D zdQ!Y#;*)8!>D&C=u)Jq!r^mLo=bI-l4T*i7iG9P=vbW@r$mO2K=1NkG$9w>*={Wg& z+u%7lU7_X*8gjMOlsPXKqd23({CY5dR(Vfta&z~7zjParR4nN3l#NAfT z`xIxQn1?a84Naw`k&^yyp*RM9$tWYKB0N;bmC<7e

mJ&zF_GJMb2M^y~ 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 diff --git a/assets/peak-gif.mp4 b/assets/peak-gif.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..be3a4409ab74536f291cb7c0b6b30ecc9621c4ae GIT binary patch literal 101759 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%0AnWrucAm4i`0=nD1Lg+y%Wzl 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 literal 0 HcmV?d00001 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index b90f96d..74ea490 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -368,7 +368,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.qpay; + PRODUCT_BUNDLE_IDENTIFIER = zw.co.qantra.qpay; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -384,7 +384,7 @@ CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.example.qpay.RunnerTests; + PRODUCT_BUNDLE_IDENTIFIER = zw.co.qantra.qpay.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -401,7 +401,7 @@ CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.example.qpay.RunnerTests; + PRODUCT_BUNDLE_IDENTIFIER = zw.co.qantra.qpay.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; @@ -416,7 +416,7 @@ CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.example.qpay.RunnerTests; + PRODUCT_BUNDLE_IDENTIFIER = zw.co.qantra.qpay.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; @@ -547,7 +547,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.qpay; + PRODUCT_BUNDLE_IDENTIFIER = zw.co.qantra.qpay; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -569,7 +569,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.qpay; + PRODUCT_BUNDLE_IDENTIFIER = zw.co.qantra.qpay; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index 560b073..c73d391 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -5,7 +5,7 @@ CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleDisplayName - Qpay + Peak CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -13,7 +13,7 @@ CFBundleInfoDictionaryVersion 6.0 CFBundleName - qpay + Peak CFBundlePackageType APPL CFBundleShortVersionString @@ -55,5 +55,10 @@ NSAllowsArbitraryLoadsInWebContent + NSContactsUsageDescription + To fetch recipient phone numbers + UIUserInterfaceStyle + Light + diff --git a/lib/http/http.dart b/lib/http/http.dart index e8d4866..6cd0388 100644 --- a/lib/http/http.dart +++ b/lib/http/http.dart @@ -13,12 +13,14 @@ class Http { dio.options.baseUrl = baseUrl; dio.options.connectTimeout = const Duration(seconds: 60); dio.options.receiveTimeout = const Duration(seconds: 60); - dio.interceptors.add(LogInterceptor( - request: true, - responseBody: false, - requestBody: false, - error: true, - )); + dio.interceptors.add( + LogInterceptor( + request: true, + responseBody: false, + requestBody: false, + error: true, + ), + ); } Future get(String url) async { @@ -27,4 +29,17 @@ class Http { logger.i(response.data.toString()); return response.data; } + + Future post(String url, dynamic data) async { + Map headers = {'Content-Type': 'application/json'}; + + Response response; + response = await dio.post( + baseUrl + url, + data: data, + options: Options(headers: headers), + ); + logger.i(response.data.toString()); + return response.data; + } } diff --git a/lib/main.dart b/lib/main.dart index 1064f5b..eb2b470 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,13 +1,18 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:go_router/go_router.dart'; +import 'package:qpay/screens/confirm/confirm_screen.dart'; +import 'package:qpay/screens/gateway/gateway_screen.dart'; +import 'package:qpay/screens/pay/pay_screen.dart'; +import 'package:qpay/screens/receipt/receipt_screen.dart'; +import 'package:qpay/screens/recipient/recipients_screen.dart'; +import 'package:qpay/screens/transaction_controller.dart'; import 'screens/home/home_screen.dart'; -import 'screens/pay/pay_screen.dart'; -import 'screens/history_screen.dart'; +import 'screens/history/history_screen.dart'; import 'screens/profile_screen.dart'; +import 'screens/splash_screen.dart'; import 'theme/app_theme.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart'; -import 'package:qpay/screens/pay/pay_controller.dart'; const String testEnv = "assets/.env"; const String liveEnv = "assets/.env"; @@ -16,20 +21,45 @@ void main() async { await dotenv.load(fileName: testEnv); runApp( ChangeNotifierProvider( - create: (context) => PayController(), + create: (context) => TransactionController(), child: const MyApp(), ), ); } -class MyApp extends StatelessWidget { +class MyApp extends StatefulWidget { const MyApp({super.key}); + @override + State createState() => _MyAppState(); +} + +class _MyAppState extends State { + bool _showSplash = false; + + void _onSplashComplete() { + setState(() { + _showSplash = false; + }); + } + @override Widget build(BuildContext context) { + if (_showSplash) { + return MaterialApp( + title: 'Peak', + theme: AppTheme.lightTheme, + themeMode: ThemeMode.light, + home: SplashScreen(onSplashComplete: _onSplashComplete), + debugShowCheckedModeBanner: false, + ); + } + return MaterialApp.router( - title: 'QPay', + title: 'Peak', theme: AppTheme.lightTheme, + themeMode: ThemeMode.light, // Force light mode regardless of OS setting + debugShowCheckedModeBanner: false, routerConfig: GoRouter( initialLocation: '/', routes: [ @@ -46,6 +76,24 @@ class MyApp extends StatelessWidget { path: '/make-payment', builder: (context, state) => const PayScreen(), ), + GoRoute( + path: '/confirm', + builder: (context, state) => const ConfirmScreen(), + ), + GoRoute( + path: '/gateway', + builder: + (context, state) => + GatewayScreen(url: state.extra as String), + ), + GoRoute( + path: '/receipt', + builder: (context, state) => const ReceiptScreen(), + ), + GoRoute( + path: '/recipients', + builder: (context, state) => const RecipientsScreen(), + ), GoRoute( path: '/history', builder: (context, state) => const HistoryScreen(), @@ -77,15 +125,15 @@ class ScaffoldWithNavBar extends StatelessWidget { case 0: context.go('/'); break; + // case 1: + // context.go('/recipients'); + // break; case 1: - context.go('/make-payment'); - break; - case 2: context.go('/history'); break; - case 3: - context.go('/profile'); - break; + // case 2: + // context.go('/profile'); + // break; } }, selectedIndex: _calculateSelectedIndex(context), @@ -95,21 +143,21 @@ class ScaffoldWithNavBar extends StatelessWidget { selectedIcon: Icon(Icons.home), label: 'Home', ), - NavigationDestination( - icon: Icon(Icons.payment_outlined), - selectedIcon: Icon(Icons.payment), - label: 'Pay', - ), + // NavigationDestination( + // icon: Icon(Icons.contacts_outlined), + // selectedIcon: Icon(Icons.contacts), + // label: 'Recipients', + // ), NavigationDestination( icon: Icon(Icons.history_outlined), selectedIcon: Icon(Icons.history), label: 'History', ), - NavigationDestination( - icon: Icon(Icons.person_outline), - selectedIcon: Icon(Icons.person), - label: 'Profile', - ), + // NavigationDestination( + // icon: Icon(Icons.person_outline), + // selectedIcon: Icon(Icons.person), + // label: 'Profile', + // ), ], ), ); @@ -117,9 +165,9 @@ class ScaffoldWithNavBar extends StatelessWidget { int _calculateSelectedIndex(BuildContext context) { final String location = GoRouterState.of(context).uri.path; - if (location.startsWith('/make-payment')) return 1; - if (location.startsWith('/history')) return 2; - if (location.startsWith('/profile')) return 3; + // if (location.startsWith('/recipients')) return 1; + if (location.startsWith('/history')) return 1; + // if (location.startsWith('/profile')) return 2; return 0; } } diff --git a/lib/screens/confirm/confirm_controller.dart b/lib/screens/confirm/confirm_controller.dart new file mode 100644 index 0000000..8f4b844 --- /dev/null +++ b/lib/screens/confirm/confirm_controller.dart @@ -0,0 +1,136 @@ +import 'package:flutter/material.dart'; +import 'package:freezed_annotation/freezed_annotation.dart'; +import 'package:go_router/go_router.dart'; +import 'package:provider/provider.dart'; +import 'package:qpay/screens/transaction_controller.dart'; + +import '../../http/http.dart'; + +part 'confirm_controller.freezed.dart'; +part 'confirm_controller.g.dart'; + +class ConfirmModel { + bool isLoading = false; + String status = ''; + String? errorMessage; + bool isCancelled = false; +} + +@freezed +abstract class ConfirmData with _$ConfirmData { + const factory ConfirmData({ + required String status, + required String errorMessage, + }) = _ConfirmData; + + factory ConfirmData.fromJson(Map json) => + _$ConfirmDataFromJson(json); +} + +class ConfirmController extends ChangeNotifier { + final ConfirmModel model = ConfirmModel(); + late TransactionController transactionController; + final Http http = Http(); + BuildContext context; + + ConfirmController(this.context) { + transactionController = Provider.of( + context, + listen: false, + ); + } + + void _showErrorSnackBar(String? message) { + WidgetsBinding.instance.addPostFrameCallback((_) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text(message.toString()), + behavior: SnackBarBehavior.floating, + backgroundColor: Colors.deepOrange, + ), + ); + }); + } + + Future doTransaction() async { + try { + model.isLoading = true; + notifyListeners(); + + transactionController + .model + .formData = transactionController.model.formData.copyWith( + type: "REQUEST", + trace: transactionController.model.confirmationData['trace'], + authType: transactionController.model.selectedPaymentProcessor.authType, + ); + + dynamic response = await http.post( + '/transaction', + transactionController.model.formData, + ); + logger.i(response.toString()); + + if (response['status'] != 'FAILED') { + model.status = response['status']; + + transactionController.updateReceiptData(response); + + if (transactionController.model.selectedPaymentProcessor.authType == + "WEB") { + if (context.mounted) { + context.push( + '/gateway', + extra: transactionController.model.receiptData?['targetUrl'], + ); + } + } else { + await pollTransaction(transactionController.model.receiptData?['id']); + context.push('/receipt'); + } + } else { + model.status = response['status']; + model.errorMessage = response['errorMessage']; + _showErrorSnackBar(response['errorMessage']); + } + } catch (e) { + logger.e(e); + model.errorMessage = e.toString(); + _showErrorSnackBar( + "Problem completing the transaction, please try again.", + ); + } + + model.isLoading = false; + notifyListeners(); + } + + Future pollTransaction(String uid) async { + while (!model.isCancelled) { + + // Check again after delay in case it was cancelled during the delay + if (model.isCancelled) break; + + try { + dynamic response = await http.get('/transaction/poll/$uid'); + logger.i(response.toString()); + + if (response['status'] == 'SUCCESS') { + model.status = response['status']; + transactionController.updateReceiptData(response); + notifyListeners(); + break; + } + } catch (e) { + logger.e(e); + _showErrorSnackBar( + "Network error. Please try again or contact support", + ); + } + + // Check cancellation flag instead of true + // Wait 5 seconds before the next poll + await Future.delayed(const Duration(seconds: 5)); + } + } +} diff --git a/lib/screens/confirm/confirm_controller.freezed.dart b/lib/screens/confirm/confirm_controller.freezed.dart new file mode 100644 index 0000000..cc95267 --- /dev/null +++ b/lib/screens/confirm/confirm_controller.freezed.dart @@ -0,0 +1,151 @@ +// dart format width=80 +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark + +part of 'confirm_controller.dart'; + +// ************************************************************************** +// FreezedGenerator +// ************************************************************************** + +// dart format off +T _$identity(T value) => value; + +/// @nodoc +mixin _$ConfirmData { + + String get status; String get errorMessage; +/// Create a copy of ConfirmData +/// with the given fields replaced by the non-null parameter values. +@JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +$ConfirmDataCopyWith get copyWith => _$ConfirmDataCopyWithImpl(this as ConfirmData, _$identity); + + /// Serializes this ConfirmData to a JSON map. + Map toJson(); + + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is ConfirmData&&(identical(other.status, status) || other.status == status)&&(identical(other.errorMessage, errorMessage) || other.errorMessage == errorMessage)); +} + +@JsonKey(includeFromJson: false, includeToJson: false) +@override +int get hashCode => Object.hash(runtimeType,status,errorMessage); + +@override +String toString() { + return 'ConfirmData(status: $status, errorMessage: $errorMessage)'; +} + + +} + +/// @nodoc +abstract mixin class $ConfirmDataCopyWith<$Res> { + factory $ConfirmDataCopyWith(ConfirmData value, $Res Function(ConfirmData) _then) = _$ConfirmDataCopyWithImpl; +@useResult +$Res call({ + String status, String errorMessage +}); + + + + +} +/// @nodoc +class _$ConfirmDataCopyWithImpl<$Res> + implements $ConfirmDataCopyWith<$Res> { + _$ConfirmDataCopyWithImpl(this._self, this._then); + + final ConfirmData _self; + final $Res Function(ConfirmData) _then; + +/// Create a copy of ConfirmData +/// with the given fields replaced by the non-null parameter values. +@pragma('vm:prefer-inline') @override $Res call({Object? status = null,Object? errorMessage = null,}) { + return _then(_self.copyWith( +status: null == status ? _self.status : status // ignore: cast_nullable_to_non_nullable +as String,errorMessage: null == errorMessage ? _self.errorMessage : errorMessage // ignore: cast_nullable_to_non_nullable +as String, + )); +} + +} + + +/// @nodoc +@JsonSerializable() + +class _ConfirmData implements ConfirmData { + const _ConfirmData({required this.status, required this.errorMessage}); + factory _ConfirmData.fromJson(Map json) => _$ConfirmDataFromJson(json); + +@override final String status; +@override final String errorMessage; + +/// Create a copy of ConfirmData +/// with the given fields replaced by the non-null parameter values. +@override @JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +_$ConfirmDataCopyWith<_ConfirmData> get copyWith => __$ConfirmDataCopyWithImpl<_ConfirmData>(this, _$identity); + +@override +Map toJson() { + return _$ConfirmDataToJson(this, ); +} + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is _ConfirmData&&(identical(other.status, status) || other.status == status)&&(identical(other.errorMessage, errorMessage) || other.errorMessage == errorMessage)); +} + +@JsonKey(includeFromJson: false, includeToJson: false) +@override +int get hashCode => Object.hash(runtimeType,status,errorMessage); + +@override +String toString() { + return 'ConfirmData(status: $status, errorMessage: $errorMessage)'; +} + + +} + +/// @nodoc +abstract mixin class _$ConfirmDataCopyWith<$Res> implements $ConfirmDataCopyWith<$Res> { + factory _$ConfirmDataCopyWith(_ConfirmData value, $Res Function(_ConfirmData) _then) = __$ConfirmDataCopyWithImpl; +@override @useResult +$Res call({ + String status, String errorMessage +}); + + + + +} +/// @nodoc +class __$ConfirmDataCopyWithImpl<$Res> + implements _$ConfirmDataCopyWith<$Res> { + __$ConfirmDataCopyWithImpl(this._self, this._then); + + final _ConfirmData _self; + final $Res Function(_ConfirmData) _then; + +/// Create a copy of ConfirmData +/// with the given fields replaced by the non-null parameter values. +@override @pragma('vm:prefer-inline') $Res call({Object? status = null,Object? errorMessage = null,}) { + return _then(_ConfirmData( +status: null == status ? _self.status : status // ignore: cast_nullable_to_non_nullable +as String,errorMessage: null == errorMessage ? _self.errorMessage : errorMessage // ignore: cast_nullable_to_non_nullable +as String, + )); +} + + +} + +// dart format on diff --git a/lib/screens/confirm/confirm_controller.g.dart b/lib/screens/confirm/confirm_controller.g.dart new file mode 100644 index 0000000..79fade7 --- /dev/null +++ b/lib/screens/confirm/confirm_controller.g.dart @@ -0,0 +1,18 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'confirm_controller.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +_ConfirmData _$ConfirmDataFromJson(Map json) => _ConfirmData( + status: json['status'] as String, + errorMessage: json['errorMessage'] as String, +); + +Map _$ConfirmDataToJson(_ConfirmData instance) => + { + 'status': instance.status, + 'errorMessage': instance.errorMessage, + }; diff --git a/lib/screens/confirm/confirm_screen.dart b/lib/screens/confirm/confirm_screen.dart new file mode 100644 index 0000000..c350e86 --- /dev/null +++ b/lib/screens/confirm/confirm_screen.dart @@ -0,0 +1,354 @@ +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:qpay/screens/confirm/confirm_controller.dart'; +import 'package:skeletonizer/skeletonizer.dart'; + +class ConfirmScreen extends StatefulWidget { + const ConfirmScreen({super.key}); + + @override + State createState() => _ConfirmScreenState(); +} + +class _ConfirmScreenState extends State + with TickerProviderStateMixin { + late ConfirmController controller; + + late Animation _fadeAnimation; + late Animation _slideAnimation; + late AnimationController _controller; + + final _formKey = GlobalKey(); + + @override + void initState() { + super.initState(); + + controller = ConfirmController(context); + + _controller = AnimationController( + vsync: this, + duration: const Duration(milliseconds: 800), + ); + + _fadeAnimation = Tween(begin: 0.0, end: 1.0).animate( + CurvedAnimation( + parent: _controller, + curve: const Interval(0.0, 0.5, curve: Curves.easeOut), + ), + ); + + _slideAnimation = Tween( + begin: const Offset(0, 0.1), + end: Offset.zero, + ).animate( + CurvedAnimation( + parent: _controller, + curve: const Interval(0.0, 0.5, curve: Curves.easeOut), + ), + ); + + _controller.forward(); + } + + @override + void dispose() { + _controller.dispose(); + controller.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + leading: + context.canPop() + ? IconButton( + onPressed: () { + context.pop(); + }, + icon: const Icon(Icons.arrow_back), + ) + : SizedBox.shrink(), + title: const Text( + 'Confirm Payment', + style: TextStyle(color: Colors.black87), + ), + ), + body: ListenableBuilder( + listenable: controller, + builder: (context, child) { + return SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.all(20.0), + child: FadeTransition( + opacity: _fadeAnimation, + child: SlideTransition( + position: _slideAnimation, + child: Form( + key: _formKey, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + decoration: BoxDecoration( + border: Border( + bottom: BorderSide( + width: 1.0, + color: Theme.of(context).colorScheme.primary, + ), + ), + ), + padding: EdgeInsets.only( + bottom: 4.0, + ), // Adjust spacing + child: Text( + "PROVIDER DETAILS", + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + ), + ), + ), + ...controller + .transactionController + .model + .confirmationData["additionalData"] + .map((data) { + return Column( + children: [ + const SizedBox(height: 10), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Text( + data["name"] ?? "", + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + ), + ), + Text( + data["value"] ?? "", + style: TextStyle(fontSize: 16), + ), + ], + ), + ], + ); + }) + .toList(), + const SizedBox(height: 30), + Container( + decoration: BoxDecoration( + border: Border( + bottom: BorderSide( + width: 1.0, + color: Theme.of(context).colorScheme.primary, + ), + ), + ), + padding: EdgeInsets.only( + bottom: 4.0, + ), // Adjust spacing + child: Text( + "TRANSACTIONS DETAILS", + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + ), + ), + ), + const SizedBox(height: 20), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "Amount", + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + ), + ), + Text( + controller + .transactionController + .model + .confirmationData["amount"] + .toString(), + style: TextStyle(fontSize: 16), + ), + ], + ), + const SizedBox(height: 10), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "Our Charge", + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + ), + ), + Text( + controller + .transactionController + .model + .confirmationData["charge"] + .toString(), + style: TextStyle(fontSize: 16), + ), + ], + ), + const SizedBox(height: 10), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "Gateway Charge", + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + ), + ), + Text( + controller + .transactionController + .model + .confirmationData["gatewayCharge"] + .toString(), + style: TextStyle(fontSize: 16), + ), + ], + ), + const SizedBox(height: 10), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "Tax", + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + ), + ), + Text( + controller + .transactionController + .model + .confirmationData["tax"] + .toString(), + style: TextStyle(fontSize: 16), + ), + ], + ), + const SizedBox(height: 10), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "Total Amount", + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + ), + ), + Text( + controller + .transactionController + .model + .confirmationData["totalAmount"] + .toString(), + style: TextStyle(fontSize: 16), + ), + ], + ), + const SizedBox(height: 20), + _buildPaymentProcessorButton(), + ], + ), + ), + ), + ), + ), + ); + }, + ), + ); + } + + Widget _buildPaymentProcessorButton() { + return Skeletonizer( + enabled: controller.model.isLoading, + child: SlideTransition( + position: _slideAnimation, + child: Container( + decoration: BoxDecoration( + border: Border.all(color: Colors.black87.withAlpha(20)), + borderRadius: BorderRadius.circular(12), + gradient: LinearGradient( + colors: [ + Theme.of(context).colorScheme.primary.withValues(alpha: 0.1), + Theme.of(context).colorScheme.tertiary.withValues(alpha: 0.05), + ], + stops: const [0.3, 0.7], + begin: Alignment.topRight, + end: Alignment.bottomLeft, + ), + ), + child: InkWell( + customBorder: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12), + ), + onTap: () async { + if (controller.model.isLoading) return; + + await controller.doTransaction(); + }, + child: ListTile( + leading: Container( + padding: const EdgeInsets.all(8), + decoration: BoxDecoration( + color: Theme.of( + context, + ).colorScheme.primary.withValues(alpha: 0.1), + shape: BoxShape.circle, + ), + child: Image( + image: AssetImage( + "assets/${controller.transactionController.model.selectedPaymentProcessor.image}", + ), + ), + ), + title: Text( + controller + .transactionController + .model + .selectedPaymentProcessor + .name, + style: TextStyle(fontWeight: FontWeight.bold), + ), + subtitle: Text( + controller + .transactionController + .model + .selectedPaymentProcessor + .description, + style: TextStyle(fontWeight: FontWeight.normal, fontSize: 10), + ), + trailing: Icon( + Icons.chevron_right, + color: Theme.of( + context, + ).colorScheme.secondary.withValues(alpha: 0.7), + ), + ), + ), + ), + ), + ); + } +} diff --git a/lib/screens/gateway/gateway_controller.dart b/lib/screens/gateway/gateway_controller.dart new file mode 100644 index 0000000..d6001b8 --- /dev/null +++ b/lib/screens/gateway/gateway_controller.dart @@ -0,0 +1,112 @@ +import 'package:flutter/material.dart'; +import 'dart:async'; // Add Timer import +import 'package:qpay/http/http.dart'; +import 'package:qpay/screens/transaction_controller.dart'; +import 'package:provider/provider.dart'; + +class GatewayModel { + bool isLoading = false; + String status = ''; + String? errorMessage; + bool isCancelled = false; +} + +class GatewayController extends ChangeNotifier { + final GatewayModel model = GatewayModel(); + final Http http = Http(); + Timer? _pollTimer; // Add timer field + BuildContext context; + + late TransactionController transactionController; + + GatewayController(this.context) { + transactionController = Provider.of( + context, + listen: false, + ); + } + + void _showErrorSnackBar(String? message) { + WidgetsBinding.instance.addPostFrameCallback((_) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text(message.toString()), + behavior: SnackBarBehavior.floating, + backgroundColor: Colors.deepOrange, + ), + ); + }); + } + + void startLoading() { + model.isLoading = true; + notifyListeners(); + } + + void finishLoading() { + model.isLoading = false; + notifyListeners(); + } + + Future pollTransaction(String uid) async { + while (!model.isCancelled) { + // Check cancellation flag instead of true + // Wait 5 seconds before the next poll + await Future.delayed(const Duration(seconds: 5)); + + // Check again after delay in case it was cancelled during the delay + if (model.isCancelled) break; + + try { + dynamic response = await http.get('/transaction/poll/$uid'); + logger.i(response.toString()); + + if (response['status'] == 'SUCCESS') { + model.status = response['status']; + transactionController.updateReceiptData(response); + notifyListeners(); + break; + } + } catch (e) { + logger.e(e); + _showErrorSnackBar( + "Network error. Please try again or contact support", + ); + } + } + } + + // Alternative method using Timer instead of while loop + void pollTransactionWithTimer(String uid) { + _pollTimer = Timer.periodic(const Duration(seconds: 5), (timer) async { + if (model.isCancelled) { + timer.cancel(); + return; + } + + try { + dynamic response = await http.get('/transaction/poll/$uid'); + logger.i(response.toString()); + + if (response['status'] == 'SUCCESS') { + model.status = response['status']; + transactionController.updateReceiptData(response); + notifyListeners(); + timer.cancel(); // Stop polling on success + } + } catch (e) { + logger.e(e); + _showErrorSnackBar( + "Network error. Please try again or contact support", + ); + } + }); + } + + @override + void dispose() { + model.isCancelled = true; + _pollTimer?.cancel(); // Cancel timer if it exists + super.dispose(); + } +} diff --git a/lib/screens/gateway/gateway_screen.dart b/lib/screens/gateway/gateway_screen.dart new file mode 100644 index 0000000..b53a6f8 --- /dev/null +++ b/lib/screens/gateway/gateway_screen.dart @@ -0,0 +1,86 @@ +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:qpay/screens/gateway/gateway_controller.dart'; +import 'package:webview_flutter/webview_flutter.dart'; + +class GatewayScreen extends StatefulWidget { + final String url; + const GatewayScreen({super.key, required this.url}); + + @override + State createState() => _GatewayScreenState(); +} + +class _GatewayScreenState extends State { + late WebViewController _webViewController; + late GatewayController controller; + + @override + void initState() { + super.initState(); + _initWebView(widget.url); + controller = GatewayController(context); + controller.pollTransaction( + controller.transactionController.model.receiptData?['id'], + ); + } + + void _initWebView(String url) { + _webViewController = + WebViewController() + ..setJavaScriptMode(JavaScriptMode.unrestricted) + ..setNavigationDelegate( + NavigationDelegate( + onProgress: (int progress) { + // Update loading bar. + }, + onPageStarted: (String url) { + controller.startLoading(); + }, + onPageFinished: (String url) { + controller.finishLoading(); + }, + onHttpError: (HttpResponseError error) {}, + onWebResourceError: (WebResourceError error) {}, + ), + ) + ..loadRequest(Uri.parse(url)); + } + + @override + void dispose() { + controller.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: const Text('Complete your payment'), + leading: + context.canPop() + ? IconButton( + onPressed: () { + context.pop(); + }, + icon: const Icon(Icons.arrow_back), + ) + : SizedBox.shrink(), + ), + body: ListenableBuilder( + listenable: controller, + builder: (context, child) { + if (controller.model.status == 'SUCCESS') { + WidgetsBinding.instance.addPostFrameCallback((_) { + context.go('/receipt'); + }); + } + return controller.model.isLoading + ? const Center(child: CircularProgressIndicator(strokeWidth: 5)) + : WebViewWidget(controller: _webViewController); + }, + ), + ); + } +} diff --git a/lib/screens/history/history_controller.dart b/lib/screens/history/history_controller.dart new file mode 100644 index 0000000..0b8a323 --- /dev/null +++ b/lib/screens/history/history_controller.dart @@ -0,0 +1,94 @@ +import 'package:flutter/material.dart'; +import 'package:qpay/http/http.dart'; + +class HistoryModel { + List> transactions = []; + bool isLoading = false; + String? errorMessage; +} + +class HistoryController extends ChangeNotifier { + final HistoryModel model = HistoryModel(); + final Http http = Http(); + BuildContext context; + + HistoryController(this.context); + + void _showErrorSnackBar(String? message) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text(message.toString()), + behavior: SnackBarBehavior.floating, + backgroundColor: Colors.deepOrange, + ), + ); + } + + Future getTransactions(Map params) async { + model.isLoading = true; + model.transactions = getFakeTransactions(); + notifyListeners(); + + try { + params['type'] = 'REQUEST'; + List response = await http.get( + '/transaction?${buildQueryParameters(params)}', + ); + model.transactions = + response.map((e) => e as Map).toList(); + } catch (e) { + logger.e(e); + _showErrorSnackBar( + "Problem fetching transactions, are you connected to the internet?", + ); + model.errorMessage = e.toString(); + model.transactions = []; + } finally { + model.isLoading = false; + notifyListeners(); + } + } + + String buildQueryParameters(Map params) { + if (params.isEmpty) { + return ''; + } + + String query = ''; + params.forEach((key, value) { + query += '$key=$value&'; + }); + return query.substring(0, query.length - 1); + } + + List> getFakeTransactions() { + return [ + { + "id": "77b2c479-b803-49fc-b5c3-acbf52cba633", + "trace": "22a3044b-8f53-4e43-b4f5-c77dcec48d2d", + "amount": 25.0, + "charge": 0.0, + "gatewayCharge": 0.25, + "tax": 0.5, + "totalAmount": 25.75, + "reference": "c838136c-c015-4a0b-9c7c-52f127c8c109", + "paymentProcessorLabel": "MPGS", + "paymentProcessorImage": "visa-mastercard.png", + "debitPhone": "", + "debitAccount": "", + "debitCurrency": "USD", + "debitRef": "peak", + "creditPhone": "", + "creditAccount": "07088597534", + "billClientId": "powertel_zesa", + "billName": "Zesa", + "type": "REQUEST", + "authType": "WEB", + "errorMessage": "", + "responseCode": "00", + "status": "SUCCESS", + "sdkActionId": "0aa0d90d-6132-48a7-a5d8-e796f757c73f", + }, + ]; + } +} diff --git a/lib/screens/history/history_screen.dart b/lib/screens/history/history_screen.dart new file mode 100644 index 0000000..b6ce009 --- /dev/null +++ b/lib/screens/history/history_screen.dart @@ -0,0 +1,271 @@ +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:provider/provider.dart'; +import 'package:qpay/screens/transaction_controller.dart'; +import 'package:skeletonizer/skeletonizer.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:qpay/screens/history/history_controller.dart'; +import 'package:timeago/timeago.dart' as timeago; + +class HistoryScreen extends StatefulWidget { + const HistoryScreen({super.key}); + + @override + State createState() => _HistoryScreenState(); +} + +class _HistoryScreenState extends State + with TickerProviderStateMixin { + late HistoryController controller; + late SharedPreferences prefs; + late AnimationController _controller; + late TransactionController transactionController; + + final TextEditingController _searchController = TextEditingController(); + final Map _queryParams = {}; + final List> _alignListAnimations = []; + + @override + void initState() { + super.initState(); + controller = HistoryController(context); + setupData(); + + transactionController = Provider.of( + context, + listen: false, + ); + + _controller = AnimationController( + duration: const Duration(milliseconds: 600), + vsync: this, + )..forward(); + + List tranListIndices = [0, 1]; + for (int i = 0; i < tranListIndices.length; i++) { + _alignListAnimations.add( + Tween(begin: Offset(0, -0.25), end: Offset.zero).animate( + CurvedAnimation( + parent: _controller, + curve: Interval(0.075 * i, 1.0, curve: Curves.easeOut), + ), + ), + ); + } + } + + void setupData() async { + prefs = await SharedPreferences.getInstance(); + + await controller.getTransactions({'userId': prefs.getString("userId")!}); + } + + @override + void dispose() { + controller.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + body: CustomScrollView( + slivers: [ + SliverAppBar( + title: Text( + 'History', + style: TextStyle(fontSize: 20, color: Colors.black), + ), + centerTitle: true, + ), + SliverToBoxAdapter( + child: ListenableBuilder( + listenable: controller, + builder: (context, child) { + return Container( + padding: const EdgeInsets.all(16), + child: Column( + children: [ + _buildSearchField(controller), + if (controller.model.transactions.isEmpty) + Column( + children: [ + SizedBox(height: 30), + Text( + 'No transactions yet. Make a payment to see your recent activity.', + style: TextStyle(fontSize: 16), + textAlign: TextAlign.center, + ), + ], + ), + if (controller.model.transactions.isNotEmpty) + ListView( + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + children: [ + ...controller.model.transactions.map( + (e) => _buildTransactionItem(e, context), + ), + ], + ), + ], + ), + ); + }, + ), + ), + ], + ), + ); + } + + Widget _buildSearchField(HistoryController controller) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Expanded( + child: TextFormField( + textInputAction: TextInputAction.search, + onFieldSubmitted: (value) { + _queryParams.clear(); + setState(() { + _queryParams['creditAccount'] = _searchController.text; + _queryParams['creditEmail'] = _searchController.text; + _queryParams['creditPhone'] = _searchController.text; + _queryParams['creditName'] = _searchController.text; + _queryParams['billName'] = _searchController.text; + _queryParams['amount'] = _searchController.text; + _queryParams['userId'] = prefs.getString("userId")!; + + controller.getTransactions(_queryParams); + }); + }, + controller: _searchController, + keyboardType: TextInputType.text, + decoration: InputDecoration( + hintText: 'Search by name, account, email, phone', + focusedErrorBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: BorderSide( + color: Theme.of(context).colorScheme.secondary, + ), + ), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: BorderSide( + color: Theme.of( + context, + ).colorScheme.primary.withOpacity(0.2), + ), + ), + suffixIcon: + _searchController.text.isNotEmpty + ? IconButton( + onPressed: () { + _searchController.clear(); + _queryParams.clear(); + controller.getTransactions({ + 'userId': prefs.getString("userId")!, + }); + }, + icon: Icon(Icons.clear), + color: Theme.of(context).colorScheme.primary, + ) + : null, + ), + onChanged: (value) { + // controller.updateCreditAccount(value); + }, + validator: (value) { + if (value == null || value.isEmpty) { + return 'Please enter an amount'; + } + if (double.tryParse(value) == null) { + return 'Please enter a valid amount'; + } + return null; + }, + ), + ), + ], + ), + ], + ); + } + + Widget _buildTransactionItem(Map e, BuildContext context) { + return SlideTransition( + position: _alignListAnimations[0], + child: Skeletonizer( + enabled: controller.model.isLoading, + child: InkWell( + customBorder: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12), + ), + onTap: () { + transactionController.updateReceiptData(e); + context.push("/receipt"); + }, + child: ListTile( + leading: Container( + padding: const EdgeInsets.all(8), + decoration: BoxDecoration( + color: Theme.of( + context, + ).colorScheme.primary.withValues(alpha: 0.1), + shape: BoxShape.circle, + ), + child: Image( + image: AssetImage("assets/${e['paymentProcessorImage']}"), + ), + ), + title: Row( + children: [ + Text( + e['billName'], + style: TextStyle(fontWeight: FontWeight.bold), + ), + SizedBox(width: 10), + Icon( + e['status'] == 'SUCCESS' + ? Icons.check_circle + : e['status'] == 'PENDING' + ? Icons.pending + : Icons.cancel, + size: 16, + color: + e['status'] == 'SUCCESS' + ? Colors.green + : e['status'] == 'PENDING' + ? Colors.orange + : Colors.red, + ), + ], + ), + subtitle: Text( + e['createdAt'] != null + ? timeago.format(DateTime.parse(e['createdAt'])) + : '', + style: TextStyle(fontSize: 12), + ), + trailing: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + e['amount'].toStringAsFixed(2), + style: TextStyle(fontWeight: FontWeight.bold, fontSize: 18), + ), + Text( + e['totalAmount'].toStringAsFixed(2), + style: TextStyle(fontSize: 12), + ), + ], + ), + ), + ), + ), + ); + } +} diff --git a/lib/screens/history_screen.dart b/lib/screens/history_screen.dart deleted file mode 100644 index c5382cc..0000000 --- a/lib/screens/history_screen.dart +++ /dev/null @@ -1,349 +0,0 @@ -import 'package:flutter/material.dart'; - -class HistoryScreen extends StatefulWidget { - const HistoryScreen({super.key}); - - @override - State createState() => _HistoryScreenState(); -} - -class _HistoryScreenState extends State { - final List> _transactions = [ - { - 'title': 'Electricity Bill', - 'amount': -120.00, - 'date': 'Today', - 'icon': Icons.electric_bolt, - 'status': 'Completed', - }, - { - 'title': 'Internet Bill', - 'amount': -75.00, - 'date': 'Yesterday', - 'icon': Icons.wifi, - 'status': 'Completed', - }, - { - 'title': 'Mobile Bill', - 'amount': -50.00, - 'date': '2 days ago', - 'icon': Icons.phone_android, - 'status': 'Completed', - }, - { - 'title': 'Water Bill', - 'amount': -45.00, - 'date': '3 days ago', - 'icon': Icons.water_drop, - 'status': 'Completed', - }, - { - 'title': 'Gas Bill', - 'amount': -65.00, - 'date': '4 days ago', - 'icon': Icons.local_fire_department, - 'status': 'Completed', - }, - ]; - - String _selectedFilter = 'All'; - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: const Text('Transaction History'), - actions: [ - IconButton( - icon: const Icon(Icons.filter_list), - onPressed: _showFilterDialog, - ), - ], - ), - body: Column( - children: [ - _buildFilterChips(), - Expanded( - child: ListView.builder( - padding: const EdgeInsets.all(16), - itemCount: _transactions.length, - itemBuilder: (context, index) { - final transaction = _transactions[index]; - return _buildTransactionCard(transaction, index); - }, - ), - ), - ], - ), - ); - } - - Widget _buildFilterChips() { - return SingleChildScrollView( - scrollDirection: Axis.horizontal, - padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), - child: Row( - children: [ - _buildFilterChip('All'), - _buildFilterChip('Bills'), - _buildFilterChip('Payments'), - _buildFilterChip('Transfers'), - ], - ), - ); - } - - Widget _buildFilterChip(String label) { - final isSelected = _selectedFilter == label; - return Padding( - padding: const EdgeInsets.only(right: 8), - child: FilterChip( - selected: isSelected, - label: Text(label), - onSelected: (selected) { - setState(() { - _selectedFilter = label; - }); - }, - backgroundColor: Theme.of(context).colorScheme.surface, - selectedColor: Theme.of(context).colorScheme.primary.withOpacity(0.2), - checkmarkColor: Theme.of(context).colorScheme.primary, - labelStyle: TextStyle( - color: isSelected - ? Theme.of(context).colorScheme.primary - : Theme.of(context).colorScheme.onSurface, - ), - ), - ); - } - - Widget _buildTransactionCard(Map transaction, int index) { - return Card( - margin: const EdgeInsets.only(bottom: 16), - child: InkWell( - onTap: () => _showTransactionDetails(transaction), - borderRadius: BorderRadius.circular(16), - child: Padding( - padding: const EdgeInsets.all(16), - child: Row( - children: [ - Container( - padding: const EdgeInsets.all(12), - decoration: BoxDecoration( - color: Theme.of(context).colorScheme.primary.withOpacity(0.1), - borderRadius: BorderRadius.circular(12), - ), - child: Icon( - transaction['icon'] as IconData, - color: Theme.of(context).colorScheme.primary, - ), - ), - const SizedBox(width: 16), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - transaction['title'] as String, - style: const TextStyle( - fontWeight: FontWeight.bold, - fontSize: 16, - ), - ), - const SizedBox(height: 4), - Text( - transaction['date'] as String, - style: TextStyle( - color: Theme.of(context).colorScheme.onSurface.withOpacity(0.6), - fontSize: 14, - ), - ), - ], - ), - ), - Column( - crossAxisAlignment: CrossAxisAlignment.end, - children: [ - Text( - '\$${transaction['amount'].abs().toStringAsFixed(2)}', - style: TextStyle( - color: transaction['amount'] < 0 - ? Theme.of(context).colorScheme.error - : Colors.green, - fontWeight: FontWeight.bold, - fontSize: 16, - ), - ), - const SizedBox(height: 4), - Container( - padding: const EdgeInsets.symmetric( - horizontal: 8, - vertical: 4, - ), - decoration: BoxDecoration( - color: Colors.green.withOpacity(0.1), - borderRadius: BorderRadius.circular(8), - ), - child: Text( - transaction['status'] as String, - style: const TextStyle( - color: Colors.green, - fontSize: 12, - fontWeight: FontWeight.w500, - ), - ), - ), - ], - ), - ], - ), - ), - ), - ); - } - - void _showFilterDialog() { - showModalBottomSheet( - context: context, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.vertical(top: Radius.circular(20)), - ), - builder: (context) { - return Padding( - padding: const EdgeInsets.all(16), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - const Text( - 'Filter Transactions', - style: TextStyle( - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 16), - _buildFilterOption('All Transactions'), - _buildFilterOption('Bills Only'), - _buildFilterOption('Payments Only'), - _buildFilterOption('Transfers Only'), - const SizedBox(height: 16), - ], - ), - ); - }, - ); - } - - Widget _buildFilterOption(String option) { - return ListTile( - title: Text(option), - trailing: _selectedFilter == option - ? Icon( - Icons.check_circle, - color: Theme.of(context).colorScheme.primary, - ) - : null, - onTap: () { - setState(() { - _selectedFilter = option; - }); - Navigator.pop(context); - }, - ); - } - - void _showTransactionDetails(Map transaction) { - showModalBottomSheet( - context: context, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.vertical(top: Radius.circular(20)), - ), - builder: (context) { - return Padding( - padding: const EdgeInsets.all(24), - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - children: [ - Container( - padding: const EdgeInsets.all(12), - decoration: BoxDecoration( - color: Theme.of(context).colorScheme.primary.withOpacity(0.1), - borderRadius: BorderRadius.circular(12), - ), - child: Icon( - transaction['icon'] as IconData, - color: Theme.of(context).colorScheme.primary, - size: 32, - ), - ), - const SizedBox(width: 16), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - transaction['title'] as String, - style: const TextStyle( - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 4), - Text( - transaction['date'] as String, - style: TextStyle( - color: Theme.of(context).colorScheme.onSurface.withOpacity(0.6), - ), - ), - ], - ), - ), - ], - ), - const SizedBox(height: 24), - _buildDetailRow('Amount', '\$${transaction['amount'].abs().toStringAsFixed(2)}'), - _buildDetailRow('Status', transaction['status'] as String), - _buildDetailRow('Transaction ID', '#${DateTime.now().millisecondsSinceEpoch}'), - const SizedBox(height: 24), - SizedBox( - width: double.infinity, - child: ElevatedButton( - onPressed: () { - Navigator.pop(context); - }, - child: const Text('Close'), - ), - ), - ], - ), - ); - }, - ); - } - - Widget _buildDetailRow(String label, String value) { - return Padding( - padding: const EdgeInsets.only(bottom: 16), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - label, - style: TextStyle( - color: Theme.of(context).colorScheme.onSurface.withOpacity(0.6), - ), - ), - Text( - value, - style: const TextStyle( - fontWeight: FontWeight.w500, - ), - ), - ], - ), - ); - } -} \ No newline at end of file diff --git a/lib/screens/home/home_controller.dart b/lib/screens/home/home_controller.dart index d404882..b554f21 100644 --- a/lib/screens/home/home_controller.dart +++ b/lib/screens/home/home_controller.dart @@ -8,7 +8,7 @@ part 'home_controller.freezed.dart'; part 'home_controller.g.dart'; class HomeScreenModel { - List transactions = []; + List> transactions = []; List categories = []; List providers = []; List filterableProviders = []; @@ -51,6 +51,7 @@ abstract class BillProvider with _$BillProvider { required String image, required String label, required String category, + required String? accountFieldName, }) = _BillProvider; factory BillProvider.fromJson(Map json) => @@ -60,11 +61,26 @@ abstract class BillProvider with _$BillProvider { class HomeController extends ChangeNotifier { final HomeScreenModel model = HomeScreenModel(); final Http http = Http(); + BuildContext context; + + HomeController(this.context); + + void _showErrorSnackBar(String? message) { + WidgetsBinding.instance.addPostFrameCallback((_) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text(message.toString()), + behavior: SnackBarBehavior.floating, + backgroundColor: Colors.deepOrange, + ), + ); + }); + } Future getProviders() async { - model.providers = getFakeProviders(); try { model.isLoading = true; + notifyListeners(); List response = await http.get('/providers'); model.providers = response.map((e) => BillProvider.fromJson(e)).toList(); @@ -75,6 +91,9 @@ class HomeController extends ChangeNotifier { } } catch (e) { logger.e(e); + _showErrorSnackBar( + "Problem fetching providers, are you connected to the internet?", + ); model.errorMessage = e.toString(); model.providers = []; model.filterableProviders = []; @@ -92,12 +111,39 @@ class HomeController extends ChangeNotifier { notifyListeners(); } + Future getTransactions(String userId) async { + model.isLoading = true; + notifyListeners(); + + try { + List response = await http.get( + '/transaction?userId=$userId&type=REQUEST', + ); + model.transactions = + response.map((e) => e as Map).toList(); + } catch (e) { + logger.e(e); + _showErrorSnackBar( + "Problem fetching transactions, are you connected to the internet?", + ); + model.errorMessage = e.toString(); + model.transactions = []; + } finally { + model.isLoading = false; + notifyListeners(); + } + } + Future getCategories() async { // activate skeletonizer model.categories = getFakeCategoryData(); + model.transactions = getFakeTransactions(); + // model.filterableProviders = getFakeProviders(); + model.isLoading = true; + notifyListeners(); + // Simulate fetching categories try { - model.isLoading = true; List response = await http.get('/categories'); model.categories = response.map((e) => Category.fromJson(e)).toList(); @@ -106,6 +152,9 @@ class HomeController extends ChangeNotifier { } } on Exception catch (e) { logger.e(e); + _showErrorSnackBar( + "Problem fetching categories, are you connected to the internet?", + ); model.errorMessage = e.toString(); model.categories = []; } finally { @@ -131,6 +180,37 @@ class HomeController extends ChangeNotifier { notifyListeners(); } + List> getFakeTransactions() { + return [ + { + "id": "77b2c479-b803-49fc-b5c3-acbf52cba633", + "trace": "22a3044b-8f53-4e43-b4f5-c77dcec48d2d", + "amount": 25.0, + "charge": 0.0, + "gatewayCharge": 0.25, + "tax": 0.5, + "totalAmount": 25.75, + "reference": "c838136c-c015-4a0b-9c7c-52f127c8c109", + "paymentProcessorLabel": "MPGS", + "paymentProcessorImage": "visa-mastercard.png", + "debitPhone": "", + "debitAccount": "", + "debitCurrency": "USD", + "debitRef": "peak", + "creditPhone": "", + "creditAccount": "07088597534", + "billClientId": "powertel_zesa", + "billName": "Zesa", + "type": "REQUEST", + "authType": "WEB", + "errorMessage": "", + "responseCode": "00", + "status": "SUCCESS", + "sdkActionId": "0aa0d90d-6132-48a7-a5d8-e796f757c73f", + }, + ]; + } + List getFakeProviders() { return [ BillProvider( @@ -148,6 +228,7 @@ class HomeController extends ChangeNotifier { image: 'econet.png', label: '', category: '', + accountFieldName: '', ), ]; } @@ -156,17 +237,11 @@ class HomeController extends ChangeNotifier { List getFakeCategoryData() { return [ Category( - name: 'Electricity', + name: 'Airtime', description: 'Pay your electricity bills easily', image: 'assets/images/electricity.png', label: 'Electricity', ), - Category( - name: 'Internet', - description: 'Pay your internet bills easily', - image: 'assets/images/internet.png', - label: 'Internet', - ), ]; } } diff --git a/lib/screens/home/home_controller.freezed.dart b/lib/screens/home/home_controller.freezed.dart index a7ed97f..8c9f802 100644 --- a/lib/screens/home/home_controller.freezed.dart +++ b/lib/screens/home/home_controller.freezed.dart @@ -158,7 +158,7 @@ as String, /// @nodoc mixin _$BillProvider { - String get clientId; String get name; String get description; bool get requiresAccount; bool get requiresAmount; bool get requiresAmountFromMerchant; bool get requiresPhone; bool get requiresReversal; String? get additionalDataString; String get processorType; String get uid; String get image; String get label; String get category; + String get clientId; String get name; String get description; bool get requiresAccount; bool get requiresAmount; bool get requiresAmountFromMerchant; bool get requiresPhone; bool get requiresReversal; String? get additionalDataString; String get processorType; String get uid; String get image; String get label; String get category; String? get accountFieldName; /// Create a copy of BillProvider /// with the given fields replaced by the non-null parameter values. @JsonKey(includeFromJson: false, includeToJson: false) @@ -171,16 +171,16 @@ $BillProviderCopyWith get copyWith => _$BillProviderCopyWithImpl Object.hash(runtimeType,clientId,name,description,requiresAccount,requiresAmount,requiresAmountFromMerchant,requiresPhone,requiresReversal,additionalDataString,processorType,uid,image,label,category); +int get hashCode => Object.hash(runtimeType,clientId,name,description,requiresAccount,requiresAmount,requiresAmountFromMerchant,requiresPhone,requiresReversal,additionalDataString,processorType,uid,image,label,category,accountFieldName); @override String toString() { - return 'BillProvider(clientId: $clientId, name: $name, description: $description, requiresAccount: $requiresAccount, requiresAmount: $requiresAmount, requiresAmountFromMerchant: $requiresAmountFromMerchant, requiresPhone: $requiresPhone, requiresReversal: $requiresReversal, additionalDataString: $additionalDataString, processorType: $processorType, uid: $uid, image: $image, label: $label, category: $category)'; + return 'BillProvider(clientId: $clientId, name: $name, description: $description, requiresAccount: $requiresAccount, requiresAmount: $requiresAmount, requiresAmountFromMerchant: $requiresAmountFromMerchant, requiresPhone: $requiresPhone, requiresReversal: $requiresReversal, additionalDataString: $additionalDataString, processorType: $processorType, uid: $uid, image: $image, label: $label, category: $category, accountFieldName: $accountFieldName)'; } @@ -191,7 +191,7 @@ abstract mixin class $BillProviderCopyWith<$Res> { factory $BillProviderCopyWith(BillProvider value, $Res Function(BillProvider) _then) = _$BillProviderCopyWithImpl; @useResult $Res call({ - String clientId, String name, String description, bool requiresAccount, bool requiresAmount, bool requiresAmountFromMerchant, bool requiresPhone, bool requiresReversal, String? additionalDataString, String processorType, String uid, String image, String label, String category + String clientId, String name, String description, bool requiresAccount, bool requiresAmount, bool requiresAmountFromMerchant, bool requiresPhone, bool requiresReversal, String? additionalDataString, String processorType, String uid, String image, String label, String category, String? accountFieldName }); @@ -208,7 +208,7 @@ class _$BillProviderCopyWithImpl<$Res> /// Create a copy of BillProvider /// with the given fields replaced by the non-null parameter values. -@pragma('vm:prefer-inline') @override $Res call({Object? clientId = null,Object? name = null,Object? description = null,Object? requiresAccount = null,Object? requiresAmount = null,Object? requiresAmountFromMerchant = null,Object? requiresPhone = null,Object? requiresReversal = null,Object? additionalDataString = freezed,Object? processorType = null,Object? uid = null,Object? image = null,Object? label = null,Object? category = null,}) { +@pragma('vm:prefer-inline') @override $Res call({Object? clientId = null,Object? name = null,Object? description = null,Object? requiresAccount = null,Object? requiresAmount = null,Object? requiresAmountFromMerchant = null,Object? requiresPhone = null,Object? requiresReversal = null,Object? additionalDataString = freezed,Object? processorType = null,Object? uid = null,Object? image = null,Object? label = null,Object? category = null,Object? accountFieldName = freezed,}) { return _then(_self.copyWith( clientId: null == clientId ? _self.clientId : clientId // ignore: cast_nullable_to_non_nullable as String,name: null == name ? _self.name : name // ignore: cast_nullable_to_non_nullable @@ -224,7 +224,8 @@ as String,uid: null == uid ? _self.uid : uid // ignore: cast_nullable_to_non_nul as String,image: null == image ? _self.image : image // ignore: cast_nullable_to_non_nullable as String,label: null == label ? _self.label : label // ignore: cast_nullable_to_non_nullable as String,category: null == category ? _self.category : category // ignore: cast_nullable_to_non_nullable -as String, +as String,accountFieldName: freezed == accountFieldName ? _self.accountFieldName : accountFieldName // ignore: cast_nullable_to_non_nullable +as String?, )); } @@ -235,7 +236,7 @@ as String, @JsonSerializable() class _BillProvider implements BillProvider { - const _BillProvider({required this.clientId, required this.name, required this.description, required this.requiresAccount, required this.requiresAmount, required this.requiresAmountFromMerchant, required this.requiresPhone, required this.requiresReversal, required this.additionalDataString, required this.processorType, required this.uid, required this.image, required this.label, required this.category}); + const _BillProvider({required this.clientId, required this.name, required this.description, required this.requiresAccount, required this.requiresAmount, required this.requiresAmountFromMerchant, required this.requiresPhone, required this.requiresReversal, required this.additionalDataString, required this.processorType, required this.uid, required this.image, required this.label, required this.category, required this.accountFieldName}); factory _BillProvider.fromJson(Map json) => _$BillProviderFromJson(json); @override final String clientId; @@ -252,6 +253,7 @@ class _BillProvider implements BillProvider { @override final String image; @override final String label; @override final String category; +@override final String? accountFieldName; /// Create a copy of BillProvider /// with the given fields replaced by the non-null parameter values. @@ -266,16 +268,16 @@ Map toJson() { @override bool operator ==(Object other) { - return identical(this, other) || (other.runtimeType == runtimeType&&other is _BillProvider&&(identical(other.clientId, clientId) || other.clientId == clientId)&&(identical(other.name, name) || other.name == name)&&(identical(other.description, description) || other.description == description)&&(identical(other.requiresAccount, requiresAccount) || other.requiresAccount == requiresAccount)&&(identical(other.requiresAmount, requiresAmount) || other.requiresAmount == requiresAmount)&&(identical(other.requiresAmountFromMerchant, requiresAmountFromMerchant) || other.requiresAmountFromMerchant == requiresAmountFromMerchant)&&(identical(other.requiresPhone, requiresPhone) || other.requiresPhone == requiresPhone)&&(identical(other.requiresReversal, requiresReversal) || other.requiresReversal == requiresReversal)&&(identical(other.additionalDataString, additionalDataString) || other.additionalDataString == additionalDataString)&&(identical(other.processorType, processorType) || other.processorType == processorType)&&(identical(other.uid, uid) || other.uid == uid)&&(identical(other.image, image) || other.image == image)&&(identical(other.label, label) || other.label == label)&&(identical(other.category, category) || other.category == category)); + return identical(this, other) || (other.runtimeType == runtimeType&&other is _BillProvider&&(identical(other.clientId, clientId) || other.clientId == clientId)&&(identical(other.name, name) || other.name == name)&&(identical(other.description, description) || other.description == description)&&(identical(other.requiresAccount, requiresAccount) || other.requiresAccount == requiresAccount)&&(identical(other.requiresAmount, requiresAmount) || other.requiresAmount == requiresAmount)&&(identical(other.requiresAmountFromMerchant, requiresAmountFromMerchant) || other.requiresAmountFromMerchant == requiresAmountFromMerchant)&&(identical(other.requiresPhone, requiresPhone) || other.requiresPhone == requiresPhone)&&(identical(other.requiresReversal, requiresReversal) || other.requiresReversal == requiresReversal)&&(identical(other.additionalDataString, additionalDataString) || other.additionalDataString == additionalDataString)&&(identical(other.processorType, processorType) || other.processorType == processorType)&&(identical(other.uid, uid) || other.uid == uid)&&(identical(other.image, image) || other.image == image)&&(identical(other.label, label) || other.label == label)&&(identical(other.category, category) || other.category == category)&&(identical(other.accountFieldName, accountFieldName) || other.accountFieldName == accountFieldName)); } @JsonKey(includeFromJson: false, includeToJson: false) @override -int get hashCode => Object.hash(runtimeType,clientId,name,description,requiresAccount,requiresAmount,requiresAmountFromMerchant,requiresPhone,requiresReversal,additionalDataString,processorType,uid,image,label,category); +int get hashCode => Object.hash(runtimeType,clientId,name,description,requiresAccount,requiresAmount,requiresAmountFromMerchant,requiresPhone,requiresReversal,additionalDataString,processorType,uid,image,label,category,accountFieldName); @override String toString() { - return 'BillProvider(clientId: $clientId, name: $name, description: $description, requiresAccount: $requiresAccount, requiresAmount: $requiresAmount, requiresAmountFromMerchant: $requiresAmountFromMerchant, requiresPhone: $requiresPhone, requiresReversal: $requiresReversal, additionalDataString: $additionalDataString, processorType: $processorType, uid: $uid, image: $image, label: $label, category: $category)'; + return 'BillProvider(clientId: $clientId, name: $name, description: $description, requiresAccount: $requiresAccount, requiresAmount: $requiresAmount, requiresAmountFromMerchant: $requiresAmountFromMerchant, requiresPhone: $requiresPhone, requiresReversal: $requiresReversal, additionalDataString: $additionalDataString, processorType: $processorType, uid: $uid, image: $image, label: $label, category: $category, accountFieldName: $accountFieldName)'; } @@ -286,7 +288,7 @@ abstract mixin class _$BillProviderCopyWith<$Res> implements $BillProviderCopyWi factory _$BillProviderCopyWith(_BillProvider value, $Res Function(_BillProvider) _then) = __$BillProviderCopyWithImpl; @override @useResult $Res call({ - String clientId, String name, String description, bool requiresAccount, bool requiresAmount, bool requiresAmountFromMerchant, bool requiresPhone, bool requiresReversal, String? additionalDataString, String processorType, String uid, String image, String label, String category + String clientId, String name, String description, bool requiresAccount, bool requiresAmount, bool requiresAmountFromMerchant, bool requiresPhone, bool requiresReversal, String? additionalDataString, String processorType, String uid, String image, String label, String category, String? accountFieldName }); @@ -303,7 +305,7 @@ class __$BillProviderCopyWithImpl<$Res> /// Create a copy of BillProvider /// with the given fields replaced by the non-null parameter values. -@override @pragma('vm:prefer-inline') $Res call({Object? clientId = null,Object? name = null,Object? description = null,Object? requiresAccount = null,Object? requiresAmount = null,Object? requiresAmountFromMerchant = null,Object? requiresPhone = null,Object? requiresReversal = null,Object? additionalDataString = freezed,Object? processorType = null,Object? uid = null,Object? image = null,Object? label = null,Object? category = null,}) { +@override @pragma('vm:prefer-inline') $Res call({Object? clientId = null,Object? name = null,Object? description = null,Object? requiresAccount = null,Object? requiresAmount = null,Object? requiresAmountFromMerchant = null,Object? requiresPhone = null,Object? requiresReversal = null,Object? additionalDataString = freezed,Object? processorType = null,Object? uid = null,Object? image = null,Object? label = null,Object? category = null,Object? accountFieldName = freezed,}) { return _then(_BillProvider( clientId: null == clientId ? _self.clientId : clientId // ignore: cast_nullable_to_non_nullable as String,name: null == name ? _self.name : name // ignore: cast_nullable_to_non_nullable @@ -319,7 +321,8 @@ as String,uid: null == uid ? _self.uid : uid // ignore: cast_nullable_to_non_nul as String,image: null == image ? _self.image : image // ignore: cast_nullable_to_non_nullable as String,label: null == label ? _self.label : label // ignore: cast_nullable_to_non_nullable as String,category: null == category ? _self.category : category // ignore: cast_nullable_to_non_nullable -as String, +as String,accountFieldName: freezed == accountFieldName ? _self.accountFieldName : accountFieldName // ignore: cast_nullable_to_non_nullable +as String?, )); } diff --git a/lib/screens/home/home_controller.g.dart b/lib/screens/home/home_controller.g.dart index 39fe3f1..cd8707c 100644 --- a/lib/screens/home/home_controller.g.dart +++ b/lib/screens/home/home_controller.g.dart @@ -36,6 +36,7 @@ _BillProvider _$BillProviderFromJson(Map json) => image: json['image'] as String, label: json['label'] as String, category: json['category'] as String, + accountFieldName: json['accountFieldName'] as String?, ); Map _$BillProviderToJson(_BillProvider instance) => @@ -54,4 +55,5 @@ Map _$BillProviderToJson(_BillProvider instance) => 'image': instance.image, 'label': instance.label, 'category': instance.category, + 'accountFieldName': instance.accountFieldName, }; diff --git a/lib/screens/home/home_screen.dart b/lib/screens/home/home_screen.dart index 651f1a8..a68a9f7 100644 --- a/lib/screens/home/home_screen.dart +++ b/lib/screens/home/home_screen.dart @@ -1,10 +1,13 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:provider/provider.dart'; +import 'package:timeago/timeago.dart' as timeago; import 'package:qpay/screens/home/home_controller.dart'; -import 'package:qpay/screens/pay/pay_controller.dart'; +import 'package:qpay/screens/transaction_controller.dart'; import 'package:skeletonizer/skeletonizer.dart'; import 'dart:async'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:uuid/uuid.dart'; class HomeScreen extends StatefulWidget { const HomeScreen({super.key}); @@ -17,34 +20,35 @@ class _HomeScreenState extends State with SingleTickerProviderStateMixin { late AnimationController _controller; late Animation _alignAnimation; - final List> _animations = []; - final List> _alignListAnimations = []; - + late TransactionController transactionController; late bool _loading = true; - Timer? _loadingTimer; + late SharedPreferences prefs; + late HomeController homeController; - bool get _isLoggedIn => true; + Timer? _loadingTimer; + bool get _isLoggedIn => false; String _selectedFilter = 'All'; - final HomeController homeController = HomeController(); + final List> _animations = []; + final List> _alignListAnimations = []; @override void initState() { super.initState(); - homeController.getCategories(); - homeController.getProviders(); + transactionController = Provider.of( + context, + listen: false, + ); + + // Reset the transaction controller model + transactionController.model = TransactionModel(); _controller = AnimationController( duration: const Duration(milliseconds: 600), vsync: this, )..forward(); - _alignAnimation = Tween( - begin: Alignment.centerLeft, - end: Alignment.center, - ).animate(CurvedAnimation(parent: _controller, curve: Curves.easeOut)); - List tranListIndices = [0, 1]; for (int i = 0; i < tranListIndices.length; i++) { _alignListAnimations.add( @@ -57,17 +61,12 @@ class _HomeScreenState extends State ); } - List buttonIndices = [0, 1, 2]; - for (int i = 0; i < buttonIndices.length; i++) { - _animations.add( - Tween(begin: Offset(-0.15, 0), end: Offset.zero).animate( - CurvedAnimation( - parent: _controller, - curve: Interval(0.075 * i, 1.0, curve: Curves.easeOut), - ), - ), - ); - } + _alignAnimation = Tween( + begin: Alignment.centerLeft, + end: Alignment.center, + ).animate(CurvedAnimation(parent: _controller, curve: Curves.easeOut)); + + setupDataAndTransitions(); // Simulate a delay to mimic loading state _loadingTimer = Timer(const Duration(seconds: 1), () { @@ -79,6 +78,35 @@ class _HomeScreenState extends State }); } + Future setupDataAndTransitions() async { + homeController = HomeController(context); + await homeController.getCategories(); + await homeController.getProviders(); + + List buttonIndices = List.generate( + homeController.model.providers.length, + (index) => index, + ); + for (int i = 0; i < buttonIndices.length; i++) { + _animations.add( + Tween(begin: Offset(-0.15, 0), end: Offset.zero).animate( + CurvedAnimation( + parent: _controller, + curve: Interval(0.055 * i, 1.0, curve: Curves.easeOut), + ), + ), + ); + } + + prefs = await SharedPreferences.getInstance(); + + if (prefs.getString("userId") == null) { + prefs.setString("userId", Uuid().v4()); + } + + await homeController.getTransactions(prefs.getString("userId")!); + } + getBoxDecoration(String? clientId) { // BillProvider? provider = homeController.model.selectedProvider; // @@ -108,19 +136,11 @@ class _HomeScreenState extends State ); } - void _showErrorSnackBar(String? message) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(message.toString()), - behavior: SnackBarBehavior.floating, - ), - ); - } - @override void dispose() { _loadingTimer?.cancel(); _controller.dispose(); + homeController.dispose(); super.dispose(); } @@ -128,184 +148,199 @@ class _HomeScreenState extends State Widget build(BuildContext context) { return Scaffold( body: SafeArea( - child: CustomScrollView( - slivers: [ - SliverAppBar( - floating: true, - title: Image(image: AssetImage('assets/icon.png'), width: 85), - actions: [ - IconButton( - icon: const Icon(Icons.notifications_outlined), - onPressed: () {}, - ), - ], - ), - SliverToBoxAdapter( - child: Padding( - padding: const EdgeInsets.all(16.0), - child: ListenableBuilder( - listenable: homeController, - builder: (context, child) { - if (homeController.model.errorMessage != null) { - WidgetsBinding.instance.addPostFrameCallback((_) { - _showErrorSnackBar(homeController.model.errorMessage); - }); - } - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - if (_isLoggedIn) - AlignTransition( - alignment: _alignAnimation, - child: Skeletonizer( - enabled: _loading, - child: Column( - children: [ - Text( - "Vusumuzi Khoza", - style: TextStyle(fontSize: 15), - ), - Text( - "USD 4.02", - style: TextStyle( - fontSize: 30, - fontWeight: FontWeight.bold, + child: RefreshIndicator( + onRefresh: () async { + await homeController.getTransactions(prefs.getString("userId")!); + }, + child: CustomScrollView( + slivers: [ + SliverAppBar( + stretch: true, + stretchTriggerOffset: 100.0, + expandedHeight: 50.0, + surfaceTintColor: Colors.transparent, + floating: true, + title: Image(image: AssetImage('assets/peak.png'), width: 85), + actions: [ + // IconButton( + // icon: const Icon(Icons.notifications_outlined), + // onPressed: () {}, + // ), + ], + ), + SliverToBoxAdapter( + child: Padding( + padding: const EdgeInsets.all(20.0), + child: ListenableBuilder( + listenable: homeController, + builder: (context, child) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + if (_isLoggedIn) + AlignTransition( + alignment: _alignAnimation, + child: Skeletonizer( + enabled: _loading, + child: Column( + children: [ + Text( + "Vusumuzi Khoza", + style: TextStyle(fontSize: 15), ), - ), - const SizedBox(height: 20), - ], + Text( + "USD 4.02", + style: TextStyle( + fontSize: 30, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(height: 20), + ], + ), ), ), + _buildFilterChips(homeController), + SizedBox(height: 10), + Column( + children: [ + ...homeController.model.filterableProviders.map( + (e) => _buildProviderItem(e, context), + ), + ], ), - _buildFilterChips(homeController), - SizedBox(height: 10), - Column( - children: [ - ...homeController.model.filterableProviders.map( - (e) => _buildProviderItem(e, context), - ), - ], - ), - SizedBox(height: 5), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - const Text( - 'Recent Activity', - style: TextStyle( - fontSize: 18, - fontWeight: FontWeight.bold, - ), - ), - GestureDetector( - onTap: () { - context.go('/history'); - }, - child: const Text( - 'View All', + const SizedBox(height: 20), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const Text( + 'Recent Activity', style: TextStyle( fontSize: 16, - fontWeight: FontWeight.normal, + fontWeight: FontWeight.bold, ), ), - ), - ], - ), - const SizedBox(height: 20), - Skeletonizer( - enabled: _loading, - child: ListView( - shrinkWrap: true, - physics: const NeverScrollableScrollPhysics(), - children: [ - SlideTransition( - position: _alignListAnimations[0], - child: ListTile( - leading: Container( - padding: const EdgeInsets.all(8), - decoration: BoxDecoration( - color: Theme.of(context) - .colorScheme - .primary - .withValues(alpha: 0.1), - shape: BoxShape.circle, - ), - child: Icon( - Icons.electric_bolt, - color: - Theme.of(context).colorScheme.primary, - ), - ), - title: Text( - 'Electricity Bill', - style: TextStyle( - fontWeight: FontWeight.bold, - ), - ), - subtitle: Text( - 'Paid USD 50.00', - style: TextStyle( - fontWeight: FontWeight.normal, - ), - ), - trailing: Text( - '-USD 50.00', - style: TextStyle( - color: Colors.red, - fontWeight: FontWeight.bold, - ), - ), - ), - ), - SlideTransition( - position: _alignListAnimations[1], - child: ListTile( - leading: Container( - padding: const EdgeInsets.all(8), - decoration: BoxDecoration( - color: Theme.of(context) - .colorScheme - .primary - .withValues(alpha: 0.1), - shape: BoxShape.circle, - ), - child: Icon( - Icons.phone_android, - color: - Theme.of(context).colorScheme.primary, - ), - ), - title: Text( - 'Airtime Purchase', - style: TextStyle( - fontWeight: FontWeight.bold, - ), - ), - subtitle: Text( - 'Purchased USD 10.00', - style: TextStyle( - fontWeight: FontWeight.normal, - ), - ), - trailing: Text( - '-USD 10.00', - style: TextStyle( - color: Colors.red, - fontWeight: FontWeight.bold, - ), + TextButton( + onPressed: () { + context.go('/history'); + }, + child: Text( + 'View All', + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.bold, ), ), ), ], ), - ), - ], - ); - }, + const SizedBox(height: 5), + if (homeController.model.transactions.isEmpty) + Column( + children: [ + SizedBox(height: 30), + Center( + child: Text( + 'No transactions yet. Make a payment to see your recent activity.', + style: TextStyle(fontSize: 16), + textAlign: TextAlign.center, + ), + ), + ], + ), + if (homeController.model.transactions.isNotEmpty) + ListView( + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + children: [ + ...homeController.model.transactions.map( + (e) => _buildTransactionItem(e, context), + ), + ], + ), + ], + ); + }, + ), ), ), + ], + ), + ), + ), + ); + } + + Widget _buildTransactionItem(Map e, BuildContext context) { + return SlideTransition( + position: _alignListAnimations[0], + child: Skeletonizer( + enabled: homeController.model.isLoading, + child: InkWell( + customBorder: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12), + ), + onTap: () { + transactionController.updateReceiptData(e); + context.push("/receipt"); + }, + child: ListTile( + leading: Container( + padding: const EdgeInsets.all(8), + decoration: BoxDecoration( + color: Theme.of( + context, + ).colorScheme.primary.withValues(alpha: 0.1), + shape: BoxShape.circle, + ), + child: Image( + image: AssetImage("assets/${e['paymentProcessorImage']}"), + ), ), - ], + title: Row( + children: [ + Text( + e['billName'], + style: TextStyle(fontWeight: FontWeight.bold), + ), + SizedBox(width: 10), + Icon( + e['status'] == 'SUCCESS' + ? Icons.check_circle + : e['status'] == 'PENDING' + ? Icons.pending + : Icons.cancel, + size: 16, + color: + e['status'] == 'SUCCESS' + ? Colors.green + : e['status'] == 'PENDING' + ? Colors.orange + : Colors.red, + ), + ], + ), + subtitle: Text( + e['createdAt'] != null + ? timeago.format(DateTime.parse(e['createdAt'])) + : '', + style: TextStyle(fontSize: 12), + ), + trailing: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + e['amount'].toStringAsFixed(2), + style: TextStyle(fontWeight: FontWeight.bold, fontSize: 18), + ), + Text( + e['totalAmount'].toStringAsFixed(2), + style: TextStyle(fontSize: 12), + ), + ], + ), + ), ), ), ); @@ -317,7 +352,7 @@ class _HomeScreenState extends State Skeletonizer( enabled: homeController.model.isLoading, child: SlideTransition( - position: _alignListAnimations[1], + position: _animations[homeController.model.providers.indexOf(e)], child: Container( decoration: getBoxDecoration(e.clientId), child: InkWell( @@ -326,7 +361,8 @@ class _HomeScreenState extends State ), onTap: () { homeController.updateSelectedProvider(e); - context.go("/make-payment"); + transactionController.updateSelectedProvider(e); + context.push("/recipients"); }, child: ListTile( leading: Container( @@ -345,7 +381,10 @@ class _HomeScreenState extends State ), subtitle: Text( e.description, - style: TextStyle(fontWeight: FontWeight.normal, fontSize: 10), + style: TextStyle( + fontWeight: FontWeight.normal, + fontSize: 10, + ), ), trailing: Icon( Icons.chevron_right, @@ -383,29 +422,42 @@ class _HomeScreenState extends State Category? category, ]) { final isSelected = _selectedFilter == label; - return Padding( - padding: const EdgeInsets.only(right: 8), - child: FilterChip( - selected: isSelected, - label: Text(label), - onSelected: (selected) { - setState(() { - _selectedFilter = label; - }); - if (category != null) { - controller.updateSelectedCategory(category); - } else { - controller.updateSelectedCategory(null); - } - }, - backgroundColor: Theme.of(context).colorScheme.surface, - selectedColor: Theme.of(context).colorScheme.primary.withOpacity(0.2), - checkmarkColor: Theme.of(context).colorScheme.primary, - labelStyle: TextStyle( - color: - isSelected - ? Theme.of(context).colorScheme.primary - : Theme.of(context).colorScheme.onSurface, + return Skeletonizer( + enabled: controller.model.isLoading, + child: Padding( + padding: const EdgeInsets.only(right: 8), + child: FilterChip( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12), + side: BorderSide( + color: Theme.of( + context, + ).colorScheme.primary.withValues(alpha: 0.2), + ), + ), + selected: isSelected, + label: Text(label), + onSelected: (selected) { + setState(() { + _selectedFilter = label; + }); + if (category != null) { + controller.updateSelectedCategory(category); + } else { + controller.updateSelectedCategory(null); + } + }, + backgroundColor: Theme.of(context).colorScheme.surface, + selectedColor: Theme.of(context).colorScheme.primary.withOpacity(0.2), + checkmarkColor: Theme.of(context).colorScheme.primary, + labelStyle: TextStyle( + color: + isSelected + ? Theme.of( + context, + ).colorScheme.secondary.withValues(alpha: 0.7) + : Theme.of(context).colorScheme.onSurface, + ), ), ), ); diff --git a/lib/screens/pay/pay_controller.dart b/lib/screens/pay/pay_controller.dart index 7c11e0d..305401c 100644 --- a/lib/screens/pay/pay_controller.dart +++ b/lib/screens/pay/pay_controller.dart @@ -1,17 +1,41 @@ +import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; +import 'package:provider/provider.dart'; +import 'package:shared_preferences/shared_preferences.dart'; import 'package:qpay/http/http.dart'; import 'package:qpay/screens/home/home_controller.dart' as hc; +import 'package:qpay/screens/transaction_controller.dart'; +import 'package:qpay/screens/transaction_controller.dart' as tc; part 'pay_controller.freezed.dart'; part 'pay_controller.g.dart'; class PayScreenModel { List products = []; - late BillProduct selectedProduct; - dynamic formData = {}; + List paymentProcessors = []; + hc.BillProvider? selectedProvider; + BillProduct? selectedProduct; + PaymentProcessor? selectedPaymentProcessor; bool isLoading = false; String? errorMessage; + String? status; +} + +@freezed +abstract class PaymentProcessor with _$PaymentProcessor { + const factory PaymentProcessor({ + required String name, + required String description, + required String image, + required String accountFieldName, + required String accountFieldLabel, + required String label, + required String authType, + }) = _PaymentProcessor; + + factory PaymentProcessor.fromJson(Map json) => + _$PaymentProcessorFromJson(json); } @freezed @@ -32,13 +56,94 @@ abstract class BillProduct with _$BillProduct { class PayController extends ChangeNotifier { final PayScreenModel model = PayScreenModel(); final Http http = Http(); + late SharedPreferences prefs; + late TransactionController transactionController; + BuildContext context; - void updateSelectedProduct(BillProduct product) { - model.selectedProduct = product; + PayController(this.context) { + transactionController = Provider.of( + context, + listen: false, + ); + model.selectedProvider = transactionController.model.selectedProvider; + model.selectedProduct = transactionController.model.selectedProduct; + } + + void _showErrorSnackBar(String? message) { + WidgetsBinding.instance.addPostFrameCallback((_) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text(message.toString()), + behavior: SnackBarBehavior.floating, + backgroundColor: Colors.deepOrange, + ), + ); + }); + } + + // formData can come from a repeat transaction + // otherwise build it from elements of the normal flow + Future doTransaction([tc.FormData? formData]) async { + try { + model.isLoading = true; + notifyListeners(); + + prefs = await SharedPreferences.getInstance(); + + transactionController.model.formData = + formData ?? + transactionController.model.formData.copyWith( + type: "CONFIRM", + billClientId: model.selectedProvider?.clientId ?? '', + debitRef: 'peak', + debitCurrency: 'USD', + creditAccount: transactionController.model.formData.creditAccount, + creditPhone: transactionController.model.formData.creditPhone, + billName: model.selectedProvider?.name ?? '', + paymentProcessorLabel: model.selectedPaymentProcessor?.label ?? '', + paymentProcessorName: model.selectedPaymentProcessor?.name ?? '', + paymentProcessorImage: model.selectedPaymentProcessor?.image ?? '', + providerImage: model.selectedProvider?.image ?? '', + providerLabel: model.selectedProvider?.label ?? '', + userId: prefs.getString("userId") ?? '', + creditName: transactionController.model.formData.creditName, + creditEmail: transactionController.model.formData.creditEmail, + productUid: model.selectedProduct?.uid, + ); + + dynamic response = await http.post( + '/transaction', + transactionController.model.formData, + ); + logger.i(response.toString()); + + if (response['status'] == 'SUCCESS') { + model.status = response['status']; + + transactionController.updateConfirmationData(response); + } else { + model.status = response['status']; + model.errorMessage = + response['errorMessage'] ?? + "Problem with the transaction. Please try again or contact support"; + _showErrorSnackBar(model.errorMessage); + } + } on DioException catch (e, s) { + logger.e(s); + _showErrorSnackBar("Network error. Please try again or contact support"); + } catch (e, s) { + logger.e(s); + _showErrorSnackBar( + "Problem processing that transaction. Please try again or contact support", + ); + } + + model.isLoading = false; notifyListeners(); } Future getProducts(String providerId) async { + model.products = getFakeProducts(); try { model.isLoading = true; @@ -48,11 +153,86 @@ class PayController extends ChangeNotifier { model.products = response.map((e) => BillProduct.fromJson(e)).toList(); } catch (e) { logger.e(e); - model.errorMessage = e.toString(); + _showErrorSnackBar( + "Problem fetching products, are you connected to the internet?", + ); } model.isLoading = false; notifyListeners(); } + Future getPaymentProcessors() async { + try { + model.isLoading = true; + model.paymentProcessors = getFakePaymentProcessors(); + notifyListeners(); + + List response = await http.get('/payment-processors'); + model.paymentProcessors = + response.map((e) => PaymentProcessor.fromJson(e)).toList(); + + notifyListeners(); + } catch (e) { + logger.e(e); + _showErrorSnackBar( + "Problem fetching payment processors, are you connected to the internet?", + ); + } + } + + void updateAdditionalRecipientDetails(String name, String email) { + transactionController.model.formData = transactionController.model.formData + .copyWith(creditName: name, creditEmail: email); + notifyListeners(); + } + + void updatePhone(String phone) { + transactionController.model.formData = transactionController.model.formData + .copyWith(creditPhone: phone); + notifyListeners(); + } + + void updateAmount(String amount) { + transactionController.model.formData = transactionController.model.formData + .copyWith(amount: amount); + notifyListeners(); + } + + void updateSelectedProduct(BillProduct product) { + model.selectedProduct = product; + notifyListeners(); + } + + void updateSelectedPaymentProcessor(PaymentProcessor processor) { + model.selectedPaymentProcessor = processor; + notifyListeners(); + } + + List getFakePaymentProcessors() { + return [ + PaymentProcessor( + name: "EcoCash", + description: "Pay using your mobile wallet.", + image: "ecocash.png", + accountFieldName: "phoneNumber", + accountFieldLabel: "EcoCash Phone Number", + label: "ECOCASH", + authType: "REMOTE", + ), + ]; + } + + List getFakeProducts() { + return [ + BillProduct( + uid: '1', + name: 'Product 1', + description: 'Description 1', + displayName: 'Product 1', + defaultAmount: 100, + requiresAmount: true, + ), + ]; + } } diff --git a/lib/screens/pay/pay_controller.freezed.dart b/lib/screens/pay/pay_controller.freezed.dart index 5921476..0acb605 100644 --- a/lib/screens/pay/pay_controller.freezed.dart +++ b/lib/screens/pay/pay_controller.freezed.dart @@ -13,6 +13,157 @@ part of 'pay_controller.dart'; // dart format off T _$identity(T value) => value; +/// @nodoc +mixin _$PaymentProcessor { + + String get name; String get description; String get image; String get accountFieldName; String get accountFieldLabel; String get label; String get authType; +/// Create a copy of PaymentProcessor +/// with the given fields replaced by the non-null parameter values. +@JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +$PaymentProcessorCopyWith get copyWith => _$PaymentProcessorCopyWithImpl(this as PaymentProcessor, _$identity); + + /// Serializes this PaymentProcessor to a JSON map. + Map toJson(); + + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is PaymentProcessor&&(identical(other.name, name) || other.name == name)&&(identical(other.description, description) || other.description == description)&&(identical(other.image, image) || other.image == image)&&(identical(other.accountFieldName, accountFieldName) || other.accountFieldName == accountFieldName)&&(identical(other.accountFieldLabel, accountFieldLabel) || other.accountFieldLabel == accountFieldLabel)&&(identical(other.label, label) || other.label == label)&&(identical(other.authType, authType) || other.authType == authType)); +} + +@JsonKey(includeFromJson: false, includeToJson: false) +@override +int get hashCode => Object.hash(runtimeType,name,description,image,accountFieldName,accountFieldLabel,label,authType); + +@override +String toString() { + return 'PaymentProcessor(name: $name, description: $description, image: $image, accountFieldName: $accountFieldName, accountFieldLabel: $accountFieldLabel, label: $label, authType: $authType)'; +} + + +} + +/// @nodoc +abstract mixin class $PaymentProcessorCopyWith<$Res> { + factory $PaymentProcessorCopyWith(PaymentProcessor value, $Res Function(PaymentProcessor) _then) = _$PaymentProcessorCopyWithImpl; +@useResult +$Res call({ + String name, String description, String image, String accountFieldName, String accountFieldLabel, String label, String authType +}); + + + + +} +/// @nodoc +class _$PaymentProcessorCopyWithImpl<$Res> + implements $PaymentProcessorCopyWith<$Res> { + _$PaymentProcessorCopyWithImpl(this._self, this._then); + + final PaymentProcessor _self; + final $Res Function(PaymentProcessor) _then; + +/// Create a copy of PaymentProcessor +/// with the given fields replaced by the non-null parameter values. +@pragma('vm:prefer-inline') @override $Res call({Object? name = null,Object? description = null,Object? image = null,Object? accountFieldName = null,Object? accountFieldLabel = null,Object? label = null,Object? authType = null,}) { + return _then(_self.copyWith( +name: null == name ? _self.name : name // ignore: cast_nullable_to_non_nullable +as String,description: null == description ? _self.description : description // ignore: cast_nullable_to_non_nullable +as String,image: null == image ? _self.image : image // ignore: cast_nullable_to_non_nullable +as String,accountFieldName: null == accountFieldName ? _self.accountFieldName : accountFieldName // ignore: cast_nullable_to_non_nullable +as String,accountFieldLabel: null == accountFieldLabel ? _self.accountFieldLabel : accountFieldLabel // ignore: cast_nullable_to_non_nullable +as String,label: null == label ? _self.label : label // ignore: cast_nullable_to_non_nullable +as String,authType: null == authType ? _self.authType : authType // ignore: cast_nullable_to_non_nullable +as String, + )); +} + +} + + +/// @nodoc +@JsonSerializable() + +class _PaymentProcessor implements PaymentProcessor { + const _PaymentProcessor({required this.name, required this.description, required this.image, required this.accountFieldName, required this.accountFieldLabel, required this.label, required this.authType}); + factory _PaymentProcessor.fromJson(Map json) => _$PaymentProcessorFromJson(json); + +@override final String name; +@override final String description; +@override final String image; +@override final String accountFieldName; +@override final String accountFieldLabel; +@override final String label; +@override final String authType; + +/// Create a copy of PaymentProcessor +/// with the given fields replaced by the non-null parameter values. +@override @JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +_$PaymentProcessorCopyWith<_PaymentProcessor> get copyWith => __$PaymentProcessorCopyWithImpl<_PaymentProcessor>(this, _$identity); + +@override +Map toJson() { + return _$PaymentProcessorToJson(this, ); +} + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is _PaymentProcessor&&(identical(other.name, name) || other.name == name)&&(identical(other.description, description) || other.description == description)&&(identical(other.image, image) || other.image == image)&&(identical(other.accountFieldName, accountFieldName) || other.accountFieldName == accountFieldName)&&(identical(other.accountFieldLabel, accountFieldLabel) || other.accountFieldLabel == accountFieldLabel)&&(identical(other.label, label) || other.label == label)&&(identical(other.authType, authType) || other.authType == authType)); +} + +@JsonKey(includeFromJson: false, includeToJson: false) +@override +int get hashCode => Object.hash(runtimeType,name,description,image,accountFieldName,accountFieldLabel,label,authType); + +@override +String toString() { + return 'PaymentProcessor(name: $name, description: $description, image: $image, accountFieldName: $accountFieldName, accountFieldLabel: $accountFieldLabel, label: $label, authType: $authType)'; +} + + +} + +/// @nodoc +abstract mixin class _$PaymentProcessorCopyWith<$Res> implements $PaymentProcessorCopyWith<$Res> { + factory _$PaymentProcessorCopyWith(_PaymentProcessor value, $Res Function(_PaymentProcessor) _then) = __$PaymentProcessorCopyWithImpl; +@override @useResult +$Res call({ + String name, String description, String image, String accountFieldName, String accountFieldLabel, String label, String authType +}); + + + + +} +/// @nodoc +class __$PaymentProcessorCopyWithImpl<$Res> + implements _$PaymentProcessorCopyWith<$Res> { + __$PaymentProcessorCopyWithImpl(this._self, this._then); + + final _PaymentProcessor _self; + final $Res Function(_PaymentProcessor) _then; + +/// Create a copy of PaymentProcessor +/// with the given fields replaced by the non-null parameter values. +@override @pragma('vm:prefer-inline') $Res call({Object? name = null,Object? description = null,Object? image = null,Object? accountFieldName = null,Object? accountFieldLabel = null,Object? label = null,Object? authType = null,}) { + return _then(_PaymentProcessor( +name: null == name ? _self.name : name // ignore: cast_nullable_to_non_nullable +as String,description: null == description ? _self.description : description // ignore: cast_nullable_to_non_nullable +as String,image: null == image ? _self.image : image // ignore: cast_nullable_to_non_nullable +as String,accountFieldName: null == accountFieldName ? _self.accountFieldName : accountFieldName // ignore: cast_nullable_to_non_nullable +as String,accountFieldLabel: null == accountFieldLabel ? _self.accountFieldLabel : accountFieldLabel // ignore: cast_nullable_to_non_nullable +as String,label: null == label ? _self.label : label // ignore: cast_nullable_to_non_nullable +as String,authType: null == authType ? _self.authType : authType // ignore: cast_nullable_to_non_nullable +as String, + )); +} + + +} + + /// @nodoc mixin _$BillProduct { diff --git a/lib/screens/pay/pay_controller.g.dart b/lib/screens/pay/pay_controller.g.dart index cd80089..4995394 100644 --- a/lib/screens/pay/pay_controller.g.dart +++ b/lib/screens/pay/pay_controller.g.dart @@ -6,6 +6,28 @@ part of 'pay_controller.dart'; // JsonSerializableGenerator // ************************************************************************** +_PaymentProcessor _$PaymentProcessorFromJson(Map json) => + _PaymentProcessor( + name: json['name'] as String, + description: json['description'] as String, + image: json['image'] as String, + accountFieldName: json['accountFieldName'] as String, + accountFieldLabel: json['accountFieldLabel'] as String, + label: json['label'] as String, + authType: json['authType'] as String, + ); + +Map _$PaymentProcessorToJson(_PaymentProcessor instance) => + { + 'name': instance.name, + 'description': instance.description, + 'image': instance.image, + 'accountFieldName': instance.accountFieldName, + 'accountFieldLabel': instance.accountFieldLabel, + 'label': instance.label, + 'authType': instance.authType, + }; + _BillProduct _$BillProductFromJson(Map json) => _BillProduct( uid: json['uid'] as String, name: json['name'] as String, diff --git a/lib/screens/pay/pay_screen.dart b/lib/screens/pay/pay_screen.dart index 9580580..838a322 100644 --- a/lib/screens/pay/pay_screen.dart +++ b/lib/screens/pay/pay_screen.dart @@ -1,6 +1,9 @@ import 'package:flutter/material.dart'; +import 'package:flutter_contacts/flutter_contacts.dart'; +import 'package:go_router/go_router.dart'; import 'package:provider/provider.dart'; import 'package:qpay/screens/pay/pay_controller.dart'; +import 'package:qpay/screens/transaction_controller.dart'; import 'package:skeletonizer/skeletonizer.dart'; class PayScreen extends StatefulWidget { @@ -14,16 +17,64 @@ class _PayScreenState extends State with TickerProviderStateMixin { late AnimationController _controller; late Animation _fadeAnimation; late Animation _slideAnimation; + late PayController controller; + late TransactionController transactionController; + final List> _animations = []; final _formKey = GlobalKey(); final _amountController = TextEditingController(); - final _descriptionController = TextEditingController(); - String _selectedBillType = ''; + final _nameController = TextEditingController(); + final _emailController = TextEditingController(); + final _phoneController = TextEditingController(); + bool showAdditionalRecipientDetails = false; + String selectedCountryCode = '+263'; // Default to ZW + + // Common country codes with flags and names + final List> countryCodes = [ + {'code': '+263', 'name': 'ZW', 'flag': '🇿🇼'}, + {'code': '+27', 'name': 'ZA', 'flag': '🇿🇦'}, + {'code': '+1', 'name': 'US', 'flag': '🇺🇸'}, + {'code': '+44', 'name': 'UK', 'flag': '🇬🇧'}, + {'code': '+61', 'name': 'AU', 'flag': '🇦🇺'}, + {'code': '+91', 'name': 'IN', 'flag': '🇮🇳'}, + {'code': '+86', 'name': 'CN', 'flag': '🇨🇳'}, + {'code': '+81', 'name': 'JP', 'flag': '🇯🇵'}, + {'code': '+49', 'name': 'DE', 'flag': '🇩🇪'}, + {'code': '+33', 'name': 'FR', 'flag': '🇫🇷'}, + {'code': '+39', 'name': 'IT', 'flag': '🇮🇹'}, + {'code': '+34', 'name': 'ES', 'flag': '🇪🇸'}, + {'code': '+7', 'name': 'RU', 'flag': '🇷🇺'}, + {'code': '+55', 'name': 'BR', 'flag': '🇧🇷'}, + {'code': '+52', 'name': 'MX', 'flag': '🇲🇽'}, + {'code': '+971', 'name': 'AE', 'flag': '🇦🇪'}, + {'code': '+966', 'name': 'SA', 'flag': '🇸🇦'}, + {'code': '+234', 'name': 'NG', 'flag': '🇳🇬'}, + {'code': '+254', 'name': 'KE', 'flag': '🇰🇪'}, + {'code': '+233', 'name': 'GH', 'flag': '🇬🇭'}, + {'code': '+256', 'name': 'UG', 'flag': '🇺🇬'}, + ]; @override void initState() { super.initState(); + controller = PayController(context); + controller.getPaymentProcessors(); + + controller.getProducts(controller.model.selectedProvider?.uid ?? ""); + transactionController = Provider.of( + context, + listen: false, + ); + + _nameController.text = + transactionController.model.formData.creditName ?? ''; + _emailController.text = + transactionController.model.formData.creditEmail ?? ''; + + // Initialize phone number and country code + updatePhoneNumber(transactionController.model.formData.creditPhone ?? ''); + _controller = AnimationController( vsync: this, duration: const Duration(milliseconds: 800), @@ -46,45 +97,78 @@ class _PayScreenState extends State with TickerProviderStateMixin { ), ); + List buttonIndices = [0, 1]; + for (int i = 0; i < buttonIndices.length; i++) { + _animations.add( + Tween(begin: Offset(-0.15, 0), end: Offset.zero).animate( + CurvedAnimation( + parent: _controller, + curve: Interval(0.055 * i, 1.0, curve: Curves.easeOut), + ), + ), + ); + } + _controller.forward(); } + Future updatePhoneNumber(String phoneNumber) async { + String existingPhone = phoneNumber; + if (existingPhone.isNotEmpty) { + // Try to extract country code from existing phone number + for (var country in countryCodes) { + if (existingPhone.startsWith(country['code']!)) { + setState(() { + selectedCountryCode = country['code']!; + }); + _phoneController.text = existingPhone.substring( + country['code']!.length, + ); + break; + } + } + // If no country code found, use default and set the full number + if (_phoneController.text.isEmpty) { + _phoneController.text = existingPhone; + } + } + } + @override void dispose() { _controller.dispose(); _amountController.dispose(); - _descriptionController.dispose(); + _nameController.dispose(); + _emailController.dispose(); + _phoneController.dispose(); + controller.dispose(); super.dispose(); } - void _showErrorSnackBar(String? message) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(message.toString()), - behavior: SnackBarBehavior.floating, - ), - ); - } - @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( + leading: + context.canPop() + ? IconButton( + onPressed: () { + context.pop(); + }, + icon: const Icon(Icons.arrow_back), + ) + : SizedBox.shrink(), title: const Text( 'Make Payment', style: TextStyle(color: Colors.black87), ), ), - body: Consumer( - builder: (context, controller, child) { - if (controller.model.errorMessage != null) { - WidgetsBinding.instance.addPostFrameCallback((_) { - _showErrorSnackBar(controller.model.errorMessage); - }); - } + body: ListenableBuilder( + listenable: controller, + builder: (context, child) { return SingleChildScrollView( child: Padding( - padding: const EdgeInsets.all(16.0), + padding: const EdgeInsets.all(20.0), child: FadeTransition( opacity: _fadeAnimation, child: SlideTransition( @@ -94,14 +178,101 @@ class _PayScreenState extends State with TickerProviderStateMixin { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - SizedBox(height: 20), - _buildBillProductSelector(controller), - const SizedBox(height: 24), + Text( + "TRANSACTIONS DETAILS", + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(height: 20), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "Provider", + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + ), + ), + Text( + controller.model.selectedProvider?.name ?? "", + style: TextStyle(fontSize: 16), + ), + ], + ), + const SizedBox(height: 10), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + controller + .model + .selectedProvider + ?.accountFieldName ?? + "", + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + ), + ), + Text( + transactionController + .model + .formData + .creditAccount, + style: TextStyle(fontSize: 16), + ), + ], + ), + const SizedBox(height: 10), + Divider(color: Theme.of(context).colorScheme.primary), + InkWell( + customBorder: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12), + ), + onTap: () { + setState(() { + showAdditionalRecipientDetails = + !showAdditionalRecipientDetails; + }); + }, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + IconButton( + onPressed: () {}, + icon: Icon( + showAdditionalRecipientDetails + ? Icons.arrow_drop_up + : Icons.arrow_drop_down, + ), + color: Theme.of(context).colorScheme.primary, + ), + Text( + showAdditionalRecipientDetails + ? "Hide additional recipient details" + : "Show additional recipient details", + style: TextStyle(fontSize: 16), + ), + ], + ), + ), + if (showAdditionalRecipientDetails) + _buildAdditionalRecipientDetails(), + const SizedBox(height: 7), + if (controller.model.products.isNotEmpty) + _buildBillProductSelector(controller), + const SizedBox(height: 7), + _buildPhoneField(), + const SizedBox(height: 7), _buildAmountField(), - const SizedBox(height: 24), - _buildDescriptionField(), - const SizedBox(height: 32), - _buildPayButton(), + const SizedBox(height: 20), + // _buildPayButton(controller), + ...controller.model.paymentProcessors.map( + (e) => _buildPaymentProcessorItem(e, context), + ), ], ), ), @@ -114,51 +285,130 @@ class _PayScreenState extends State with TickerProviderStateMixin { ); } - Widget _buildBillProductSelector(PayController controller) { + Widget _buildPhoneField() { + if (controller.model.selectedProvider?.requiresPhone == false) { + return SizedBox.shrink(); + } return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - const Text( - 'Select Provider Product', - style: TextStyle(fontSize: 16, fontWeight: FontWeight.w500), - ), - const SizedBox(height: 12), - Container( - padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 4), - decoration: BoxDecoration( - color: Theme.of(context).colorScheme.surface, - borderRadius: BorderRadius.circular(12), - border: Border.all( - color: Theme.of(context).colorScheme.primary.withOpacity(0.2), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + const Text( + 'Notification Phone Number', + style: TextStyle(fontSize: 16, fontWeight: FontWeight.w500), ), - ), - child: DropdownButtonHideUnderline( - child: DropdownButton( - isExpanded: true, - icon: const Icon(Icons.arrow_drop_down), - items: [ - ...controller.model.products.map( - (e) => DropdownMenuItem( - value: e.uid, - child: Text(e.displayName), - ), - ), - ], - onChanged: (String? newValue) { - if (newValue != null) { - setState(() { - _selectedBillType = newValue; - }); + TextButton( + onPressed: () async { + if (await FlutterContacts.requestPermission()) { + final contact = await FlutterContacts.openExternalPick(); + if (contact != null) { + updatePhoneNumber(contact.phones.first.normalizedNumber); + } } }, + child: Text( + "Fetch from contacts", + style: TextStyle(fontSize: 12, color: Colors.red), + ), ), - ), + ], + ), + const SizedBox(height: 5), + Row( + children: [ + // Country code dropdown + Container( + width: 100, + decoration: BoxDecoration( + border: Border.all( + color: Theme.of(context).colorScheme.primary.withOpacity(0.2), + ), + borderRadius: BorderRadius.circular(12), + ), + child: DropdownButtonHideUnderline( + child: DropdownButton( + value: selectedCountryCode, + isExpanded: true, + icon: const Icon(Icons.arrow_drop_down), + padding: const EdgeInsets.symmetric(horizontal: 8), + items: + countryCodes.map((country) { + return DropdownMenuItem( + value: country['code'], + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Text(country['flag']!), + const SizedBox(width: 4), + Text( + country['code']!, + style: const TextStyle(fontSize: 14), + ), + ], + ), + ); + }).toList(), + onChanged: (String? newValue) { + if (newValue != null) { + setState(() { + selectedCountryCode = newValue; + }); + } + }, + ), + ), + ), + const SizedBox(width: 8), + // Phone number field + Expanded( + child: TextFormField( + controller: _phoneController, + keyboardType: TextInputType.numberWithOptions(decimal: true), + decoration: InputDecoration( + hintText: 'Enter phone number', + focusedErrorBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: BorderSide( + color: Theme.of(context).colorScheme.secondary, + ), + ), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: BorderSide( + color: Theme.of( + context, + ).colorScheme.primary.withOpacity(0.2), + ), + ), + ), + validator: (value) { + if (value == null || value.isEmpty) { + return 'Please enter a phone number'; + } + // Remove any non-digit characters for validation + String digitsOnly = value.replaceAll(RegExp(r'[^\d]'), ''); + if (digitsOnly.length < 7) { + return 'Phone number must be at least 7 digits'; + } + if (digitsOnly.length > 15) { + return 'Phone number is too long'; + } + return null; + }, + ), + ), + ], ), ], ); } Widget _buildAmountField() { + if (controller.model.selectedProvider?.requiresAmount == false) { + return SizedBox.shrink(); + } return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -166,13 +416,24 @@ class _PayScreenState extends State with TickerProviderStateMixin { 'Amount', style: TextStyle(fontSize: 16, fontWeight: FontWeight.w500), ), - const SizedBox(height: 12), + const SizedBox(height: 5), TextFormField( controller: _amountController, - keyboardType: TextInputType.number, - decoration: const InputDecoration( - prefixIcon: Icon(Icons.attach_money), + keyboardType: TextInputType.numberWithOptions(decimal: true), + decoration: InputDecoration( hintText: 'Enter amount', + focusedErrorBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: BorderSide( + color: Theme.of(context).colorScheme.secondary, + ), + ), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: BorderSide( + color: Theme.of(context).colorScheme.primary.withOpacity(0.2), + ), + ), ), validator: (value) { if (value == null || value.isEmpty) { @@ -188,50 +449,238 @@ class _PayScreenState extends State with TickerProviderStateMixin { ); } - Widget _buildDescriptionField() { + Widget _buildAdditionalRecipientDetails() { + return SlideTransition( + position: _slideAnimation, + child: Column( + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Text( + 'Name', + style: TextStyle(fontSize: 16, fontWeight: FontWeight.w500), + ), + const SizedBox(height: 5), + TextFormField( + controller: _nameController, + keyboardType: TextInputType.text, + decoration: InputDecoration( + hintText: 'Enter recipient\'s name', + focusedErrorBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: BorderSide( + color: Theme.of(context).colorScheme.secondary, + ), + ), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: BorderSide( + color: Theme.of( + context, + ).colorScheme.primary.withOpacity(0.2), + ), + ), + ), + ), + ], + ), + const SizedBox(height: 10), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Text( + 'Email', + style: TextStyle(fontSize: 16, fontWeight: FontWeight.w500), + ), + const SizedBox(height: 5), + TextFormField( + controller: _emailController, + keyboardType: TextInputType.emailAddress, + decoration: InputDecoration( + hintText: 'Enter recipient\'s email', + focusedErrorBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: BorderSide( + color: Theme.of(context).colorScheme.secondary, + ), + ), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: BorderSide( + color: Theme.of( + context, + ).colorScheme.primary.withOpacity(0.2), + ), + ), + ), + ), + ], + ), + const SizedBox(height: 10), + Divider(color: Theme.of(context).colorScheme.primary), + ], + ), + ); + } + + Widget _buildBillProductSelector(PayController controller) { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ + SizedBox(height: 20), const Text( - 'Description', + 'Provider Product', style: TextStyle(fontSize: 16, fontWeight: FontWeight.w500), ), - const SizedBox(height: 12), - TextFormField( - controller: _descriptionController, - maxLines: 3, - decoration: const InputDecoration( - hintText: 'Enter description (optional)', - alignLabelWithHint: true, + const SizedBox(height: 5), + Skeletonizer( + enabled: controller.model.isLoading, + child: DropdownButtonHideUnderline( + child: DropdownButtonFormField( + value: controller.model.selectedProduct?.uid, + isExpanded: true, + icon: const Icon(Icons.arrow_drop_down), + decoration: InputDecoration( + hintText: 'Select Product', + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: BorderSide( + color: Theme.of( + context, + ).colorScheme.primary.withValues(alpha: 0.2), + ), + ), + ), + items: [ + DropdownMenuItem(child: Text("Select Product")), + ...controller.model.products.map( + (e) => DropdownMenuItem( + value: e.uid, + child: Text(e.displayName), + ), + ), + ], + onChanged: (String? newValue) { + if (newValue != null) { + BillProduct product = controller.model.products.firstWhere( + (e) => e.uid == newValue, + ); + controller.updateSelectedProduct(product); + } + }, + validator: (value) { + if (value == null || value.isEmpty) { + return 'Please select a product'; + } + return null; + }, + ), ), ), ], ); } - Widget _buildPayButton() { - return SizedBox( - width: double.infinity, - child: ElevatedButton( - onPressed: () { - if (_formKey.currentState!.validate()) { - // TODO: Implement payment logic - ScaffoldMessenger.of(context).showSnackBar( - const SnackBar( - content: Text('Payment processed successfully!'), - backgroundColor: Colors.green, + Widget _buildPaymentProcessorItem(PaymentProcessor e, BuildContext context) { + return Column( + children: [ + Skeletonizer( + enabled: controller.model.isLoading, + child: SlideTransition( + position: + _animations[controller.model.paymentProcessors.indexOf(e)], + child: Container( + decoration: BoxDecoration( + border: Border.all(color: Colors.black87.withAlpha(20)), + borderRadius: BorderRadius.circular(12), + gradient: LinearGradient( + colors: [ + Theme.of( + context, + ).colorScheme.primary.withValues(alpha: 0.1), + Theme.of( + context, + ).colorScheme.tertiary.withValues(alpha: 0.05), + ], + stops: const [0.3, 0.7], + begin: Alignment.topRight, + end: Alignment.bottomLeft, + ), ), - ); - } - }, - style: ElevatedButton.styleFrom( - padding: const EdgeInsets.symmetric(vertical: 16), + child: InkWell( + customBorder: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12), + ), + onTap: () async { + if (_formKey.currentState!.validate()) { + if (controller.model.isLoading) return; + + controller.updateAmount(_amountController.text); + if (!controller.model.selectedProvider!.requiresAmount) { + controller.updateAmount( + controller.model.selectedProduct!.defaultAmount + .toString(), + ); + } + + // Update phone number with country code + String fullPhoneNumber = + selectedCountryCode + _phoneController.text; + controller.updatePhone(fullPhoneNumber); + + if (showAdditionalRecipientDetails) { + controller.updateAdditionalRecipientDetails( + _nameController.text, + _emailController.text, + ); + } + controller.updateSelectedPaymentProcessor(e); + transactionController.updateSelectedPaymentProcessor(e); + + await controller.doTransaction(); + + if (controller.model.status == "SUCCESS" && + context.mounted) { + context.push('/confirm'); + } + } + }, + child: ListTile( + leading: Container( + padding: const EdgeInsets.all(8), + decoration: BoxDecoration( + color: Theme.of( + context, + ).colorScheme.primary.withValues(alpha: 0.1), + shape: BoxShape.circle, + ), + child: Image(image: AssetImage("assets/${e.image}")), + ), + title: Text( + e.name, + style: TextStyle(fontWeight: FontWeight.bold), + ), + subtitle: Text( + e.description, + style: TextStyle( + fontWeight: FontWeight.normal, + fontSize: 10, + ), + ), + trailing: Icon( + Icons.chevron_right, + color: Theme.of( + context, + ).colorScheme.secondary.withValues(alpha: 0.7), + ), + ), + ), + ), + ), ), - child: const Text( - 'Pay Now', - style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold), - ), - ), + SizedBox(height: 10), + ], ); } } diff --git a/lib/screens/receipt/receipt_controller.dart b/lib/screens/receipt/receipt_controller.dart new file mode 100644 index 0000000..c7168e0 --- /dev/null +++ b/lib/screens/receipt/receipt_controller.dart @@ -0,0 +1,114 @@ +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:provider/provider.dart'; +import 'package:qpay/http/http.dart'; +import 'package:qpay/screens/pay/pay_controller.dart' as pc; +import 'package:qpay/screens/transaction_controller.dart' as tc; +import 'package:qpay/screens/home/home_controller.dart' as hc; + +class ReceiptModel { + Map? receiptData; + bool isLoading = false; + String? errorMessage; +} + +class ReceiptController extends ChangeNotifier { + final ReceiptModel model = ReceiptModel(); + final Http http = Http(); + late tc.TransactionController transactionController; + late SharedPreferences prefs; + + BuildContext context; + + ReceiptController(this.context) { + transactionController = Provider.of( + context, + listen: false, + ); + } + + void _showErrorSnackBar(String? message) { + WidgetsBinding.instance.addPostFrameCallback((_) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text(message.toString()), + behavior: SnackBarBehavior.floating, + backgroundColor: Colors.deepOrange, + ), + ); + }); + } + + void setLoading(bool value) { + model.isLoading = value; + notifyListeners(); + } + + Future repeatTransaction(BuildContext context) async { + setLoading(true); + // fetch provider & update tran controller + String providerId = model.receiptData?['billClientId'] ?? ''; + Map provider = await http.get( + '/providers/client/$providerId', + ); + transactionController.model.selectedProvider = hc.BillProvider.fromJson( + provider, + ); + + // update tran controller formdata with credit account, email, name, phone & providerLabel + transactionController.model.formData = transactionController.model.formData + .copyWith( + creditAccount: model.receiptData?['creditAccount'] ?? '', + creditPhone: model.receiptData?['creditPhone'] ?? '', + creditName: model.receiptData?['creditName'] ?? '', + creditEmail: model.receiptData?['creditEmail'] ?? '', + ); + + // fetch product and update tran controller formdata + String providerUid = + transactionController.model.selectedProvider?.uid ?? ''; + String productUid = model.receiptData?['productUid'] ?? ''; + + if (productUid.isNotEmpty) { + Map product = await http.get( + '/providers/$providerUid/products/$productUid', + ); + transactionController.model.selectedProduct = pc.BillProduct.fromJson( + product, + ); + } + + // update credit amount, notification phone number, payment processor + transactionController + .model + .formData = transactionController.model.formData.copyWith( + amount: model.receiptData?['amount'].toStringAsFixed(2) ?? '', + creditPhone: model.receiptData?['creditPhone'] ?? '', + paymentProcessorLabel: model.receiptData?['paymentProcessorLabel'] ?? '', + paymentProcessorName: model.receiptData?['paymentProcessorName'] ?? '', + ); + + setLoading(false); + context.push('/make-payment'); + } + + Future getReceiptData(String id) async { + setLoading(true); + try { + Map response = await http.get('/transaction/$id'); + model.receiptData = response; + } catch (e) { + _showErrorSnackBar( + "Problem fetching transaction data, are you connected to the internet?", + ); + } finally { + setLoading(false); + } + } + + void updateReceiptData(Map data) { + model.receiptData = data; + notifyListeners(); + } +} diff --git a/lib/screens/receipt/receipt_screen.dart b/lib/screens/receipt/receipt_screen.dart new file mode 100644 index 0000000..f9f908a --- /dev/null +++ b/lib/screens/receipt/receipt_screen.dart @@ -0,0 +1,670 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +import 'package:qpay/screens/transaction_controller.dart'; +import 'package:go_router/go_router.dart'; +import 'package:qpay/screens/receipt/receipt_controller.dart'; +import 'package:share_plus/share_plus.dart'; +import 'package:skeletonizer/skeletonizer.dart'; +import 'package:widgets_to_image/widgets_to_image.dart'; + +class ReceiptScreen extends StatefulWidget { + const ReceiptScreen({super.key}); + + @override + State createState() => _ReceiptScreenState(); +} + +class _ReceiptScreenState extends State + with TickerProviderStateMixin { + late TransactionController transactionController; + late Animation _fadeAnimation; + late Animation _slideAnimation; + late AnimationController _controller; + late final TabController _tabController; + + late ReceiptController receiptController; + final _formKey = GlobalKey(); + final controller = WidgetsToImageController(); + + @override + void initState() { + super.initState(); + + transactionController = Provider.of( + context, + listen: false, + ); + + receiptController = ReceiptController(context); + + receiptController.getReceiptData( + transactionController.model.receiptData?["id"], + ); + + _tabController = TabController(length: 2, vsync: this); + + _controller = AnimationController( + vsync: this, + duration: const Duration(milliseconds: 800), + ); + + _fadeAnimation = Tween(begin: 0.0, end: 1.0).animate( + CurvedAnimation( + parent: _controller, + curve: const Interval(0.0, 0.5, curve: Curves.easeOut), + ), + ); + + _slideAnimation = Tween( + begin: const Offset(0, 0.1), + end: Offset.zero, + ).animate( + CurvedAnimation( + parent: _controller, + curve: const Interval(0.0, 0.5, curve: Curves.easeOut), + ), + ); + + _controller.forward(); + } + + Future _captureImage() async { + final image = await controller.capture(); + if (image != null) { + final params = ShareParams( + files: [ + XFile.fromData(image.buffer.asUint8List(), mimeType: 'image/png'), + ], + fileNameOverrides: ['receipt.png'], + ); + SharePlus.instance.share(params); + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + body: ListenableBuilder( + listenable: receiptController, + builder: (context, child) { + return CustomScrollView( + slivers: [ + SliverAppBar( + stretch: true, + stretchTriggerOffset: 100.0, + expandedHeight: 50.0, + surfaceTintColor: Colors.transparent, + floating: true, + leading: + context.canPop() + ? IconButton( + onPressed: () { + context.pop(); + }, + icon: const Icon(Icons.arrow_back), + ) + : SizedBox.shrink(), + title: Text( + "Payment Result", + style: TextStyle(color: Colors.black87), + ), + ), + SliverToBoxAdapter( + child: WidgetsToImage( + controller: controller, + child: Container( + color: Colors.white, + child: Padding( + padding: const EdgeInsets.all(20.0), + child: FadeTransition( + opacity: _fadeAnimation, + child: SlideTransition( + position: _slideAnimation, + child: Form( + key: _formKey, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + padding: EdgeInsets.all(20), + decoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment.topLeft, + end: Alignment.bottomRight, + colors: [ + Theme.of( + context, + ).colorScheme.primary.withOpacity(0.1), + Theme.of(context).colorScheme.tertiary + .withOpacity(0.05), + Theme.of(context).colorScheme.tertiary + .withOpacity(0.15), + ], + stops: [0.0, 0.5, 1.0], + ), + border: Border.all( + color: Theme.of( + context, + ).colorScheme.primary.withOpacity(0.3), + ), + borderRadius: BorderRadius.circular(10), + boxShadow: [ + BoxShadow( + color: Theme.of( + context, + ).colorScheme.primary.withOpacity(0.1), + blurRadius: 10, + spreadRadius: 1, + offset: Offset(0, 2), + ), + ], + ), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.center, + children: [ + Row( + mainAxisAlignment: + MainAxisAlignment.center, + crossAxisAlignment: + CrossAxisAlignment.center, + children: [ + Icon( + transactionController + .model + .receiptData?["status"] == + 'SUCCESS' + ? Icons.check_circle + : transactionController + .model + .receiptData?["status"] == + 'PENDING' + ? Icons.pending + : Icons.cancel, + size: 18, + color: + transactionController + .model + .receiptData?["status"] == + 'SUCCESS' + ? Colors.green + : transactionController + .model + .receiptData?["status"] == + 'PENDING' + ? Colors.orange + : Colors.red, + ), + SizedBox(width: 5), + Text( + receiptController + .model + .receiptData?["debitCurrency"] ?? + "", + style: TextStyle( + fontSize: 26, + fontWeight: FontWeight.bold, + ), + ), + SizedBox(width: 5), + Text( + receiptController + .model + .receiptData?["totalAmount"] + .toStringAsFixed(2) ?? + "", + style: TextStyle(fontSize: 26), + ), + ], + ), + Column( + crossAxisAlignment: + CrossAxisAlignment.center, + children: [ + SizedBox(height: 5), + // receiptController + // .model + // .receiptData?["providerImage"] != + // null + // ? Image.asset( + // 'assets/${receiptController.model.receiptData?["providerImage"] ?? ''}', + // width: 50, + // ) + // : SizedBox.shrink(), + Text( + receiptController + .model + .receiptData?["billName"] ?? + "", + style: TextStyle(fontSize: 14), + ), + ], + ), + SizedBox(height: 10), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, + children: [ + Column( + children: [ + Container( + width: 50, + height: 50, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Colors.white, + border: Border.all( + color: Theme.of(context) + .colorScheme + .primary + .withOpacity(0.3), + width: 1, + ), + ), + child: + receiptController + .model + .isLoading + ? Center( + child: SizedBox( + width: 24, + height: 24, + child: CircularProgressIndicator( + strokeWidth: 2.5, + valueColor: + AlwaysStoppedAnimation< + Color + >( + Theme.of( + context, + ) + .colorScheme + .primary, + ), + ), + ), + ) + : IconButton( + onPressed: () { + receiptController + .repeatTransaction( + context, + ); + }, + icon: Icon( + Icons.repeat, + color: + Theme.of( + context, + ) + .colorScheme + .primary, + size: 24, + ), + ), + ), + SizedBox(height: 8), + Text( + "Repeat", + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w500, + ), + ), + ], + ), + Column( + children: [ + Container( + width: 50, + height: 50, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Colors.white, + border: Border.all( + color: Theme.of(context) + .colorScheme + .primary + .withOpacity(0.3), + width: 1, + ), + ), + child: IconButton( + onPressed: () { + _captureImage(); + }, + icon: Icon( + Icons.share, + color: + Theme.of( + context, + ).colorScheme.primary, + size: 24, + ), + ), + ), + SizedBox(height: 8), + Text( + "Share", + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w500, + ), + ), + ], + ), + ], + ), + ], + ), + ), + SizedBox(height: 20), + Column( + children: [ + Container( + decoration: BoxDecoration( + color: Colors.grey[200], + borderRadius: BorderRadius.circular(12), + ), + child: TabBar( + controller: _tabController, + indicator: BoxDecoration( + borderRadius: BorderRadius.circular( + 8, + ), + color: + Theme.of( + context, + ).colorScheme.primary, + ), + indicatorPadding: EdgeInsets.all(5), + indicatorSize: TabBarIndicatorSize.tab, + labelColor: Colors.white, + unselectedLabelColor: Colors.grey[600], + dividerColor: Colors.transparent, + tabs: [ + Tab( + child: Text( + "Provider Details", + style: TextStyle( + fontWeight: FontWeight.bold, + ), + ), + ), + Tab( + child: Text( + "Transaction Details", + style: TextStyle( + fontWeight: FontWeight.bold, + ), + ), + ), + ], + ), + ), + SizedBox( + height: + MediaQuery.of(context).size.height * + 0.4, + child: TabBarView( + controller: _tabController, + children: [ + Column( + children: [ + const SizedBox(height: 20), + if (receiptController + .model + .receiptData?["additionalData"] == + null) + Skeletonizer( + enabled: + receiptController + .model + .isLoading, + child: Column( + children: [ + SizedBox(height: 20), + Center( + child: Text( + "No details found", + ), + ), + ], + ), + ), + if (receiptController + .model + .receiptData?["additionalData"] != + null) + ...receiptController + .model + .receiptData?["additionalData"] + .map((data) { + return Column( + children: [ + Row( + mainAxisAlignment: + MainAxisAlignment + .spaceBetween, + children: [ + Text( + data["name"] ?? + "", + style: TextStyle( + fontSize: 16, + fontWeight: + FontWeight + .bold, + ), + ), + Text( + data["value"] ?? + "", + style: + TextStyle( + fontSize: + 16, + ), + ), + ], + ), + const SizedBox( + height: 10, + ), + ], + ); + }) + .toList(), + ], + ), + Column( + children: [ + const SizedBox(height: 20), + Row( + mainAxisAlignment: + MainAxisAlignment + .spaceBetween, + children: [ + Text( + "Status", + style: TextStyle( + fontSize: 16, + fontWeight: + FontWeight.bold, + ), + ), + Text( + transactionController + .model + .receiptData?["status"] ?? + "", + style: TextStyle( + fontSize: 16, + ), + ), + ], + ), + const SizedBox(height: 10), + Row( + mainAxisAlignment: + MainAxisAlignment + .spaceBetween, + children: [ + Text( + "Amount", + style: TextStyle( + fontSize: 16, + fontWeight: + FontWeight.bold, + ), + ), + Text( + transactionController + .model + .receiptData?["amount"] + .toStringAsFixed( + 2, + ) ?? + "0.00", + style: TextStyle( + fontSize: 16, + ), + ), + ], + ), + const SizedBox(height: 10), + Row( + mainAxisAlignment: + MainAxisAlignment + .spaceBetween, + children: [ + Text( + "Our Charge", + style: TextStyle( + fontSize: 16, + fontWeight: + FontWeight.bold, + ), + ), + Text( + transactionController + .model + .receiptData?["charge"] + .toStringAsFixed( + 2, + ) ?? + "0.00", + style: TextStyle( + fontSize: 16, + ), + ), + ], + ), + const SizedBox(height: 10), + Row( + mainAxisAlignment: + MainAxisAlignment + .spaceBetween, + children: [ + Text( + "Gateway Charge", + style: TextStyle( + fontSize: 16, + fontWeight: + FontWeight.bold, + ), + ), + Text( + transactionController + .model + .receiptData?["gatewayCharge"] + .toStringAsFixed( + 2, + ) ?? + "0.00", + style: TextStyle( + fontSize: 16, + ), + ), + ], + ), + const SizedBox(height: 10), + Row( + mainAxisAlignment: + MainAxisAlignment + .spaceBetween, + children: [ + Text( + "Tax", + style: TextStyle( + fontSize: 16, + fontWeight: + FontWeight.bold, + ), + ), + Text( + transactionController + .model + .receiptData?["tax"] + .toStringAsFixed( + 2, + ) ?? + "0.00", + style: TextStyle( + fontSize: 16, + ), + ), + ], + ), + const SizedBox(height: 10), + Row( + mainAxisAlignment: + MainAxisAlignment + .spaceBetween, + children: [ + Text( + "Total Amount", + style: TextStyle( + fontSize: 16, + fontWeight: + FontWeight.bold, + ), + ), + Text( + transactionController + .model + .receiptData?["totalAmount"] + .toStringAsFixed( + 2, + ) ?? + "0.00", + style: TextStyle( + fontSize: 16, + ), + ), + ], + ), + const SizedBox(height: 20), + ], + ), + ], + ), + ), + ], + ), + ], + ), + ), + ), + ), + ), + ), + ), + ), + ], + ); + }, + ), + ); + } +} diff --git a/lib/screens/recipient/recipients_controller.dart b/lib/screens/recipient/recipients_controller.dart new file mode 100644 index 0000000..f42bbcd --- /dev/null +++ b/lib/screens/recipient/recipients_controller.dart @@ -0,0 +1,129 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +import 'package:qpay/http/http.dart'; +import 'package:qpay/screens/home/home_controller.dart' as hc; +import 'package:freezed_annotation/freezed_annotation.dart'; +import 'package:qpay/screens/transaction_controller.dart'; + +part 'recipients_controller.freezed.dart'; +part 'recipients_controller.g.dart'; + +class RecipientModel { + String? creditAccount; + String? errorMessage; + hc.BillProvider? selectedProvider; + bool isLoading = false; + List recipients = []; +} + +@freezed +abstract class Recipient with _$Recipient { + const factory Recipient({ + String? uid, + String? name, + String? email, + String? phoneNumber, + String? address, + String? account, + String? initials, + String? latestProviderLabel, + }) = _Recipient; + + factory Recipient.fromJson(Map json) => + _$RecipientFromJson(json); +} + +class RecipientsController extends ChangeNotifier { + final RecipientModel model = RecipientModel(); + final http = Http(); + BuildContext context; + + RecipientsController(this.context) { + model.selectedProvider = + Provider.of( + context, + listen: false, + ).model.selectedProvider; + } + + void _showErrorSnackBar(String? message) { + WidgetsBinding.instance.addPostFrameCallback((_) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text(message.toString()), + behavior: SnackBarBehavior.floating, + backgroundColor: Colors.deepOrange, + ), + ); + }); + } + + Future getRecipients([Map? params]) async { + model.errorMessage = null; + model.isLoading = true; + model.recipients = getDummyRecipients(); + + notifyListeners(); + + try { + List response = await http.get( + '/recipients/search?${buildQueryParameters(params ?? {})}', + ); + model.recipients.clear(); + model.recipients.addAll(response.map((e) => Recipient.fromJson(e))); + } catch (e) { + _showErrorSnackBar( + "Problem fetching recipients, are you connected to the internet?", + ); + model.errorMessage = e.toString(); + model.recipients = []; + logger.e(e); + notifyListeners(); + } + + model.isLoading = false; + notifyListeners(); + } + + String buildQueryParameters(Map params) { + if (params.isEmpty) { + return ''; + } + + String query = ''; + params.forEach((key, value) { + query += '$key=$value&'; + }); + return query.substring(0, query.length - 1); + } + + void updateCreditAccount(String account) { + model.creditAccount = account; + notifyListeners(); + } + + void addRecipient(Recipient recipient) { + model.recipients.add(recipient); + notifyListeners(); + } + + void removeRecipient(String uid) { + model.recipients.removeWhere((recipient) => recipient.uid == uid); + notifyListeners(); + } + + List getDummyRecipients() { + return [ + Recipient( + uid: '1', + name: 'Vusumuzi Khoza', + phoneNumber: '+263773591219', + email: 'vusumuzi@gmail.com', + address: '123 Main St, Anytown, USA', + account: '1234567890', + initials: 'VK', + latestProviderLabel: 'MTN', + ), + ]; + } +} diff --git a/lib/screens/recipient/recipients_controller.freezed.dart b/lib/screens/recipient/recipients_controller.freezed.dart new file mode 100644 index 0000000..dc76b9c --- /dev/null +++ b/lib/screens/recipient/recipients_controller.freezed.dart @@ -0,0 +1,169 @@ +// dart format width=80 +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark + +part of 'recipients_controller.dart'; + +// ************************************************************************** +// FreezedGenerator +// ************************************************************************** + +// dart format off +T _$identity(T value) => value; + +/// @nodoc +mixin _$Recipient { + + String? get uid; String? get name; String? get email; String? get phoneNumber; String? get address; String? get account; String? get initials; String? get latestProviderLabel; +/// Create a copy of Recipient +/// with the given fields replaced by the non-null parameter values. +@JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +$RecipientCopyWith get copyWith => _$RecipientCopyWithImpl(this as Recipient, _$identity); + + /// Serializes this Recipient to a JSON map. + Map toJson(); + + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is Recipient&&(identical(other.uid, uid) || other.uid == uid)&&(identical(other.name, name) || other.name == name)&&(identical(other.email, email) || other.email == email)&&(identical(other.phoneNumber, phoneNumber) || other.phoneNumber == phoneNumber)&&(identical(other.address, address) || other.address == address)&&(identical(other.account, account) || other.account == account)&&(identical(other.initials, initials) || other.initials == initials)&&(identical(other.latestProviderLabel, latestProviderLabel) || other.latestProviderLabel == latestProviderLabel)); +} + +@JsonKey(includeFromJson: false, includeToJson: false) +@override +int get hashCode => Object.hash(runtimeType,uid,name,email,phoneNumber,address,account,initials,latestProviderLabel); + +@override +String toString() { + return 'Recipient(uid: $uid, name: $name, email: $email, phoneNumber: $phoneNumber, address: $address, account: $account, initials: $initials, latestProviderLabel: $latestProviderLabel)'; +} + + +} + +/// @nodoc +abstract mixin class $RecipientCopyWith<$Res> { + factory $RecipientCopyWith(Recipient value, $Res Function(Recipient) _then) = _$RecipientCopyWithImpl; +@useResult +$Res call({ + String? uid, String? name, String? email, String? phoneNumber, String? address, String? account, String? initials, String? latestProviderLabel +}); + + + + +} +/// @nodoc +class _$RecipientCopyWithImpl<$Res> + implements $RecipientCopyWith<$Res> { + _$RecipientCopyWithImpl(this._self, this._then); + + final Recipient _self; + final $Res Function(Recipient) _then; + +/// Create a copy of Recipient +/// with the given fields replaced by the non-null parameter values. +@pragma('vm:prefer-inline') @override $Res call({Object? uid = freezed,Object? name = freezed,Object? email = freezed,Object? phoneNumber = freezed,Object? address = freezed,Object? account = freezed,Object? initials = freezed,Object? latestProviderLabel = freezed,}) { + return _then(_self.copyWith( +uid: freezed == uid ? _self.uid : uid // ignore: cast_nullable_to_non_nullable +as String?,name: freezed == name ? _self.name : name // ignore: cast_nullable_to_non_nullable +as String?,email: freezed == email ? _self.email : email // ignore: cast_nullable_to_non_nullable +as String?,phoneNumber: freezed == phoneNumber ? _self.phoneNumber : phoneNumber // ignore: cast_nullable_to_non_nullable +as String?,address: freezed == address ? _self.address : address // ignore: cast_nullable_to_non_nullable +as String?,account: freezed == account ? _self.account : account // ignore: cast_nullable_to_non_nullable +as String?,initials: freezed == initials ? _self.initials : initials // ignore: cast_nullable_to_non_nullable +as String?,latestProviderLabel: freezed == latestProviderLabel ? _self.latestProviderLabel : latestProviderLabel // ignore: cast_nullable_to_non_nullable +as String?, + )); +} + +} + + +/// @nodoc +@JsonSerializable() + +class _Recipient implements Recipient { + const _Recipient({this.uid, this.name, this.email, this.phoneNumber, this.address, this.account, this.initials, this.latestProviderLabel}); + factory _Recipient.fromJson(Map json) => _$RecipientFromJson(json); + +@override final String? uid; +@override final String? name; +@override final String? email; +@override final String? phoneNumber; +@override final String? address; +@override final String? account; +@override final String? initials; +@override final String? latestProviderLabel; + +/// Create a copy of Recipient +/// with the given fields replaced by the non-null parameter values. +@override @JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +_$RecipientCopyWith<_Recipient> get copyWith => __$RecipientCopyWithImpl<_Recipient>(this, _$identity); + +@override +Map toJson() { + return _$RecipientToJson(this, ); +} + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is _Recipient&&(identical(other.uid, uid) || other.uid == uid)&&(identical(other.name, name) || other.name == name)&&(identical(other.email, email) || other.email == email)&&(identical(other.phoneNumber, phoneNumber) || other.phoneNumber == phoneNumber)&&(identical(other.address, address) || other.address == address)&&(identical(other.account, account) || other.account == account)&&(identical(other.initials, initials) || other.initials == initials)&&(identical(other.latestProviderLabel, latestProviderLabel) || other.latestProviderLabel == latestProviderLabel)); +} + +@JsonKey(includeFromJson: false, includeToJson: false) +@override +int get hashCode => Object.hash(runtimeType,uid,name,email,phoneNumber,address,account,initials,latestProviderLabel); + +@override +String toString() { + return 'Recipient(uid: $uid, name: $name, email: $email, phoneNumber: $phoneNumber, address: $address, account: $account, initials: $initials, latestProviderLabel: $latestProviderLabel)'; +} + + +} + +/// @nodoc +abstract mixin class _$RecipientCopyWith<$Res> implements $RecipientCopyWith<$Res> { + factory _$RecipientCopyWith(_Recipient value, $Res Function(_Recipient) _then) = __$RecipientCopyWithImpl; +@override @useResult +$Res call({ + String? uid, String? name, String? email, String? phoneNumber, String? address, String? account, String? initials, String? latestProviderLabel +}); + + + + +} +/// @nodoc +class __$RecipientCopyWithImpl<$Res> + implements _$RecipientCopyWith<$Res> { + __$RecipientCopyWithImpl(this._self, this._then); + + final _Recipient _self; + final $Res Function(_Recipient) _then; + +/// Create a copy of Recipient +/// with the given fields replaced by the non-null parameter values. +@override @pragma('vm:prefer-inline') $Res call({Object? uid = freezed,Object? name = freezed,Object? email = freezed,Object? phoneNumber = freezed,Object? address = freezed,Object? account = freezed,Object? initials = freezed,Object? latestProviderLabel = freezed,}) { + return _then(_Recipient( +uid: freezed == uid ? _self.uid : uid // ignore: cast_nullable_to_non_nullable +as String?,name: freezed == name ? _self.name : name // ignore: cast_nullable_to_non_nullable +as String?,email: freezed == email ? _self.email : email // ignore: cast_nullable_to_non_nullable +as String?,phoneNumber: freezed == phoneNumber ? _self.phoneNumber : phoneNumber // ignore: cast_nullable_to_non_nullable +as String?,address: freezed == address ? _self.address : address // ignore: cast_nullable_to_non_nullable +as String?,account: freezed == account ? _self.account : account // ignore: cast_nullable_to_non_nullable +as String?,initials: freezed == initials ? _self.initials : initials // ignore: cast_nullable_to_non_nullable +as String?,latestProviderLabel: freezed == latestProviderLabel ? _self.latestProviderLabel : latestProviderLabel // ignore: cast_nullable_to_non_nullable +as String?, + )); +} + + +} + +// dart format on diff --git a/lib/screens/recipient/recipients_controller.g.dart b/lib/screens/recipient/recipients_controller.g.dart new file mode 100644 index 0000000..afeb606 --- /dev/null +++ b/lib/screens/recipient/recipients_controller.g.dart @@ -0,0 +1,30 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'recipients_controller.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +_Recipient _$RecipientFromJson(Map json) => _Recipient( + uid: json['uid'] as String?, + name: json['name'] as String?, + email: json['email'] as String?, + phoneNumber: json['phoneNumber'] as String?, + address: json['address'] as String?, + account: json['account'] as String?, + initials: json['initials'] as String?, + latestProviderLabel: json['latestProviderLabel'] as String?, +); + +Map _$RecipientToJson(_Recipient instance) => + { + 'uid': instance.uid, + 'name': instance.name, + 'email': instance.email, + 'phoneNumber': instance.phoneNumber, + 'address': instance.address, + 'account': instance.account, + 'initials': instance.initials, + 'latestProviderLabel': instance.latestProviderLabel, + }; diff --git a/lib/screens/recipient/recipients_screen.dart b/lib/screens/recipient/recipients_screen.dart new file mode 100644 index 0000000..c06167d --- /dev/null +++ b/lib/screens/recipient/recipients_screen.dart @@ -0,0 +1,378 @@ +import 'dart:async'; + +import 'package:flutter/material.dart'; +import 'package:flutter_contacts/flutter_contacts.dart'; +import 'package:go_router/go_router.dart'; +import 'package:provider/provider.dart'; +import 'package:qpay/screens/transaction_controller.dart'; +import 'package:skeletonizer/skeletonizer.dart'; +import 'package:qpay/screens/recipient/recipients_controller.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + +class RecipientsScreen extends StatefulWidget { + const RecipientsScreen({super.key}); + + @override + State createState() => _RecipientsScreenState(); +} + +class _RecipientsScreenState extends State + with TickerProviderStateMixin { + late SharedPreferences prefs; + late AnimationController _animationController; + late RecipientsController controller; + late TransactionController transactionController; + + final List> _alignListAnimations = []; + final _accountController = TextEditingController(); + final _queryParams = {}; + + @override + void initState() { + super.initState(); + + controller = RecipientsController(context); + setupData(); + + controller.model.creditAccount = _accountController.text; + transactionController = Provider.of( + context, + listen: false, + ); + + _animationController = AnimationController( + duration: const Duration(milliseconds: 600), + vsync: this, + )..forward(); + + List tranListIndices = [0, 1]; + for (int i = 0; i < tranListIndices.length; i++) { + _alignListAnimations.add( + Tween(begin: Offset(0, -0.25), end: Offset.zero).animate( + CurvedAnimation( + parent: _animationController, + curve: Interval(0.075 * i, 1.0, curve: Curves.easeOut), + ), + ), + ); + } + } + + Future setupData() async { + prefs = await SharedPreferences.getInstance(); + _queryParams['userId'] = prefs.getString("userId")!; + controller.getRecipients(_queryParams); + } + + @override + void dispose() { + _animationController.dispose(); + controller.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text("Recipients", style: TextStyle(color: Colors.black87)), + ), + body: ListenableBuilder( + listenable: controller, + builder: (context, child) { + return SafeArea( + child: SingleChildScrollView( + padding: const EdgeInsets.all(20), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + "TRANSACTIONS DETAILS", + style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold), + ), + const SizedBox(height: 20), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text("Provider", style: TextStyle(fontSize: 16)), + Text( + controller.model.selectedProvider?.name ?? "", + style: TextStyle(fontSize: 16), + ), + ], + ), + const SizedBox(height: 20), + Divider(color: Theme.of(context).colorScheme.primary), + const SizedBox(height: 20), + _buildAccountField(controller), + const SizedBox(height: 20), + controller.model.creditAccount != null && + controller.model.creditAccount!.isNotEmpty + ? SlideTransition( + position: _alignListAnimations[0], + child: ElevatedButton( + onPressed: () { + String phone = ''; + if (!transactionController + .model + .selectedProvider! + .requiresAccount) { + phone = _accountController.text; + } + transactionController.model.formData = + transactionController.model.formData.copyWith( + creditAccount: _accountController.text, + creditPhone: phone, + ); + context.push("/make-payment"); + }, + style: ElevatedButton.styleFrom( + backgroundColor: + Theme.of(context).colorScheme.primary, + foregroundColor: + Theme.of(context).colorScheme.onPrimary, + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Text( + "Use as new recipient", + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + ), + ), + SizedBox(width: 5), + Icon(Icons.arrow_forward_ios, size: 12), + ], + ), + ), + ) + : SizedBox(), + const SizedBox(height: 20), + Text( + "Recent Recipients", + style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold), + ), + const SizedBox(height: 10), + _buildRecipientItems(controller), + ], + ), + ), + ); + }, + ), + ); + } + + Widget _buildAccountField(RecipientsController controller) { + String fieldName = + controller.model.selectedProvider?.accountFieldName ?? "Account Number"; + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text(fieldName, style: TextStyle(fontSize: 16)), + TextButton( + onPressed: () async { + if (await FlutterContacts.requestPermission()) { + final contact = await FlutterContacts.openExternalPick(); + if (contact != null) { + _accountController.text = contact.phones.first.number; + controller.updateCreditAccount(contact.phones.first.number); + } + } + }, + child: Text( + "Fetch from contacts", + style: TextStyle(fontSize: 12, color: Colors.red), + ), + ), + ], + ), + const SizedBox(height: 12), + Row( + children: [ + Expanded( + child: TextFormField( + controller: _accountController, + keyboardType: TextInputType.number, + decoration: InputDecoration( + hintText: 'Enter / Search $fieldName', + focusedErrorBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: BorderSide( + color: Theme.of(context).colorScheme.secondary, + ), + ), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: BorderSide( + color: Theme.of( + context, + ).colorScheme.primary.withOpacity(0.2), + ), + ), + ), + onChanged: (value) { + controller.updateCreditAccount(value); + }, + validator: (value) { + if (value == null || value.isEmpty) { + return 'Please enter an amount'; + } + if (double.tryParse(value) == null) { + return 'Please enter a valid amount'; + } + return null; + }, + ), + ), + IconButton( + onPressed: () { + _queryParams.clear(); + setState(() { + _queryParams['account'] = _accountController.text; + _queryParams['email'] = _accountController.text; + _queryParams['phoneNumber'] = _accountController.text; + _queryParams['name'] = _accountController.text; + _queryParams['userId'] = prefs.getString("userId")!; + + controller.getRecipients(_queryParams); + }); + }, + icon: Icon( + Icons.search, + color: Theme.of(context).colorScheme.primary, + size: 24, + ), + ), + ], + ), + ], + ); + } + + Widget _buildRecipientItems(RecipientsController controller) { + if (controller.model.recipients.isEmpty && !controller.model.isLoading) { + return Center(child: Text("No recipients yet")); + } + + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + ...controller.model.recipients.map( + (recipient) => Skeletonizer( + enabled: controller.model.isLoading, + child: InkWell( + onTap: () { + String account = recipient.account ?? ''; + if (!transactionController + .model + .selectedProvider! + .requiresAccount) { + account = recipient.phoneNumber ?? ''; + } + transactionController + .model + .formData = transactionController.model.formData.copyWith( + creditAccount: account, + creditName: recipient.name ?? '', + creditPhone: recipient.phoneNumber ?? '', + creditEmail: recipient.email ?? '', + providerLabel: + transactionController.model.formData.providerLabel.isEmpty + ? recipient.latestProviderLabel ?? '' + : transactionController.model.formData.providerLabel, + ); + context.push("/make-payment"); + }, + borderRadius: BorderRadius.circular(12), + child: Container( + padding: EdgeInsets.all(5), + child: SlideTransition( + position: _alignListAnimations[0], + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Container( + padding: const EdgeInsets.all(12), + decoration: BoxDecoration( + color: Theme.of( + context, + ).colorScheme.primary.withValues(alpha: 0.1), + shape: BoxShape.circle, + ), + child: Text( + recipient.initials ?? 'PK', + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + ), + ), + ), + SizedBox(width: 20), + Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Text( + recipient.latestProviderLabel ?? '', + style: TextStyle(fontWeight: FontWeight.bold), + ), + SizedBox(width: 5), + Text( + recipient.account ?? '', + style: TextStyle(fontWeight: FontWeight.normal), + ), + ], + ), + if ((recipient.phoneNumber != null && + recipient.phoneNumber!.isNotEmpty) || + (recipient.email != null && + recipient.email!.isNotEmpty)) + Row( + spacing: 5, + children: [ + if (recipient.phoneNumber != null && + recipient.phoneNumber!.isNotEmpty) + Text( + recipient.phoneNumber ?? '', + style: TextStyle( + fontWeight: FontWeight.bold, + ), + ), + if (recipient.email != null && + recipient.email!.isNotEmpty) + Text( + recipient.email ?? '', + style: TextStyle( + fontWeight: FontWeight.normal, + ), + ), + ], + ), + if (recipient.name != null && + recipient.name!.isNotEmpty) + Text( + recipient.name ?? '', + style: TextStyle(fontWeight: FontWeight.normal), + ), + ], + ), + ], + ), + ), + ), + ), + ), + ), + ], + ); + } +} diff --git a/lib/screens/splash_screen.dart b/lib/screens/splash_screen.dart new file mode 100644 index 0000000..06b1a4b --- /dev/null +++ b/lib/screens/splash_screen.dart @@ -0,0 +1,112 @@ +import 'package:flutter/material.dart'; +import 'package:gif_view/gif_view.dart'; + +class SplashScreen extends StatefulWidget { + final VoidCallback onSplashComplete; + + const SplashScreen({super.key, required this.onSplashComplete}); + + @override + State createState() => _SplashScreenState(); +} + +class _SplashScreenState extends State + with TickerProviderStateMixin { + late AnimationController _fadeController; + late AnimationController _scaleController; + late Animation _fadeAnimation; + late Animation _scaleAnimation; + + @override + void initState() { + super.initState(); + + // Initialize animation controllers + _fadeController = AnimationController( + duration: const Duration(milliseconds: 1000), + vsync: this, + ); + + _scaleController = AnimationController( + duration: const Duration(milliseconds: 800), + vsync: this, + ); + + // Create animations + _fadeAnimation = Tween(begin: 0.0, end: 1.0).animate( + CurvedAnimation(parent: _fadeController, curve: Curves.easeInOut), + ); + + _scaleAnimation = Tween(begin: 0.8, end: 1.0).animate( + CurvedAnimation(parent: _scaleController, curve: Curves.elasticOut), + ); + + // Start animations + _startAnimations(); + } + + void _startAnimations() async { + try { + // Start fade in and scale animations + _fadeController.forward(); + _scaleController.forward(); + + // Wait for 3 seconds (adjust as needed) + await Future.delayed(const Duration(milliseconds: 1250)); + + // Start fade out animation + await _fadeController.reverse(); + + // Call the completion callback + if (mounted) { + widget.onSplashComplete(); + } + } catch (e) { + // If there's an error, still complete the splash screen + if (mounted) { + widget.onSplashComplete(); + } + } + } + + @override + void dispose() { + _fadeController.dispose(); + _scaleController.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.white, + body: AnimatedBuilder( + animation: Listenable.merge([_fadeController, _scaleController]), + builder: (context, child) { + return FadeTransition( + opacity: _fadeAnimation, + child: ScaleTransition( + scale: _scaleAnimation, + child: Center( + child: SizedBox( + width: MediaQuery.of(context).size.width, + height: MediaQuery.of(context).size.height, + child: ClipRRect( + borderRadius: BorderRadius.circular(20), + child: GifView.asset( + 'assets/giphy.gif', + width: MediaQuery.of(context).size.width, + height: MediaQuery.of(context).size.height, + frameRate: 30, + fit: BoxFit.contain, + ), + ), + ), + ), + ), + ); + }, + ), + ); + } +} diff --git a/lib/screens/transaction_controller.dart b/lib/screens/transaction_controller.dart new file mode 100644 index 0000000..973ca8a --- /dev/null +++ b/lib/screens/transaction_controller.dart @@ -0,0 +1,115 @@ +import 'package:flutter/material.dart'; +import 'package:freezed_annotation/freezed_annotation.dart'; +import 'package:qpay/screens/pay/pay_controller.dart'; +import 'package:qpay/screens/home/home_controller.dart'; + +part 'transaction_controller.freezed.dart'; +part 'transaction_controller.g.dart'; + +class TransactionModel { + late Map confirmationData; + late PaymentProcessor selectedPaymentProcessor; + late FormData repeatFormData; + + BillProduct? selectedProduct; + BillProvider? selectedProvider; + Map? receiptData; + FormData formData = FormData( + type: '', + billClientId: '', + debitRef: '', + debitCurrency: '', + amount: '', + debitPhone: '', + debitAccount: '', + creditAccount: '', + creditPhone: '', + creditName: '', + creditEmail: '', + billName: '', + errorMessage: '', + status: 'PENDING', + paymentProcessorLabel: '', + charge: '', + gatewayCharge: '', + tax: '', + totalAmount: '', + paymentProcessorName: '', + paymentProcessorImage: '', + providerImage: '', + userId: '', + providerLabel: '', + ); + + String? errorMessage; +} + +@freezed +abstract class FormData with _$FormData { + const factory FormData({ + required String type, // CONFIRM, REQUEST, REVERSE + required String billClientId, + required String debitRef, + required String debitCurrency, + required String amount, + required String creditAccount, + required String? creditPhone, + required String? creditName, + required String? creditEmail, + required String billName, + required String? errorMessage, + required String status, + required String paymentProcessorLabel, + required String paymentProcessorName, + required String paymentProcessorImage, + required String providerImage, + required String providerLabel, + required String userId, + String? debitPhone, + String? debitAccount, + String? productUid, + String? trace, + String? authType, + String? charge, + String? gatewayCharge, + String? tax, + String? totalAmount, + }) = _FormData; + + factory FormData.fromJson(Map json) => + _$FormDataFromJson(json); +} + +class TransactionController extends ChangeNotifier { + TransactionModel model = TransactionModel(); + + updateSelectedProvider(BillProvider provider) { + model.selectedProvider = provider; + notifyListeners(); + } + + updateSelectedProduct(BillProduct product) { + model.selectedProduct = product; + notifyListeners(); + } + + updateSelectedPaymentProcessor(PaymentProcessor processor) { + model.selectedPaymentProcessor = processor; + notifyListeners(); + } + + updateConfirmationData(Map data) { + model.confirmationData = data; + notifyListeners(); + } + + updateReceiptData(Map data) { + model.receiptData = data; + notifyListeners(); + } + + updateRepeatFormData(FormData data) { + model.repeatFormData = data; + notifyListeners(); + } +} diff --git a/lib/screens/transaction_controller.freezed.dart b/lib/screens/transaction_controller.freezed.dart new file mode 100644 index 0000000..602c635 --- /dev/null +++ b/lib/screens/transaction_controller.freezed.dart @@ -0,0 +1,228 @@ +// dart format width=80 +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark + +part of 'transaction_controller.dart'; + +// ************************************************************************** +// FreezedGenerator +// ************************************************************************** + +// dart format off +T _$identity(T value) => value; + +/// @nodoc +mixin _$FormData { + + String get type;// CONFIRM, REQUEST, REVERSE + String get billClientId; String get debitRef; String get debitCurrency; String get amount; String get creditAccount; String? get creditPhone; String? get creditName; String? get creditEmail; String get billName; String? get errorMessage; String get status; String get paymentProcessorLabel; String get paymentProcessorName; String get paymentProcessorImage; String get providerImage; String get providerLabel; String get userId; String? get debitPhone; String? get debitAccount; String? get productUid; String? get trace; String? get authType; String? get charge; String? get gatewayCharge; String? get tax; String? get totalAmount; +/// Create a copy of FormData +/// with the given fields replaced by the non-null parameter values. +@JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +$FormDataCopyWith get copyWith => _$FormDataCopyWithImpl(this as FormData, _$identity); + + /// Serializes this FormData to a JSON map. + Map toJson(); + + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is FormData&&(identical(other.type, type) || other.type == type)&&(identical(other.billClientId, billClientId) || other.billClientId == billClientId)&&(identical(other.debitRef, debitRef) || other.debitRef == debitRef)&&(identical(other.debitCurrency, debitCurrency) || other.debitCurrency == debitCurrency)&&(identical(other.amount, amount) || other.amount == amount)&&(identical(other.creditAccount, creditAccount) || other.creditAccount == creditAccount)&&(identical(other.creditPhone, creditPhone) || other.creditPhone == creditPhone)&&(identical(other.creditName, creditName) || other.creditName == creditName)&&(identical(other.creditEmail, creditEmail) || other.creditEmail == creditEmail)&&(identical(other.billName, billName) || other.billName == billName)&&(identical(other.errorMessage, errorMessage) || other.errorMessage == errorMessage)&&(identical(other.status, status) || other.status == status)&&(identical(other.paymentProcessorLabel, paymentProcessorLabel) || other.paymentProcessorLabel == paymentProcessorLabel)&&(identical(other.paymentProcessorName, paymentProcessorName) || other.paymentProcessorName == paymentProcessorName)&&(identical(other.paymentProcessorImage, paymentProcessorImage) || other.paymentProcessorImage == paymentProcessorImage)&&(identical(other.providerImage, providerImage) || other.providerImage == providerImage)&&(identical(other.providerLabel, providerLabel) || other.providerLabel == providerLabel)&&(identical(other.userId, userId) || other.userId == userId)&&(identical(other.debitPhone, debitPhone) || other.debitPhone == debitPhone)&&(identical(other.debitAccount, debitAccount) || other.debitAccount == debitAccount)&&(identical(other.productUid, productUid) || other.productUid == productUid)&&(identical(other.trace, trace) || other.trace == trace)&&(identical(other.authType, authType) || other.authType == authType)&&(identical(other.charge, charge) || other.charge == charge)&&(identical(other.gatewayCharge, gatewayCharge) || other.gatewayCharge == gatewayCharge)&&(identical(other.tax, tax) || other.tax == tax)&&(identical(other.totalAmount, totalAmount) || other.totalAmount == totalAmount)); +} + +@JsonKey(includeFromJson: false, includeToJson: false) +@override +int get hashCode => Object.hashAll([runtimeType,type,billClientId,debitRef,debitCurrency,amount,creditAccount,creditPhone,creditName,creditEmail,billName,errorMessage,status,paymentProcessorLabel,paymentProcessorName,paymentProcessorImage,providerImage,providerLabel,userId,debitPhone,debitAccount,productUid,trace,authType,charge,gatewayCharge,tax,totalAmount]); + +@override +String toString() { + return 'FormData(type: $type, billClientId: $billClientId, debitRef: $debitRef, debitCurrency: $debitCurrency, amount: $amount, creditAccount: $creditAccount, creditPhone: $creditPhone, creditName: $creditName, creditEmail: $creditEmail, billName: $billName, errorMessage: $errorMessage, status: $status, paymentProcessorLabel: $paymentProcessorLabel, paymentProcessorName: $paymentProcessorName, paymentProcessorImage: $paymentProcessorImage, providerImage: $providerImage, providerLabel: $providerLabel, userId: $userId, debitPhone: $debitPhone, debitAccount: $debitAccount, productUid: $productUid, trace: $trace, authType: $authType, charge: $charge, gatewayCharge: $gatewayCharge, tax: $tax, totalAmount: $totalAmount)'; +} + + +} + +/// @nodoc +abstract mixin class $FormDataCopyWith<$Res> { + factory $FormDataCopyWith(FormData value, $Res Function(FormData) _then) = _$FormDataCopyWithImpl; +@useResult +$Res call({ + String type, String billClientId, String debitRef, String debitCurrency, String amount, String creditAccount, String? creditPhone, String? creditName, String? creditEmail, String billName, String? errorMessage, String status, String paymentProcessorLabel, String paymentProcessorName, String paymentProcessorImage, String providerImage, String providerLabel, String userId, String? debitPhone, String? debitAccount, String? productUid, String? trace, String? authType, String? charge, String? gatewayCharge, String? tax, String? totalAmount +}); + + + + +} +/// @nodoc +class _$FormDataCopyWithImpl<$Res> + implements $FormDataCopyWith<$Res> { + _$FormDataCopyWithImpl(this._self, this._then); + + final FormData _self; + final $Res Function(FormData) _then; + +/// Create a copy of FormData +/// with the given fields replaced by the non-null parameter values. +@pragma('vm:prefer-inline') @override $Res call({Object? type = null,Object? billClientId = null,Object? debitRef = null,Object? debitCurrency = null,Object? amount = null,Object? creditAccount = null,Object? creditPhone = freezed,Object? creditName = freezed,Object? creditEmail = freezed,Object? billName = null,Object? errorMessage = freezed,Object? status = null,Object? paymentProcessorLabel = null,Object? paymentProcessorName = null,Object? paymentProcessorImage = null,Object? providerImage = null,Object? providerLabel = null,Object? userId = null,Object? debitPhone = freezed,Object? debitAccount = freezed,Object? productUid = freezed,Object? trace = freezed,Object? authType = freezed,Object? charge = freezed,Object? gatewayCharge = freezed,Object? tax = freezed,Object? totalAmount = freezed,}) { + return _then(_self.copyWith( +type: null == type ? _self.type : type // ignore: cast_nullable_to_non_nullable +as String,billClientId: null == billClientId ? _self.billClientId : billClientId // ignore: cast_nullable_to_non_nullable +as String,debitRef: null == debitRef ? _self.debitRef : debitRef // ignore: cast_nullable_to_non_nullable +as String,debitCurrency: null == debitCurrency ? _self.debitCurrency : debitCurrency // ignore: cast_nullable_to_non_nullable +as String,amount: null == amount ? _self.amount : amount // ignore: cast_nullable_to_non_nullable +as String,creditAccount: null == creditAccount ? _self.creditAccount : creditAccount // ignore: cast_nullable_to_non_nullable +as String,creditPhone: freezed == creditPhone ? _self.creditPhone : creditPhone // ignore: cast_nullable_to_non_nullable +as String?,creditName: freezed == creditName ? _self.creditName : creditName // ignore: cast_nullable_to_non_nullable +as String?,creditEmail: freezed == creditEmail ? _self.creditEmail : creditEmail // ignore: cast_nullable_to_non_nullable +as String?,billName: null == billName ? _self.billName : billName // ignore: cast_nullable_to_non_nullable +as String,errorMessage: freezed == errorMessage ? _self.errorMessage : errorMessage // ignore: cast_nullable_to_non_nullable +as String?,status: null == status ? _self.status : status // ignore: cast_nullable_to_non_nullable +as String,paymentProcessorLabel: null == paymentProcessorLabel ? _self.paymentProcessorLabel : paymentProcessorLabel // ignore: cast_nullable_to_non_nullable +as String,paymentProcessorName: null == paymentProcessorName ? _self.paymentProcessorName : paymentProcessorName // ignore: cast_nullable_to_non_nullable +as String,paymentProcessorImage: null == paymentProcessorImage ? _self.paymentProcessorImage : paymentProcessorImage // ignore: cast_nullable_to_non_nullable +as String,providerImage: null == providerImage ? _self.providerImage : providerImage // ignore: cast_nullable_to_non_nullable +as String,providerLabel: null == providerLabel ? _self.providerLabel : providerLabel // ignore: cast_nullable_to_non_nullable +as String,userId: null == userId ? _self.userId : userId // ignore: cast_nullable_to_non_nullable +as String,debitPhone: freezed == debitPhone ? _self.debitPhone : debitPhone // ignore: cast_nullable_to_non_nullable +as String?,debitAccount: freezed == debitAccount ? _self.debitAccount : debitAccount // ignore: cast_nullable_to_non_nullable +as String?,productUid: freezed == productUid ? _self.productUid : productUid // ignore: cast_nullable_to_non_nullable +as String?,trace: freezed == trace ? _self.trace : trace // ignore: cast_nullable_to_non_nullable +as String?,authType: freezed == authType ? _self.authType : authType // ignore: cast_nullable_to_non_nullable +as String?,charge: freezed == charge ? _self.charge : charge // ignore: cast_nullable_to_non_nullable +as String?,gatewayCharge: freezed == gatewayCharge ? _self.gatewayCharge : gatewayCharge // ignore: cast_nullable_to_non_nullable +as String?,tax: freezed == tax ? _self.tax : tax // ignore: cast_nullable_to_non_nullable +as String?,totalAmount: freezed == totalAmount ? _self.totalAmount : totalAmount // ignore: cast_nullable_to_non_nullable +as String?, + )); +} + +} + + +/// @nodoc +@JsonSerializable() + +class _FormData implements FormData { + const _FormData({required this.type, required this.billClientId, required this.debitRef, required this.debitCurrency, required this.amount, required this.creditAccount, required this.creditPhone, required this.creditName, required this.creditEmail, required this.billName, required this.errorMessage, required this.status, required this.paymentProcessorLabel, required this.paymentProcessorName, required this.paymentProcessorImage, required this.providerImage, required this.providerLabel, required this.userId, this.debitPhone, this.debitAccount, this.productUid, this.trace, this.authType, this.charge, this.gatewayCharge, this.tax, this.totalAmount}); + factory _FormData.fromJson(Map json) => _$FormDataFromJson(json); + +@override final String type; +// CONFIRM, REQUEST, REVERSE +@override final String billClientId; +@override final String debitRef; +@override final String debitCurrency; +@override final String amount; +@override final String creditAccount; +@override final String? creditPhone; +@override final String? creditName; +@override final String? creditEmail; +@override final String billName; +@override final String? errorMessage; +@override final String status; +@override final String paymentProcessorLabel; +@override final String paymentProcessorName; +@override final String paymentProcessorImage; +@override final String providerImage; +@override final String providerLabel; +@override final String userId; +@override final String? debitPhone; +@override final String? debitAccount; +@override final String? productUid; +@override final String? trace; +@override final String? authType; +@override final String? charge; +@override final String? gatewayCharge; +@override final String? tax; +@override final String? totalAmount; + +/// Create a copy of FormData +/// with the given fields replaced by the non-null parameter values. +@override @JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +_$FormDataCopyWith<_FormData> get copyWith => __$FormDataCopyWithImpl<_FormData>(this, _$identity); + +@override +Map toJson() { + return _$FormDataToJson(this, ); +} + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is _FormData&&(identical(other.type, type) || other.type == type)&&(identical(other.billClientId, billClientId) || other.billClientId == billClientId)&&(identical(other.debitRef, debitRef) || other.debitRef == debitRef)&&(identical(other.debitCurrency, debitCurrency) || other.debitCurrency == debitCurrency)&&(identical(other.amount, amount) || other.amount == amount)&&(identical(other.creditAccount, creditAccount) || other.creditAccount == creditAccount)&&(identical(other.creditPhone, creditPhone) || other.creditPhone == creditPhone)&&(identical(other.creditName, creditName) || other.creditName == creditName)&&(identical(other.creditEmail, creditEmail) || other.creditEmail == creditEmail)&&(identical(other.billName, billName) || other.billName == billName)&&(identical(other.errorMessage, errorMessage) || other.errorMessage == errorMessage)&&(identical(other.status, status) || other.status == status)&&(identical(other.paymentProcessorLabel, paymentProcessorLabel) || other.paymentProcessorLabel == paymentProcessorLabel)&&(identical(other.paymentProcessorName, paymentProcessorName) || other.paymentProcessorName == paymentProcessorName)&&(identical(other.paymentProcessorImage, paymentProcessorImage) || other.paymentProcessorImage == paymentProcessorImage)&&(identical(other.providerImage, providerImage) || other.providerImage == providerImage)&&(identical(other.providerLabel, providerLabel) || other.providerLabel == providerLabel)&&(identical(other.userId, userId) || other.userId == userId)&&(identical(other.debitPhone, debitPhone) || other.debitPhone == debitPhone)&&(identical(other.debitAccount, debitAccount) || other.debitAccount == debitAccount)&&(identical(other.productUid, productUid) || other.productUid == productUid)&&(identical(other.trace, trace) || other.trace == trace)&&(identical(other.authType, authType) || other.authType == authType)&&(identical(other.charge, charge) || other.charge == charge)&&(identical(other.gatewayCharge, gatewayCharge) || other.gatewayCharge == gatewayCharge)&&(identical(other.tax, tax) || other.tax == tax)&&(identical(other.totalAmount, totalAmount) || other.totalAmount == totalAmount)); +} + +@JsonKey(includeFromJson: false, includeToJson: false) +@override +int get hashCode => Object.hashAll([runtimeType,type,billClientId,debitRef,debitCurrency,amount,creditAccount,creditPhone,creditName,creditEmail,billName,errorMessage,status,paymentProcessorLabel,paymentProcessorName,paymentProcessorImage,providerImage,providerLabel,userId,debitPhone,debitAccount,productUid,trace,authType,charge,gatewayCharge,tax,totalAmount]); + +@override +String toString() { + return 'FormData(type: $type, billClientId: $billClientId, debitRef: $debitRef, debitCurrency: $debitCurrency, amount: $amount, creditAccount: $creditAccount, creditPhone: $creditPhone, creditName: $creditName, creditEmail: $creditEmail, billName: $billName, errorMessage: $errorMessage, status: $status, paymentProcessorLabel: $paymentProcessorLabel, paymentProcessorName: $paymentProcessorName, paymentProcessorImage: $paymentProcessorImage, providerImage: $providerImage, providerLabel: $providerLabel, userId: $userId, debitPhone: $debitPhone, debitAccount: $debitAccount, productUid: $productUid, trace: $trace, authType: $authType, charge: $charge, gatewayCharge: $gatewayCharge, tax: $tax, totalAmount: $totalAmount)'; +} + + +} + +/// @nodoc +abstract mixin class _$FormDataCopyWith<$Res> implements $FormDataCopyWith<$Res> { + factory _$FormDataCopyWith(_FormData value, $Res Function(_FormData) _then) = __$FormDataCopyWithImpl; +@override @useResult +$Res call({ + String type, String billClientId, String debitRef, String debitCurrency, String amount, String creditAccount, String? creditPhone, String? creditName, String? creditEmail, String billName, String? errorMessage, String status, String paymentProcessorLabel, String paymentProcessorName, String paymentProcessorImage, String providerImage, String providerLabel, String userId, String? debitPhone, String? debitAccount, String? productUid, String? trace, String? authType, String? charge, String? gatewayCharge, String? tax, String? totalAmount +}); + + + + +} +/// @nodoc +class __$FormDataCopyWithImpl<$Res> + implements _$FormDataCopyWith<$Res> { + __$FormDataCopyWithImpl(this._self, this._then); + + final _FormData _self; + final $Res Function(_FormData) _then; + +/// Create a copy of FormData +/// with the given fields replaced by the non-null parameter values. +@override @pragma('vm:prefer-inline') $Res call({Object? type = null,Object? billClientId = null,Object? debitRef = null,Object? debitCurrency = null,Object? amount = null,Object? creditAccount = null,Object? creditPhone = freezed,Object? creditName = freezed,Object? creditEmail = freezed,Object? billName = null,Object? errorMessage = freezed,Object? status = null,Object? paymentProcessorLabel = null,Object? paymentProcessorName = null,Object? paymentProcessorImage = null,Object? providerImage = null,Object? providerLabel = null,Object? userId = null,Object? debitPhone = freezed,Object? debitAccount = freezed,Object? productUid = freezed,Object? trace = freezed,Object? authType = freezed,Object? charge = freezed,Object? gatewayCharge = freezed,Object? tax = freezed,Object? totalAmount = freezed,}) { + return _then(_FormData( +type: null == type ? _self.type : type // ignore: cast_nullable_to_non_nullable +as String,billClientId: null == billClientId ? _self.billClientId : billClientId // ignore: cast_nullable_to_non_nullable +as String,debitRef: null == debitRef ? _self.debitRef : debitRef // ignore: cast_nullable_to_non_nullable +as String,debitCurrency: null == debitCurrency ? _self.debitCurrency : debitCurrency // ignore: cast_nullable_to_non_nullable +as String,amount: null == amount ? _self.amount : amount // ignore: cast_nullable_to_non_nullable +as String,creditAccount: null == creditAccount ? _self.creditAccount : creditAccount // ignore: cast_nullable_to_non_nullable +as String,creditPhone: freezed == creditPhone ? _self.creditPhone : creditPhone // ignore: cast_nullable_to_non_nullable +as String?,creditName: freezed == creditName ? _self.creditName : creditName // ignore: cast_nullable_to_non_nullable +as String?,creditEmail: freezed == creditEmail ? _self.creditEmail : creditEmail // ignore: cast_nullable_to_non_nullable +as String?,billName: null == billName ? _self.billName : billName // ignore: cast_nullable_to_non_nullable +as String,errorMessage: freezed == errorMessage ? _self.errorMessage : errorMessage // ignore: cast_nullable_to_non_nullable +as String?,status: null == status ? _self.status : status // ignore: cast_nullable_to_non_nullable +as String,paymentProcessorLabel: null == paymentProcessorLabel ? _self.paymentProcessorLabel : paymentProcessorLabel // ignore: cast_nullable_to_non_nullable +as String,paymentProcessorName: null == paymentProcessorName ? _self.paymentProcessorName : paymentProcessorName // ignore: cast_nullable_to_non_nullable +as String,paymentProcessorImage: null == paymentProcessorImage ? _self.paymentProcessorImage : paymentProcessorImage // ignore: cast_nullable_to_non_nullable +as String,providerImage: null == providerImage ? _self.providerImage : providerImage // ignore: cast_nullable_to_non_nullable +as String,providerLabel: null == providerLabel ? _self.providerLabel : providerLabel // ignore: cast_nullable_to_non_nullable +as String,userId: null == userId ? _self.userId : userId // ignore: cast_nullable_to_non_nullable +as String,debitPhone: freezed == debitPhone ? _self.debitPhone : debitPhone // ignore: cast_nullable_to_non_nullable +as String?,debitAccount: freezed == debitAccount ? _self.debitAccount : debitAccount // ignore: cast_nullable_to_non_nullable +as String?,productUid: freezed == productUid ? _self.productUid : productUid // ignore: cast_nullable_to_non_nullable +as String?,trace: freezed == trace ? _self.trace : trace // ignore: cast_nullable_to_non_nullable +as String?,authType: freezed == authType ? _self.authType : authType // ignore: cast_nullable_to_non_nullable +as String?,charge: freezed == charge ? _self.charge : charge // ignore: cast_nullable_to_non_nullable +as String?,gatewayCharge: freezed == gatewayCharge ? _self.gatewayCharge : gatewayCharge // ignore: cast_nullable_to_non_nullable +as String?,tax: freezed == tax ? _self.tax : tax // ignore: cast_nullable_to_non_nullable +as String?,totalAmount: freezed == totalAmount ? _self.totalAmount : totalAmount // ignore: cast_nullable_to_non_nullable +as String?, + )); +} + + +} + +// dart format on diff --git a/lib/screens/transaction_controller.g.dart b/lib/screens/transaction_controller.g.dart new file mode 100644 index 0000000..01206c3 --- /dev/null +++ b/lib/screens/transaction_controller.g.dart @@ -0,0 +1,67 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'transaction_controller.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +_FormData _$FormDataFromJson(Map json) => _FormData( + type: json['type'] as String, + billClientId: json['billClientId'] as String, + debitRef: json['debitRef'] as String, + debitCurrency: json['debitCurrency'] as String, + amount: json['amount'] as String, + creditAccount: json['creditAccount'] as String, + creditPhone: json['creditPhone'] as String?, + creditName: json['creditName'] as String?, + creditEmail: json['creditEmail'] as String?, + billName: json['billName'] as String, + errorMessage: json['errorMessage'] as String?, + status: json['status'] as String, + paymentProcessorLabel: json['paymentProcessorLabel'] as String, + paymentProcessorName: json['paymentProcessorName'] as String, + paymentProcessorImage: json['paymentProcessorImage'] as String, + providerImage: json['providerImage'] as String, + providerLabel: json['providerLabel'] as String, + userId: json['userId'] as String, + debitPhone: json['debitPhone'] as String?, + debitAccount: json['debitAccount'] as String?, + productUid: json['productUid'] as String?, + trace: json['trace'] as String?, + authType: json['authType'] as String?, + charge: json['charge'] as String?, + gatewayCharge: json['gatewayCharge'] as String?, + tax: json['tax'] as String?, + totalAmount: json['totalAmount'] as String?, +); + +Map _$FormDataToJson(_FormData instance) => { + 'type': instance.type, + 'billClientId': instance.billClientId, + 'debitRef': instance.debitRef, + 'debitCurrency': instance.debitCurrency, + 'amount': instance.amount, + 'creditAccount': instance.creditAccount, + 'creditPhone': instance.creditPhone, + 'creditName': instance.creditName, + 'creditEmail': instance.creditEmail, + 'billName': instance.billName, + 'errorMessage': instance.errorMessage, + 'status': instance.status, + 'paymentProcessorLabel': instance.paymentProcessorLabel, + 'paymentProcessorName': instance.paymentProcessorName, + 'paymentProcessorImage': instance.paymentProcessorImage, + 'providerImage': instance.providerImage, + 'providerLabel': instance.providerLabel, + 'userId': instance.userId, + 'debitPhone': instance.debitPhone, + 'debitAccount': instance.debitAccount, + 'productUid': instance.productUid, + 'trace': instance.trace, + 'authType': instance.authType, + 'charge': instance.charge, + 'gatewayCharge': instance.gatewayCharge, + 'tax': instance.tax, + 'totalAmount': instance.totalAmount, +}; diff --git a/linux/CMakeLists.txt b/linux/CMakeLists.txt index 3b73f4a..d2d5e46 100644 --- a/linux/CMakeLists.txt +++ b/linux/CMakeLists.txt @@ -7,7 +7,7 @@ project(runner LANGUAGES CXX) set(BINARY_NAME "qpay") # The unique GTK application identifier for this application. See: # https://wiki.gnome.org/HowDoI/ChooseApplicationID -set(APPLICATION_ID "com.example.qpay") +set(APPLICATION_ID "zw.co.qantra.qpay") # Explicitly opt in to modern CMake behaviors to avoid warnings with recent # versions of CMake. diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc index e71a16d..f6f23bf 100644 --- a/linux/flutter/generated_plugin_registrant.cc +++ b/linux/flutter/generated_plugin_registrant.cc @@ -6,6 +6,10 @@ #include "generated_plugin_registrant.h" +#include void fl_register_plugins(FlPluginRegistry* registry) { + g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin"); + url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar); } diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index 2e1de87..f16b4c3 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -3,6 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST + url_launcher_linux ) list(APPEND FLUTTER_FFI_PLUGIN_LIST diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index b8e2b22..313ef1e 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -6,9 +6,13 @@ import FlutterMacOS import Foundation import path_provider_foundation +import share_plus import shared_preferences_foundation +import webview_flutter_wkwebview func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) + SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin")) SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) + WebViewFlutterPlugin.register(with: registry.registrar(forPlugin: "WebViewFlutterPlugin")) } diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj index 92a9c2c..08a6588 100644 --- a/macos/Runner.xcodeproj/project.pbxproj +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -385,7 +385,7 @@ CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.example.qpay.RunnerTests; + PRODUCT_BUNDLE_IDENTIFIER = zw.co.qantra.qpay.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/qpay.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/qpay"; @@ -399,7 +399,7 @@ CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.example.qpay.RunnerTests; + PRODUCT_BUNDLE_IDENTIFIER = zw.co.qantra.qpay.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/qpay.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/qpay"; @@ -413,7 +413,7 @@ CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.example.qpay.RunnerTests; + PRODUCT_BUNDLE_IDENTIFIER = zw.co.qantra.qpay.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/qpay.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/qpay"; diff --git a/macos/Runner/Configs/AppInfo.xcconfig b/macos/Runner/Configs/AppInfo.xcconfig index 18c3842..82fd53f 100644 --- a/macos/Runner/Configs/AppInfo.xcconfig +++ b/macos/Runner/Configs/AppInfo.xcconfig @@ -8,7 +8,7 @@ PRODUCT_NAME = qpay // The application's bundle identifier -PRODUCT_BUNDLE_IDENTIFIER = com.example.qpay +PRODUCT_BUNDLE_IDENTIFIER = zw.co.qantra.qpay // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 zw.co.qantra. All rights reserved. diff --git a/pubspec.lock b/pubspec.lock index 6300f5e..73125d5 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -153,6 +153,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.1.2" + cross_file: + dependency: transitive + description: + name: cross_file + sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" + url: "https://pub.dev" + source: hosted + version: "0.3.4+2" crypto: dependency: transitive description: @@ -230,6 +238,14 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_contacts: + dependency: "direct main" + description: + name: flutter_contacts + sha256: "388d32cd33f16640ee169570128c933b45f3259bddbfae7a100bb49e5ffea9ae" + url: "https://pub.dev" + source: hosted + version: "1.1.9+2" flutter_dotenv: dependency: "direct main" description: @@ -288,6 +304,14 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.0" + gif_view: + dependency: "direct main" + description: + name: gif_view + sha256: "6e803e6ed892a6a0ff6671554550780a56d053cc1f06504086794001b3cd000e" + url: "https://pub.dev" + source: hosted + version: "0.4.4" glob: dependency: transitive description: @@ -600,6 +624,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.5.0" + share_plus: + dependency: "direct main" + description: + name: share_plus + sha256: b2961506569e28948d75ec346c28775bb111986bb69dc6a20754a457e3d97fa0 + url: "https://pub.dev" + source: hosted + version: "11.0.0" + share_plus_platform_interface: + dependency: transitive + description: + name: share_plus_platform_interface + sha256: "1032d392bc5d2095a77447a805aa3f804d2ae6a4d5eef5e6ebb3bd94c1bc19ef" + url: "https://pub.dev" + source: hosted + version: "6.0.0" shared_preferences: dependency: "direct main" description: @@ -765,6 +805,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.7.4" + timeago: + dependency: "direct main" + description: + name: timeago + sha256: b05159406a97e1cbb2b9ee4faa9fb096fe0e2dfcd8b08fcd2a00553450d3422e + url: "https://pub.dev" + source: hosted + version: "3.7.1" timing: dependency: transitive description: @@ -781,6 +829,38 @@ packages: url: "https://pub.dev" source: hosted version: "1.4.0" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935" + url: "https://pub.dev" + source: hosted + version: "3.2.1" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: "4bd2b7b4dc4d4d0b94e5babfffbca8eac1a126c7f3d6ecbc1a11013faa3abba2" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: "3284b6d2ac454cf34f114e1d3319866fdd1e19cdc329999057e44ffe936cfa77" + url: "https://pub.dev" + source: hosted + version: "3.1.4" uuid: dependency: "direct main" description: @@ -861,6 +941,54 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.3" + webview_flutter: + dependency: "direct main" + description: + name: webview_flutter + sha256: c3e4fe614b1c814950ad07186007eff2f2e5dd2935eba7b9a9a1af8e5885f1ba + url: "https://pub.dev" + source: hosted + version: "4.13.0" + webview_flutter_android: + dependency: transitive + description: + name: webview_flutter_android + sha256: f6e6afef6e234801da77170f7a1847ded8450778caf2fe13979d140484be3678 + url: "https://pub.dev" + source: hosted + version: "4.7.0" + webview_flutter_platform_interface: + dependency: transitive + description: + name: webview_flutter_platform_interface + sha256: f0dc2dc3a2b1e3a6abdd6801b9355ebfeb3b8f6cde6b9dc7c9235909c4a1f147 + url: "https://pub.dev" + source: hosted + version: "2.13.1" + webview_flutter_wkwebview: + dependency: transitive + description: + name: webview_flutter_wkwebview + sha256: a3d461fe3467014e05f3ac4962e5fdde2a4bf44c561cb53e9ae5c586600fdbc3 + url: "https://pub.dev" + source: hosted + version: "3.22.0" + widgets_to_image: + dependency: "direct main" + description: + name: widgets_to_image + sha256: "4e5b7e88bf62c06a91762a9a713096f095361e4c8e81fdd3875cf19cdad73d3e" + url: "https://pub.dev" + source: hosted + version: "2.0.1" + win32: + dependency: transitive + description: + name: win32 + sha256: "329edf97fdd893e0f1e3b9e88d6a0e627128cc17cc316a8d67fda8f1451178ba" + url: "https://pub.dev" + source: hosted + version: "5.13.0" xdg_directories: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index a979eba..7228adb 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,5 +1,5 @@ name: qpay -description: "A new Flutter project." +description: "Peak payments solutions" # The following line prevents the package from being accidentally published to # pub.dev using `flutter pub publish`. This is preferred for private packages. publish_to: 'none' # Remove this line if you wish to publish to pub.dev @@ -37,16 +37,22 @@ dependencies: provider: ^6.1.1 go_router: ^13.2.0 intl: ^0.19.0 - shared_preferences: ^2.2.2 + shared_preferences: ^2.5.3 flutter_svg: ^2.0.9 google_fonts: ^6.1.0 uuid: ^4.3.3 skeletonizer: ^1.4.3 dio: ^5.8.0+1 + timeago: ^3.6.1 freezed_annotation: ^3.0.0 json_annotation: ^4.9.0 flutter_dotenv: ^5.2.1 logger: ^2.6.0 + webview_flutter: ^4.13.0 + widgets_to_image: ^2.0.1 + share_plus: ^11.0.0 + flutter_contacts: ^1.1.9+2 + gif_view: ^0.4.0 dev_dependencies: flutter_test: diff --git a/web/index.html b/web/index.html index 11abc5a..d1bc15b 100644 --- a/web/index.html +++ b/web/index.html @@ -19,6 +19,7 @@ + diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index 8b6d468..c3384ec 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -6,6 +6,12 @@ #include "generated_plugin_registrant.h" +#include +#include void RegisterPlugins(flutter::PluginRegistry* registry) { + SharePlusWindowsPluginCApiRegisterWithRegistrar( + registry->GetRegistrarForPlugin("SharePlusWindowsPluginCApi")); + UrlLauncherWindowsRegisterWithRegistrar( + registry->GetRegistrarForPlugin("UrlLauncherWindows")); } diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index b93c4c3..01d3836 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -3,6 +3,8 @@ # list(APPEND FLUTTER_PLUGIN_LIST + share_plus + url_launcher_windows ) list(APPEND FLUTTER_FFI_PLUGIN_LIST diff --git a/windows/runner/Runner.rc b/windows/runner/Runner.rc index 5f38823..49e8a10 100644 --- a/windows/runner/Runner.rc +++ b/windows/runner/Runner.rc @@ -89,11 +89,11 @@ BEGIN BEGIN BLOCK "040904e4" BEGIN - VALUE "CompanyName", "com.example" "\0" + VALUE "CompanyName", "zw.co.qantra" "\0" VALUE "FileDescription", "qpay" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "qpay" "\0" - VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 zw.co.qantra. All rights reserved." "\0" VALUE "OriginalFilename", "qpay.exe" "\0" VALUE "ProductName", "qpay" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0"