From 0ada1635c6340711b20b8d76dfeb5927468e620a Mon Sep 17 00:00:00 2001 From: poka Date: Wed, 15 Jun 2022 01:14:23 +0200 Subject: [PATCH] can search username in indexer --- lib/providers/duniter_indexer.dart | 92 +++++++++++++++++++++++++++++- lib/screens/search_result.dart | 64 ++++----------------- 2 files changed, 102 insertions(+), 54 deletions(-) diff --git a/lib/providers/duniter_indexer.dart b/lib/providers/duniter_indexer.dart index 952f2ce..891243e 100644 --- a/lib/providers/duniter_indexer.dart +++ b/lib/providers/duniter_indexer.dart @@ -7,7 +7,11 @@ import 'package:flutter/services.dart'; import 'package:gecko/globals.dart'; import 'package:gecko/models/queries_indexer.dart'; import 'package:gecko/models/wallet_data.dart'; +import 'package:gecko/providers/cesium_plus.dart'; +import 'package:gecko/providers/substrate_sdk.dart'; import 'package:gecko/providers/wallet_options.dart'; +import 'package:gecko/providers/wallets_profiles.dart'; +import 'package:gecko/screens/wallet_view.dart'; import 'package:graphql_flutter/graphql_flutter.dart'; import 'package:provider/provider.dart'; @@ -106,7 +110,6 @@ class DuniterIndexer with ChangeNotifier { FontStyle fontStyle = FontStyle.italic]) { WalletOptionsProvider _walletOptions = Provider.of(context, listen: false); - log.d('iiiiiiiiiiiiiiiiiiiiiii $indexerEndpoint'); if (indexerEndpoint == '') { if (wallet == null) { return const SizedBox(); @@ -167,4 +170,91 @@ class DuniterIndexer with ChangeNotifier { ); }); } + + Widget searchIdentity(BuildContext context, String name) { + // WalletOptionsProvider _walletOptions = + // Provider.of(context, listen: false); + CesiumPlusProvider _cesiumPlusProvider = + Provider.of(context, listen: false); + WalletsProfilesProvider _walletsProfiles = + Provider.of(context, listen: false); + if (indexerEndpoint == '') { + return const Text('Aucun résultat'); + } + + return Query( + options: QueryOptions( + document: gql( + searchAddressByNameQ), // this is the query string you just created + variables: { + 'name': name, + }, + // pollInterval: const Duration(seconds: 10), + ), + builder: (QueryResult result, + {VoidCallback? refetch, FetchMore? fetchMore}) { + if (result.hasException) { + return Text(result.exception.toString()); + } + + if (result.isLoading) { + return const Text('Loading'); + } + + final List identities = result.data?['search_identity'] ?? []; + + if (identities.isEmpty) { + return const Text('Aucun résultat'); + } + + int keyID = 0; + double _avatarSize = 55; + return Expanded( + child: ListView(children: [ + for (Map profile in identities) + Padding( + padding: const EdgeInsets.symmetric(horizontal: 5), + child: ListTile( + key: Key('searchResult${keyID++}'), + horizontalTitleGap: 40, + contentPadding: const EdgeInsets.all(5), + leading: _cesiumPlusProvider.defaultAvatar(_avatarSize), + title: Row(children: [ + Text(getShortPubkey(profile['id']), + style: const TextStyle( + fontSize: 18, + fontFamily: 'Monospace', + fontWeight: FontWeight.w500), + textAlign: TextAlign.center), + ]), + trailing: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [balance(context, profile['id'], 16)]), + subtitle: Row(children: [ + Text(profile['name'] ?? '', + style: const TextStyle( + fontSize: 18, fontWeight: FontWeight.w500), + textAlign: TextAlign.center), + ]), + dense: false, + isThreeLine: false, + onTap: () { + Navigator.push( + context, + MaterialPageRoute(builder: (context) { + _walletsProfiles.address = profile['id']; + return WalletViewScreen( + pubkey: profile['id'], + username: + g1WalletsBox.get(profile['id'])?.id?.username, + avatar: g1WalletsBox.get(profile['id'])?.avatar, + ); + }), + ); + }), + ), + ]), + ); + }); + } } diff --git a/lib/screens/search_result.dart b/lib/screens/search_result.dart index a0caab8..9542946 100644 --- a/lib/screens/search_result.dart +++ b/lib/screens/search_result.dart @@ -3,6 +3,7 @@ import 'package:gecko/globals.dart'; import 'package:flutter/material.dart'; import 'package:gecko/providers/cesium_plus.dart'; import 'package:gecko/models/g1_wallets_list.dart'; +import 'package:gecko/providers/duniter_indexer.dart'; import 'package:gecko/providers/home.dart'; import 'package:gecko/providers/substrate_sdk.dart'; import 'package:gecko/providers/wallet_options.dart'; @@ -26,6 +27,8 @@ class SearchResultScreen extends StatelessWidget { Provider.of(context, listen: false); HomeProvider _homeProvider = Provider.of(context, listen: false); + DuniterIndexer _duniterIndexer = + Provider.of(context, listen: false); int keyID = 0; double _avatarSize = 55; @@ -78,7 +81,10 @@ class SearchResultScreen extends StatelessWidget { if (snapshot.connectionState == ConnectionState.done) { log.d(snapshot.data); if (snapshot.data?.isEmpty ?? true) { - return const Text('Aucun résultat'); + return _duniterIndexer.searchIdentity( + context, _searchProvider.searchController.text); + + // const Text('Aucun résultat'); } else { return Expanded( child: ListView(children: [ @@ -91,53 +97,8 @@ class SearchResultScreen extends StatelessWidget { key: Key('searchResult${keyID++}'), horizontalTitleGap: 40, contentPadding: const EdgeInsets.all(5), - leading: - // g1WalletsBox.get(g1Wallet.pubkey) - // ?.avatar != - // null - // ? - _cesiumPlusProvider - .defaultAvatar(_avatarSize), - // : FutureBuilder( - // future: _cesiumPlusProvider.getAvatar( - // g1Wallet.pubkey, _avatarSize), - // builder: (BuildContext context, - // AsyncSnapshot _avatar) { - // if (_avatar.connectionState != - // ConnectionState.done || - // _avatar.hasError) { - // return Stack(children: [ - // _cesiumPlusProvider - // .defaultAvatar(_avatarSize), - // Positioned( - // top: 8, - // right: 0, - // width: 12, - // height: 12, - // child: CircularProgressIndicator( - // strokeWidth: 1, - // color: orangeC, - // ), - // ), - // ]); - // } - // if (_avatar.hasData) { - // final _w = - // g1WalletsBox.get(g1Wallet.pubkey); - // if (_w != null) { - // _w.avatar = _avatar.data; - // } - // return ClipOval(child: _avatar.data); - // } else { - // g1WalletsBox - // .get(g1Wallet.pubkey)! - // .avatar = - // _cesiumPlusProvider - // .defaultAvatar(_avatarSize); - // return _cesiumPlusProvider - // .defaultAvatar(_avatarSize); - // } - // }), + leading: _cesiumPlusProvider + .defaultAvatar(_avatarSize), title: Row(children: [ Text(getShortPubkey(g1Wallet.pubkey!), style: const TextStyle( @@ -154,11 +115,8 @@ class SearchResultScreen extends StatelessWidget { context, g1Wallet.pubkey!, 16) ]), subtitle: Row(children: [ - Text(g1Wallet.id?.username ?? '', - style: const TextStyle( - fontSize: 18, - fontWeight: FontWeight.w500), - textAlign: TextAlign.center), + _duniterIndexer.getNameByAddress( + context, g1Wallet.pubkey!) ]), dense: false, isThreeLine: false,