From c711bb94195ef84038d637b98d29e2b44ca541e4 Mon Sep 17 00:00:00 2001 From: ryleedavis <rylee@cypherstack.com> Date: Thu, 3 Nov 2022 09:41:10 -0600 Subject: [PATCH] added search bar to desktop nodes settings --- .../home/settings_menu/nodes_settings.dart | 211 +++++++++++------- 1 file changed, 130 insertions(+), 81 deletions(-) diff --git a/lib/pages_desktop_specific/home/settings_menu/nodes_settings.dart b/lib/pages_desktop_specific/home/settings_menu/nodes_settings.dart index bb60061d8..5f1e70143 100644 --- a/lib/pages_desktop_specific/home/settings_menu/nodes_settings.dart +++ b/lib/pages_desktop_specific/home/settings_menu/nodes_settings.dart @@ -11,6 +11,9 @@ import 'package:stackwallet/utilities/enums/coin_enum.dart'; import 'package:stackwallet/utilities/text_styles.dart'; import 'package:stackwallet/widgets/rounded_white_container.dart'; +import '../../../utilities/util.dart'; +import '../../../widgets/stack_text_field.dart'; + class NodesSettings extends ConsumerStatefulWidget { const NodesSettings({Key? key}) : super(key: key); @@ -23,15 +26,27 @@ class NodesSettings extends ConsumerStatefulWidget { class _NodesSettings extends ConsumerState<NodesSettings> { List<Coin> _coins = [...Coin.values]; + late final TextEditingController searchNodeController; + late final FocusNode searchNodeFocusNode; + + String filter = ""; + @override void initState() { _coins = _coins.toList(); _coins.remove(Coin.firoTestNet); + + searchNodeController = TextEditingController(); + searchNodeFocusNode = FocusNode(); + super.initState(); } @override void dispose() { + searchNodeController.dispose(); + searchNodeFocusNode.dispose(); + super.dispose(); } @@ -85,88 +100,122 @@ class _NodesSettings extends ConsumerState<NodesSettings> { ), ], ), - //TODO: add search bar - SingleChildScrollView( - child: Column( - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - ...coins.map( - (coin) { - final count = ref - .watch(nodeServiceChangeNotifierProvider - .select((value) => value.getNodesFor(coin))) - .length; - - return Padding( - padding: const EdgeInsets.all(0), - child: RawMaterialButton( - // splashColor: Theme.of(context).extension<StackColors>()!.highlight, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular( - Constants.size.circularBorderRadius, - ), - // side: BorderSide( - // color: Theme.of(context) - // .extension<StackColors>()! - // .shadow), - ), - materialTapTargetSize: - MaterialTapTargetSize.shrinkWrap, - onPressed: () { - Navigator.of(context).pushNamed( - CoinNodesView.routeName, - arguments: coin, - ); - }, - child: Padding( - padding: const EdgeInsets.all( - 12.0, - ), - child: Row( - children: [ - Row( - children: [ - SvgPicture.asset( - Assets.svg.iconFor(coin: coin), - width: 24, - height: 24, - ), - const SizedBox( - width: 12, - ), - Column( - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - Text( - "${coin.prettyName} nodes", - style: STextStyles.titleBold12( - context), - ), - Text( - count > 1 - ? "$count nodes" - : "Default", - style: STextStyles.label(context), - ), - ], - ), - ], - ), - Expanded( - child: SvgPicture.asset( - Assets.svg.chevronRight, - alignment: Alignment.centerRight, - ), - ), - ], - ), - ), - ), - ); - }, + Padding( + padding: const EdgeInsets.all(10.0), + child: ClipRRect( + borderRadius: BorderRadius.circular( + Constants.size.circularBorderRadius, + ), + child: TextField( + autocorrect: Util.isDesktop ? false : true, + enableSuggestions: Util.isDesktop ? false : true, + controller: searchNodeController, + focusNode: searchNodeFocusNode, + onChanged: (newString) { + setState(() => filter = newString); + }, + style: STextStyles.field(context), + decoration: standardInputDecoration( + "Search", + searchNodeFocusNode, + context, + ).copyWith( + prefixIcon: Padding( + padding: const EdgeInsets.symmetric( + horizontal: 10, + vertical: 16, + ), + child: SvgPicture.asset( + Assets.svg.search, + width: 16, + height: 16, + ), + ), ), - ], + ), + ), + ), + Padding( + padding: const EdgeInsets.all(10.0), + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + ...coins.map( + (coin) { + final count = ref + .watch(nodeServiceChangeNotifierProvider + .select((value) => value.getNodesFor(coin))) + .length; + + return Padding( + padding: const EdgeInsets.all(0), + child: RawMaterialButton( + // splashColor: Theme.of(context).extension<StackColors>()!.highlight, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular( + Constants.size.circularBorderRadius, + ), + ), + materialTapTargetSize: + MaterialTapTargetSize.shrinkWrap, + onPressed: () { + Navigator.of(context).pushNamed( + CoinNodesView.routeName, + arguments: coin, + ); + }, + child: Padding( + padding: const EdgeInsets.all( + 12.0, + ), + child: Row( + children: [ + Row( + children: [ + SvgPicture.asset( + Assets.svg.iconFor(coin: coin), + width: 24, + height: 24, + ), + const SizedBox( + width: 12, + ), + Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Text( + "${coin.prettyName} nodes", + style: STextStyles.titleBold12( + context), + ), + Text( + count > 1 + ? "$count nodes" + : "Default", + style: + STextStyles.label(context), + ), + ], + ), + ], + ), + Expanded( + child: SvgPicture.asset( + Assets.svg.chevronRight, + alignment: Alignment.centerRight, + ), + ), + ], + ), + ), + ), + ); + }, + ), + ], + ), ), ), ],