
About
What's New in RFlutter PayApp
1.0.10
September 22, 2026
### Full changelog #### Language - Complete Chinese localisation across every screen — Simplified (`zh-Hans-CN`, `zh-Hans-SG`) and Traditional (`zh-Hant-HK`, `zh-Hant-MO`, `zh-Hant-TW`), with Taiwan-specific vocabulary. - Terms of Use and Privacy Policy replaced with real documents — they were lorem ipsum — and translated. - Card brands, payment methods, activity categories, vouchers and error messages now translate instead of falling back to English. - Fallback is now per-key rather than per-locale, so a single missing string no longer drops a whole screen to English. - Malay removed from the language picker; it had no translations behind it. #### Look and feel - Payment card redesigned as a black bank card with a drawn chip. - Transaction detail rebuilt around the amount, on a shared receipt layout used by both Payment and Activities. - Home, Payment, Activities, Points and Account moved onto one shared card surface. - Activities grouped into cards by date; Points gained the bottom nav bar it was the only screen without. - Home: rounded Direct Access tiles, which previously rendered blank, plus a Transaction History preview. - Empty states now have a real shape, a hint and an action. #### Payments and checkout - Tips, points and promo are preserved when returning to the same checkout. - Vouchers scoped to their checkout, counted once, and the discount shown is the one actually sent. - Top-up dialog defaults to a card that can be charged, and the TOP-UP pill now has a handler. - The transfer password prompt honours the transaction limit that was meant to gate it. - Fixed: the Tips field throwing on GIVE, "Transfer To" offering a transfer to `NaN`, the expired-card marker, and a card expiry validator that rejected exactly the cards it should have accepted. #### Loading and errors - No more confident `$0.00`, "No payment record." or "No card yet." before the data has arrived. - Payment and Home share in-flight requests instead of repeating them — about 0.2 s off every Payment tab entry. - Failures surface even after the user has left the screen, instead of being swallowed. - Detail dialogs no longer open on a failed fetch. #### Navigation - System back at Home exits the app instead of returning to the login screen. - Back from Points, and from the Home entry points, returns to Home. - Back arrow removed from the bottom-nav root tabs; a screen with unsaved work can veto the system back gesture. #### Account - Auto-reload has a visible on/off switch and says what it does. - The money fields no longer silently eat the decimal point. - Date of birth is readable, hints follow one convention, and the version dialog reads the installed package rather than a hardcoded list. - The notification feed is dated and typed, and no longer grows a copy of itself on every visit. - Sign Out clears the session properly. #### Security and privacy - Removed the hardcoded OTP bypass; it now fails closed. - Stored CVV removed. The bearer token is sent on the wallet and Stripe calls that were missing it, Stripe declines are handled, and double-submit guards added. - Stopped requesting contacts, location and microphone, which the app never used. The camera is requested only when the scanner needs it, not at launch. - `shared_preferences` moved off the version flagged by GHSA-3hpf-ff72-j67p; credentials moved to `flutter_secure_storage`. - Deleted the card and bank list stubs, and the fabricated card numbers they served. #### Stability - About 110 `BuildContext`-across-async-gap sites closed across all packages. - Controllers disposed on the login, signup, account, card, points and payment screens, where they previously leaked on every visit. - Dialog dismissal no longer throws an unhandled null-cast. - One expired session raises one dialog, not two.
More




