mirror of
https://github.com/cypherstack/stack_wallet.git
synced 2025-01-09 12:19:24 +00:00
add wallet entity clean up
This commit is contained in:
parent
c34721c98c
commit
d07906c4a7
12 changed files with 275 additions and 234 deletions
|
@ -0,0 +1,8 @@
|
||||||
|
import 'package:equatable/equatable.dart';
|
||||||
|
import 'package:stackwallet/utilities/enums/coin_enum.dart';
|
||||||
|
|
||||||
|
abstract class AddWalletListEntity extends Equatable {
|
||||||
|
Coin get coin;
|
||||||
|
String get name;
|
||||||
|
String get ticker;
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
import 'package:stackwallet/models/add_wallet_list_entity/add_wallet_list_entity.dart';
|
||||||
|
import 'package:stackwallet/utilities/enums/coin_enum.dart';
|
||||||
|
|
||||||
|
class CoinEntity extends AddWalletListEntity {
|
||||||
|
CoinEntity(this._coin);
|
||||||
|
|
||||||
|
final Coin _coin;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Coin get coin => _coin;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get name => coin.prettyName;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get ticker => coin.ticker;
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object?> get props => [coin, name, ticker];
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
import 'package:stackwallet/models/add_wallet_list_entity/add_wallet_list_entity.dart';
|
||||||
|
import 'package:stackwallet/models/ethereum/eth_token.dart';
|
||||||
|
import 'package:stackwallet/utilities/enums/coin_enum.dart';
|
||||||
|
|
||||||
|
class EthTokenEntity extends AddWalletListEntity {
|
||||||
|
EthTokenEntity(this.token);
|
||||||
|
|
||||||
|
final EthToken token;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Coin get coin => Coin.ethereum;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get name => token.name;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get ticker => token.symbol;
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object?> get props => [coin, name, ticker, token.contractAddress];
|
||||||
|
}
|
|
@ -3,10 +3,12 @@ import 'dart:io';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
import 'package:flutter_svg/svg.dart';
|
import 'package:flutter_svg/svg.dart';
|
||||||
|
import 'package:stackwallet/models/add_wallet_list_entity/add_wallet_list_entity.dart';
|
||||||
|
import 'package:stackwallet/models/add_wallet_list_entity/sub_classes/coin_entity.dart';
|
||||||
|
import 'package:stackwallet/models/add_wallet_list_entity/sub_classes/eth_token_entity.dart';
|
||||||
import 'package:stackwallet/pages/add_wallet_views/add_wallet_view/sub_widgets/add_wallet_text.dart';
|
import 'package:stackwallet/pages/add_wallet_views/add_wallet_view/sub_widgets/add_wallet_text.dart';
|
||||||
import 'package:stackwallet/pages/add_wallet_views/add_wallet_view/sub_widgets/mobile_coin_list.dart';
|
import 'package:stackwallet/pages/add_wallet_views/add_wallet_view/sub_widgets/expanding_sub_list_item.dart';
|
||||||
import 'package:stackwallet/pages/add_wallet_views/add_wallet_view/sub_widgets/next_button.dart';
|
import 'package:stackwallet/pages/add_wallet_views/add_wallet_view/sub_widgets/next_button.dart';
|
||||||
import 'package:stackwallet/pages/add_wallet_views/add_wallet_view/sub_widgets/searchable_coin_list.dart';
|
|
||||||
import 'package:stackwallet/pages_desktop_specific/my_stack_view/exit_to_my_stack_button.dart';
|
import 'package:stackwallet/pages_desktop_specific/my_stack_view/exit_to_my_stack_button.dart';
|
||||||
import 'package:stackwallet/providers/global/prefs_provider.dart';
|
import 'package:stackwallet/providers/global/prefs_provider.dart';
|
||||||
import 'package:stackwallet/utilities/assets.dart';
|
import 'package:stackwallet/utilities/assets.dart';
|
||||||
|
@ -52,6 +54,26 @@ class _AddWalletViewState extends ConsumerState<AddWalletView> {
|
||||||
|
|
||||||
final bool isDesktop = Util.isDesktop;
|
final bool isDesktop = Util.isDesktop;
|
||||||
|
|
||||||
|
List<AddWalletListEntity> filter(
|
||||||
|
String text,
|
||||||
|
List<AddWalletListEntity> entities,
|
||||||
|
) {
|
||||||
|
final _entities = [...entities];
|
||||||
|
if (text.isNotEmpty) {
|
||||||
|
final lowercaseTerm = text.toLowerCase();
|
||||||
|
_entities.retainWhere(
|
||||||
|
(e) =>
|
||||||
|
e.ticker.toLowerCase().contains(lowercaseTerm) ||
|
||||||
|
e.name.toLowerCase().contains(lowercaseTerm) ||
|
||||||
|
e.coin.name.toLowerCase().contains(lowercaseTerm) ||
|
||||||
|
(e is EthTokenEntity &&
|
||||||
|
e.token.contractAddress.toLowerCase().contains(lowercaseTerm)),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return _entities;
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
_searchFieldController = TextEditingController();
|
_searchFieldController = TextEditingController();
|
||||||
|
@ -186,10 +208,21 @@ class _AddWalletViewState extends ConsumerState<AddWalletView> {
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: SearchableCoinList(
|
child: SingleChildScrollView(
|
||||||
entities: coinEntities,
|
child: Column(
|
||||||
isDesktop: true,
|
children: [
|
||||||
searchTerm: _searchTerm,
|
ExpandingSubListItem(
|
||||||
|
title: "Coins",
|
||||||
|
entities: filter(_searchTerm, coinEntities),
|
||||||
|
initialState: ExpandableState.expanded,
|
||||||
|
),
|
||||||
|
ExpandingSubListItem(
|
||||||
|
title: "Tokens",
|
||||||
|
entities: filter(_searchTerm, tokenEntities),
|
||||||
|
initialState: ExpandableState.collapsed,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
@ -238,18 +271,73 @@ class _AddWalletViewState extends ConsumerState<AddWalletView> {
|
||||||
const SizedBox(
|
const SizedBox(
|
||||||
height: 16,
|
height: 16,
|
||||||
),
|
),
|
||||||
|
ClipRRect(
|
||||||
|
borderRadius: BorderRadius.circular(
|
||||||
|
Constants.size.circularBorderRadius,
|
||||||
|
),
|
||||||
|
child: TextField(
|
||||||
|
autofocus: isDesktop,
|
||||||
|
autocorrect: !isDesktop,
|
||||||
|
enableSuggestions: !isDesktop,
|
||||||
|
controller: _searchFieldController,
|
||||||
|
focusNode: _searchFocusNode,
|
||||||
|
onChanged: (value) => setState(() => _searchTerm = value),
|
||||||
|
style: STextStyles.field(context),
|
||||||
|
decoration: standardInputDecoration(
|
||||||
|
"Search",
|
||||||
|
_searchFocusNode,
|
||||||
|
context,
|
||||||
|
desktopMed: isDesktop,
|
||||||
|
).copyWith(
|
||||||
|
prefixIcon: Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(
|
||||||
|
horizontal: 10,
|
||||||
|
vertical: 16,
|
||||||
|
),
|
||||||
|
child: SvgPicture.asset(
|
||||||
|
Assets.svg.search,
|
||||||
|
width: 16,
|
||||||
|
height: 16,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
suffixIcon: _searchFieldController.text.isNotEmpty
|
||||||
|
? Padding(
|
||||||
|
padding: const EdgeInsets.only(right: 0),
|
||||||
|
child: UnconstrainedBox(
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
TextFieldIconButton(
|
||||||
|
child: const XIcon(),
|
||||||
|
onTap: () async {
|
||||||
|
setState(() {
|
||||||
|
_searchFieldController.text = "";
|
||||||
|
_searchTerm = "";
|
||||||
|
});
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
: null,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(
|
||||||
|
height: 10,
|
||||||
|
),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: SingleChildScrollView(
|
child: SingleChildScrollView(
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
ExpandingSubListItem(
|
ExpandingSubListItem(
|
||||||
title: "Coins",
|
title: "Coins",
|
||||||
entities: coinEntities,
|
entities: filter(_searchTerm, coinEntities),
|
||||||
initialState: ExpandableState.expanded,
|
initialState: ExpandableState.expanded,
|
||||||
),
|
),
|
||||||
ExpandingSubListItem(
|
ExpandingSubListItem(
|
||||||
title: "Tokens",
|
title: "Tokens",
|
||||||
entities: tokenEntities,
|
entities: filter(_searchTerm, tokenEntities),
|
||||||
initialState: ExpandableState.collapsed,
|
initialState: ExpandableState.collapsed,
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
@ -271,91 +359,3 @@ class _AddWalletViewState extends ConsumerState<AddWalletView> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class ExpandingSubListItem extends StatefulWidget {
|
|
||||||
const ExpandingSubListItem({
|
|
||||||
Key? key,
|
|
||||||
required this.title,
|
|
||||||
required this.entities,
|
|
||||||
required this.initialState,
|
|
||||||
}) : super(key: key);
|
|
||||||
|
|
||||||
final String title;
|
|
||||||
final List<AddWalletListEntity> entities;
|
|
||||||
final ExpandableState initialState;
|
|
||||||
|
|
||||||
@override
|
|
||||||
State<ExpandingSubListItem> createState() => _ExpandingSubListItemState();
|
|
||||||
}
|
|
||||||
|
|
||||||
class _ExpandingSubListItemState extends State<ExpandingSubListItem> {
|
|
||||||
final isDesktop = Util.isDesktop;
|
|
||||||
|
|
||||||
late final ExpandableController _controller;
|
|
||||||
|
|
||||||
late bool _expandedState;
|
|
||||||
|
|
||||||
@override
|
|
||||||
void initState() {
|
|
||||||
_expandedState = widget.initialState == ExpandableState.expanded;
|
|
||||||
_controller = ExpandableController();
|
|
||||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
|
||||||
if (_expandedState) {
|
|
||||||
_controller.toggle?.call();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
super.initState();
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
return Expandable(
|
|
||||||
controller: _controller,
|
|
||||||
onExpandChanged: (state) {
|
|
||||||
setState(() {
|
|
||||||
_expandedState = state == ExpandableState.expanded;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
header: Container(
|
|
||||||
color: Colors.transparent,
|
|
||||||
child: Padding(
|
|
||||||
padding: const EdgeInsets.only(
|
|
||||||
top: 8.0,
|
|
||||||
bottom: 8.0,
|
|
||||||
right: 10,
|
|
||||||
),
|
|
||||||
child: Row(
|
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
||||||
children: [
|
|
||||||
Text(
|
|
||||||
widget.title,
|
|
||||||
style: isDesktop
|
|
||||||
? STextStyles.desktopTextExtraExtraSmall(context).copyWith(
|
|
||||||
color: Theme.of(context)
|
|
||||||
.extension<StackColors>()!
|
|
||||||
.textDark3,
|
|
||||||
)
|
|
||||||
: STextStyles.smallMed12(context),
|
|
||||||
textAlign: TextAlign.left,
|
|
||||||
),
|
|
||||||
SvgPicture.asset(
|
|
||||||
_expandedState ? Assets.svg.chevronUp : Assets.svg.chevronDown,
|
|
||||||
width: 12,
|
|
||||||
height: 6,
|
|
||||||
color: Theme.of(context)
|
|
||||||
.extension<StackColors>()!
|
|
||||||
.textFieldActiveSearchIconRight,
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
body: SingleChildScrollView(
|
|
||||||
primary: false,
|
|
||||||
child: MobileCoinList(
|
|
||||||
entities: widget.entities,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:stackwallet/models/add_wallet_list_entity/add_wallet_list_entity.dart';
|
||||||
|
import 'package:stackwallet/pages/add_wallet_views/add_wallet_view/sub_widgets/coin_select_item.dart';
|
||||||
|
|
||||||
|
class AddWalletEntityList extends StatelessWidget {
|
||||||
|
const AddWalletEntityList({
|
||||||
|
Key? key,
|
||||||
|
required this.entities,
|
||||||
|
}) : super(key: key);
|
||||||
|
|
||||||
|
final List<AddWalletListEntity> entities;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return ListView.builder(
|
||||||
|
shrinkWrap: true,
|
||||||
|
primary: false,
|
||||||
|
itemCount: entities.length,
|
||||||
|
itemBuilder: (ctx, index) {
|
||||||
|
return Padding(
|
||||||
|
padding: const EdgeInsets.all(4),
|
||||||
|
child: CoinSelectItem(
|
||||||
|
entity: entities[index],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,7 +1,7 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
import 'package:flutter_svg/svg.dart';
|
import 'package:flutter_svg/svg.dart';
|
||||||
import 'package:stackwallet/pages/add_wallet_views/add_wallet_view/sub_widgets/mobile_coin_list.dart';
|
import 'package:stackwallet/models/add_wallet_list_entity/add_wallet_list_entity.dart';
|
||||||
import 'package:stackwallet/providers/providers.dart';
|
import 'package:stackwallet/providers/providers.dart';
|
||||||
import 'package:stackwallet/utilities/assets.dart';
|
import 'package:stackwallet/utilities/assets.dart';
|
||||||
import 'package:stackwallet/utilities/constants.dart';
|
import 'package:stackwallet/utilities/constants.dart';
|
||||||
|
|
|
@ -0,0 +1,97 @@
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_svg/svg.dart';
|
||||||
|
import 'package:stackwallet/models/add_wallet_list_entity/add_wallet_list_entity.dart';
|
||||||
|
import 'package:stackwallet/pages/add_wallet_views/add_wallet_view/sub_widgets/add_wallet_entity_list.dart';
|
||||||
|
import 'package:stackwallet/utilities/assets.dart';
|
||||||
|
import 'package:stackwallet/utilities/text_styles.dart';
|
||||||
|
import 'package:stackwallet/utilities/theme/stack_colors.dart';
|
||||||
|
import 'package:stackwallet/utilities/util.dart';
|
||||||
|
import 'package:stackwallet/widgets/expandable.dart';
|
||||||
|
|
||||||
|
class ExpandingSubListItem extends StatefulWidget {
|
||||||
|
const ExpandingSubListItem({
|
||||||
|
Key? key,
|
||||||
|
required this.title,
|
||||||
|
required this.entities,
|
||||||
|
required this.initialState,
|
||||||
|
}) : super(key: key);
|
||||||
|
|
||||||
|
final String title;
|
||||||
|
final List<AddWalletListEntity> entities;
|
||||||
|
final ExpandableState initialState;
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<ExpandingSubListItem> createState() => _ExpandingSubListItemState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _ExpandingSubListItemState extends State<ExpandingSubListItem> {
|
||||||
|
final isDesktop = Util.isDesktop;
|
||||||
|
|
||||||
|
late final ExpandableController _controller;
|
||||||
|
|
||||||
|
late bool _expandedState;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
_expandedState = widget.initialState == ExpandableState.expanded;
|
||||||
|
_controller = ExpandableController();
|
||||||
|
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||||
|
if (_expandedState) {
|
||||||
|
_controller.toggle?.call();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
super.initState();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Expandable(
|
||||||
|
controller: _controller,
|
||||||
|
onExpandChanged: (state) {
|
||||||
|
setState(() {
|
||||||
|
_expandedState = state == ExpandableState.expanded;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
header: Container(
|
||||||
|
color: Colors.transparent,
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.only(
|
||||||
|
top: 8.0,
|
||||||
|
bottom: 8.0,
|
||||||
|
right: 10,
|
||||||
|
),
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
widget.title,
|
||||||
|
style: isDesktop
|
||||||
|
? STextStyles.desktopTextExtraExtraSmall(context).copyWith(
|
||||||
|
color: Theme.of(context)
|
||||||
|
.extension<StackColors>()!
|
||||||
|
.textDark3,
|
||||||
|
)
|
||||||
|
: STextStyles.smallMed12(context),
|
||||||
|
textAlign: TextAlign.left,
|
||||||
|
),
|
||||||
|
SvgPicture.asset(
|
||||||
|
_expandedState ? Assets.svg.chevronUp : Assets.svg.chevronDown,
|
||||||
|
width: 12,
|
||||||
|
height: 6,
|
||||||
|
color: Theme.of(context)
|
||||||
|
.extension<StackColors>()!
|
||||||
|
.textFieldActiveSearchIconRight,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
body: SingleChildScrollView(
|
||||||
|
primary: false,
|
||||||
|
child: AddWalletEntityList(
|
||||||
|
entities: widget.entities,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,73 +0,0 @@
|
||||||
import 'package:equatable/equatable.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
|
||||||
import 'package:stackwallet/models/ethereum/eth_token.dart';
|
|
||||||
import 'package:stackwallet/pages/add_wallet_views/add_wallet_view/sub_widgets/coin_select_item.dart';
|
|
||||||
import 'package:stackwallet/utilities/enums/coin_enum.dart';
|
|
||||||
|
|
||||||
class MobileCoinList extends StatelessWidget {
|
|
||||||
const MobileCoinList({
|
|
||||||
Key? key,
|
|
||||||
required this.entities,
|
|
||||||
}) : super(key: key);
|
|
||||||
|
|
||||||
final List<AddWalletListEntity> entities;
|
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
return ListView.builder(
|
|
||||||
shrinkWrap: true,
|
|
||||||
itemCount: entities.length,
|
|
||||||
primary: false,
|
|
||||||
itemBuilder: (ctx, index) {
|
|
||||||
return Padding(
|
|
||||||
padding: const EdgeInsets.all(4),
|
|
||||||
child: CoinSelectItem(
|
|
||||||
entity: entities[index],
|
|
||||||
),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
abstract class AddWalletListEntity extends Equatable {
|
|
||||||
Coin get coin;
|
|
||||||
String get name;
|
|
||||||
String get ticker;
|
|
||||||
}
|
|
||||||
|
|
||||||
class EthTokenEntity extends AddWalletListEntity {
|
|
||||||
EthTokenEntity(this.token);
|
|
||||||
|
|
||||||
final EthToken token;
|
|
||||||
|
|
||||||
@override
|
|
||||||
Coin get coin => Coin.ethereum;
|
|
||||||
|
|
||||||
@override
|
|
||||||
String get name => token.name;
|
|
||||||
|
|
||||||
@override
|
|
||||||
String get ticker => token.symbol;
|
|
||||||
|
|
||||||
@override
|
|
||||||
List<Object?> get props => [coin, name, ticker, token.contractAddress];
|
|
||||||
}
|
|
||||||
|
|
||||||
class CoinEntity extends AddWalletListEntity {
|
|
||||||
CoinEntity(this._coin);
|
|
||||||
|
|
||||||
final Coin _coin;
|
|
||||||
|
|
||||||
@override
|
|
||||||
Coin get coin => _coin;
|
|
||||||
|
|
||||||
@override
|
|
||||||
String get name => coin.prettyName;
|
|
||||||
|
|
||||||
@override
|
|
||||||
String get ticker => coin.ticker;
|
|
||||||
|
|
||||||
@override
|
|
||||||
List<Object?> get props => [coin, name, ticker];
|
|
||||||
}
|
|
|
@ -1,61 +0,0 @@
|
||||||
import 'package:flutter/material.dart';
|
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
||||||
import 'package:stackwallet/pages/add_wallet_views/add_wallet_view/sub_widgets/coin_select_item.dart';
|
|
||||||
import 'package:stackwallet/pages/add_wallet_views/add_wallet_view/sub_widgets/mobile_coin_list.dart';
|
|
||||||
import 'package:stackwallet/providers/global/prefs_provider.dart';
|
|
||||||
import 'package:stackwallet/utilities/enums/coin_enum.dart';
|
|
||||||
|
|
||||||
class SearchableCoinList extends ConsumerWidget {
|
|
||||||
const SearchableCoinList({
|
|
||||||
Key? key,
|
|
||||||
required this.entities,
|
|
||||||
required this.isDesktop,
|
|
||||||
required this.searchTerm,
|
|
||||||
}) : super(key: key);
|
|
||||||
|
|
||||||
final List<AddWalletListEntity> entities;
|
|
||||||
final bool isDesktop;
|
|
||||||
final String searchTerm;
|
|
||||||
|
|
||||||
List<AddWalletListEntity> filterCoins(String text, bool showTestNetCoins) {
|
|
||||||
final _entities = [...entities];
|
|
||||||
if (text.isNotEmpty) {
|
|
||||||
final lowercaseTerm = text.toLowerCase();
|
|
||||||
_entities.retainWhere(
|
|
||||||
(e) =>
|
|
||||||
e.ticker.toLowerCase().contains(lowercaseTerm) ||
|
|
||||||
e.name.toLowerCase().contains(lowercaseTerm) ||
|
|
||||||
e.coin.name.toLowerCase().contains(lowercaseTerm) ||
|
|
||||||
(e is EthTokenEntity &&
|
|
||||||
e.token.contractAddress.toLowerCase().contains(lowercaseTerm)),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (!showTestNetCoins) {
|
|
||||||
_entities.removeWhere(
|
|
||||||
(e) => e.name.endsWith("TestNet") || e == Coin.bitcoincashTestnet);
|
|
||||||
}
|
|
||||||
|
|
||||||
return _entities;
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
|
||||||
bool showTestNet = ref.watch(
|
|
||||||
prefsChangeNotifierProvider.select((value) => value.showTestNetCoins),
|
|
||||||
);
|
|
||||||
|
|
||||||
final _entities = filterCoins(searchTerm, showTestNet);
|
|
||||||
|
|
||||||
return ListView.builder(
|
|
||||||
itemCount: _entities.length,
|
|
||||||
itemBuilder: (ctx, index) {
|
|
||||||
return Padding(
|
|
||||||
padding: const EdgeInsets.all(4),
|
|
||||||
child: CoinSelectItem(
|
|
||||||
entity: _entities[index],
|
|
||||||
),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,5 +1,5 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:stackwallet/pages/add_wallet_views/add_wallet_view/sub_widgets/mobile_coin_list.dart';
|
import 'package:stackwallet/models/add_wallet_list_entity/add_wallet_list_entity.dart';
|
||||||
import 'package:stackwallet/pages/add_wallet_views/create_or_restore_wallet_view/sub_widgets/coin_image.dart';
|
import 'package:stackwallet/pages/add_wallet_views/create_or_restore_wallet_view/sub_widgets/coin_image.dart';
|
||||||
import 'package:stackwallet/pages/add_wallet_views/create_or_restore_wallet_view/sub_widgets/create_or_restore_wallet_subtitle.dart';
|
import 'package:stackwallet/pages/add_wallet_views/create_or_restore_wallet_view/sub_widgets/create_or_restore_wallet_subtitle.dart';
|
||||||
import 'package:stackwallet/pages/add_wallet_views/create_or_restore_wallet_view/sub_widgets/create_or_restore_wallet_title.dart';
|
import 'package:stackwallet/pages/add_wallet_views/create_or_restore_wallet_view/sub_widgets/create_or_restore_wallet_title.dart';
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
import 'package:stackwallet/pages/add_wallet_views/add_wallet_view/sub_widgets/mobile_coin_list.dart';
|
import 'package:stackwallet/models/add_wallet_list_entity/add_wallet_list_entity.dart';
|
||||||
|
|
||||||
final addWalletSelectedEntityStateProvider =
|
final addWalletSelectedEntityStateProvider =
|
||||||
StateProvider.autoDispose<AddWalletListEntity?>((_) => null);
|
StateProvider.autoDispose<AddWalletListEntity?>((_) => null);
|
||||||
|
|
|
@ -2,6 +2,7 @@ import 'package:decimal/decimal.dart';
|
||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
|
import 'package:stackwallet/models/add_wallet_list_entity/add_wallet_list_entity.dart';
|
||||||
import 'package:stackwallet/models/buy/response_objects/quote.dart';
|
import 'package:stackwallet/models/buy/response_objects/quote.dart';
|
||||||
import 'package:stackwallet/models/contact_address_entry.dart';
|
import 'package:stackwallet/models/contact_address_entry.dart';
|
||||||
import 'package:stackwallet/models/ethereum/eth_token.dart';
|
import 'package:stackwallet/models/ethereum/eth_token.dart';
|
||||||
|
@ -12,7 +13,6 @@ import 'package:stackwallet/models/isar/models/isar_models.dart';
|
||||||
import 'package:stackwallet/models/paynym/paynym_account_lite.dart';
|
import 'package:stackwallet/models/paynym/paynym_account_lite.dart';
|
||||||
import 'package:stackwallet/models/send_view_auto_fill_data.dart';
|
import 'package:stackwallet/models/send_view_auto_fill_data.dart';
|
||||||
import 'package:stackwallet/pages/add_wallet_views/add_wallet_view/add_wallet_view.dart';
|
import 'package:stackwallet/pages/add_wallet_views/add_wallet_view/add_wallet_view.dart';
|
||||||
import 'package:stackwallet/pages/add_wallet_views/add_wallet_view/sub_widgets/mobile_coin_list.dart';
|
|
||||||
import 'package:stackwallet/pages/add_wallet_views/create_or_restore_wallet_view/create_or_restore_wallet_view.dart';
|
import 'package:stackwallet/pages/add_wallet_views/create_or_restore_wallet_view/create_or_restore_wallet_view.dart';
|
||||||
import 'package:stackwallet/pages/add_wallet_views/name_your_wallet_view/name_your_wallet_view.dart';
|
import 'package:stackwallet/pages/add_wallet_views/name_your_wallet_view/name_your_wallet_view.dart';
|
||||||
import 'package:stackwallet/pages/add_wallet_views/new_wallet_recovery_phrase_view/new_wallet_recovery_phrase_view.dart';
|
import 'package:stackwallet/pages/add_wallet_views/new_wallet_recovery_phrase_view/new_wallet_recovery_phrase_view.dart';
|
||||||
|
|
Loading…
Reference in a new issue