Skip to content

chore(release): Komodo Wallet 0.9.2 Release#2850

Merged
CharlVS merged 88 commits intomainfrom
dev
Aug 4, 2025
Merged

chore(release): Komodo Wallet 0.9.2 Release#2850
CharlVS merged 88 commits intomainfrom
dev

Conversation

@CharlVS
Copy link
Copy Markdown
Collaborator

@CharlVS CharlVS commented Jul 1, 2025

Komodo Wallet v0.9.2 Release Notes

This release brings numerous improvements to wallet functionality, enhanced user experience, and critical bug fixes. Key highlights include HD wallet private key export, improved Trezor support, enhanced UI/UX throughout the application, and platform-specific optimizations.

🚀 New Features

🎨 UI/UX Improvements

🐛 Bug Fixes

💻 Platform-specific Changes

Linux

macOS

Build & Development

🔧 Technical Improvements

⚠️ Important Notes

Full Changelog: 0.9.1...0.9.2 (available when merged in)

takenagain and others added 21 commits May 26, 2025 21:52
* chore: migrate to Flutter 3.32

* ci: bump flutter version in docker files and workaround apk regression
…up (#2693)

* make .docker/build.sh executable

* docker build: fix access rights, when current user is not 1000:1000

* docker build: ensure that build dir have needed access rights

to prevent errors below:

Flutter failed to create a directory at "/app/build/ce49e7d90cd902197f9a9cbc84219d23".
Please ensure that the SDK and/or project is installed in a location that has read/write permissions for the current user.

* docker build: allow build specific env. variables passed to docker

* docker build: get rid of bash arrays in build.sh

* docker build: get rid of eval in build.sh

* docker build: fix linux build from build.sh

libsecret-1-dev needed for build flutter_secure_storage_linux and
acl on /usr/local needed bcz build workflow tries to write something
there.

* docker build: fix ownership of /app/build

* docker build: init ENV_ARGS before the loop
Reduce MACOSX_DEPLOYMENT_TARGET from 15.0 to 13.5. By lowering the minimum supported macOS version, we now:

- Support running on macOS Ventura 13.5 and later, expanding the range of compatible systems.
- Enable building the application on Xcode 15.1 (tested successfully on macOS 13.7.6 with Xcode 15.1).

The previous requirement of 15.0 was overly restrictive and is no longer necessary.
* feat(withdraw): add IBC transfer option

* fix: fix IBC not being passed to SDK

Fix IBC not being passed to SDK, and migrate breaking SDK changes for IBC channel being an int.

* chore: roll SDK

Roll SDK for IBC fix and coins config update

* chore: roll SDK

* chore(deps): bump SDK commit hash

* feat(withdraw): add ibc channel text validation

---------

Co-authored-by: Francois <takenagain@users.noreply.github.com>
#2759)

* chore: bump Flutter to 3.32.2

* chore(ci): restore Android build workaround and add Docker workflow

* chore(docs,build): bump remaining Flutter references to `3.32.2`

* build: add config-only build step to mitigate Flutter regression

* chore(deps): upgrade SDK to 2768355

* build(android): revert back to JDK 17

* build(docker): mount source as volume rather than including as copy step

* ci(android): fix workflow dispatcher and build arg

* ci(android): add temporary firebase workaround for android
chore: sync hot-fix release from `main` to `dev`
…fault-landing-view

feat: set wallet page as default landing view
* feat: add copy address functionality
- add address text to receive modal
- add copy address button to receive modal
- add explorer link button to receive modal
- add translation for 'explorerUnavailable'

* Update styling to use theming

* contain onclick highlight in address copy button

* remove duplicate translation item

* Use OverlayEntry to elevate snackbar above modals

* limit toaster width to the bread it holds

* rename ts key avoid clash with same name function; allow custom copy toast message

* truncate middle for wide addresses

* review fixes and formatting

* rm dupe import

Co-authored-by: Francois <takenagain@users.noreply.github.com>

* fix(copy-address): improve clipboard overlay

* chore: apply auto-fixes and regenerate locale keys

* fix: Avoid linter context access warnings

* refactor: use Flutter’s snackbar system for copy confirmation

---------

Co-authored-by: Francois <takenagain@users.noreply.github.com>
Co-authored-by: Charl (Nitride) <77973576+CharlVS@users.noreply.github.com>
* display commit hash on the Setting Page

```
GIT_COMMIT=$(git rev-parse --short HEAD)
flutter build ... --dart-define=GIT_COMMIT=$GIT_COMMIT ...
```

* add GIT_COMMIT handling for CI/CD

* change all references for GIT_COMMIT to existing COMMIT_HASH

* COMMIT_HASH is now 7 symbols everywhere (in feedback as well)

* remove redundant dart defines with COMMIT_HASH

as everything seems already done in generate-assets action

* generate-assets: use PR HEAD SHA as a COMMIT_HASH in case of PR event

* desktop-builds: remove forgotten COMMIT_HASH env
* chore: roll SDK packages

* chore: roll SDK packages

Roll SDK package for ETH activation fix.
* fix(wallet): refresh pubkeys after new address

* fix: add missing import
…nt) list (#2787)

* feat(history): prioritize user addresses

* refactor: revert unnecessary changes

* test: add basic unit tests for new sanitize function

* fix(transaction): remove all instances of sender address from to list
Flutter’s engine spawns multiple threads (UI, raster, etc.).
Under X11 these threads may issue X calls concurrently, which is
undefined unless XInitThreads() is invoked before the first X request.

Without this, the app aborts on launch with:

  [xcb] Unknown request in queue while dequeuing
  [xcb] Most likely this is a multi-threaded client and XInitThreads has not been called
  KomodoWallet: xcb_io.c:175: dequeue_pending_request: Assertion `!xcb_xlib_unknown_req_in_deq' failed.

This patch:

* adds `#include <X11/Xlib.h>`
* calls `XInitThreads()` at the very start of `main()` in `linux/runner/main.cc`
* ensures libX11 is linked via CMake

Wayland sessions were already stable; this change fixes crashes
when running under pure X11 or XWayland.

- flutter/flutter#170937
- flutter/flutter#169470
* chore: roll `dev` sdk

* chore: roll sdk

- Roll SDK for coin activations fix.

* chore: roll SDK
#2818)

* disable Firebase Analytics on Linux and explicitly handle UnsupportedError in init

* Add a `Platform.isLinux` guard to immediately disable analytics on unsupported platforms
* Wrap `Firebase.initializeApp` in its own `try/catch` to catch `UnsupportedError` and short-circuit initialization
* Complete the `_initCompleter` with an error on unsupported platforms to unblock awaiting callers
* Preserve existing retry logic for other initialization failures without retrying when unsupported
* Log debug messages when initialization is skipped or fails due to lack of Linux support

* refactor: replace dart:io Linux check with foundation platform API

Removed import of dart:io and its `Platform.isLinux` check in AnalyticsRepo,
switching to Flutter’s cross-platform API (`kIsWeb` + defaultTargetPlatform).
* fix: handle missing swap info

* test: add my recent swaps deserialization (#2823)
@CharlVS CharlVS added this to the v0.9.2 Release milestone Jul 1, 2025
@CharlVS CharlVS self-assigned this Jul 1, 2025
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Jul 1, 2025

Important

Review skipped

More than 25% of the files skipped due to max files limit. The review is being skipped to prevent a low-quality review.

133 files out of 274 files are above the max files limit of 100. Please upgrade to Pro plan to get higher limits.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Walkthrough

This update upgrades the Flutter SDK to version 3.32.5 throughout the project, adjusts related Docker and CI configurations, and introduces compatibility fixes for the new Flutter version. It also adds new IBC channel validation, improves transaction address sanitization, enhances copy-to-clipboard UX, and makes several null-safety and formatting improvements across the codebase.

Changes

Files/Groups Change Summary
.devcontainer/Dockerfile, .docker/komodo-wallet-android.dockerfile, .github/actions/flutter-deps/action.yml, .github/workflows/roll-sdk-packages.yml, docs/FLUTTER_VERSION.md, docs/MULTIPLE_FLUTTER_VERSIONS.md, packages/komodo_ui_kit/pubspec.yaml, pubspec.yaml, app_theme/pubspec.yaml Upgraded Flutter version from 3.29.2 to 3.32.5 in Dockerfiles, CI, and documentation.
.docker/android-sdk.dockerfile, .docker/build.sh Parameterized user ID for builds, added ACL permissions, new packages, improved build script for UID/GID and commit hash passing.
.github/actions/generate-assets/action.yml, .github/workflows/docker-android-build.yml, .github/workflows/mobile-builds.yml Improved commit hash handling in CI, added new Android Docker build workflow, added workaround for Flutter regression in Android builds.
android/app/build.gradle, macos/Runner.xcodeproj/project.pbxproj, linux/CMakeLists.txt, linux/main.cc, ios/Runner.xcodeproj/project.pbxproj, ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme Updated build targets, added X11 support for Linux, improved iOS/macOS build settings.
app_theme/lib/src/dark/theme_global_dark.dart, app_theme/lib/src/light/theme_global_light.dart Enhanced SnackBar theme details, improved code formatting and consistency.
assets/translations/en.json Added and updated translation keys for IBC, clipboard, and commit hash.
lib/app_config/app_config.dart, lib/app_config/package_information.dart Changed default Trezor coins to segwit variants, added commit hash to package info.
lib/bloc/analytics/analytics_repo.dart Added platform-specific Firebase analytics initialization handling.
lib/bloc/coin_addresses/bloc/coin_addresses_bloc.dart Reformatted constructor for clarity.
lib/bloc/transaction_history/transaction_history_bloc.dart, lib/shared/utils/extensions/transaction_extensions.dart, test_units/tests/utils/transaction_history/sanitize_transaction_test.dart, test_units/main.dart Added transaction sanitization extension and corresponding tests; updated bloc to use it.
lib/bloc/trezor_init_bloc/trezor_init_bloc.dart Changed Trezor wallet login to use method for private key policy.
lib/bloc/withdraw_form/withdraw_form_bloc.dart, lib/bloc/withdraw_form/withdraw_form_state.dart, lib/views/wallet/coin_details/withdraw_form/widgets/fill_form/fields/fields.dart, lib/views/wallet/coin_details/withdraw_form/withdraw_form.dart, assets/translations/en.json Added IBC channel validation, UI fields, and localization for Tendermint protocol assets.
lib/blocs/trading_entities_bloc.dart, lib/model/swap.dart, lib/views/dex/dex_helpers.dart, lib/views/dex/entities_list/history/history_item.dart, lib/views/dex/entities_list/history/swap_history_sort_mixin.dart, lib/views/dex/entities_list/in_progress/in_progress_item.dart, lib/views/dex/entities_list/in_progress/in_progress_list.dart, lib/views/dex/entity_details/swap/swap_details.dart, lib/views/dex/entity_details/swap/swap_details_step_list.dart, test_units/tests/swaps/my_recent_swaps_response_test.dart Made myInfo in Swap nullable, updated sorting/filtering logic and tests for null safety.
lib/model/main_menu_value.dart Changed default main menu from DEX to Wallet.
lib/services/feedback/feedback_service.dart Refactored error handling, improved debug logging and formatting.
lib/shared/utils/utils.dart, lib/views/wallet/common/address_copy_button.dart, lib/views/wallet/wallet_page/wallet_main/active_coins_list.dart, lib/views/wallet/coin_details/coin_details_info/coin_addresses.dart, lib/views/wallet/coin_details/coin_details_info/coin_details_info.dart, lib/views/wallet/coin_details/receive/receive_address_trezor.dart, lib/views/wallet/coin_details/receive/receive_details.dart, lib/views/wallet/coin_details/transactions/transaction_list_item.dart Enhanced copy-to-clipboard UX, improved address display, added coin abbreviation context, refactored transaction address widget, improved error messages.
lib/views/settings/widgets/general_settings/app_version_number.dart Displayed commit hash in app version info.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant UI
    participant WithdrawFormBloc
    participant IbcChannelField

    User->>UI: Opens Withdraw Form for Tendermint asset
    UI->>WithdrawFormBloc: Initializes state
    UI->>IbcChannelField: Renders IBC Channel input
    User->>IbcChannelField: Enters channel value
    IbcChannelField->>WithdrawFormBloc: Dispatches IbcChannelChanged event
    WithdrawFormBloc->>WithdrawFormBloc: Validates IBC channel (empty/regex)
    WithdrawFormBloc-->>IbcChannelField: Updates error state if invalid
    IbcChannelField-->>User: Shows error/hint in UI
Loading
sequenceDiagram
    participant TransactionHistoryBloc
    participant Transaction
    participant Wallet

    TransactionHistoryBloc->>Wallet: Get my addresses
    TransactionHistoryBloc->>Transaction: For each transaction, call sanitize(myAddresses)
    Transaction-->>TransactionHistoryBloc: Returns sanitized transaction (sender removed, wallet addresses prioritized)
    TransactionHistoryBloc-->>UI: Updates state with sanitized transactions
Loading

Possibly related PRs

Suggested reviewers

  • smk762
  • AndrewDelaney

Poem

Flutter hops to three-three-two-five,
Docker and CI keep the build alive.
Addresses sanitized, IBC is checked,
Copy and commit—details reflect.
Nulls are tamed, themes refined,
With every merge, the code’s aligned.
🐇✨ Hooray for this robust update!

✨ Finishing Touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch dev

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai generate unit tests to generate unit tests for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Jul 1, 2025

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@github-actions
Copy link
Copy Markdown

github-actions bot commented Jul 1, 2025

Visit the preview URL for this PR (updated for commit 976943a):

https://walletrc--pull-2850-merge-nnwwjjkp.web.app

(expires Fri, 08 Aug 2025 15:58:32 GMT)

🔥 via Firebase Hosting GitHub Action 🌎

Sign: f66a4ff03faa546f12f0ae5a841bd9eff2714dcc

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🔭 Outside diff range comments (1)
pubspec.yaml (1)

18-26: Package version still reads 0.9.1+1 – inconsistent with 0.9.2 release tag
The PR title announces 0.9.2, but the pubspec wasn’t bumped. Publishing or CI artifacts will still be labelled 0.9.1.

-version: 0.9.1+1
+version: 0.9.2+0
🧹 Nitpick comments (5)
.github/actions/flutter-deps/action.yml (1)

8-11: Pinned Flutter version updated – keep docs & FLUTTER_VERSION env var in sync
The action now installs 3.32.5. Double-check .devcontainer/Dockerfile, any local scripts, and docs so that a single source of truth is maintained.

docs/MULTIPLE_FLUTTER_VERSIONS.md (1)

60-60: Minor grammar improvement needed.

Consider adding the article "the" before "Flutter version" for better readability.

-3. Click on "Versions" in the sidebar and download Flutter version `3.32.5`
+3. Click on "Versions" in the sidebar and download the Flutter version `3.32.5`
.github/workflows/docker-android-build.yml (1)

37-43: Track the temporary Google Play Services workaround.

The sed command that comments out Google Play Services is marked as temporary. Consider adding a TODO comment with a tracking issue to ensure this workaround is removed once Firebase configs are properly added to CI.

       # Temporary workaround until firebase configs are added to CI
+      # TODO: Remove this workaround once Firebase configs are added - track in issue #XXX
       - name: Comment out Google Play Services import
lib/views/wallet/coin_details/withdraw_form/widgets/fill_form/fields/fields.dart (1)

589-596: Well-implemented TextField state management with BLoC.

The conversion to StatefulWidget with proper TextEditingController management and BlocConsumer pattern effectively prevents cursor jumping issues. The separation of concerns between listening and building is clean.

Consider initializing the controller with the current bloc state value:

   @override
   void initState() {
     super.initState();
-    _controller = TextEditingController();
+    final state = context.read<WithdrawFormBloc>().state;
+    _controller = TextEditingController(text: state.ibcChannel ?? '');
   }
.docker/build.sh (1)

71-71: Fix shell quoting issue.

The $(pwd) command substitution should be quoted to prevent word splitting.

Apply this fix:

-  -v $(pwd):/app \
+  -v "$(pwd)":/app \
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9798b99 and 6e51915.

⛔ Files ignored due to path filters (5)
  • app_theme/pubspec.lock is excluded by !**/*.lock
  • lib/generated/codegen_loader.g.dart is excluded by !**/generated/**
  • macos/Podfile.lock is excluded by !**/*.lock
  • packages/komodo_ui_kit/pubspec.lock is excluded by !**/*.lock
  • pubspec.lock is excluded by !**/*.lock
📒 Files selected for processing (57)
  • .devcontainer/Dockerfile (1 hunks)
  • .docker/android-sdk.dockerfile (3 hunks)
  • .docker/build.sh (1 hunks)
  • .docker/komodo-wallet-android.dockerfile (1 hunks)
  • .github/actions/flutter-deps/action.yml (1 hunks)
  • .github/actions/generate-assets/action.yml (2 hunks)
  • .github/workflows/docker-android-build.yml (1 hunks)
  • .github/workflows/mobile-builds.yml (1 hunks)
  • .github/workflows/roll-sdk-packages.yml (1 hunks)
  • android/app/build.gradle (1 hunks)
  • app_theme/lib/src/dark/theme_global_dark.dart (5 hunks)
  • app_theme/lib/src/light/theme_global_light.dart (5 hunks)
  • app_theme/pubspec.yaml (1 hunks)
  • assets/translations/en.json (5 hunks)
  • docs/FLUTTER_VERSION.md (2 hunks)
  • docs/MULTIPLE_FLUTTER_VERSIONS.md (4 hunks)
  • ios/Runner.xcodeproj/project.pbxproj (0 hunks)
  • ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme (2 hunks)
  • lib/app_config/app_config.dart (1 hunks)
  • lib/app_config/package_information.dart (1 hunks)
  • lib/bloc/analytics/analytics_repo.dart (3 hunks)
  • lib/bloc/coin_addresses/bloc/coin_addresses_bloc.dart (1 hunks)
  • lib/bloc/transaction_history/transaction_history_bloc.dart (5 hunks)
  • lib/bloc/trezor_init_bloc/trezor_init_bloc.dart (1 hunks)
  • lib/bloc/withdraw_form/withdraw_form_bloc.dart (1 hunks)
  • lib/bloc/withdraw_form/withdraw_form_state.dart (2 hunks)
  • lib/blocs/trading_entities_bloc.dart (2 hunks)
  • lib/model/main_menu_value.dart (1 hunks)
  • lib/model/swap.dart (5 hunks)
  • lib/services/feedback/feedback_service.dart (14 hunks)
  • lib/shared/utils/extensions/transaction_extensions.dart (1 hunks)
  • lib/shared/utils/utils.dart (3 hunks)
  • lib/views/dex/dex_helpers.dart (1 hunks)
  • lib/views/dex/entities_list/history/history_item.dart (1 hunks)
  • lib/views/dex/entities_list/history/swap_history_sort_mixin.dart (1 hunks)
  • lib/views/dex/entities_list/in_progress/in_progress_item.dart (1 hunks)
  • lib/views/dex/entities_list/in_progress/in_progress_list.dart (1 hunks)
  • lib/views/dex/entity_details/swap/swap_details.dart (1 hunks)
  • lib/views/dex/entity_details/swap/swap_details_step_list.dart (1 hunks)
  • lib/views/settings/widgets/general_settings/app_version_number.dart (1 hunks)
  • lib/views/wallet/coin_details/coin_details_info/coin_addresses.dart (6 hunks)
  • lib/views/wallet/coin_details/coin_details_info/coin_details_info.dart (2 hunks)
  • lib/views/wallet/coin_details/receive/receive_address_trezor.dart (1 hunks)
  • lib/views/wallet/coin_details/receive/receive_details.dart (1 hunks)
  • lib/views/wallet/coin_details/transactions/transaction_list_item.dart (3 hunks)
  • lib/views/wallet/coin_details/withdraw_form/widgets/fill_form/fields/fields.dart (2 hunks)
  • lib/views/wallet/coin_details/withdraw_form/withdraw_form.dart (2 hunks)
  • lib/views/wallet/common/address_copy_button.dart (2 hunks)
  • lib/views/wallet/wallet_page/wallet_main/active_coins_list.dart (1 hunks)
  • linux/CMakeLists.txt (2 hunks)
  • linux/main.cc (1 hunks)
  • macos/Runner.xcodeproj/project.pbxproj (6 hunks)
  • packages/komodo_ui_kit/pubspec.yaml (1 hunks)
  • pubspec.yaml (1 hunks)
  • test_units/main.dart (3 hunks)
  • test_units/tests/swaps/my_recent_swaps_response_test.dart (1 hunks)
  • test_units/tests/utils/transaction_history/sanitize_transaction_test.dart (1 hunks)
💤 Files with no reviewable changes (1)
  • ios/Runner.xcodeproj/project.pbxproj
🧰 Additional context used
🧠 Learnings (21)
📓 Common learnings
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2608
File: lib/bloc/fiat/fiat_onramp_form/fiat_form_bloc.dart:208-225
Timestamp: 2025-05-01T20:56:36.180Z
Learning: The `kIsWasm` constant is available in Flutter version 3.22+ (released May 2024) and is used to detect if an application is running on the WebAssembly backend. When writing platform-specific code, use both `kIsWeb` and `kIsWasm` checks to properly handle both JavaScript and WebAssembly compilation targets.
.docker/komodo-wallet-android.dockerfile (3)
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2566
File: lib/bloc/coins_bloc/coins_bloc.dart:10-10
Timestamp: 2025-04-01T15:51:37.060Z
Learning: In the Komodo Wallet project, part files share imports with their parent files. The import for `app_config.dart` in `coins_bloc.dart` is necessary because the part file `coins_state.dart` uses `excludedAssetList` from that package.
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2611
File: test_units/tests/system_health/system_clock_repository_test.dart:7-8
Timestamp: 2025-05-08T19:07:13.442Z
Learning: In the Komodo Wallet project, test files are structured to define test functions that are called from a central test runner in test_units/main.dart, rather than each test file having its own main() function.
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2611
File: test_units/tests/system_health/system_clock_repository_test.dart:7-8
Timestamp: 2025-05-08T19:07:13.442Z
Learning: In the Komodo Wallet project, test files are structured to define test functions that are called from a central test runner in test_units/main.dart, rather than each test file having its own main() function.
android/app/build.gradle (3)
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2528
File: android/gradle/wrapper/gradle-wrapper.properties:3-4
Timestamp: 2025-02-17T07:14:20.072Z
Learning: Java 21 requires Gradle version 8.5 or higher for compatibility in Android builds.
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2528
File: android/gradle/wrapper/gradle-wrapper.properties:3-4
Timestamp: 2025-02-17T07:14:20.072Z
Learning: Running Gradle on Java 21 requires Gradle version 8.5 or higher. While Gradle 8.4 introduced Java 21 compilation support, version 8.5+ is needed for running the Gradle process itself on Java 21.
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2526
File: android/app/build.gradle:28-28
Timestamp: 2025-02-17T06:53:06.737Z
Learning: Android 15 (API Level 35) was released on October 15, 2024, making it a valid target for Android applications.
lib/views/wallet/coin_details/receive/receive_address_trezor.dart (1)
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2566
File: lib/bloc/coins_bloc/coins_bloc.dart:10-10
Timestamp: 2025-04-01T15:51:37.060Z
Learning: In the Komodo Wallet project, part files share imports with their parent files. The import for `app_config.dart` in `coins_bloc.dart` is necessary because the part file `coins_state.dart` uses `excludedAssetList` from that package.
lib/views/wallet/coin_details/coin_details_info/coin_details_info.dart (6)
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2566
File: lib/bloc/coins_bloc/coins_bloc.dart:10-10
Timestamp: 2025-04-01T15:51:37.060Z
Learning: In the Komodo Wallet project, part files share imports with their parent files. The import for `app_config.dart` in `coins_bloc.dart` is necessary because the part file `coins_state.dart` uses `excludedAssetList` from that package.
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2566
File: lib/bloc/coins_bloc/coins_bloc.dart:10-10
Timestamp: 2025-04-01T15:51:37.060Z
Learning: The `excludedAssetList` from `app_config.dart` is used in the `_filterExcludedAssets` method in `coins_state.dart`. Since `coins_state.dart` is a part file of `coins_bloc.dart`, the import needs to be in the parent file even though it's not directly used there. In Dart, part files share the namespace and imports of their parent files.
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2608
File: lib/bloc/fiat/fiat_onramp_form/fiat_form_bloc.dart:2-3
Timestamp: 2025-05-01T21:00:36.970Z
Learning: It's acceptable to use unconditional `dart:io` imports in the Komodo wallet codebase when the usage is guarded by `!kIsWeb` conditional checks that prevent the platform-specific code from being executed in web environments.
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2611
File: test_units/tests/system_health/http_head_time_provider_test.dart:8-24
Timestamp: 2025-05-08T19:05:13.083Z
Learning: In the Komodo Wallet project, test functions are defined in individual files under `test_units/tests/` but are executed through the central entry point in `test_units/main.dart`, so individual test files don't need their own `main()` function.
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2611
File: test_units/tests/system_health/system_clock_repository_test.dart:7-8
Timestamp: 2025-05-08T19:07:13.442Z
Learning: In the Komodo Wallet project, test files are structured to define test functions that are called from a central test runner in test_units/main.dart, rather than each test file having its own main() function.
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2611
File: test_units/tests/system_health/system_clock_repository_test.dart:7-8
Timestamp: 2025-05-08T19:07:13.442Z
Learning: In the Komodo Wallet project, test files are structured to define test functions that are called from a central test runner in test_units/main.dart, rather than each test file having its own main() function.
lib/views/wallet/wallet_page/wallet_main/active_coins_list.dart (3)
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2566
File: lib/bloc/coins_bloc/coins_bloc.dart:10-10
Timestamp: 2025-04-01T15:51:37.060Z
Learning: In the Komodo Wallet project, part files share imports with their parent files. The import for `app_config.dart` in `coins_bloc.dart` is necessary because the part file `coins_state.dart` uses `excludedAssetList` from that package.
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2566
File: lib/bloc/coins_bloc/coins_bloc.dart:10-10
Timestamp: 2025-04-01T15:51:37.060Z
Learning: The `excludedAssetList` from `app_config.dart` is used in the `_filterExcludedAssets` method in `coins_state.dart`. Since `coins_state.dart` is a part file of `coins_bloc.dart`, the import needs to be in the parent file even though it's not directly used there. In Dart, part files share the namespace and imports of their parent files.
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2570
File: lib/views/fiat/fiat_inputs.dart:198-212
Timestamp: 2025-03-25T18:39:03.280Z
Learning: The `showBalanceIndicator` parameter for the `SourceAddressField` widget will be added in a future SDK update, as noted by the developer.
lib/app_config/app_config.dart (2)
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2566
File: lib/bloc/coins_bloc/coins_bloc.dart:10-10
Timestamp: 2025-04-01T15:51:37.060Z
Learning: The `excludedAssetList` from `app_config.dart` is used in the `_filterExcludedAssets` method in `coins_state.dart`. Since `coins_state.dart` is a part file of `coins_bloc.dart`, the import needs to be in the parent file even though it's not directly used there. In Dart, part files share the namespace and imports of their parent files.
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2566
File: lib/bloc/coins_bloc/coins_bloc.dart:10-10
Timestamp: 2025-04-01T15:51:37.060Z
Learning: In the Komodo Wallet project, part files share imports with their parent files. The import for `app_config.dart` in `coins_bloc.dart` is necessary because the part file `coins_state.dart` uses `excludedAssetList` from that package.
lib/bloc/analytics/analytics_repo.dart (4)
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2608
File: lib/bloc/fiat/fiat_onramp_form/fiat_form_bloc.dart:2-3
Timestamp: 2025-05-01T21:00:36.970Z
Learning: It's acceptable to use unconditional `dart:io` imports in the Komodo wallet codebase when the usage is guarded by `!kIsWeb` conditional checks that prevent the platform-specific code from being executed in web environments.
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2608
File: lib/bloc/fiat/fiat_onramp_form/fiat_form_bloc.dart:208-225
Timestamp: 2025-05-01T20:56:36.180Z
Learning: The `kIsWasm` constant is available in Flutter version 3.22+ (released May 2024) and is used to detect if an application is running on the WebAssembly backend. When writing platform-specific code, use both `kIsWeb` and `kIsWasm` checks to properly handle both JavaScript and WebAssembly compilation targets.
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2566
File: lib/bloc/coins_bloc/coins_bloc.dart:10-10
Timestamp: 2025-04-01T15:51:37.060Z
Learning: In the Komodo Wallet project, part files share imports with their parent files. The import for `app_config.dart` in `coins_bloc.dart` is necessary because the part file `coins_state.dart` uses `excludedAssetList` from that package.
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2608
File: lib/views/fiat/webview_dialog.dart:50-55
Timestamp: 2025-05-01T21:00:56.962Z
Learning: `kIsWasm` is a valid constant in Flutter 3.22+ (released May 2024) that detects if an application is running on WebAssembly. It complements `kIsWeb` for more precise platform detection.
lib/bloc/coin_addresses/bloc/coin_addresses_bloc.dart (2)
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2566
File: lib/bloc/coins_bloc/coins_bloc.dart:10-10
Timestamp: 2025-04-01T15:51:37.060Z
Learning: In the Komodo Wallet project, part files share imports with their parent files. The import for `app_config.dart` in `coins_bloc.dart` is necessary because the part file `coins_state.dart` uses `excludedAssetList` from that package.
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2566
File: lib/bloc/coins_bloc/coins_bloc.dart:10-10
Timestamp: 2025-04-01T15:51:37.060Z
Learning: The `excludedAssetList` from `app_config.dart` is used in the `_filterExcludedAssets` method in `coins_state.dart`. Since `coins_state.dart` is a part file of `coins_bloc.dart`, the import needs to be in the parent file even though it's not directly used there. In Dart, part files share the namespace and imports of their parent files.
lib/views/wallet/coin_details/withdraw_form/withdraw_form.dart (3)
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2566
File: lib/bloc/coins_bloc/coins_bloc.dart:10-10
Timestamp: 2025-04-01T15:51:37.060Z
Learning: In the Komodo Wallet project, part files share imports with their parent files. The import for `app_config.dart` in `coins_bloc.dart` is necessary because the part file `coins_state.dart` uses `excludedAssetList` from that package.
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2566
File: lib/bloc/coins_bloc/coins_bloc.dart:10-10
Timestamp: 2025-04-01T15:51:37.060Z
Learning: The `excludedAssetList` from `app_config.dart` is used in the `_filterExcludedAssets` method in `coins_state.dart`. Since `coins_state.dart` is a part file of `coins_bloc.dart`, the import needs to be in the parent file even though it's not directly used there. In Dart, part files share the namespace and imports of their parent files.
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2608
File: lib/bloc/fiat/fiat_onramp_form/fiat_form_bloc.dart:2-3
Timestamp: 2025-05-01T21:00:36.970Z
Learning: It's acceptable to use unconditional `dart:io` imports in the Komodo wallet codebase when the usage is guarded by `!kIsWeb` conditional checks that prevent the platform-specific code from being executed in web environments.
lib/blocs/trading_entities_bloc.dart (2)
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2566
File: lib/bloc/coins_bloc/coins_bloc.dart:10-10
Timestamp: 2025-04-01T15:51:37.060Z
Learning: The `excludedAssetList` from `app_config.dart` is used in the `_filterExcludedAssets` method in `coins_state.dart`. Since `coins_state.dart` is a part file of `coins_bloc.dart`, the import needs to be in the parent file even though it's not directly used there. In Dart, part files share the namespace and imports of their parent files.
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2566
File: lib/bloc/coins_bloc/coins_bloc.dart:10-10
Timestamp: 2025-04-01T15:51:37.060Z
Learning: In the Komodo Wallet project, part files share imports with their parent files. The import for `app_config.dart` in `coins_bloc.dart` is necessary because the part file `coins_state.dart` uses `excludedAssetList` from that package.
test_units/main.dart (5)
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2611
File: test_units/tests/system_health/system_clock_repository_test.dart:7-8
Timestamp: 2025-05-08T19:07:13.442Z
Learning: In the Komodo Wallet project, test files are structured to define test functions that are called from a central test runner in test_units/main.dart, rather than each test file having its own main() function.
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2611
File: test_units/tests/system_health/system_clock_repository_test.dart:7-8
Timestamp: 2025-05-08T19:07:13.442Z
Learning: In the Komodo Wallet project, test files are structured to define test functions that are called from a central test runner in test_units/main.dart, rather than each test file having its own main() function.
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2611
File: test_units/tests/system_health/http_head_time_provider_test.dart:8-24
Timestamp: 2025-05-08T19:05:13.083Z
Learning: In the Komodo Wallet project, test functions are defined in individual files under `test_units/tests/` but are executed through the central entry point in `test_units/main.dart`, so individual test files don't need their own `main()` function.
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2566
File: lib/bloc/coins_bloc/coins_bloc.dart:10-10
Timestamp: 2025-04-01T15:51:37.060Z
Learning: In the Komodo Wallet project, part files share imports with their parent files. The import for `app_config.dart` in `coins_bloc.dart` is necessary because the part file `coins_state.dart` uses `excludedAssetList` from that package.
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2566
File: lib/bloc/coins_bloc/coins_bloc.dart:10-10
Timestamp: 2025-04-01T15:51:37.060Z
Learning: The `excludedAssetList` from `app_config.dart` is used in the `_filterExcludedAssets` method in `coins_state.dart`. Since `coins_state.dart` is a part file of `coins_bloc.dart`, the import needs to be in the parent file even though it's not directly used there. In Dart, part files share the namespace and imports of their parent files.
lib/views/wallet/coin_details/transactions/transaction_list_item.dart (2)
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2566
File: lib/bloc/coins_bloc/coins_bloc.dart:10-10
Timestamp: 2025-04-01T15:51:37.060Z
Learning: In the Komodo Wallet project, part files share imports with their parent files. The import for `app_config.dart` in `coins_bloc.dart` is necessary because the part file `coins_state.dart` uses `excludedAssetList` from that package.
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2566
File: lib/bloc/coins_bloc/coins_bloc.dart:10-10
Timestamp: 2025-04-01T15:51:37.060Z
Learning: The `excludedAssetList` from `app_config.dart` is used in the `_filterExcludedAssets` method in `coins_state.dart`. Since `coins_state.dart` is a part file of `coins_bloc.dart`, the import needs to be in the parent file even though it's not directly used there. In Dart, part files share the namespace and imports of their parent files.
lib/views/wallet/common/address_copy_button.dart (3)
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2566
File: lib/bloc/coins_bloc/coins_bloc.dart:10-10
Timestamp: 2025-04-01T15:51:37.060Z
Learning: In the Komodo Wallet project, part files share imports with their parent files. The import for `app_config.dart` in `coins_bloc.dart` is necessary because the part file `coins_state.dart` uses `excludedAssetList` from that package.
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2570
File: lib/views/fiat/fiat_inputs.dart:198-212
Timestamp: 2025-03-25T18:39:03.280Z
Learning: The `showBalanceIndicator` parameter for the `SourceAddressField` widget will be added in a future SDK update, as noted by the developer.
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2566
File: lib/bloc/coins_bloc/coins_bloc.dart:10-10
Timestamp: 2025-04-01T15:51:37.060Z
Learning: The `excludedAssetList` from `app_config.dart` is used in the `_filterExcludedAssets` method in `coins_state.dart`. Since `coins_state.dart` is a part file of `coins_bloc.dart`, the import needs to be in the parent file even though it's not directly used there. In Dart, part files share the namespace and imports of their parent files.
test_units/tests/swaps/my_recent_swaps_response_test.dart (3)
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2611
File: test_units/tests/system_health/http_head_time_provider_test.dart:8-24
Timestamp: 2025-05-08T19:05:13.083Z
Learning: In the Komodo Wallet project, test functions are defined in individual files under `test_units/tests/` but are executed through the central entry point in `test_units/main.dart`, so individual test files don't need their own `main()` function.
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2611
File: test_units/tests/system_health/system_clock_repository_test.dart:7-8
Timestamp: 2025-05-08T19:07:13.442Z
Learning: In the Komodo Wallet project, test files are structured to define test functions that are called from a central test runner in test_units/main.dart, rather than each test file having its own main() function.
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2611
File: test_units/tests/system_health/system_clock_repository_test.dart:7-8
Timestamp: 2025-05-08T19:07:13.442Z
Learning: In the Komodo Wallet project, test files are structured to define test functions that are called from a central test runner in test_units/main.dart, rather than each test file having its own main() function.
lib/bloc/transaction_history/transaction_history_bloc.dart (2)
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2566
File: lib/bloc/coins_bloc/coins_bloc.dart:10-10
Timestamp: 2025-04-01T15:51:37.060Z
Learning: The `excludedAssetList` from `app_config.dart` is used in the `_filterExcludedAssets` method in `coins_state.dart`. Since `coins_state.dart` is a part file of `coins_bloc.dart`, the import needs to be in the parent file even though it's not directly used there. In Dart, part files share the namespace and imports of their parent files.
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2566
File: lib/bloc/coins_bloc/coins_bloc.dart:10-10
Timestamp: 2025-04-01T15:51:37.060Z
Learning: In the Komodo Wallet project, part files share imports with their parent files. The import for `app_config.dart` in `coins_bloc.dart` is necessary because the part file `coins_state.dart` uses `excludedAssetList` from that package.
lib/services/feedback/feedback_service.dart (2)
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2608
File: lib/views/fiat/webview_dialog.dart:50-55
Timestamp: 2025-05-01T21:00:56.962Z
Learning: `kIsWasm` is a valid constant in Flutter 3.22+ (released May 2024) that detects if an application is running on WebAssembly. It complements `kIsWeb` for more precise platform detection.
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2608
File: lib/bloc/fiat/fiat_onramp_form/fiat_form_bloc.dart:208-225
Timestamp: 2025-05-01T20:56:36.180Z
Learning: The `kIsWasm` constant is available in Flutter version 3.22+ (released May 2024) and is used to detect if an application is running on the WebAssembly backend. When writing platform-specific code, use both `kIsWeb` and `kIsWasm` checks to properly handle both JavaScript and WebAssembly compilation targets.
lib/views/wallet/coin_details/withdraw_form/widgets/fill_form/fields/fields.dart (1)
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2566
File: lib/bloc/coins_bloc/coins_bloc.dart:10-10
Timestamp: 2025-04-01T15:51:37.060Z
Learning: In the Komodo Wallet project, part files share imports with their parent files. The import for `app_config.dart` in `coins_bloc.dart` is necessary because the part file `coins_state.dart` uses `excludedAssetList` from that package.
lib/bloc/trezor_init_bloc/trezor_init_bloc.dart (1)
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2566
File: lib/bloc/coins_bloc/coins_bloc.dart:10-10
Timestamp: 2025-04-01T15:51:37.060Z
Learning: In the Komodo Wallet project, part files share imports with their parent files. The import for `app_config.dart` in `coins_bloc.dart` is necessary because the part file `coins_state.dart` uses `excludedAssetList` from that package.
test_units/tests/utils/transaction_history/sanitize_transaction_test.dart (3)
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2611
File: test_units/tests/system_health/system_clock_repository_test.dart:7-8
Timestamp: 2025-05-08T19:07:13.442Z
Learning: In the Komodo Wallet project, test files are structured to define test functions that are called from a central test runner in test_units/main.dart, rather than each test file having its own main() function.
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2611
File: test_units/tests/system_health/system_clock_repository_test.dart:7-8
Timestamp: 2025-05-08T19:07:13.442Z
Learning: In the Komodo Wallet project, test files are structured to define test functions that are called from a central test runner in test_units/main.dart, rather than each test file having its own main() function.
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2611
File: test_units/tests/system_health/http_head_time_provider_test.dart:8-24
Timestamp: 2025-05-08T19:05:13.083Z
Learning: In the Komodo Wallet project, test functions are defined in individual files under `test_units/tests/` but are executed through the central entry point in `test_units/main.dart`, so individual test files don't need their own `main()` function.
lib/views/wallet/coin_details/coin_details_info/coin_addresses.dart (6)
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2566
File: lib/bloc/coins_bloc/coins_bloc.dart:10-10
Timestamp: 2025-04-01T15:51:37.060Z
Learning: In the Komodo Wallet project, part files share imports with their parent files. The import for `app_config.dart` in `coins_bloc.dart` is necessary because the part file `coins_state.dart` uses `excludedAssetList` from that package.
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2566
File: lib/bloc/coins_bloc/coins_bloc.dart:10-10
Timestamp: 2025-04-01T15:51:37.060Z
Learning: The `excludedAssetList` from `app_config.dart` is used in the `_filterExcludedAssets` method in `coins_state.dart`. Since `coins_state.dart` is a part file of `coins_bloc.dart`, the import needs to be in the parent file even though it's not directly used there. In Dart, part files share the namespace and imports of their parent files.
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2608
File: lib/bloc/fiat/fiat_onramp_form/fiat_form_bloc.dart:2-3
Timestamp: 2025-05-01T21:00:36.970Z
Learning: It's acceptable to use unconditional `dart:io` imports in the Komodo wallet codebase when the usage is guarded by `!kIsWeb` conditional checks that prevent the platform-specific code from being executed in web environments.
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2611
File: test_units/tests/system_health/http_head_time_provider_test.dart:8-24
Timestamp: 2025-05-08T19:05:13.083Z
Learning: In the Komodo Wallet project, test functions are defined in individual files under `test_units/tests/` but are executed through the central entry point in `test_units/main.dart`, so individual test files don't need their own `main()` function.
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2611
File: test_units/tests/system_health/system_clock_repository_test.dart:7-8
Timestamp: 2025-05-08T19:07:13.442Z
Learning: In the Komodo Wallet project, test files are structured to define test functions that are called from a central test runner in test_units/main.dart, rather than each test file having its own main() function.
Learnt from: takenagain
PR: KomodoPlatform/komodo-wallet#2611
File: test_units/tests/system_health/system_clock_repository_test.dart:7-8
Timestamp: 2025-05-08T19:07:13.442Z
Learning: In the Komodo Wallet project, test files are structured to define test functions that are called from a central test runner in test_units/main.dart, rather than each test file having its own main() function.
🪛 LanguageTool
docs/MULTIPLE_FLUTTER_VERSIONS.md

[uncategorized] ~60-~60: You might be missing the article “the” here.
Context: ... "Versions" in the sidebar and download Flutter version 3.32.5 4. Set this version a...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)

🪛 Shellcheck (0.10.0)
.docker/build.sh

[warning] 71-71: Quote this to prevent word splitting.

(SC2046)

⏰ Context from checks skipped due to timeout of 90000ms (12)
  • GitHub Check: Build Mobile (Android)
  • GitHub Check: Build Mobile (iOS)
  • GitHub Check: build_and_preview
  • GitHub Check: validate_code_guidelines
  • GitHub Check: Test web-app-macos
  • GitHub Check: Build Desktop (macos)
  • GitHub Check: Test web-app-linux-profile
  • GitHub Check: Build Desktop (windows)
  • GitHub Check: Build Desktop (linux)
  • GitHub Check: build-android-docker
  • GitHub Check: unit_tests
  • GitHub Check: build_and_deploy
🔇 Additional comments (86)
ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme (1)

29-30: LLDB init stub confirmed; no missing-file warnings

We’ve verified that ios/Flutter/ephemeral/flutter_lldbinit is committed in the repo as a stub, so Xcode will find the file and won’t warn on fresh clones. No changes required in this PR.

Ensure your CI pipelines continue to run flutter packages get (or flutter pub get) and flutter build ios before invoking xcodebuild to populate all other ephemeral Flutter artifacts.

macos/Runner.xcodeproj/project.pbxproj (1)

470-477: Lowering the deployment target may break Catalyst & plugin support – please verify across all Pods/targets
The target was dropped from 15.0 → 13.5 in six build configs. Some CocoaPods (e.g. firebase_*, video_player_avfoundation) and Swift-package plugins often set MACOSX_DEPLOYMENT_TARGET >= 14. If any of those implicitly inherit the project-level setting, Xcode will emit build-time warnings or fail with linker errors.

  1. Make sure every Pod / Swift-package overrides its own deployment target or is still compatible with 13.5.
  2. Confirm Catalyst builds (if used) still pass; Catalyst sometimes requires 14+.

You can run a full-workspace pod install && xcodebuild -showBuildSettings | grep MACOSX_DEPLOYMENT_TARGET to spot mismatches.

Also applies to: 504-511, 562-570, 608-616, 642-650, 677-685

lib/bloc/coin_addresses/bloc/coin_addresses_bloc.dart (1)

14-18: Constructor re-format LGTM
Trailing-comma style improves diff-ability; no functional impact.

pubspec.yaml (1)

24-26: SDK constraint aligns with Flutter 3.32.5 – good, but remember to bump min Dart to 3.7 next cycle
No action needed now; just noting the TODO above.

packages/komodo_ui_kit/pubspec.yaml (1)

5-8: Flutter constraint bump looks correct
No further issues detected.

.devcontainer/Dockerfile (1)

3-3: LGTM: Flutter version update is consistent with project-wide upgrade.

The Flutter version upgrade to 3.32.5 aligns with the coordinated updates across multiple files in this PR.

app_theme/pubspec.yaml (1)

8-8: LGTM: Proper Flutter version constraint update.

The version constraint correctly uses caret syntax to allow compatible updates while ensuring minimum Flutter 3.32.5 support.

lib/views/wallet/coin_details/receive/receive_address_trezor.dart (1)

67-68: LGTM: Enhanced UX with asset-specific tooltip.

The change from generic copyToClipboard to copyAddressToClipboard with the asset symbol parameter provides better user context. This aligns with the addition of new localized keys mentioned in the AI summary.

.github/workflows/roll-sdk-packages.yml (1)

48-48: LGTM: GitHub Actions Flutter version aligned with project upgrade.

The Flutter version update maintains consistency with the development environment and other workflows.

linux/main.cc (1)

1-1: LGTM: Proper X11 threading initialization for Linux support.

Adding XInitThreads() at the start of main() is the correct approach for enabling thread-safe X11 operations. The placement ensures it's called before any other X11 functions, which is required by the X11 specification.

Also applies to: 5-5

lib/views/settings/widgets/general_settings/app_version_number.dart (1)

29-32: LGTM! Consistent implementation for commit hash display.

The commit hash display follows the same pattern as the existing version information, using consistent styling and SelectableText for user convenience. This enhances build traceability.

lib/app_config/app_config.dart (1)

154-156: Segwit variants integrated for Trezor – code paths verified

No hardcoded legacy “BTC” or “LTC” strings remain: the segwit tickers are only defined in the Trezor defaults and passed dynamically through all Trezor RPC calls.

Please run your Trezor integration tests to confirm the MM2 plugin handles “BTC-segwit” and “LTC-segwit” correctly.

• lib/app_config/app_config.dart – enabledByDefaultTrezorCoins
• lib/bloc/trezor_init_bloc/trezor_init_bloc.dart – addActivatedCoins(enabledByDefaultTrezorCoins)

lib/model/main_menu_value.dart (1)

16-16: Good UX improvement prioritizing wallet functionality.

Changing the default menu to wallet instead of dex aligns well with the application's primary purpose as a wallet and improves the initial user experience by focusing on core wallet features.

lib/views/wallet/coin_details/receive/receive_details.dart (1)

109-109: Improved clarity for address usage warning.

The updated localization key onlySendToThisAddress is more explicit and clearer than the previous sendToAddress, providing better user guidance for safe address usage.

.docker/komodo-wallet-android.dockerfile (1)

3-3: Verify regression workarounds for Flutter 3.32.5 Android builds

The Flutter version bump to 3.32.5 is applied consistently (pubspecs, Windows runner, UI kit, app_theme). However, I did not find any code-level regression workarounds for Android builds in the repo:

• .docker/komodo-wallet-android.dockerfile – please confirm that the known Android build fixes (e.g. adding --config-only or other flags) are implemented here.
• docs/FLUTTER_VERSION.md – notes “Known issues with flutter pub get when using Flutter 3.32.5”; verify that CI/build scripts address this.
• Android build workflows – ensure any Gradle or platform-specific patches for 3.32.5 regressions are included and tested.

Please double-check and document where these regression workarounds live before merging.

android/app/build.gradle (1)

33-37: Clarify Java/Kotlin compatibility downgrade and update settings.gradle comment

I noticed that although our Gradle wrapper is on 8.12.1 (which supports running on Java 21), the Android app’s build.gradle now targets Java 17 and Kotlin JVM 17. Meanwhile, android/settings.gradle still contains a comment about “Kotlin release with JVM 21 support.” Please verify:

  • Why have we lowered sourceCompatibility, targetCompatibility, and jvmTarget from 21 to 17?
  • If this change is driven by Docker/CI image constraints (e.g. only a Java 17 JDK is available), please document that rationale in the code or README.
  • Remove or update the JVM 21 support comment in android/settings.gradle to reflect the chosen target, or restore 21 targets if dropping back to 17 isn’t strictly required.

[tag: verify_review_comment]

lib/views/dex/entities_list/in_progress/in_progress_list.dart (1)

175-176: Good null safety handling for sorting by date.

The addition of null-aware operators with fallback to 0 effectively prevents null reference errors when myInfo is absent. This ensures predictable sorting behavior and aligns well with the broader null safety improvements across the codebase.

lib/views/dex/entity_details/swap/swap_details_step_list.dart (1)

85-86: Consistent null safety implementation for time calculations.

The null-aware operator with fallback to 0 appropriately handles cases where myInfo is absent. This ensures time calculations remain stable and consistent with the broader null safety improvements across swap-related components.

lib/views/dex/entity_details/swap/swap_details.dart (1)

51-55: Excellent defensive programming with null check guard.

The conditional rendering of TradingDetailsTotalTime only when myInfo is available prevents runtime errors and provides a clean user experience. The null assertion after the null check is safe and appropriate.

linux/CMakeLists.txt (1)

55-55: Proper CMake configuration for X11 dependency.

The addition of X11 dependency follows standard CMake practices with find_package(X11 REQUIRED) and proper linking via target_link_libraries. This correctly supports the X11 threading functionality mentioned in the AI summary.

Also applies to: 75-75

lib/views/dex/entities_list/history/swap_history_sort_mixin.dart (1)

119-120: Excellent null-safety improvement for sorting logic.

The null-aware operators and fallback value of 0 properly handle cases where myInfo is null, preventing runtime errors during date-based sorting while maintaining predictable sort order.

docs/MULTIPLE_FLUTTER_VERSIONS.md (1)

94-98: LGTM! Flutter version updates are consistent.

The version upgrade to 3.32.5 is properly applied across all installation methods and platforms.

Also applies to: 133-137, 159-159

docs/FLUTTER_VERSION.md (1)

5-5: LGTM! Flutter version documentation updated consistently.

The version upgrade to 3.32.5 is properly reflected across all references in the documentation.

Also applies to: 18-18, 25-25

lib/views/dex/entities_list/in_progress/in_progress_item.dart (1)

30-31: Excellent null-safety handling for UI display.

The conditional expression properly handles nullable myInfo with an appropriate fallback value for the UI, preventing runtime errors while maintaining good user experience.

.github/workflows/mobile-builds.yml (1)

71-78: Android build workaround approved; regression still present

The conditional flutter build apk --config-only step correctly mitigates the known Flutter 3.32.5 Android build issue. The referenced regression with the --no-pub flag remains unfixed in the latest Flutter release¹, so this workaround should stay in place until an official fix is shipped.

Next steps:

  • Continue tracking flutter/flutter#169336 for the upstream resolution.
  • Remove this workaround once the Flutter team provides a fix.

Citations:

  1. flutter/flutter#169336
lib/app_config/package_information.dart (1)

8-11: LGTM! Clean implementation of commit hash tracking.

The implementation correctly uses String.fromEnvironment with a sensible default value and maintains consistency with the existing codebase patterns.

Also applies to: 17-17

lib/views/wallet/wallet_page/wallet_main/active_coins_list.dart (1)

213-214: LGTM! Enhanced copy button with coin context.

Adding the coinAbbr parameter provides better user feedback for address copying operations.

lib/blocs/trading_entities_bloc.dart (2)

58-59: LGTM! Null-safe sorting with appropriate fallback.

The null-aware operator with default value of 0 properly handles cases where myInfo might be null, placing such swaps at the beginning of the sorted list.


130-130: LGTM! Null-safe amount accumulation.

Using null-aware operator with 0 default is mathematically correct for sum operations when myInfo is null.

lib/views/dex/dex_helpers.dart (1)

67-68: LGTM! Consistent null-safe date filtering.

The null-aware operators with 0 default maintain consistency with the trading entities bloc and ensure swaps with null myInfo are handled gracefully in date filters.

Also applies to: 72-73

lib/views/wallet/coin_details/coin_details_info/coin_details_info.dart (2)

9-9: LGTM! Required import for FormStatus.

The import is necessary for the new BlocListener functionality.


98-106: LGTM! Excellent reactive state management.

The BlocListener properly handles address creation success by refreshing pubkeys, ensuring the UI stays in sync with state changes. The listenWhen condition correctly filters for only the relevant state transitions.

lib/bloc/withdraw_form/withdraw_form_state.dart (2)

46-46: LGTM! Clean refactor.

The simplification of the hasAddressError getter to a single-line expression improves readability while maintaining the same logic.


188-189: Good null-safe implementation of IBC channel handling.

The implementation properly handles null safety by checking both isNotEmpty and applying trim() only when the channel is non-null and non-empty. This aligns well with the IBC validation logic mentioned in the summary.

lib/bloc/trezor_init_bloc/trezor_init_bloc.dart (1)

288-288: Confirm PrivateKeyPolicy.trezor() API change

All occurrences of PrivateKeyPolicy.trezor in the repo have been updated to PrivateKeyPolicy.trezor(), and no other references remain. Because PrivateKeyPolicy is defined in an external SDK, please verify against your SDK version that:

  • trezor() is indeed a factory constructor or method (not a getter)
  • The change compiles and behaves as expected across your application
lib/views/dex/entities_list/history/history_item.dart (1)

39-41: Excellent null safety improvement.

The addition of null checking for widget.swap.myInfo with a sensible fallback value '-' prevents potential runtime errors and provides a better user experience when swap information is incomplete. This change aligns well with the broader null safety improvements across swap-related components mentioned in the summary.

test_units/main.dart (2)

36-37: LGTM! Proper test imports.

The new test imports follow the established project pattern for organizing tests.


74-74: Good test organization.

The addition of testSanitizeTransaction() to the existing "Utils" group and the new "MyRecentSwaps" group with testMyRecentSwapsResponse() follows the project's established testing structure. This extends test coverage for transaction sanitization and swap response handling.

Also applies to: 91-93

lib/views/wallet/common/address_copy_button.dart (1)

2-3: Excellent UX enhancement with proper localization.

The addition of the optional coinAbbr parameter and contextual copy feedback significantly improves the user experience. The implementation is well-designed:

  • Maintains backward compatibility with the default empty string
  • Uses proper localization with dynamic arguments
  • Conditionally shows messages only when coin context is available
  • Aligns with the updated asynchronous copyToClipBoard method

Also applies to: 8-8, 10-11, 20-25

.docker/android-sdk.dockerfile (2)

7-8: Good parameterization for flexible user ID assignment.

The replacement of hardcoded USER_ID=1000 with BUILD_USER_ID argument provides better flexibility for different build environments and CI systems.


70-71: ACL permissions setup enhances security and flexibility.

The addition of ACL permissions on /usr/local provides more granular access control than simple ownership changes. The recursive application with default ACLs for new files/directories is appropriate.

lib/views/wallet/coin_details/withdraw_form/withdraw_form.dart (2)

19-19: Import update aligns with IBC field additions.

The import update for the fields module is consistent with the addition of IBC-related fields mentioned in the AI summary.


347-354: Well-structured conditional rendering for Tendermint IBC features.

The implementation properly checks for TendermintProtocol and conditionally renders the IBC transfer and channel fields based on form state. The layout spacing is consistent with the rest of the form.

.github/actions/generate-assets/action.yml (2)

48-63: Improved commit hash determination with proper event handling.

The dedicated step for determining commit hash is well-structured and correctly handles different GitHub event types. The logic properly distinguishes between pull request events (using PR HEAD SHA) and other events (using git HEAD), with consistent 7-character truncation.


85-85: Clear documentation of architectural change.

The comment appropriately documents that COMMIT_HASH now comes from the previous step rather than being calculated inline, improving code clarity.

lib/bloc/withdraw_form/withdraw_form_bloc.dart (2)

349-349: Good extraction of validation logic for better maintainability.

Moving the IBC channel validation to a dedicated private method improves code organization and makes the validation logic reusable.

Also applies to: 354-354


359-371: Robust IBC channel validation with proper format enforcement.

The validation method correctly enforces the IBC channel format channel-{number} using an appropriate regex pattern. The error messages are clear and user-friendly, covering both empty input and format validation cases.

test_units/tests/swaps/my_recent_swaps_response_test.dart (3)

6-55: Comprehensive test coverage for null myInfo scenario.

The first test case thoroughly validates JSON deserialization when my_info and fractional amounts are null. The test payload is realistic and the assertions properly verify the parsed structure and null handling.


57-108: Thorough validation of populated myInfo data parsing.

The second test case effectively validates the parsing of populated my_info data, including proper type conversion (e.g., string to int for timestamps). The assertions comprehensively verify all nested fields and data types.


1-5: Proper test file structure following project conventions.

The test file correctly follows the project's testing architecture without a main function, designed to be called from the central test runner in test_units/main.dart.

lib/shared/utils/extensions/transaction_extensions.dart (1)

13-18: Multiple-sender assumption is covered by existing tests

The test suite (sanitize_transaction_test.dart) includes a case for transactions with multiple senders, confirming that from.first is the intended behavior. No further changes are required.

lib/views/wallet/coin_details/transactions/transaction_list_item.dart (1)

163-166: Clean refactoring of address display logic.

The extraction of _buildAddress into a dedicated _TransactionAddress widget improves code organization and follows Flutter best practices for widget composition.

Also applies to: 198-204, 275-299

lib/bloc/analytics/analytics_repo.dart (1)

119-125: Good platform compatibility handling for Firebase Analytics.

The explicit checks for Linux platform and UnsupportedError handling prevent crashes on unsupported platforms while maintaining proper error state.

Also applies to: 144-156

lib/views/wallet/coin_details/withdraw_form/widgets/fill_form/fields/fields.dart (1)

636-640: Good validation for IBC channel format.

The regex validation correctly enforces the channel-<number> format for IBC channels, which is essential for cross-chain transfers.

lib/bloc/transaction_history/transaction_history_bloc.dart (5)

13-13: LGTM: Clean import addition for transaction sanitization.

The import is properly added to support the new sanitize extension method.


72-73: Well-implemented address extraction for transaction sanitization.

The code correctly fetches public keys and extracts addresses into a set for efficient lookup during sanitization.


90-94: Consistent application of transaction sanitization.

The sanitization is properly applied to historical transactions before adding them to the state. The use of map and toList() maintains immutability correctly.


132-133: Appropriate method signature update.

The addition of the myAddresses parameter to _subscribeToNewTransactions is necessary for consistent sanitization across both historical and live transaction streams.


141-144: Consistent sanitization for new transactions.

The sanitization logic matches the historical transaction handling, ensuring consistent behavior across all transaction sources.

.docker/build.sh (3)

25-35: Excellent handling of UID/GID conflicts in CI environments.

The fallback logic to use UID/GID 1000 when running as root is a smart solution for GitHub Actions where the default user might be root, preventing Docker user creation conflicts.


43-66: Robust environment variable handling for build configuration.

The dynamic environment variable passing ensures that CI/CD secrets and configuration are properly propagated to the container without hardcoding values.


75-75: Improved build process with Flutter 3.32.5 workaround.

The multi-step build process (web build, config-only, then main build) effectively addresses the known Flutter 3.32.5 regression while maintaining robustness.

app_theme/lib/src/light/theme_global_light.dart (2)

57-70: Enhanced SnackBar theme with improved UX features.

The expanded SnackBar configuration adds valuable UX improvements including floating behavior, rounded corners, close icon, and proper color theming. The elevation and shape properties enhance the visual hierarchy.


133-138: Improved code formatting for button theme.

The multiline lambda formatting enhances readability while maintaining the same logic for disabled state handling.

lib/model/swap.dart (4)

23-23: Appropriate nullability change for optional swap information.

Making the myInfo field nullable allows for more flexible handling of swap data where this information might not always be available.

Also applies to: 68-68


49-51: Proper null-safe JSON parsing implementation.

The conditional parsing logic correctly handles cases where my_info is null in the JSON response, preventing runtime errors.


88-88: Consistent null-safe JSON serialization.

The use of null-aware operator (?.) ensures that null myInfo fields are properly handled during serialization.


167-167: Correct props type update for nullable field.

Changing to List<Object?> properly accommodates the nullable myInfo field in the Equatable props list.

assets/translations/en.json (3)

490-491: Well-structured clipboard copy translations.

The parameterized translations for copying addresses provide good UX feedback while maintaining consistency with the existing localization pattern.


670-673: Comprehensive IBC channel validation translations.

The translation keys provide clear guidance for IBC channel input with both hint text and validation messages, improving the user experience for cross-chain transfers.


584-584: Simple and clear commit hash translation.

The "commit" key supports the new commit hash display feature mentioned in the PR objectives.

lib/views/wallet/coin_details/coin_details_info/coin_addresses.dart (4)

18-18: Good addition of truncated text utility.

This import supports the new truncated address display in the QR dialogs.


236-237: Excellent enhancement of copy functionality with localization.

The addition of the coinAbbr parameter enables localized success messages when copying addresses, improving user experience.

Also applies to: 255-256


310-445: Comprehensive UI improvement for QR dialog.

The refactoring introduces several excellent enhancements:

  • Material wrapper with proper ripple effects and theming
  • Enhanced dialog layout with close button
  • Truncated address display with copy and explorer link buttons
  • Proper error handling for unavailable explorers
  • Consistent use of theme-based styling

The implementation follows Flutter Material Design guidelines and provides better user experience.


469-479: Consistent Material wrapper and address row implementation.

The PubkeyReceiveDialog follows the same pattern as QrButton, maintaining UI consistency. The address row implementation with copy and explorer buttons provides a clean, functional interface.

Also applies to: 510-568

lib/services/feedback/feedback_service.dart (4)

30-30: Improved lambda expression readability.

The simplified firstWhereOrNull expression is more readable than the previous implementation.


47-48: Corrected nested ternary operator.

The reformatted ternary operator is more readable and maintainable.


88-95: Excellent conditional debug logging pattern.

The implementation of conditional debug prints only when alternative providers are unavailable and in debug mode is a smart approach. This reduces noise in production logs while providing useful debugging information when needed.

Also applies to: 167-174, 262-266, 391-394


216-223: Improved multiline string formatting.

The reformatted multiline literals are more readable and maintainable.

Also applies to: 351-358

lib/shared/utils/utils.dart (4)

28-34: Good addition of TODO for context dependency refactoring.

The TODO comment correctly identifies a potential issue with the context dependency and suggests using the global scaffoldKey as an alternative approach.


30-73: Excellent enhancement of clipboard functionality with proper error handling.

The refactoring from synchronous to asynchronous operation with comprehensive error handling is a significant improvement:

Positive aspects:

  • Proper try-catch error handling
  • User-friendly SnackBar feedback for both success and error cases
  • Context safety checks with context.mounted
  • Fallback to global scaffoldKey when local ScaffoldMessenger is unavailable
  • Customizable success messages supporting localization

Potential improvement:
Consider the approach mentioned in the TODO comment - making this function less dependent on BuildContext by using a global scaffold messenger pattern.


244-244: Simplified function signature formatting.

The single-line function signature is cleaner and more readable.


704-704: Consistent enum formatting.

The single-line enum declaration is appropriate for simple enums with few members.

test_units/tests/utils/transaction_history/sanitize_transaction_test.dart (1)

1-371: Excellent comprehensive test suite for transaction sanitization.

This test file demonstrates outstanding testing practices:

Strengths:

  • Comprehensive coverage: Tests basic functionality, address prioritization, edge cases, and immutability
  • Well-organized structure: Clear test groups with descriptive names
  • Realistic test scenarios: Covers real-world use cases like multiple senders, duplicate addresses, and mixed wallet/external addresses
  • Edge case coverage: Tests empty lists, single recipients, and various wallet address combinations
  • Immutability verification: Ensures the original transaction remains unchanged
  • UI-focused testing: Validates wallet address prioritization for easy .first access

The test suite provides confidence in the sanitization logic and follows the project's testing patterns well.

app_theme/lib/src/dark/theme_global_dark.dart (2)

60-73: Excellent enhancement of SnackBar theme with comprehensive styling.

The refactored snackBarThemeLight function introduces significant improvements:

Enhanced features:

  • Floating behavior with proper elevation (12.0)
  • Rounded rectangle shape with 18px radius for consistency
  • Theme-aware colors using colorScheme
  • Close icon support with proper color and transparency
  • Consistent text styling aligned with the overall theme

This provides a much more polished and consistent SnackBar appearance across the application.


49-52: Improved formatting and consistency across theme properties.

The formatting improvements enhance code readability and maintainability while maintaining the same functionality.

Also applies to: 92-94, 106-111, 136-141, 152-152, 159-159, 193-201

smk762 and others added 7 commits July 25, 2025 11:17
* Adds `invalidWalletFileNameError` locale text

* disallow wallet import if filename has illeagal chars

* adds local message for `invalidWalletNameError`

* dissallow seed import or wallet creation if wallet name has illegal chars

* block creating wallet name with illegal chars

* rm dupe declaration

* trim wallet name before validation

* Update lib/views/wallets_manager/widgets/wallet_creation.dart

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* q
pdate "seed" to "seed phrase" in login/import forms (#2972)

* fix translation string name

* `seed` - > `seed phrase`

* removes "seed" in connect button

* feat(ui): Show full pubkeys where copyable (#2955)

* feat(ui): auto-scroll addresses in tx pages

* feat: show full transaction address

* feat: show full address for own addresses

* chore: roll SDK

* chore: roll SDK

* fix(ui): Fix address text item responsiveness

* fix(ui): align transaction table columns

* feat(settings): hide log export when logged out (#2967)

* bugfix: disable withdraw preview if source address not selected (#2969)

* remove duplicate transaltion key/value

* fix source address unselected validation bug

* fix(ui): avoid autofocus conflicts (#2968)

* fix(ui): remove duplicate CircularProgressIndicator on address creation (#2970)

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Charl (Nitride) <77973576+CharlVS@users.noreply.github.com>
…2976)

* feat(activation): show enabled assets in Add Assets page (#2973)

* feat(wallet): show enabled coins in add asset

* fix(wallet): show enabled assets in add coins

* fix(coins-bloc): ignore repo broadcasts when activating from bloc

* refactor(coins): move sorting to bloc

* fix(coins): filter test coins in bloc

* refactor(coins-manager): add sequential transformer and fix warnings

* refactor(coins-manager): emit state first for responsive UI

* fix(coins-manager): filter and sort selected coins alongside others

* refactor(coin): remove unused legacy `accounts` field

* feat(coins-manager): move deactivation trading check to bloc

* fix(coin-details): disable send & swap buttons if coin is not active

* refactor(coins-manager): improve error handling

* fix(coins-bloc): incorrect active state emitted when syncing states

* fix(coins-repo): move metadata updating before coin activation

* fix(coins-manager): remove children from selected coins list

when disabling parent, children should also be indicated as disabled

* chore(deps): bump SDK to 74d8eff

* fix(coins-bloc): simplify and de-duplicate activation logic and syncing

* fix(activation): broadcast and subscribe to parent if child asset

* fix(activation): change login activation events to restartable

when logging in and out quickly the new events would be dropped in favor of the previous running event, resulting in an empty coins list

* fix(activation): do not cancel state syncing subscription on logout

if user signed out, then signed back in again without refreshing, the activation state would be dropped due to a lack of listeners.

_enabledCoinsSubscription should only be cancelled in the onClose or when spawning another
* feat(ui): show loading skeleton for coin addresses

* Reduce address placeholder items from 3 to 1
* separate eula content into title & paragraph vars

* update ToC content vars

* update EULA formatting
* feat: add autofill hints for wallet credentials

* fix: apply PR review bugs
cursor[bot]

This comment was marked as outdated.

CharlVS and others added 5 commits July 28, 2025 19:56
* feat(nft): tolerate activation failures

* fix(nft): skip missing parents in firstWhere

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* refactor(nft-main-repo): fix parent coin filter and use logging package

* fix(nft): don't return an error if there are no NFTs returned

* fix(nft): revert map-based error responses in favor of manual activation

* fix(skeleton-list-tile): add height constraint to fix renderflex assert

* fix(coin): temporarily skip calling deactivation RPC

circumvent "NoSuchCoin" error when re-enabling the coin in the same session.

* fix(activation): use more complete coin conversion function

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* handle where copy content deviates from label

* add swap/order uuid to pair box

* apply uuid copy box to swap details

* apply uuid copy box to maker order details
cursor[bot]

This comment was marked as outdated.

* chore: roll sdk for overhauled privkey export

Roll SDK for overhauled privkey export in KDF branch `offline_key_export` and implement privkey methods into SDK

* chore: roll SDK

* wip: settings private key export

* chore: roll sdk

* chore: roll SDK

* fix(ui): polish private key export

* chore: roll SDK

* fix(lint): fix lint warning

* fix: minor private key fixes

* feat(ui): Simplify/polish private key export

* feat: pubkey unbanning

* refactor: clean up pubkey unbanning

* fix: remove duplicate pubkey unbanning message

* fix(ui): Enforce max scaffold message width for unbanning

* fix(ui): Remove redundant pubkey unban control

Remove redundant pubkey unban control in the general settings page since it is also in the security settings page.

* refactor: make password confirmation re-usable

* fix(password): allow auto-fill for password confirmation

* feat: password manager integration for password confirmation

* chore: roll SDK for pubkey unban fix

* chore: roll SDK

* fix: include failed activations in privkey export

* fix(ui): show tooltip for sparkline chart

Display a tooltip for the sparkline chart so users can understand what the data represents, considering that we no longer display table headings.

* chore: roll SDK

Roll SDK for address generation errors

* chore: delete unused types

Delete HD-related types. Previous references have likely been migrated to the SDK types.

TODO: Investigate if there are any other similar cases.

* chore: roll SDK
@smk762
Copy link
Copy Markdown
Collaborator

smk762 commented Jul 31, 2025

Potential Blocker

Currently when initiating a withdrawal via trezor, the "preview withdraw" button goes into "pressed state" and the UI just kind of sits there doing nothing. Its actually waiting for user to interact with trezor device to confirm the proposed transaction.

Once confirming on device, the preview is shown. Clicking send once again leaves the user/ui hanging until trezor is tickled, but with no whisper on screen to indicate the urge.

During login, while awaiting user confirmation of the extra passphrase word on the trezor, the following will be seen on screen

image

This should also be seen when attempting a withdrawal.

Two confirmations seems excessive also. Trezor is only needed to sign the tx, not to broadcast it. Either way, the transaction is sent only once, which is how it should be, so it appears we're creating and signing the same transaction twice before broadcast.

Edit: first reported in #2886

* fix(trezor): revert keyPadColor to manual custom color

matches the dark theme implementation

* fix(trezor): call SDK HW cancellation for cancel event

i.e. if user presses cancel on the pin input screen
cursor[bot]

This comment was marked as outdated.

takenagain and others added 2 commits August 1, 2025 02:06
…ctivate coins needed for NFT (#3031)

* fix(nft): do not add auto-activated parents to the wallet coins list

* fix(coins-repo): notify listeners for disabling in add assets page

* fix(add-assets): sync state, remove child coins, and formatting

* fix(add-assets): deduplicate coins list

legacy usdPrice and address fields were added to the Coin model props, which could result in duplication when those fields are updated while the user is filtering

* fix(coins-manager): create copy of selectedCoins

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* fix(private-keys): filter out excluded assets from the private keys

* refactor(private-keys): clone list from SDK before mutating

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* add popup for trezor withdraw confirm

* Update lib/views/wallet/coin_details/withdraw_form/widgets/trezor_withdraw_progress_dialog.dart

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* refactor(withdraw): remove trezor task id and progress from state

SDK does not currently emit trezor / task-based status messages beyond 'OK' and in-progress

* chore(localisation): add trezor confirmation string to config

* chore: delete unreferenced fill_form widgets

* chore: delete unreferenced PreviewButton widget

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Francois <takenagain@users.noreply.github.com>
Copy link
Copy Markdown
Collaborator

@smk762 smk762 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks guys, many small fixes and tweaks have combined to make this a significant update.

smk762 and others added 2 commits August 1, 2025 16:30
#2995)

* fix missing price and change data on coin page, sync with main wallet page

* chore: remove unreferenced coin list and fiat widgets

* refactor(coin-details-info-fiat): move widget builder functions to widgets

https://stackoverflow.com/a/53234826

* adds Individual error handling for price and 24hr data sourcing

* cache 24hr data from CoinsBlock until SDK offers it

* fix layout issue (renderbox constraint violations)

* fix inconsistent with the BlocBuilder pattern

---------

Co-authored-by: Francois <takenagain@users.noreply.github.com>
Co-authored-by: Charl (Nitride) <77973576+CharlVS@users.noreply.github.com>
Roll SDK for critical KMD API pricing fix
Copy link
Copy Markdown
Contributor

@takenagain takenagain left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! OpenAI Agent and manual smoke tests passed (with some suggestions)

Copy link
Copy Markdown
Contributor

@ca333 ca333 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

security assessment completed (incl. deps) - no malicious bits found

@CharlVS CharlVS merged commit 5c3eec5 into main Aug 4, 2025
12 of 16 checks passed
Copy link
Copy Markdown
Contributor

@DeckerSU DeckerSU left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM from a security standpoint. All new or changed external dependencies / plugins were reviewed; no malicious bits were found. However, no logic was tested during this review, so if our code or external sources contain logic errors or other unforeseen mistakes, the review process does not cover them.

@coderabbitai coderabbitai bot mentioned this pull request Oct 23, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants