Optimize profile view

This commit is contained in:
poka 2021-11-30 01:25:48 +01:00
parent 39881ba136
commit bd87ea5ab8
16 changed files with 420 additions and 253 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -25,7 +25,7 @@ import 'package:gecko/models/chest_data.dart';
import 'package:gecko/models/chest_provider.dart'; import 'package:gecko/models/chest_provider.dart';
import 'package:gecko/models/g1_wallets_list.dart'; import 'package:gecko/models/g1_wallets_list.dart';
import 'package:gecko/models/generate_wallets.dart'; import 'package:gecko/models/generate_wallets.dart';
import 'package:gecko/models/history.dart'; import 'package:gecko/models/wallets_profiles.dart';
import 'package:gecko/models/home.dart'; import 'package:gecko/models/home.dart';
import 'package:gecko/models/my_wallets.dart'; import 'package:gecko/models/my_wallets.dart';
import 'package:gecko/models/search.dart'; import 'package:gecko/models/search.dart';
@ -139,7 +139,7 @@ class Gecko extends StatelessWidget {
providers: [ providers: [
// Provider(create: (context) => HistoryProvider()), // Provider(create: (context) => HistoryProvider()),
ChangeNotifierProvider(create: (_) => HomeProvider()), ChangeNotifierProvider(create: (_) => HomeProvider()),
ChangeNotifierProvider(create: (_) => HistoryProvider('')), ChangeNotifierProvider(create: (_) => WalletsProfilesProvider('')),
ChangeNotifierProvider(create: (_) => MyWalletsProvider()), ChangeNotifierProvider(create: (_) => MyWalletsProvider()),
ChangeNotifierProvider(create: (_) => ChestProvider()), ChangeNotifierProvider(create: (_) => ChestProvider()),
ChangeNotifierProvider(create: (_) => GenerateWalletsProvider()), ChangeNotifierProvider(create: (_) => GenerateWalletsProvider()),

View File

@ -1,3 +1,4 @@
import 'package:flutter/material.dart';
import 'package:hive_flutter/hive_flutter.dart'; import 'package:hive_flutter/hive_flutter.dart';
part 'g1_wallets_list.g.dart'; part 'g1_wallets_list.g.dart';
@ -13,7 +14,10 @@ class G1WalletsList {
@HiveField(3) @HiveField(3)
Id id; Id id;
G1WalletsList({this.pubkey, this.balance, this.id}); @HiveField(4)
Image avatar;
G1WalletsList({this.pubkey, this.balance, this.id, this.avatar});
G1WalletsList.fromJson(Map<String, dynamic> json) { G1WalletsList.fromJson(Map<String, dynamic> json) {
pubkey = json['pubkey']; pubkey = json['pubkey'];

View File

@ -1,5 +1,7 @@
// GENERATED CODE - DO NOT MODIFY BY HAND // GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: unused_local_variable
part of 'g1_wallets_list.dart'; part of 'g1_wallets_list.dart';
// ************************************************************************** // **************************************************************************
@ -20,19 +22,22 @@ class G1WalletsListAdapter extends TypeAdapter<G1WalletsList> {
pubkey: fields[0] as String, pubkey: fields[0] as String,
balance: fields[1] as double, balance: fields[1] as double,
id: fields[3] as Id, id: fields[3] as Id,
avatar: fields[4] as Image,
); );
} }
@override @override
void write(BinaryWriter writer, G1WalletsList obj) { void write(BinaryWriter writer, G1WalletsList obj) {
writer writer
..writeByte(3) ..writeByte(4)
..writeByte(0) ..writeByte(0)
..write(obj.pubkey) ..write(obj.pubkey)
..writeByte(1) ..writeByte(1)
..write(obj.balance) ..write(obj.balance)
..writeByte(3) ..writeByte(3)
..write(obj.id); ..write(obj.id)
..writeByte(4)
..write(obj.avatar);
} }
@override @override
@ -52,6 +57,10 @@ class IdAdapter extends TypeAdapter<Id> {
@override @override
Id read(BinaryReader reader) { Id read(BinaryReader reader) {
final numOfFields = reader.readByte();
final fields = <int, dynamic>{
for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
};
return Id(); return Id();
} }

View File

@ -8,7 +8,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'dart:async'; import 'dart:async';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:gecko/screens/history.dart'; import 'package:gecko/screens/old_history_pay.dart';
import 'package:gecko/screens/myWallets/wallets_home.dart'; import 'package:gecko/screens/myWallets/wallets_home.dart';
import 'package:package_info/package_info.dart'; import 'package:package_info/package_info.dart';

View File

@ -19,14 +19,17 @@ class SearchProvider with ChangeNotifier {
searchResult.clear(); searchResult.clear();
int searchTime = DateTime.now().millisecondsSinceEpoch; int searchTime = DateTime.now().millisecondsSinceEpoch;
if (cacheTime + cacheDuring <= searchTime) { if (cacheTime + 0 <= searchTime) {
g1WalletsBox.clear(); g1WalletsBox.clear();
final url = Uri.parse('https://g1-stats.axiom-team.fr/data/forbes.json'); final url = Uri.parse('https://g1-stats.axiom-team.fr/data/forbes.json');
final response = await http.get(url); final response = await http.get(url);
List<G1WalletsList> _listWallets = _parseG1Wallets(response.body); List<G1WalletsList> _listWallets = _parseG1Wallets(response.body);
Map<String, G1WalletsList> _mapWallets = {
for (var e in _listWallets) e.pubkey: e
};
await g1WalletsBox.addAll(_listWallets); await g1WalletsBox.putAll(_mapWallets);
cacheTime = DateTime.now().millisecondsSinceEpoch; cacheTime = DateTime.now().millisecondsSinceEpoch;
} }

View File

@ -15,10 +15,11 @@ import 'package:truncate/truncate.dart';
import 'package:crypto/crypto.dart'; import 'package:crypto/crypto.dart';
import 'package:fast_base58/fast_base58.dart'; import 'package:fast_base58/fast_base58.dart';
class HistoryProvider with ChangeNotifier { class WalletsProfilesProvider with ChangeNotifier {
WalletsProfilesProvider(this.pubkey);
String pubkey = ''; String pubkey = '';
String pubkeyShort = ''; String pubkeyShort = '';
HistoryProvider(this.pubkey);
final TextEditingController outputPubkey = TextEditingController(); final TextEditingController outputPubkey = TextEditingController();
List transBC; List transBC;
String fetchMoreCursor; String fetchMoreCursor;
@ -38,9 +39,14 @@ class HistoryProvider with ChangeNotifier {
log.e(e); log.e(e);
return 'false'; return 'false';
} }
if (barcode != null) { if (barcode != null && isPubkey(context, barcode)) {
outputPubkey.text = barcode; outputPubkey.text = barcode;
isPubkey(context, barcode); Navigator.push(
context,
MaterialPageRoute(builder: (context) {
return const WalletViewScreen();
}),
);
} else { } else {
return 'false'; return 'false';
} }
@ -71,7 +77,7 @@ class HistoryProvider with ChangeNotifier {
} }
} }
String isPubkey(context, pubkey, {bool goHistory}) { bool isPubkey(context, pubkey) {
final RegExp regExp = RegExp( final RegExp regExp = RegExp(
r'^[a-zA-Z0-9]+$', r'^[a-zA-Z0-9]+$',
caseSensitive: false, caseSensitive: false,
@ -84,32 +90,22 @@ class HistoryProvider with ChangeNotifier {
log.d("C'est une pubkey !"); log.d("C'est une pubkey !");
this.pubkey = pubkey; this.pubkey = pubkey;
getShortPubkey(pubkey); // getShortPubkey(pubkey);
outputPubkey.text = pubkey; // outputPubkey.text = pubkey;
goHistory ??= false; // Navigator.push(
// context,
// MaterialPageRoute(builder: (context) {
// return const WalletViewScreen();
// }),
// );
// notifyListeners();
if (goHistory) { return true;
isHistoryScreen = true; } else {
historySwitchButtun = "Payer"; return false;
} else {
isHistoryScreen = false;
historySwitchButtun = "Voir l'historique";
}
Navigator.push(
context,
MaterialPageRoute(builder: (context) {
return WalletViewScreen();
}),
);
notifyListeners();
return pubkey;
} }
return '';
} }
String getShortPubkey(String pubkey) { String getShortPubkey(String pubkey) {

View File

@ -8,8 +8,11 @@ import 'package:flutter/material.dart';
class AvatarFullscreen extends StatelessWidget { class AvatarFullscreen extends StatelessWidget {
TextEditingController tplController = TextEditingController(); TextEditingController tplController = TextEditingController();
AvatarFullscreen(this.avatar, {Key key}) : super(key: key); AvatarFullscreen(this.avatar, {this.title, this.color, Key key})
: super(key: key);
final Image avatar; final Image avatar;
final String title;
final Color color;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -18,7 +21,7 @@ class AvatarFullscreen extends StatelessWidget {
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
elevation: 0, elevation: 0,
backgroundColor: Colors.black, backgroundColor: color ?? Colors.black,
toolbarHeight: 60 * ratio, toolbarHeight: 60 * ratio,
leading: IconButton( leading: IconButton(
icon: Icon(Icons.arrow_back, color: orangeC), icon: Icon(Icons.arrow_back, color: orangeC),
@ -28,14 +31,14 @@ class AvatarFullscreen extends StatelessWidget {
title: SizedBox( title: SizedBox(
height: 22, height: 22,
child: Text( child: Text(
'Photo de profil', title ?? 'Photo de profil',
style: TextStyle(color: orangeC), style: TextStyle(color: orangeC),
), ),
)), )),
body: SafeArea( body: SafeArea(
child: SizedBox.expand( child: SizedBox.expand(
child: Container( child: Container(
color: Colors.black, color: color ?? Colors.black,
// alignment: Alignment.center, // alignment: Alignment.center,
// height: MediaQuery.of(context).size.height, // height: MediaQuery.of(context).size.height,
// width: MediaQuery.of(context).size.width, // width: MediaQuery.of(context).size.width,

View File

@ -2,7 +2,7 @@ import 'package:bubble/bubble.dart';
import 'package:dubp/dubp.dart'; import 'package:dubp/dubp.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:gecko/models/chest_provider.dart'; import 'package:gecko/models/chest_provider.dart';
import 'package:gecko/models/history.dart'; import 'package:gecko/models/wallets_profiles.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/models/home.dart'; import 'package:gecko/models/home.dart';
import 'package:gecko/models/my_wallets.dart'; import 'package:gecko/models/my_wallets.dart';
@ -123,7 +123,8 @@ Widget geckHome(context) {
MyWalletsProvider _myWalletProvider = Provider.of<MyWalletsProvider>(context); MyWalletsProvider _myWalletProvider = Provider.of<MyWalletsProvider>(context);
Provider.of<ChestProvider>(context); Provider.of<ChestProvider>(context);
HistoryProvider _historyProvider = Provider.of<HistoryProvider>(context); WalletsProfilesProvider _historyProvider =
Provider.of<WalletsProfilesProvider>(context);
final double statusBarHeight = MediaQuery.of(context).padding.top; final double statusBarHeight = MediaQuery.of(context).padding.top;
return Container( return Container(
decoration: const BoxDecoration( decoration: const BoxDecoration(

View File

@ -5,11 +5,12 @@ import 'package:flutter/material.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:gecko/models/chest_data.dart'; import 'package:gecko/models/chest_data.dart';
import 'package:gecko/models/chest_provider.dart'; import 'package:gecko/models/chest_provider.dart';
import 'package:gecko/models/history.dart'; import 'package:gecko/models/wallets_profiles.dart';
import 'package:gecko/models/my_wallets.dart'; import 'package:gecko/models/my_wallets.dart';
import 'package:gecko/models/queries.dart'; import 'package:gecko/models/queries.dart';
import 'package:gecko/models/wallet_options.dart'; import 'package:gecko/models/wallet_options.dart';
import 'package:gecko/screens/myWallets/change_pin.dart'; import 'package:gecko/screens/myWallets/change_pin.dart';
import 'package:gecko/screens/wallet_view.dart';
import 'package:graphql_flutter/graphql_flutter.dart'; import 'package:graphql_flutter/graphql_flutter.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
@ -24,7 +25,8 @@ Widget cesiumWalletOptions(BuildContext context, ChestData cesiumWallet,
Provider.of<WalletOptionsProvider>(context); Provider.of<WalletOptionsProvider>(context);
ChestProvider _chestProvider = ChestProvider _chestProvider =
Provider.of<ChestProvider>(context, listen: false); Provider.of<ChestProvider>(context, listen: false);
HistoryProvider _historyProvider = Provider.of<HistoryProvider>(context); WalletsProfilesProvider _historyProvider =
Provider.of<WalletsProfilesProvider>(context);
final String shortPubkey = final String shortPubkey =
_walletOptions.getShortPubkey(_walletOptions.pubkey.text); _walletOptions.getShortPubkey(_walletOptions.pubkey.text);
@ -283,8 +285,15 @@ Widget cesiumWalletOptions(BuildContext context, ChestData cesiumWallet,
InkWell( InkWell(
key: const Key('displayHistory'), key: const Key('displayHistory'),
onTap: () { onTap: () {
_historyProvider.isPubkey(ctx, _walletOptions.pubkey.text, if (_historyProvider.isPubkey(
goHistory: true); context, _walletOptions.pubkey.text)) {
Navigator.push(
context,
MaterialPageRoute(builder: (context) {
return const WalletViewScreen();
}),
);
}
}, },
child: SizedBox( child: SizedBox(
height: 50, height: 50,

View File

@ -2,7 +2,7 @@ import 'dart:async';
import 'package:dubp/dubp.dart'; import 'package:dubp/dubp.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:gecko/models/chest_data.dart'; import 'package:gecko/models/chest_data.dart';
import 'package:gecko/models/history.dart'; import 'package:gecko/models/wallets_profiles.dart';
import 'package:gecko/models/my_wallets.dart'; import 'package:gecko/models/my_wallets.dart';
import 'package:gecko/models/wallet_data.dart'; import 'package:gecko/models/wallet_data.dart';
import 'package:gecko/models/wallet_options.dart'; import 'package:gecko/models/wallet_options.dart';
@ -124,7 +124,8 @@ class UnlockingWallet extends StatelessWidget {
Provider.of<WalletOptionsProvider>(context); Provider.of<WalletOptionsProvider>(context);
MyWalletsProvider _myWalletProvider = MyWalletsProvider _myWalletProvider =
Provider.of<MyWalletsProvider>(context); Provider.of<MyWalletsProvider>(context);
HistoryProvider _historyProvider = Provider.of<HistoryProvider>(context); WalletsProfilesProvider _historyProvider =
Provider.of<WalletsProfilesProvider>(context);
FocusNode pinFocus = FocusNode(); FocusNode pinFocus = FocusNode();

View File

@ -3,11 +3,12 @@ import 'dart:ui';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:gecko/models/history.dart'; import 'package:gecko/models/wallets_profiles.dart';
import 'package:gecko/models/my_wallets.dart'; import 'package:gecko/models/my_wallets.dart';
import 'package:gecko/models/queries.dart'; import 'package:gecko/models/queries.dart';
import 'package:gecko/models/wallet_data.dart'; import 'package:gecko/models/wallet_data.dart';
import 'package:gecko/models/wallet_options.dart'; import 'package:gecko/models/wallet_options.dart';
import 'package:gecko/screens/wallet_view.dart';
import 'package:graphql_flutter/graphql_flutter.dart'; import 'package:graphql_flutter/graphql_flutter.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
@ -27,7 +28,8 @@ class WalletOptions extends StatelessWidget {
Provider.of<WalletOptionsProvider>(context); Provider.of<WalletOptionsProvider>(context);
MyWalletsProvider _myWalletProvider = MyWalletsProvider _myWalletProvider =
Provider.of<MyWalletsProvider>(context); Provider.of<MyWalletsProvider>(context);
HistoryProvider _historyProvider = Provider.of<HistoryProvider>(context); WalletsProfilesProvider _historyProvider =
Provider.of<WalletsProfilesProvider>(context);
final int _currentChest = _myWalletProvider.getCurrentChest(); final int _currentChest = _myWalletProvider.getCurrentChest();
final String shortPubkey = final String shortPubkey =
@ -263,14 +265,14 @@ class WalletOptions extends StatelessWidget {
])), ])),
SizedBox(height: 4 * ratio), SizedBox(height: 4 * ratio),
FutureBuilder( FutureBuilder(
future: future:
_walletOptions.generateQRcode(_walletOptions.pubkey.text), _walletOptions.generateQRcode(_walletOptions.pubkey.text),
builder: (context, snapshot) { builder: (context, snapshot) {
return snapshot.data != null return snapshot.data != null
? Image.memory(snapshot.data, ? Image.memory(snapshot.data, height: isTall ? 300 : 270)
height: isTall ? 300 : 270) : const Text('-', style: TextStyle(fontSize: 20));
: const Text('-', style: TextStyle(fontSize: 20)); },
}), ),
SizedBox(height: 15 * ratio), SizedBox(height: 15 * ratio),
GestureDetector( GestureDetector(
key: const Key('copyPubkey'), key: const Key('copyPubkey'),
@ -337,8 +339,15 @@ class WalletOptions extends StatelessWidget {
InkWell( InkWell(
key: const Key('displayHistory'), key: const Key('displayHistory'),
onTap: () { onTap: () {
_historyProvider.isPubkey(ctx, _walletOptions.pubkey.text, if (_historyProvider.isPubkey(
goHistory: true); context, _walletOptions.pubkey.text)) {
Navigator.push(
context,
MaterialPageRoute(builder: (context) {
return const WalletViewScreen();
}),
);
}
}, },
child: SizedBox( child: SizedBox(
height: 50, height: 50,

View File

@ -4,11 +4,12 @@ import 'package:gecko/models/cesium_plus.dart';
import 'package:gecko/models/home.dart'; import 'package:gecko/models/home.dart';
import 'package:gecko/models/my_wallets.dart'; import 'package:gecko/models/my_wallets.dart';
import 'package:gecko/models/queries.dart'; import 'package:gecko/models/queries.dart';
import 'package:gecko/models/history.dart'; import 'package:gecko/models/wallets_profiles.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:gecko/models/wallet_data.dart'; import 'package:gecko/models/wallet_data.dart';
import 'package:gecko/screens/myWallets/unlocking_wallet.dart'; import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
import 'package:gecko/screens/wallet_view.dart';
import 'dart:ui'; import 'dart:ui';
import 'package:graphql_flutter/graphql_flutter.dart'; import 'package:graphql_flutter/graphql_flutter.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -33,7 +34,8 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
HistoryProvider _historyProvider = Provider.of<HistoryProvider>(context); WalletsProfilesProvider _historyProvider =
Provider.of<WalletsProfilesProvider>(context);
HomeProvider _homeProvider = Provider.of<HomeProvider>(context); HomeProvider _homeProvider = Provider.of<HomeProvider>(context);
_outputPubkey.text = _historyProvider.pubkey; _outputPubkey.text = _historyProvider.pubkey;
log.i('Build pubkey : ' + _historyProvider.pubkey); log.i('Build pubkey : ' + _historyProvider.pubkey);
@ -61,10 +63,14 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier {
controller: _homeProvider.searchQuery, controller: _homeProvider.searchQuery,
onChanged: (text) { onChanged: (text) {
log.d("Clé tappé: $text"); log.d("Clé tappé: $text");
final String searchResult = if (_historyProvider.isPubkey(context, text)) {
_historyProvider.isPubkey(context, text);
if (searchResult != '') {
_homeProvider.currentIndex = 0; _homeProvider.currentIndex = 0;
Navigator.push(
context,
MaterialPageRoute(builder: (context) {
return const WalletViewScreen();
}),
);
} }
}, },
style: TextStyle( style: TextStyle(
@ -111,7 +117,7 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier {
])); ]));
} }
Widget historyQuery(context, HistoryProvider _historyProvider) { Widget historyQuery(context, WalletsProfilesProvider _historyProvider) {
_pubkeyFocus.unfocus(); _pubkeyFocus.unfocus();
// HistoryProvider _historyProvider = Provider.of<HistoryProvider>(context); // HistoryProvider _historyProvider = Provider.of<HistoryProvider>(context);
CesiumPlusProvider _cesiumPlusProvider = CesiumPlusProvider _cesiumPlusProvider =
@ -327,7 +333,7 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier {
)); ));
} }
Widget payView(context, HistoryProvider _historyProvider) { Widget payView(context, WalletsProfilesProvider _historyProvider) {
MyWalletsProvider _myWalletProvider = MyWalletsProvider(); MyWalletsProvider _myWalletProvider = MyWalletsProvider();
WalletData defaultWallet = WalletData defaultWallet =
_myWalletProvider.getDefaultWallet(configBox.get('currentChest')); _myWalletProvider.getDefaultWallet(configBox.get('currentChest'));
@ -407,7 +413,10 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier {
} }
Widget historyView(context, result) { Widget historyView(context, result) {
HistoryProvider _historyProvider = Provider.of<HistoryProvider>(context); WalletsProfilesProvider _historyProvider =
Provider.of<WalletsProfilesProvider>(context);
HomeProvider _homeProvider =
Provider.of<HomeProvider>(context, listen: false);
int keyID = 0; int keyID = 0;
return _historyProvider.transBC == null return _historyProvider.transBC == null
@ -438,8 +447,15 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier {
dense: true, dense: true,
isThreeLine: false, isThreeLine: false,
onTap: () { onTap: () {
// this._outputPubkey.text = repository[2]; if (_historyProvider.isPubkey(context, repository[2])) {
_historyProvider.isPubkey(context, repository[2]); _homeProvider.currentIndex = 0;
Navigator.push(
context,
MaterialPageRoute(builder: (context) {
return const WalletViewScreen();
}),
);
}
Navigator.pop(context); Navigator.pop(context);
}), }),
), ),

View File

@ -3,8 +3,9 @@ import 'package:gecko/globals.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/models/cesium_plus.dart'; import 'package:gecko/models/cesium_plus.dart';
import 'package:gecko/models/g1_wallets_list.dart'; import 'package:gecko/models/g1_wallets_list.dart';
import 'package:gecko/models/history.dart'; import 'package:gecko/models/wallets_profiles.dart';
import 'package:gecko/models/search.dart'; import 'package:gecko/models/search.dart';
import 'package:gecko/screens/wallet_view.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class SearchResultScreen extends StatelessWidget { class SearchResultScreen extends StatelessWidget {
@ -16,8 +17,8 @@ class SearchResultScreen extends StatelessWidget {
SearchProvider _searchProvider = Provider.of<SearchProvider>(context); SearchProvider _searchProvider = Provider.of<SearchProvider>(context);
CesiumPlusProvider _cesiumPlusProvider = CesiumPlusProvider _cesiumPlusProvider =
Provider.of<CesiumPlusProvider>(context); Provider.of<CesiumPlusProvider>(context);
HistoryProvider _historyClass = WalletsProfilesProvider _walletsProfilesClass =
Provider.of<HistoryProvider>(context, listen: false); Provider.of<WalletsProfilesProvider>(context, listen: false);
int keyID = 0; int keyID = 0;
double _avatarSize = 55; double _avatarSize = 55;
@ -33,48 +34,55 @@ class SearchResultScreen extends StatelessWidget {
body: SafeArea( body: SafeArea(
child: Padding( child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 20), padding: const EdgeInsets.symmetric(horizontal: 20),
child: Column( child:
crossAxisAlignment: CrossAxisAlignment.start, Column(crossAxisAlignment: CrossAxisAlignment.start, children: <
children: <Widget>[ Widget>[
const SizedBox(height: 30), const SizedBox(height: 30),
RichText( RichText(
text: TextSpan( text: TextSpan(
style: TextStyle( style: TextStyle(
fontSize: 18, fontSize: 18,
color: Colors.grey[700], color: Colors.grey[700],
), ),
children: <TextSpan>[ children: <TextSpan>[
const TextSpan( const TextSpan(
text: "Résultats pour ", text: "Résultats pour ",
),
TextSpan(
text: '"${_searchProvider.searchController.text}"',
style: const TextStyle(fontStyle: FontStyle.italic),
),
],
), ),
), TextSpan(
const SizedBox(height: 40), text: '"${_searchProvider.searchController.text}"',
const Text( style: const TextStyle(fontStyle: FontStyle.italic),
'Dans la blockchain Ğ1', ),
style: TextStyle(fontSize: 20), ],
), ),
const SizedBox(height: 20), ),
FutureBuilder( const SizedBox(height: 40),
future: _searchProvider.searchBlockchain(), const Text(
builder: (context, snapshot) { 'Dans la blockchain Ğ1',
if (snapshot.connectionState == ConnectionState.done) { style: TextStyle(fontSize: 20),
return Expanded( ),
child: ListView(children: <Widget>[ const SizedBox(height: 20),
for (G1WalletsList g1Wallet in snapshot.data) FutureBuilder(
Padding( future: _searchProvider.searchBlockchain(),
padding: builder: (context, snapshot) {
const EdgeInsets.symmetric(horizontal: 5), if (snapshot.connectionState == ConnectionState.done) {
child: ListTile( return Expanded(
key: Key('searchResult${keyID++}'), child: ListView(children: <Widget>[
horizontalTitleGap: 40, for (G1WalletsList g1Wallet in snapshot.data)
contentPadding: const EdgeInsets.all(5), Padding(
leading: FutureBuilder( padding: const EdgeInsets.symmetric(horizontal: 5),
child: ListTile(
key: Key('searchResult${keyID++}'),
horizontalTitleGap: 40,
contentPadding: const EdgeInsets.all(5),
leading: g1WalletsBox
.get(g1Wallet.pubkey)
.avatar !=
null
? ClipOval(
child: g1WalletsBox
.get(g1Wallet.pubkey)
.avatar)
: FutureBuilder(
future: _cesiumPlusProvider.getAvatar( future: _cesiumPlusProvider.getAvatar(
g1Wallet.pubkey, _avatarSize), g1Wallet.pubkey, _avatarSize),
builder: (BuildContext context, builder: (BuildContext context,
@ -98,52 +106,76 @@ class SearchResultScreen extends StatelessWidget {
]); ]);
} }
if (_avatar.hasData) { if (_avatar.hasData) {
g1WalletsBox
.get(g1Wallet.pubkey)
.avatar = _avatar.data;
return ClipOval(child: _avatar.data); return ClipOval(child: _avatar.data);
} else {
g1WalletsBox
.get(g1Wallet.pubkey)
.avatar =
_cesiumPlusProvider
.defaultAvatar(_avatarSize);
return _cesiumPlusProvider
.defaultAvatar(_avatarSize);
} }
return _cesiumPlusProvider
.defaultAvatar(_avatarSize);
}), }),
title: Row(children: <Widget>[ title: Row(children: <Widget>[
Text( Text(
_historyClass _walletsProfilesClass
.getShortPubkey(g1Wallet.pubkey), .getShortPubkey(g1Wallet.pubkey),
style: const TextStyle( style: const TextStyle(
fontSize: 18, fontSize: 18,
fontFamily: 'Monospace', fontFamily: 'Monospace',
fontWeight: FontWeight.w500), fontWeight: FontWeight.w500),
textAlign: TextAlign.center), textAlign: TextAlign.center),
]), ]),
subtitle: Row(children: <Widget>[ subtitle: Row(children: <Widget>[
Text(g1Wallet?.id?.username ?? '', Text(g1Wallet?.id?.username ?? '',
style: const TextStyle( style: const TextStyle(
fontSize: 18, fontSize: 18,
fontWeight: FontWeight.w500), fontWeight: FontWeight.w500),
textAlign: TextAlign.center), textAlign: TextAlign.center),
]), ]),
dense: false, dense: false,
isThreeLine: false, isThreeLine: false,
onTap: () { onTap: () {
_historyClass.isPubkey( Navigator.push(
context, g1Wallet.pubkey); context,
MaterialPageRoute(builder: (context) {
_walletsProfilesClass.pubkey =
g1Wallet.pubkey;
return WalletViewScreen(
pubkey: g1Wallet.pubkey,
username: g1WalletsBox
.get(g1Wallet.pubkey)
.id
?.username,
avatar: g1WalletsBox
.get(g1Wallet.pubkey)
?.avatar,
);
}), }),
), );
]), }),
); ),
} ]),
return Center( );
heightFactor: 5, }
child: CircularProgressIndicator( return Center(
strokeWidth: 3, heightFactor: 5,
backgroundColor: yellowC, child: CircularProgressIndicator(
color: orangeC, strokeWidth: 3,
), backgroundColor: yellowC,
); color: orangeC,
}, ),
), );
// Text( },
// _searchProvider.searchResult.toString(), ),
// ) // Text(
]), // _searchProvider.searchResult.toString(),
// )
]),
), ),
), ),
); );

View File

@ -1,39 +1,68 @@
import 'dart:ui'; import 'dart:ui';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/models/cesium_plus.dart'; import 'package:gecko/models/cesium_plus.dart';
import 'package:gecko/models/history.dart'; import 'package:gecko/models/wallets_profiles.dart';
import 'package:gecko/models/queries.dart'; import 'package:gecko/models/queries.dart';
// import 'package:gecko/models/wallet_options.dart';
import 'package:gecko/screens/avatar_fullscreen.dart'; import 'package:gecko/screens/avatar_fullscreen.dart';
import 'package:graphql_flutter/graphql_flutter.dart'; import 'package:graphql_flutter/graphql_flutter.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
// import 'package:gecko/models/home.dart';
// import 'package:provider/provider.dart';
// ignore: must_be_immutable
class WalletViewScreen extends StatelessWidget { class WalletViewScreen extends StatelessWidget {
TextEditingController tplController = TextEditingController(); const WalletViewScreen({this.pubkey, this.username, this.avatar, Key key})
: super(key: key);
WalletViewScreen({Key key}) : super(key: key); final String pubkey;
final String username;
final Image avatar;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
HistoryProvider _historyProvider = Provider.of<HistoryProvider>(context); WalletsProfilesProvider _historyProvider =
Provider.of<WalletsProfilesProvider>(context);
CesiumPlusProvider _cesiumPlusProvider = CesiumPlusProvider _cesiumPlusProvider =
Provider.of<CesiumPlusProvider>(context); Provider.of<CesiumPlusProvider>(context);
// WalletOptionsProvider _walletOptions = WalletOptionsProvider();
double _avatarSize = 150; double _avatarSize = 150;
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
elevation: 0, elevation: 0,
toolbarHeight: 60 * ratio, toolbarHeight: 60 * ratio,
title: const SizedBox( title: const SizedBox(
height: 22, height: 22,
child: Text('Voir un portefeuille'), child: Text('Voir un portefeuille'),
)), ),
// actions: [
// FutureBuilder(
// future: _walletOptions.generateQRcode(_historyProvider.pubkey),
// builder: (context, snapshot) {
// return snapshot.data != null
// ? GestureDetector(
// key: const Key('openAvatar'),
// onTap: () {
// Navigator.push(
// context,
// MaterialPageRoute(builder: (context) {
// return AvatarFullscreen(
// Image.memory(snapshot.data),
// title: 'QrCode du profil',
// );
// }),
// );
// // isAvatarView = !isAvatarView;
// // _historyProvider.resetdHistory();
// },
// child: Image.memory(snapshot.data, height: 40 * ratio),
// )
// : const Text('-', style: TextStyle(fontSize: 20));
// },
// ),
// const SizedBox(width: 75)
// ],
),
body: SafeArea( body: SafeArea(
child: Column(children: <Widget>[ child: Column(children: <Widget>[
Container( Container(
@ -56,51 +85,62 @@ class WalletViewScreen extends StatelessWidget {
Column( Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[ children: <Widget>[
GestureDetector( Row(children: [
key: const Key('copyPubkey'), GestureDetector(
onTap: () { key: const Key('copyPubkey'),
Clipboard.setData( onTap: () {
ClipboardData(text: _historyProvider.pubkey)); Clipboard.setData(ClipboardData(
_historyProvider.snackCopyKey(context); text: pubkey ?? _historyProvider.pubkey));
}, _historyProvider.snackCopyKey(context);
child: Text( },
_historyProvider child: Text(
.getShortPubkey(_historyProvider.pubkey), _historyProvider.getShortPubkey(
style: const TextStyle( pubkey ?? _historyProvider.pubkey),
fontSize: 30, style: const TextStyle(
fontWeight: FontWeight.w800, fontSize: 30,
fontWeight: FontWeight.w800,
),
), ),
), ),
), ]),
const SizedBox(height: 10), const SizedBox(height: 10),
Query( if (username == null)
options: QueryOptions( Query(
document: gql(getId), options: QueryOptions(
variables: { document: gql(getId),
'pubkey': _historyProvider.pubkey, variables: {
'pubkey': _historyProvider.pubkey,
},
),
builder: (QueryResult result,
{VoidCallback refetch, FetchMore fetchMore}) {
if (result.isLoading || result.hasException) {
return const Text('...');
} else if (result.data['idty'] == null ||
result.data['idty']['username'] == null) {
return const Text('');
} else {
return SizedBox(
width: 230,
child: Text(
result?.data['idty']['username'] ?? '',
style: const TextStyle(
fontSize: 27,
color: Color(0xff814C00),
),
),
);
}
}, },
), ),
builder: (QueryResult result, if (username != null)
{VoidCallback refetch, FetchMore fetchMore}) { Text(
if (result.isLoading || result.hasException) { username,
return const Text('...'); style: const TextStyle(
} else if (result.data['idty'] == null || fontSize: 27,
result.data['idty']['username'] == null) { color: Color(0xff814C00),
return const Text(''); ),
} else { ),
return SizedBox(
width: 230,
child: Text(
result?.data['idty']['username'] ?? '',
style: const TextStyle(
fontSize: 27,
color: Color(0xff814C00),
),
),
);
}
},
),
const SizedBox(height: 25), const SizedBox(height: 25),
FutureBuilder( FutureBuilder(
future: _cesiumPlusProvider future: _cesiumPlusProvider
@ -120,51 +160,72 @@ class WalletViewScreen extends StatelessWidget {
]), ]),
const Spacer(), const Spacer(),
Column(children: <Widget>[ Column(children: <Widget>[
FutureBuilder( if (avatar == null)
future: _cesiumPlusProvider.getAvatar( FutureBuilder(
_historyProvider.pubkey, _avatarSize), future: _cesiumPlusProvider.getAvatar(
builder: (BuildContext context, _historyProvider.pubkey, _avatarSize),
AsyncSnapshot<Image> _avatar) { builder: (BuildContext context,
if (_avatar.connectionState != ConnectionState.done || AsyncSnapshot<Image> _avatar) {
_avatar.hasError) { if (_avatar.connectionState !=
return Stack(children: [ ConnectionState.done ||
ClipOval( _avatar.hasError) {
child: _cesiumPlusProvider return Stack(children: [
.defaultAvatar(_avatarSize), ClipOval(
), child: _cesiumPlusProvider
Positioned( .defaultAvatar(_avatarSize),
top: 16.5,
right: 47.5,
width: 55,
height: 55,
child: CircularProgressIndicator(
strokeWidth: 6,
color: orangeC,
), ),
), Positioned(
]); top: 16.5,
} right: 47.5,
if (_avatar.hasData) { width: 55,
return GestureDetector( height: 55,
key: const Key('openAvatar'), child: CircularProgressIndicator(
onTap: () { strokeWidth: 6,
Navigator.push( color: orangeC,
context, ),
MaterialPageRoute(builder: (context) { ),
return AvatarFullscreen(_avatar.data); ]);
}), }
); if (_avatar.hasData) {
}, return GestureDetector(
child: ClipOval( key: const Key('openAvatar'),
child: _avatar.data, onTap: () {
), Navigator.push(
context,
MaterialPageRoute(builder: (context) {
return AvatarFullscreen(_avatar.data);
}),
);
},
child: ClipOval(
child: _avatar.data,
),
);
}
return ClipOval(
child: _cesiumPlusProvider
.defaultAvatar(_avatarSize),
); );
} }),
return ClipOval( if (avatar != null)
child: GestureDetector(
_cesiumPlusProvider.defaultAvatar(_avatarSize), key: const Key('openAvatar'),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) {
return AvatarFullscreen(avatar);
}),
); );
}), },
child: ClipOval(
child: Image(
image: avatar.image,
height: _avatarSize,
fit: BoxFit.cover,
),
),
),
const SizedBox(height: 25), const SizedBox(height: 25),
]), ]),
]), ]),
@ -230,6 +291,29 @@ class WalletViewScreen extends StatelessWidget {
), ),
]), ]),
]), ]),
// FutureBuilder(
// future: _walletOptions.generateQRcode(_historyProvider.pubkey),
// builder: (context, snapshot) {
// return snapshot.data != null
// ? GestureDetector(
// key: const Key('openQrcode'),
// onTap: () {
// Navigator.push(
// context,
// MaterialPageRoute(builder: (context) {
// return AvatarFullscreen(
// Image.memory(snapshot.data),
// title: 'QrCode du profil',
// color: Colors.white,
// );
// }),
// );
// },
// child: Image.memory(snapshot.data, height: 60 * ratio),
// )
// : const Text('-', style: TextStyle(fontSize: 20));
// },
// ),
const Spacer(), const Spacer(),
Container( Container(
height: 120, height: 120,

View File

@ -5,7 +5,7 @@ description: Pay with G1.
# pub.dev using `pub publish`. This is preferred for private packages. # pub.dev using `pub publish`. This is preferred for private packages.
publish_to: 'none' # Remove this line if you wish to publish to pub.dev publish_to: 'none' # Remove this line if you wish to publish to pub.dev
version: 0.0.3+8 version: 0.0.3+9
environment: environment:
sdk: ">=2.7.0 <3.0.0" sdk: ">=2.7.0 <3.0.0"