gecko/lib/screens/search_result.dart

194 lines
8.7 KiB
Dart
Raw Normal View History

2021-11-23 04:11:45 +01:00
import 'package:flutter/services.dart';
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';
2022-05-28 00:17:50 +02:00
import 'package:gecko/providers/substrate_sdk.dart';
2022-05-21 06:47:26 +02:00
import 'package:gecko/providers/wallet_options.dart';
import 'package:gecko/providers/wallets_profiles.dart';
import 'package:gecko/providers/search.dart';
2021-11-30 01:25:48 +01:00
import 'package:gecko/screens/wallet_view.dart';
2021-11-23 04:11:45 +01:00
import 'package:provider/provider.dart';
class SearchResultScreen extends StatelessWidget {
2021-12-23 12:36:09 +01:00
const SearchResultScreen({Key? key}) : super(key: key);
2021-11-23 04:11:45 +01:00
@override
Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
2021-11-30 10:28:13 +01:00
SearchProvider _searchProvider =
Provider.of<SearchProvider>(context, listen: false);
CesiumPlusProvider _cesiumPlusProvider =
2021-11-30 10:28:13 +01:00
Provider.of<CesiumPlusProvider>(context, listen: false);
2021-11-30 01:25:48 +01:00
WalletsProfilesProvider _walletsProfilesClass =
Provider.of<WalletsProfilesProvider>(context, listen: false);
int keyID = 0;
double _avatarSize = 55;
2021-11-23 04:11:45 +01:00
return Scaffold(
appBar: AppBar(
toolbarHeight: 60 * ratio,
title: const SizedBox(
height: 22,
child: Text('Résultats de votre recherche'),
),
),
body: SafeArea(
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 20),
2021-11-30 01:25:48 +01:00
child:
Column(crossAxisAlignment: CrossAxisAlignment.start, children: <
Widget>[
const SizedBox(height: 30),
RichText(
text: TextSpan(
style: TextStyle(
fontSize: 18,
color: Colors.grey[700],
),
2021-11-30 01:25:48 +01:00
children: <TextSpan>[
const TextSpan(
text: "Résultats pour ",
),
TextSpan(
text: '"${_searchProvider.searchController.text}"',
style: const TextStyle(fontStyle: FontStyle.italic),
),
],
),
),
const SizedBox(height: 40),
Text(
'Dans la blockchain $currencyName',
style: const TextStyle(fontSize: 20),
2021-11-30 01:25:48 +01:00
),
const SizedBox(height: 20),
FutureBuilder(
future: _searchProvider.searchBlockchain(),
2021-12-23 12:36:09 +01:00
builder: (context, AsyncSnapshot<List?> snapshot) {
2021-11-30 01:25:48 +01:00
if (snapshot.connectionState == ConnectionState.done) {
return Expanded(
child: ListView(children: <Widget>[
2021-12-23 12:36:09 +01:00
for (G1WalletsList g1Wallet in snapshot.data ?? [])
2021-11-30 01:25:48 +01:00
Padding(
padding: const EdgeInsets.symmetric(horizontal: 5),
child: ListTile(
key: Key('searchResult${keyID++}'),
horizontalTitleGap: 40,
contentPadding: const EdgeInsets.all(5),
leading: g1WalletsBox
.get(g1Wallet.pubkey)
2021-12-03 10:25:36 +01:00
?.avatar !=
2021-11-30 01:25:48 +01:00
null
? ClipOval(
child: g1WalletsBox
2021-12-23 12:36:09 +01:00
.get(g1Wallet.pubkey)!
2021-11-30 01:25:48 +01:00
.avatar)
: FutureBuilder(
future: _cesiumPlusProvider.getAvatar(
g1Wallet.pubkey, _avatarSize),
builder: (BuildContext context,
2021-12-23 12:36:09 +01:00
AsyncSnapshot<Image?> _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) {
2022-05-19 09:07:26 +02:00
final _w =
g1WalletsBox.get(g1Wallet.pubkey);
if (_w != null) {
_w.avatar = _avatar.data;
}
return ClipOval(child: _avatar.data);
2021-11-30 01:25:48 +01:00
} else {
g1WalletsBox
2021-12-23 12:36:09 +01:00
.get(g1Wallet.pubkey)!
2021-11-30 01:25:48 +01:00
.avatar =
_cesiumPlusProvider
.defaultAvatar(_avatarSize);
return _cesiumPlusProvider
.defaultAvatar(_avatarSize);
}
}),
2021-11-30 01:25:48 +01:00
title: Row(children: <Widget>[
Text(
2022-05-28 00:17:50 +02:00
getShortPubkey(g1Wallet.pubkey!),
2021-11-30 01:25:48 +01:00
style: const TextStyle(
fontSize: 18,
fontFamily: 'Monospace',
fontWeight: FontWeight.w500),
textAlign: TextAlign.center),
]),
2022-05-21 06:47:26 +02:00
trailing: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
balance(context, g1Wallet.pubkey!, 16)
]),
2021-11-30 01:25:48 +01:00
subtitle: Row(children: <Widget>[
2021-12-23 12:36:09 +01:00
Text(g1Wallet.id?.username ?? '',
2021-11-30 01:25:48 +01:00
style: const TextStyle(
fontSize: 18,
fontWeight: FontWeight.w500),
textAlign: TextAlign.center),
]),
dense: false,
isThreeLine: false,
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) {
_walletsProfilesClass.pubkey =
g1Wallet.pubkey;
return WalletViewScreen(
pubkey: g1Wallet.pubkey,
username: g1WalletsBox
.get(g1Wallet.pubkey)
2021-12-03 10:25:36 +01:00
?.id
2021-11-30 01:25:48 +01:00
?.username,
avatar: g1WalletsBox
.get(g1Wallet.pubkey)
?.avatar,
);
}),
2021-11-30 01:25:48 +01:00
);
}),
),
]),
);
}
return Center(
heightFactor: 5,
child: CircularProgressIndicator(
strokeWidth: 3,
backgroundColor: yellowC,
color: orangeC,
),
);
},
),
// Text(
// _searchProvider.searchResult.toString(),
// )
]),
2021-11-23 04:11:45 +01:00
),
),
);
}
}