Skip to content

Conversation

@SajeeTechi
Copy link
Contributor

closes #281
closes #277
closes #276

kevtechi and others added 30 commits November 10, 2025 11:55
Introduces the `EventServiceState.closed` state to manage permanent connection termination scenarios, preventing unnecessary reconnection attempts.

Key Changes:
* **Events Service (`events.dart`):**
    * Adds `EventServiceState.closed` to the enum.
    * Modifies the connection error handling (`connect`) to check for a `WebSocketException` containing "404". If a 404 is detected, the service transitions to `closed` state and aborts reconnection.
* **Wallet Logic (`logic.dart`):**
    * Adds a check in `handleInitialLoad` to immediately transition to `EventServiceState.closed` if the loaded `communityConfig.community.hidden` flag is true, preventing the service from attempting to connect to a hidden community.
* **UI Cleanup (`screen.dart`):**
    * Removes unused state variable `eventServiceIntentionalDisconnect`.
    * Updates logic to calculate `isClosed` based on the new state.
- Enhanced Drag-to-Dismiss Experience
- Responsive Dragging
- Smooth Snap-Back/Dismissal:
- Reduced Dismissal Threshold:
- Layout Fix
…description-not-taken-from-sendtourl-qr-format

277 tipping tip amout and description not taken from sendtourl qr format
…t-from-sendtourl-qr-format

276 unable to change amount from sendtourl qr format
…ee lock

Wraps clearTipping(), updateMessage(), and updateListenerAmount() calls in
addPostFrameCallback during dispose() to prevent "setState() or
markNeedsBuild() called when widget tree was locked" error.

These methods trigger notifyListeners() which cannot be called during the
dispose phase. Deferring them until after the current frame ensures the
widget tree is unlocked before state updates occur.
…screen-persists-tipping-data-in-send-flow

clear tip, amount and message on exit of receive screen
Coordinate navigation between send_progress and tip_details screens to
avoid black screen flicker:

- tip_details now pops back with success status instead of using go()
- send_progress receives the result and handles final navigation
- clearTipping() called before navigating to wallet home

Previously, tip_details used navigator.go() which abruptly cleared the
navigation stack while send_progress was still active, causing a black
screen during the transition. Now the screens coordinate properly with
pop/push, ensuring smooth navigation back to the wallet home.
Separate tipping initialization from amount formatting logic to ensure
tipping state is created whenever a tip destination (tipTo) is present
in the URL, regardless of whether tipAmount is specified.

Previously, tipping state was only created when both tipTo AND tipAmount
were present. Now the state is created with tipTo and optional amount,
allowing users to manually enter the tip amount later.

Example URL that now works:
https://app.citizenwallet.xyz/?sendto=0x...@alias&tipTo=0x...

Changes:
- Remove null check for parsedData.tip!.amount from outer condition
- Make formattedTipAmount nullable (String?)
- Format amount only when provided, otherwise pass null to setTipping()
When sending a tip to an address that doesn't have an associated profile,
the handleSend function was returning early with selectedAddress as null.

Fixed by:
- Setting addressController.text to the raw address when profile lookup fails
- Adding addressController fallback in SlideToComplete address resolution

This ensures tips can be sent to any valid address regardless of profile existence.
- closed attribute
- display/hide from screen navigation
- display/hide from app resume from background
- on error
 ```
 _isConnected = false;
_onStateChange(EventServiceState.error);
```
- Change migration action name from "Offboard" to "Migrate to Citizen Pay"
- Update migration URL to new checkout endpoint (cw-cp-migration)
- Update migration messaging to explain Brussels Pay is moving to Citizen Pay
- Mark Brussels Pay community as closed
- Apply changes to both production and test configs
Refactor constructPluginUri to include device platform (ios/android) as a query parameter. Replace string concatenation with Uri.parse and uri.replace for cleaner parameter handling and better maintainability.

- Add platform utility import
- Detect platform using isPlatformAndroid() helper
- Use Uri class for proper query parameter merging
- Preserve existing query parameters in both signature paths
- Add platform parameter to all plugin URIs
- Upgrade Android Gradle plugin to 8.9.1 to satisfy AndroidX dependencies
- Use flutter.minSdkVersion instead of hardcoded value for better Flutter integration

Fixes build failure caused by androidx.browser:browser:1.9.0,
androidx.core:core-ktx:1.17.0, and androidx.core:core:1.17.0 requiring
AGP 8.9.1 or higher.
@SajeeTechi SajeeTechi requested a review from kevtechi February 2, 2026 07:06
@SajeeTechi SajeeTechi self-assigned this Feb 2, 2026
@SajeeTechi SajeeTechi added the major This is a major release label Feb 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

major This is a major release

Projects

None yet

2 participants