From 94d9022f3d2cfcea3c66603c2cbb910f0d14c785 Mon Sep 17 00:00:00 2001 From: julian <julian@cypherstack.com> Date: Tue, 14 Mar 2023 16:56:26 -0600 Subject: [PATCH] desktop UTXO clear selection button --- .../desktop_coin_control_view.dart | 100 ++++++++++-------- 1 file changed, 58 insertions(+), 42 deletions(-) diff --git a/lib/pages_desktop_specific/coin_control/desktop_coin_control_view.dart b/lib/pages_desktop_specific/coin_control/desktop_coin_control_view.dart index ce5ea1868..7b5a7a9db 100644 --- a/lib/pages_desktop_specific/coin_control/desktop_coin_control_view.dart +++ b/lib/pages_desktop_specific/coin_control/desktop_coin_control_view.dart @@ -20,6 +20,7 @@ import 'package:stackwallet/widgets/custom_buttons/dropdown_button.dart'; import 'package:stackwallet/widgets/desktop/desktop_app_bar.dart'; import 'package:stackwallet/widgets/desktop/desktop_scaffold.dart'; import 'package:stackwallet/widgets/desktop/primary_button.dart'; +import 'package:stackwallet/widgets/desktop/secondary_button.dart'; import 'package:stackwallet/widgets/icon_widgets/x_icon.dart'; import 'package:stackwallet/widgets/stack_text_field.dart'; import 'package:stackwallet/widgets/textfield_icon_button.dart'; @@ -93,6 +94,35 @@ class _DesktopCoinControlViewState return _freezeLabelCache; } + Future<void> _onFreezeStateButtonPressed() async { + switch (_freezeLabelCache) { + case "Freeze": + for (final e in _selectedUTXOs) { + e.utxo = e.utxo.copyWith(isBlocked: true); + } + break; + + case "Unfreeze": + for (final e in _selectedUTXOs) { + e.utxo = e.utxo.copyWith(isBlocked: false); + } + break; + + default: + Logging.instance.log( + "Unknown utxo method name found in $runtimeType", + level: LogLevel.Fatal, + ); + return; + } + + // final update utxo set in db + await MainDB.instance.putUTXOs(_selectedUTXOs.map((e) => e.utxo).toList()); + + // change label of freeze/unfreeze button + setState(() {}); + } + @override void initState() { _searchController = TextEditingController(); @@ -317,35 +347,7 @@ class _DesktopCoinControlViewState buttonHeight: ButtonHeight.l, width: 200, label: _freezeLabel(_selectedUTXOs), - onPressed: () async { - switch (_freezeLabelCache) { - case "Freeze": - for (final e in _selectedUTXOs) { - e.utxo = e.utxo.copyWith(isBlocked: true); - } - break; - - case "Unfreeze": - for (final e in _selectedUTXOs) { - e.utxo = e.utxo.copyWith(isBlocked: false); - } - break; - - default: - Logging.instance.log( - "Unknown utxo method name found in $runtimeType", - level: LogLevel.Fatal, - ); - return; - } - - // final update utxo set in db - await MainDB.instance - .putUTXOs(_selectedUTXOs.map((e) => e.utxo).toList()); - - // change label of freeze/unfreeze button - setState(() {}); - }, + onPressed: _onFreezeStateButtonPressed, ), crossFadeState: _selectedUTXOs.isEmpty ? CrossFadeState.showFirst @@ -357,19 +359,33 @@ class _DesktopCoinControlViewState const SizedBox( width: 24, ), - JDropdownButton( - redrawOnScreenSizeChanged: true, - label: "Sort by...", - width: 200, - groupValue: _sort, - items: CCSortDescriptor.values.toSet(), - onSelectionChanged: (CCSortDescriptor? newValue) { - if (newValue != null && newValue != _sort) { - setState(() { - _sort = newValue; - }); - } - }, + AnimatedCrossFade( + firstChild: JDropdownButton( + redrawOnScreenSizeChanged: true, + label: "Sort by...", + width: 200, + groupValue: _sort, + items: CCSortDescriptor.values.toSet(), + onSelectionChanged: (CCSortDescriptor? newValue) { + if (newValue != null && newValue != _sort) { + setState(() { + _sort = newValue; + }); + } + }, + ), + secondChild: SecondaryButton( + buttonHeight: ButtonHeight.l, + width: 200, + label: "Clear selection (${_selectedUTXOs.length})", + onPressed: () => setState(() => _selectedUTXOs.clear()), + ), + crossFadeState: _selectedUTXOs.isEmpty + ? CrossFadeState.showFirst + : CrossFadeState.showSecond, + duration: const Duration( + milliseconds: 200, + ), ), ], ),