From b7497f8dfed497c4c8327ae245b0517a32ad855e Mon Sep 17 00:00:00 2001 From: julian Date: Thu, 23 Mar 2023 10:22:05 -0600 Subject: [PATCH] wallet tokens list ui updates --- lib/pages/token_view/my_tokens_view.dart | 45 +++++-------------- .../sub_widgets/my_tokens_list.dart | 42 ++++++++++++++++- 2 files changed, 51 insertions(+), 36 deletions(-) diff --git a/lib/pages/token_view/my_tokens_view.dart b/lib/pages/token_view/my_tokens_view.dart index 2801040fd..2d0782574 100644 --- a/lib/pages/token_view/my_tokens_view.dart +++ b/lib/pages/token_view/my_tokens_view.dart @@ -3,12 +3,10 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_svg/svg.dart'; -import 'package:isar/isar.dart'; -import 'package:stackwallet/db/isar/main_db.dart'; -import 'package:stackwallet/models/isar/models/ethereum/eth_contract.dart'; import 'package:stackwallet/pages/add_wallet_views/add_token_view/add_token_view.dart'; import 'package:stackwallet/pages/token_view/sub_widgets/my_tokens_list.dart'; import 'package:stackwallet/providers/global/wallets_provider.dart'; +import 'package:stackwallet/services/coins/ethereum/ethereum_wallet.dart'; import 'package:stackwallet/utilities/assets.dart'; import 'package:stackwallet/utilities/constants.dart'; import 'package:stackwallet/utilities/text_styles.dart'; @@ -32,46 +30,18 @@ class MyTokensView extends ConsumerStatefulWidget { final String walletId; @override - ConsumerState createState() => _TokenDetailsViewState(); + ConsumerState createState() => _MyTokensViewState(); } -class _TokenDetailsViewState extends ConsumerState { +class _MyTokensViewState extends ConsumerState { late final String walletAddress; late final TextEditingController _searchController; final searchFieldFocusNode = FocusNode(); String _searchString = ""; - List _filter(String searchTerm) { - if (searchTerm.isNotEmpty) { - final term = searchTerm.toLowerCase(); - return MainDB.instance - .getEthContracts() - .filter() - .walletIdsElementEqualTo(widget.walletId) - .and() - .group( - (q) => q - .nameContains(term, caseSensitive: false) - .or() - .symbolContains(term, caseSensitive: false) - .or() - .addressContains(term, caseSensitive: false), - ) - .findAllSync(); - // return tokens.toList(); - } - //implement search/filter - return MainDB.instance - .getEthContracts() - .filter() - .walletIdsElementEqualTo(widget.walletId) - .findAllSync(); - } - @override void initState() { _searchController = TextEditingController(); - super.initState(); } @@ -84,6 +54,8 @@ class _TokenDetailsViewState extends ConsumerState { @override Widget build(BuildContext context) { + debugPrint("BUILD: $runtimeType"); + final isDesktop = Util.isDesktop; return MasterScaffold( @@ -290,7 +262,12 @@ class _TokenDetailsViewState extends ConsumerState { Expanded( child: MyTokensList( walletId: widget.walletId, - tokens: _filter(_searchString), + searchTerm: _searchString, + tokenContracts: ref + .watch(walletsChangeNotifierProvider.select((value) => value + .getManager(widget.walletId) + .wallet as EthereumWallet)) + .getWalletTokenContractAddresses(), ), ), ], diff --git a/lib/pages/token_view/sub_widgets/my_tokens_list.dart b/lib/pages/token_view/sub_widgets/my_tokens_list.dart index 473165944..fb8c8ef13 100644 --- a/lib/pages/token_view/sub_widgets/my_tokens_list.dart +++ b/lib/pages/token_view/sub_widgets/my_tokens_list.dart @@ -1,5 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:isar/isar.dart'; +import 'package:stackwallet/db/isar/main_db.dart'; import 'package:stackwallet/models/isar/models/ethereum/eth_contract.dart'; import 'package:stackwallet/pages/token_view/sub_widgets/my_token_select_item.dart'; @@ -7,16 +9,52 @@ class MyTokensList extends StatelessWidget { const MyTokensList({ Key? key, required this.walletId, - required this.tokens, + required this.searchTerm, + required this.tokenContracts, }) : super(key: key); final String walletId; - final List tokens; + final String searchTerm; + final List tokenContracts; + + List _filter(String searchTerm) { + if (tokenContracts.isEmpty) { + return []; + } + + if (searchTerm.isNotEmpty) { + final term = searchTerm.toLowerCase(); + return MainDB.instance + .getEthContracts() + .filter() + .anyOf( + tokenContracts, (q, e) => q.addressEqualTo(e)) + .and() + .group( + (q) => q + .nameContains(term, caseSensitive: false) + .or() + .symbolContains(term, caseSensitive: false) + .or() + .addressContains(term, caseSensitive: false), + ) + .findAllSync(); + // return tokens.toList(); + } + //implement search/filter + return MainDB.instance + .getEthContracts() + .filter() + .anyOf( + tokenContracts, (q, e) => q.addressEqualTo(e)) + .findAllSync(); + } @override Widget build(BuildContext context) { return Consumer( builder: (_, ref, __) { + final tokens = _filter(searchTerm); return ListView.builder( itemCount: tokens.length, itemBuilder: (ctx, index) {