What changed, and why it matters
This commit is a work-in-progress (WIP) UI change for Cake Wallet. It adds a new buy/sell amount page, wires it into the app's dependency injection system, and connects a selector modal so users can open the new page. There is nothing in the code that touches security-sensitive behavior such as sending funds, storing keys, handling passwords, or network requests. It is purely user-interface scaffolding.
No security action needed. Treat as normal feature development; review the completed feature once the WIP is finalized.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The diff adds NewBuySellAmountPage, registers it in getIt (dependency injection) with a BuySellPageMode parameter, and updates BuySellSelectorModal.openBuySellPage to navigate to it via a modal bottom sheet. It also removes a default null implementation from an abstract BuyProvider method, making it abstract. No security-relevant logic is introduced or modified.
Changed components
lib/buy/buy_provider.dartlib/di.dartlib/new-ui/pages/buy_sell/buy_sell_amount_page.dartlib/new-ui/widgets/buy_sell/buy_sell_selector_modal.dartInspect captured patch +59 / −4
diff --git a/lib/buy/buy_provider.dart b/lib/buy/buy_provider.dart
index 7cc92eb9..5053a7ef 100644
--- a/lib/buy/buy_provider.dart
+++ b/lib/buy/buy_provider.dart
@@ -43,8 +43,7 @@ abstract class BuyProvider {
required double amount,
required bool isBuyAction,
required String cryptoCurrencyAddress,
- String? countryCode}) =>
- null;
+ String? countryCode});
Future<String> requestUrl(String amount, String sourceCurrency) => throw UnimplementedError();
diff --git a/lib/di.dart b/lib/di.dart
index 821f5113..a4ae25ca 100644
--- a/lib/di.dart
+++ b/lib/di.dart
@@ -56,6 +56,7 @@ import 'package:cake_wallet/new-ui/pages/account_customizer.dart';
import 'package:cake_wallet/new-ui/pages/bridge/bridge_amount_page.dart';
import 'package:cake_wallet/new-ui/pages/bridge/bridge_network_page.dart';
import 'package:cake_wallet/new-ui/pages/bridge/bridge_receiving_wallet_page.dart';
+import 'package:cake_wallet/new-ui/pages/buy_sell/buy_sell_amount_page.dart';
import 'package:cake_wallet/new-ui/pages/coin_control_page.dart';
import 'package:cake_wallet/new-ui/pages/addresses_page.dart';
import 'package:cake_wallet/new-ui/pages/home_page.dart';
@@ -64,6 +65,7 @@ import 'package:cake_wallet/new-ui/pages/lightning_username_page.dart';
import 'package:cake_wallet/new-ui/pages/receive_page.dart';
import 'package:cake_wallet/new-ui/viewmodels/lightning_username/lightning_username_bloc.dart';
import 'package:cake_wallet/new-ui/widgets/addresses_page/address_label_input.dart';
+import 'package:cake_wallet/new-ui/widgets/buy_sell/buy_sell_selector_modal.dart';
import 'package:cake_wallet/new-ui/widgets/coins_page/assets_history/transaction_details_modal.dart';
import 'package:cake_wallet/new-ui/widgets/receive_page/receive_label_modal.dart';
import 'package:cake_wallet/new-ui/pages/swap_page.dart';
@@ -1494,6 +1496,9 @@ Future<void> setup({
getIt.registerFactory(() => BuySellViewModel(getIt.get<AppStore>()));
+ getIt.registerFactoryParam<NewBuySellAmountPage, BuySellPageMode, void>((mode, _) =>
+ NewBuySellAmountPage(mode: mode, buySellViewModel: getIt.get<BuySellViewModel>()));
+
getIt.registerFactory(() => BuySellPage(getIt.get<BuySellViewModel>()));
getIt.registerFactoryParam<BuyOptionsPage, List<dynamic>, void>((List<dynamic> args, _) {
diff --git a/lib/new-ui/pages/buy_sell/buy_sell_amount_page.dart b/lib/new-ui/pages/buy_sell/buy_sell_amount_page.dart
new file mode 100644
index 00000000..b29a747d
--- /dev/null
+++ b/lib/new-ui/pages/buy_sell/buy_sell_amount_page.dart
@@ -0,0 +1,50 @@
+import 'package:cake_wallet/generated/i18n.dart';
+import 'package:cake_wallet/new-ui/widgets/buy_sell/buy_sell_selector_modal.dart';
+import 'package:cake_wallet/new-ui/widgets/receive_page/receive_top_bar.dart';
+import 'package:cake_wallet/view_model/buy/buy_sell_view_model.dart';
+import 'package:flutter/material.dart';
+
+class NewBuySellAmountPage extends StatelessWidget {
+ const NewBuySellAmountPage({super.key, required this.mode, required this.buySellViewModel});
+
+ final BuySellPageMode mode;
+ final BuySellViewModel buySellViewModel;
+
+ @override
+ Widget build(BuildContext context) {
+ return Container(
+ decoration: BoxDecoration(
+ borderRadius: BorderRadius.vertical(top: Radius.circular(18)),
+ gradient: LinearGradient(
+ colors: [
+ Theme.of(context).colorScheme.surface,
+ Theme.of(context).colorScheme.surfaceDim,
+ ],
+ begin: Alignment.topCenter,
+ end: Alignment.bottomCenter,
+ ),
+ ),
+ child: SafeArea(
+ child: Column(children: [
+ ModalTopBar(title: _pageTitle, leadingIcon: Icon(Icons.close), onLeadingPressed: Navigator.of(context).pop,),
+ Expanded(child: GridView.builder(itemCount: 6, gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
+ crossAxisCount: 2,
+ crossAxisSpacing: 10,
+ mainAxisSpacing: 10,
+ mainAxisExtent: 150), itemBuilder: (context, index){
+
+
+ }))
+ ],),
+ ),
+ );
+ }
+
+ String get _pageTitle =>
+ mode == BuySellPageMode.buy ? S.current.buy : S.current.sell +
+ ((buySellViewModel.cryptoCurrencies.length == 1)
+ ? " ${buySellViewModel.cryptoCurrencies.first.fullName}"
+ : "");
+}
+
+
diff --git a/lib/new-ui/widgets/buy_sell/buy_sell_selector_modal.dart b/lib/new-ui/widgets/buy_sell/buy_sell_selector_modal.dart
index 88ddcf98..85b82566 100644
--- a/lib/new-ui/widgets/buy_sell/buy_sell_selector_modal.dart
+++ b/lib/new-ui/widgets/buy_sell/buy_sell_selector_modal.dart
@@ -1,6 +1,7 @@
+import 'package:cake_wallet/di.dart';
import 'package:cake_wallet/generated/i18n.dart';
import 'package:cake_wallet/new-ui/modal_navigator.dart';
-import 'package:cake_wallet/new-ui/widgets/receive_page/receive_top_bar.dart';
+import 'package:cake_wallet/new-ui/pages/buy_sell/buy_sell_amount_page.dart';
import 'package:cake_wallet/src/widgets/cake_image_widget.dart';
import 'package:cake_wallet/themes/core/theme_extension.dart';
import 'package:flutter/material.dart';
@@ -45,7 +46,7 @@ class BuySellSelectorModal extends StatelessWidget {
void openBuySellPage(BuildContext context, BuySellPageMode mode) {
Navigator.of(context).pop();
- // showModalBottomSheet(context: context, builder: ModalNavigator(rootPage: ,))
+ showModalBottomSheet(isScrollControlled: true, context: context, builder: (modalContext)=>ModalNavigator(rootPage: getIt.get<NewBuySellAmountPage>(param1: mode), parentContext: context,));
}
}
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.