Skip to content

Commit 6a9ea68

Browse files
authored
Merge pull request #1476 from SatoshiPortal/tranfer-flow-improvements
More intuitive transfer flow for receive exact amount and max toggle
2 parents 0dfdeec + e7e8e64 commit 6a9ea68

5 files changed

Lines changed: 25 additions & 21 deletions

File tree

lib/features/swap/presentation/transfer_bloc.dart

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ class TransferBloc extends Bloc<TransferEvent, TransferState> {
8787
on<TransferConfirmed>(_onConfirmed);
8888
on<TransferSendToExternalToggled>(_onSendToExternalToggled);
8989
on<TransferExternalAddressChanged>(_onExternalAddressChanged);
90-
on<TransferSendExactAmountToggled>(_onSendExactAmountToggled);
90+
on<TransferReceiveExactAmountToggled>(_onReceiveExactAmountToggled);
9191
}
9292

9393
final GetSettingsUsecase _getSettingsUsecase;
@@ -288,7 +288,7 @@ class TransferBloc extends Bloc<TransferEvent, TransferState> {
288288
: ConvertAmount.btcToSats(double.parse(event.amount));
289289

290290
int paymentAmountSat = inputAmountSat;
291-
if (state.sendExactAmount) {
291+
if (state.receiveExactAmount) {
292292
final swapFees = state.swapFees;
293293
if (swapFees == null) {
294294
emit(
@@ -531,6 +531,7 @@ class TransferBloc extends Bloc<TransferEvent, TransferState> {
531531
sendToExternal: event.enabled,
532532
externalAddress: event.enabled ? state.externalAddress : '',
533533
externalAddressError: event.enabled ? null : null,
534+
receiveExactAmount: event.enabled,
534535
),
535536
);
536537
}
@@ -654,9 +655,9 @@ class TransferBloc extends Bloc<TransferEvent, TransferState> {
654655
state.copyWith(
655656
externalAddress: address,
656657
externalAddressError: null,
657-
sendExactAmount:
658+
receiveExactAmount:
658659
// ignore: avoid_bool_literals_in_conditional_expressions
659-
bip21AmountSat != null ? true : state.sendExactAmount,
660+
bip21AmountSat != null ? true : state.receiveExactAmount,
660661
amount: bip21AmountText ?? state.amount,
661662
),
662663
);
@@ -692,11 +693,11 @@ class TransferBloc extends Bloc<TransferEvent, TransferState> {
692693
}
693694
}
694695

695-
Future<void> _onSendExactAmountToggled(
696-
TransferSendExactAmountToggled event,
696+
Future<void> _onReceiveExactAmountToggled(
697+
TransferReceiveExactAmountToggled event,
697698
Emitter<TransferState> emit,
698699
) async {
699-
emit(state.copyWith(sendExactAmount: event.enabled));
700+
emit(state.copyWith(receiveExactAmount: event.enabled));
700701
}
701702

702703
Future<void> _onConfirmed(

lib/features/swap/presentation/transfer_event.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,6 @@ sealed class TransferEvent with _$TransferEvent {
1515
TransferSendToExternalToggled;
1616
const factory TransferEvent.externalAddressChanged(String address) =
1717
TransferExternalAddressChanged;
18-
const factory TransferEvent.sendExactAmountToggled(bool enabled) =
19-
TransferSendExactAmountToggled;
18+
const factory TransferEvent.receiveExactAmountToggled(bool enabled) =
19+
TransferReceiveExactAmountToggled;
2020
}

lib/features/swap/presentation/transfer_state.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ sealed class TransferState with _$TransferState {
2727
@Default(false) bool sendToExternal,
2828
@Default('') String externalAddress,
2929
String? externalAddressError,
30-
@Default(true) bool sendExactAmount,
30+
@Default(false) bool receiveExactAmount,
3131
@Default('') String amount,
3232
}) = _TransferState;
3333
const TransferState._();

lib/features/swap/ui/pages/swap_page.dart

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -190,21 +190,21 @@ class _SwapPageState extends State<SwapPage> {
190190
mainAxisAlignment: MainAxisAlignment.spaceBetween,
191191
children: [
192192
BlocSelector<TransferBloc, TransferState, bool>(
193-
selector: (state) => state.sendExactAmount,
194-
builder: (context, sendExactAmount) {
193+
selector: (state) => state.receiveExactAmount,
194+
builder: (context, receiveExactAmount) {
195195
return Text(
196-
sendExactAmount
197-
? 'Send exact amount'
196+
receiveExactAmount
197+
? 'Receive exact amount'
198198
: 'Subtract fees from amount',
199199
style: context.font.bodyLarge,
200200
);
201201
},
202202
),
203203
BlocSelector<TransferBloc, TransferState, bool>(
204-
selector: (state) => state.sendExactAmount,
205-
builder: (context, sendExactAmount) {
204+
selector: (state) => state.receiveExactAmount,
205+
builder: (context, receiveExactAmount) {
206206
return Switch(
207-
value: sendExactAmount,
207+
value: receiveExactAmount,
208208
activeColor: context.colour.onSecondary,
209209
activeTrackColor: context.colour.secondary,
210210
inactiveThumbColor: context.colour.onSecondary,
@@ -214,7 +214,7 @@ class _SwapPageState extends State<SwapPage> {
214214
>((Set<WidgetState> states) => Colors.transparent),
215215
onChanged: (value) {
216216
context.read<TransferBloc>().add(
217-
TransferEvent.sendExactAmountToggled(value),
217+
TransferEvent.receiveExactAmountToggled(value),
218218
);
219219
},
220220
);

lib/features/swap/ui/widgets/swap_balance_row.dart

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ class SwapBalanceRow extends StatelessWidget {
3535
? maxAmountSat
3636
: ConvertAmount.satsToBtc(maxAmountSat ?? 0);
3737

38-
final sendExactAmount = context.select(
39-
(TransferBloc bloc) => bloc.state.sendExactAmount,
38+
final receiveExactAmount = context.select(
39+
(TransferBloc bloc) => bloc.state.receiveExactAmount,
4040
);
4141

4242
return Row(
@@ -58,8 +58,11 @@ class SwapBalanceRow extends StatelessWidget {
5858
textColor: context.colour.secondary,
5959
textStyle: context.font.labelLarge,
6060
disabled:
61-
sendExactAmount || maxAmountSat == null || maxAmountSat <= 0,
61+
receiveExactAmount || maxAmountSat == null || maxAmountSat <= 0,
6262
onPressed: () {
63+
context.read<TransferBloc>().add(
64+
const TransferEvent.receiveExactAmountToggled(false),
65+
);
6366
amountController.text = maxAmount.toString();
6467
},
6568
),

0 commit comments

Comments
 (0)