Conversation
* 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
…into fix/dev-sync-conflicts
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)
|
Important Review skippedMore 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 WalkthroughThis 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
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
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
Possibly related PRs
Suggested reviewers
Poem
✨ Finishing Touches🧪 Generate unit tests
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. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed 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)
Other keywords and placeholders
CodeRabbit Configuration File (
|
✅ Actions performedReview triggered.
|
|
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 |
There was a problem hiding this comment.
Actionable comments posted: 1
🔭 Outside diff range comments (1)
pubspec.yaml (1)
18-26: Packageversionstill reads0.9.1+1– inconsistent with 0.9.2 release tag
The PR title announces0.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_VERSIONenv 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 importlib/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
⛔ Files ignored due to path filters (5)
app_theme/pubspec.lockis excluded by!**/*.locklib/generated/codegen_loader.g.dartis excluded by!**/generated/**macos/Podfile.lockis excluded by!**/*.lockpackages/komodo_ui_kit/pubspec.lockis excluded by!**/*.lockpubspec.lockis 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 warningsWe’ve verified that
ios/Flutter/ephemeral/flutter_lldbinitis 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(orflutter pub get) andflutter build iosbefore invokingxcodebuildto 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 setMACOSX_DEPLOYMENT_TARGET >= 14. If any of those implicitly inherit the project-level setting, Xcode will emit build-time warnings or fail with linker errors.
- Make sure every Pod / Swift-package overrides its own deployment target or is still compatible with 13.5.
- Confirm Catalyst builds (if used) still pass; Catalyst sometimes requires 14+.
You can run a full-workspace
pod install && xcodebuild -showBuildSettings | grep MACOSX_DEPLOYMENT_TARGETto 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
copyToClipboardtocopyAddressToClipboardwith 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 verifiedNo 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
walletinstead ofdexaligns 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
onlySendToThisAddressis more explicit and clearer than the previoussendToAddress, 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 buildsThe 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-onlyor other flags) are implemented here.
• docs/FLUTTER_VERSION.md – notes “Known issues withflutter pub getwhen 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 commentI noticed that although our Gradle wrapper is on 8.12.1 (which supports running on Java 21), the Android app’s
build.gradlenow targets Java 17 and Kotlin JVM 17. Meanwhile,android/settings.gradlestill contains a comment about “Kotlin release with JVM 21 support.” Please verify:
- Why have we lowered
sourceCompatibility,targetCompatibility, andjvmTargetfrom 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.gradleto 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
myInfois 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
myInfois 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
TradingDetailsTotalTimeonly whenmyInfois 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 viatarget_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
0properly handle cases wheremyInfois 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
myInfowith 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 presentThe conditional
flutter build apk --config-onlystep correctly mitigates the known Flutter 3.32.5 Android build issue. The referenced regression with the--no-pubflag 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:
lib/app_config/package_information.dart (1)
8-11: LGTM! Clean implementation of commit hash tracking.The implementation correctly uses
String.fromEnvironmentwith 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
coinAbbrparameter 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
myInfomight 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
myInfois 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
myInfoare 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
listenWhencondition 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
hasAddressErrorgetter 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
isNotEmptyand applyingtrim()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 changeAll occurrences of
PrivateKeyPolicy.trezorin the repo have been updated toPrivateKeyPolicy.trezor(), and no other references remain. BecausePrivateKeyPolicyis 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.myInfowith 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 withtestMyRecentSwapsResponse()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
coinAbbrparameter 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
copyToClipBoardmethodAlso 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=1000withBUILD_USER_IDargument 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/localprovides 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
TendermintProtocoland 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_HASHnow 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_infoand 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_infodata, 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 testsThe test suite (
sanitize_transaction_test.dart) includes a case for transactions with multiple senders, confirming thatfrom.firstis 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
_buildAddressinto a dedicated_TransactionAddresswidget 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
sanitizeextension 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
mapandtoList()maintains immutability correctly.
132-133: Appropriate method signature update.The addition of the
myAddressesparameter to_subscribeToNewTransactionsis 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
myInfofield 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_infois null in the JSON response, preventing runtime errors.
88-88: Consistent null-safe JSON serialization.The use of null-aware operator (
?.) ensures that nullmyInfofields are properly handled during serialization.
167-167: Correct props type update for nullable field.Changing to
List<Object?>properly accommodates the nullablemyInfofield 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
coinAbbrparameter 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
firstWhereOrNullexpression 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
scaffoldKeyas 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
scaffoldKeywhen 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
.firstaccessThe 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
snackBarThemeLightfunction 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
* 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
* 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
* 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
|
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
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
…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>
smk762
left a comment
There was a problem hiding this comment.
Thanks guys, many small fixes and tweaks have combined to make this a significant update.
#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
takenagain
left a comment
There was a problem hiding this comment.
LGTM! OpenAI Agent and manual smoke tests passed (with some suggestions)
DeckerSU
left a comment
There was a problem hiding this comment.
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.

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
to(recipient) list #2787) - Your addresses appear first in transaction history recipient lists🎨 UI/UX Improvements
AssetLogowidget in place ofCoinIconandCoinLogo#2848) - Unified and improved coin/token logo display🐛 Bug Fixes
CircularProgressIndicatoron address creation #2970) - Removed redundant loading animations during address creation💻 Platform-specific Changes
Linux
macOS
Build & Development
🔧 Technical Improvements
Full Changelog: 0.9.1...0.9.2 (available when merged in)