diff --git a/assets/walletOptions/trash.png b/assets/walletOptions/trash.png index 2d008a0..e2c1cbc 100644 Binary files a/assets/walletOptions/trash.png and b/assets/walletOptions/trash.png differ diff --git a/lib/main.dart b/lib/main.dart index 585f1cd..053d46a 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -25,7 +25,7 @@ import 'package:gecko/models/chest_data.dart'; import 'package:gecko/models/chest_provider.dart'; import 'package:gecko/models/g1_wallets_list.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/my_wallets.dart'; import 'package:gecko/models/search.dart'; @@ -139,7 +139,7 @@ class Gecko extends StatelessWidget { providers: [ // Provider(create: (context) => HistoryProvider()), ChangeNotifierProvider(create: (_) => HomeProvider()), - ChangeNotifierProvider(create: (_) => HistoryProvider('')), + ChangeNotifierProvider(create: (_) => WalletsProfilesProvider('')), ChangeNotifierProvider(create: (_) => MyWalletsProvider()), ChangeNotifierProvider(create: (_) => ChestProvider()), ChangeNotifierProvider(create: (_) => GenerateWalletsProvider()), diff --git a/lib/models/g1_wallets_list.dart b/lib/models/g1_wallets_list.dart index 286e98e..2457f9f 100644 --- a/lib/models/g1_wallets_list.dart +++ b/lib/models/g1_wallets_list.dart @@ -1,3 +1,4 @@ +import 'package:flutter/material.dart'; import 'package:hive_flutter/hive_flutter.dart'; part 'g1_wallets_list.g.dart'; @@ -13,7 +14,10 @@ class G1WalletsList { @HiveField(3) 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 json) { pubkey = json['pubkey']; diff --git a/lib/models/g1_wallets_list.g.dart b/lib/models/g1_wallets_list.g.dart index 31b83c6..b729a6d 100644 --- a/lib/models/g1_wallets_list.g.dart +++ b/lib/models/g1_wallets_list.g.dart @@ -1,5 +1,7 @@ // GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: unused_local_variable + part of 'g1_wallets_list.dart'; // ************************************************************************** @@ -20,19 +22,22 @@ class G1WalletsListAdapter extends TypeAdapter { pubkey: fields[0] as String, balance: fields[1] as double, id: fields[3] as Id, + avatar: fields[4] as Image, ); } @override void write(BinaryWriter writer, G1WalletsList obj) { writer - ..writeByte(3) + ..writeByte(4) ..writeByte(0) ..write(obj.pubkey) ..writeByte(1) ..write(obj.balance) ..writeByte(3) - ..write(obj.id); + ..write(obj.id) + ..writeByte(4) + ..write(obj.avatar); } @override @@ -52,6 +57,10 @@ class IdAdapter extends TypeAdapter { @override Id read(BinaryReader reader) { + final numOfFields = reader.readByte(); + final fields = { + for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(), + }; return Id(); } diff --git a/lib/models/home.dart b/lib/models/home.dart index 1d8aacb..f8b99eb 100644 --- a/lib/models/home.dart +++ b/lib/models/home.dart @@ -8,7 +8,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'dart:async'; 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:package_info/package_info.dart'; diff --git a/lib/models/search.dart b/lib/models/search.dart index 6742966..7fa8673 100644 --- a/lib/models/search.dart +++ b/lib/models/search.dart @@ -19,14 +19,17 @@ class SearchProvider with ChangeNotifier { searchResult.clear(); int searchTime = DateTime.now().millisecondsSinceEpoch; - if (cacheTime + cacheDuring <= searchTime) { + if (cacheTime + 0 <= searchTime) { g1WalletsBox.clear(); final url = Uri.parse('https://g1-stats.axiom-team.fr/data/forbes.json'); final response = await http.get(url); List _listWallets = _parseG1Wallets(response.body); + Map _mapWallets = { + for (var e in _listWallets) e.pubkey: e + }; - await g1WalletsBox.addAll(_listWallets); + await g1WalletsBox.putAll(_mapWallets); cacheTime = DateTime.now().millisecondsSinceEpoch; } diff --git a/lib/models/history.dart b/lib/models/wallets_profiles.dart similarity index 92% rename from lib/models/history.dart rename to lib/models/wallets_profiles.dart index b72d22b..62a0dfc 100644 --- a/lib/models/history.dart +++ b/lib/models/wallets_profiles.dart @@ -15,10 +15,11 @@ import 'package:truncate/truncate.dart'; import 'package:crypto/crypto.dart'; import 'package:fast_base58/fast_base58.dart'; -class HistoryProvider with ChangeNotifier { +class WalletsProfilesProvider with ChangeNotifier { + WalletsProfilesProvider(this.pubkey); + String pubkey = ''; String pubkeyShort = ''; - HistoryProvider(this.pubkey); final TextEditingController outputPubkey = TextEditingController(); List transBC; String fetchMoreCursor; @@ -38,9 +39,14 @@ class HistoryProvider with ChangeNotifier { log.e(e); return 'false'; } - if (barcode != null) { + if (barcode != null && isPubkey(context, barcode)) { outputPubkey.text = barcode; - isPubkey(context, barcode); + Navigator.push( + context, + MaterialPageRoute(builder: (context) { + return const WalletViewScreen(); + }), + ); } else { return 'false'; } @@ -71,7 +77,7 @@ class HistoryProvider with ChangeNotifier { } } - String isPubkey(context, pubkey, {bool goHistory}) { + bool isPubkey(context, pubkey) { final RegExp regExp = RegExp( r'^[a-zA-Z0-9]+$', caseSensitive: false, @@ -84,32 +90,22 @@ class HistoryProvider with ChangeNotifier { log.d("C'est une 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) { - isHistoryScreen = true; - historySwitchButtun = "Payer"; - } else { - isHistoryScreen = false; - historySwitchButtun = "Voir l'historique"; - } - - Navigator.push( - context, - MaterialPageRoute(builder: (context) { - return WalletViewScreen(); - }), - ); - notifyListeners(); - - return pubkey; + return true; + } else { + return false; } - - return ''; } String getShortPubkey(String pubkey) { diff --git a/lib/screens/avatar_fullscreen.dart b/lib/screens/avatar_fullscreen.dart index d7f5ced..3389e95 100644 --- a/lib/screens/avatar_fullscreen.dart +++ b/lib/screens/avatar_fullscreen.dart @@ -8,8 +8,11 @@ import 'package:flutter/material.dart'; class AvatarFullscreen extends StatelessWidget { 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 String title; + final Color color; @override Widget build(BuildContext context) { @@ -18,7 +21,7 @@ class AvatarFullscreen extends StatelessWidget { return Scaffold( appBar: AppBar( elevation: 0, - backgroundColor: Colors.black, + backgroundColor: color ?? Colors.black, toolbarHeight: 60 * ratio, leading: IconButton( icon: Icon(Icons.arrow_back, color: orangeC), @@ -28,14 +31,14 @@ class AvatarFullscreen extends StatelessWidget { title: SizedBox( height: 22, child: Text( - 'Photo de profil', + title ?? 'Photo de profil', style: TextStyle(color: orangeC), ), )), body: SafeArea( child: SizedBox.expand( child: Container( - color: Colors.black, + color: color ?? Colors.black, // alignment: Alignment.center, // height: MediaQuery.of(context).size.height, // width: MediaQuery.of(context).size.width, diff --git a/lib/screens/home.dart b/lib/screens/home.dart index eff093f..da1f1eb 100644 --- a/lib/screens/home.dart +++ b/lib/screens/home.dart @@ -2,7 +2,7 @@ import 'package:bubble/bubble.dart'; import 'package:dubp/dubp.dart'; import 'package:gecko/globals.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:gecko/models/home.dart'; import 'package:gecko/models/my_wallets.dart'; @@ -123,7 +123,8 @@ Widget geckHome(context) { MyWalletsProvider _myWalletProvider = Provider.of(context); Provider.of(context); - HistoryProvider _historyProvider = Provider.of(context); + WalletsProfilesProvider _historyProvider = + Provider.of(context); final double statusBarHeight = MediaQuery.of(context).padding.top; return Container( decoration: const BoxDecoration( diff --git a/lib/screens/myWallets/cesium_wallet_options.dart b/lib/screens/myWallets/cesium_wallet_options.dart index 115c318..42a14aa 100644 --- a/lib/screens/myWallets/cesium_wallet_options.dart +++ b/lib/screens/myWallets/cesium_wallet_options.dart @@ -5,11 +5,12 @@ import 'package:flutter/material.dart'; import 'package:gecko/globals.dart'; import 'package:gecko/models/chest_data.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/queries.dart'; import 'package:gecko/models/wallet_options.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:provider/provider.dart'; import 'package:flutter/services.dart'; @@ -24,7 +25,8 @@ Widget cesiumWalletOptions(BuildContext context, ChestData cesiumWallet, Provider.of(context); ChestProvider _chestProvider = Provider.of(context, listen: false); - HistoryProvider _historyProvider = Provider.of(context); + WalletsProfilesProvider _historyProvider = + Provider.of(context); final String shortPubkey = _walletOptions.getShortPubkey(_walletOptions.pubkey.text); @@ -283,8 +285,15 @@ Widget cesiumWalletOptions(BuildContext context, ChestData cesiumWallet, InkWell( key: const Key('displayHistory'), onTap: () { - _historyProvider.isPubkey(ctx, _walletOptions.pubkey.text, - goHistory: true); + if (_historyProvider.isPubkey( + context, _walletOptions.pubkey.text)) { + Navigator.push( + context, + MaterialPageRoute(builder: (context) { + return const WalletViewScreen(); + }), + ); + } }, child: SizedBox( height: 50, diff --git a/lib/screens/myWallets/unlocking_wallet.dart b/lib/screens/myWallets/unlocking_wallet.dart index 0be8fa1..56b9752 100644 --- a/lib/screens/myWallets/unlocking_wallet.dart +++ b/lib/screens/myWallets/unlocking_wallet.dart @@ -2,7 +2,7 @@ import 'dart:async'; import 'package:dubp/dubp.dart'; import 'package:flutter/services.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/wallet_data.dart'; import 'package:gecko/models/wallet_options.dart'; @@ -124,7 +124,8 @@ class UnlockingWallet extends StatelessWidget { Provider.of(context); MyWalletsProvider _myWalletProvider = Provider.of(context); - HistoryProvider _historyProvider = Provider.of(context); + WalletsProfilesProvider _historyProvider = + Provider.of(context); FocusNode pinFocus = FocusNode(); diff --git a/lib/screens/myWallets/wallet_options.dart b/lib/screens/myWallets/wallet_options.dart index 8f049f2..27c69b6 100644 --- a/lib/screens/myWallets/wallet_options.dart +++ b/lib/screens/myWallets/wallet_options.dart @@ -3,11 +3,12 @@ import 'dart:ui'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.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/queries.dart'; import 'package:gecko/models/wallet_data.dart'; import 'package:gecko/models/wallet_options.dart'; +import 'package:gecko/screens/wallet_view.dart'; import 'package:graphql_flutter/graphql_flutter.dart'; import 'package:provider/provider.dart'; import 'package:flutter/services.dart'; @@ -27,7 +28,8 @@ class WalletOptions extends StatelessWidget { Provider.of(context); MyWalletsProvider _myWalletProvider = Provider.of(context); - HistoryProvider _historyProvider = Provider.of(context); + WalletsProfilesProvider _historyProvider = + Provider.of(context); final int _currentChest = _myWalletProvider.getCurrentChest(); final String shortPubkey = @@ -263,14 +265,14 @@ class WalletOptions extends StatelessWidget { ])), SizedBox(height: 4 * ratio), FutureBuilder( - future: - _walletOptions.generateQRcode(_walletOptions.pubkey.text), - builder: (context, snapshot) { - return snapshot.data != null - ? Image.memory(snapshot.data, - height: isTall ? 300 : 270) - : const Text('-', style: TextStyle(fontSize: 20)); - }), + future: + _walletOptions.generateQRcode(_walletOptions.pubkey.text), + builder: (context, snapshot) { + return snapshot.data != null + ? Image.memory(snapshot.data, height: isTall ? 300 : 270) + : const Text('-', style: TextStyle(fontSize: 20)); + }, + ), SizedBox(height: 15 * ratio), GestureDetector( key: const Key('copyPubkey'), @@ -337,8 +339,15 @@ class WalletOptions extends StatelessWidget { InkWell( key: const Key('displayHistory'), onTap: () { - _historyProvider.isPubkey(ctx, _walletOptions.pubkey.text, - goHistory: true); + if (_historyProvider.isPubkey( + context, _walletOptions.pubkey.text)) { + Navigator.push( + context, + MaterialPageRoute(builder: (context) { + return const WalletViewScreen(); + }), + ); + } }, child: SizedBox( height: 50, diff --git a/lib/screens/history.dart b/lib/screens/old_history_pay.dart similarity index 93% rename from lib/screens/history.dart rename to lib/screens/old_history_pay.dart index 21fe283..581251e 100644 --- a/lib/screens/history.dart +++ b/lib/screens/old_history_pay.dart @@ -4,11 +4,12 @@ import 'package:gecko/models/cesium_plus.dart'; import 'package:gecko/models/home.dart'; import 'package:gecko/models/my_wallets.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/foundation.dart'; import 'package:gecko/models/wallet_data.dart'; import 'package:gecko/screens/myWallets/unlocking_wallet.dart'; +import 'package:gecko/screens/wallet_view.dart'; import 'dart:ui'; import 'package:graphql_flutter/graphql_flutter.dart'; import 'package:provider/provider.dart'; @@ -33,7 +34,8 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { @override Widget build(BuildContext context) { SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); - HistoryProvider _historyProvider = Provider.of(context); + WalletsProfilesProvider _historyProvider = + Provider.of(context); HomeProvider _homeProvider = Provider.of(context); _outputPubkey.text = _historyProvider.pubkey; log.i('Build pubkey : ' + _historyProvider.pubkey); @@ -61,10 +63,14 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { controller: _homeProvider.searchQuery, onChanged: (text) { log.d("Clé tappé: $text"); - final String searchResult = - _historyProvider.isPubkey(context, text); - if (searchResult != '') { + if (_historyProvider.isPubkey(context, text)) { _homeProvider.currentIndex = 0; + Navigator.push( + context, + MaterialPageRoute(builder: (context) { + return const WalletViewScreen(); + }), + ); } }, style: TextStyle( @@ -111,7 +117,7 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { ])); } - Widget historyQuery(context, HistoryProvider _historyProvider) { + Widget historyQuery(context, WalletsProfilesProvider _historyProvider) { _pubkeyFocus.unfocus(); // HistoryProvider _historyProvider = Provider.of(context); 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(); WalletData defaultWallet = _myWalletProvider.getDefaultWallet(configBox.get('currentChest')); @@ -407,7 +413,10 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { } Widget historyView(context, result) { - HistoryProvider _historyProvider = Provider.of(context); + WalletsProfilesProvider _historyProvider = + Provider.of(context); + HomeProvider _homeProvider = + Provider.of(context, listen: false); int keyID = 0; return _historyProvider.transBC == null @@ -438,8 +447,15 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { dense: true, isThreeLine: false, onTap: () { - // this._outputPubkey.text = repository[2]; - _historyProvider.isPubkey(context, repository[2]); + if (_historyProvider.isPubkey(context, repository[2])) { + _homeProvider.currentIndex = 0; + Navigator.push( + context, + MaterialPageRoute(builder: (context) { + return const WalletViewScreen(); + }), + ); + } Navigator.pop(context); }), ), diff --git a/lib/screens/search_result.dart b/lib/screens/search_result.dart index 1f09f52..0fc216e 100644 --- a/lib/screens/search_result.dart +++ b/lib/screens/search_result.dart @@ -3,8 +3,9 @@ import 'package:gecko/globals.dart'; import 'package:flutter/material.dart'; import 'package:gecko/models/cesium_plus.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/screens/wallet_view.dart'; import 'package:provider/provider.dart'; class SearchResultScreen extends StatelessWidget { @@ -16,8 +17,8 @@ class SearchResultScreen extends StatelessWidget { SearchProvider _searchProvider = Provider.of(context); CesiumPlusProvider _cesiumPlusProvider = Provider.of(context); - HistoryProvider _historyClass = - Provider.of(context, listen: false); + WalletsProfilesProvider _walletsProfilesClass = + Provider.of(context, listen: false); int keyID = 0; double _avatarSize = 55; @@ -33,48 +34,55 @@ class SearchResultScreen extends StatelessWidget { body: SafeArea( child: Padding( padding: const EdgeInsets.symmetric(horizontal: 20), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - const SizedBox(height: 30), - RichText( - text: TextSpan( - style: TextStyle( - fontSize: 18, - color: Colors.grey[700], - ), - children: [ - const TextSpan( - text: "Résultats pour ", - ), - TextSpan( - text: '"${_searchProvider.searchController.text}"', - style: const TextStyle(fontStyle: FontStyle.italic), - ), - ], + child: + Column(crossAxisAlignment: CrossAxisAlignment.start, children: < + Widget>[ + const SizedBox(height: 30), + RichText( + text: TextSpan( + style: TextStyle( + fontSize: 18, + color: Colors.grey[700], + ), + children: [ + const TextSpan( + text: "Résultats pour ", ), - ), - const SizedBox(height: 40), - const Text( - 'Dans la blockchain Ğ1', - style: TextStyle(fontSize: 20), - ), - const SizedBox(height: 20), - FutureBuilder( - future: _searchProvider.searchBlockchain(), - builder: (context, snapshot) { - if (snapshot.connectionState == ConnectionState.done) { - return Expanded( - child: ListView(children: [ - for (G1WalletsList g1Wallet in snapshot.data) - Padding( - padding: - const EdgeInsets.symmetric(horizontal: 5), - child: ListTile( - key: Key('searchResult${keyID++}'), - horizontalTitleGap: 40, - contentPadding: const EdgeInsets.all(5), - leading: FutureBuilder( + TextSpan( + text: '"${_searchProvider.searchController.text}"', + style: const TextStyle(fontStyle: FontStyle.italic), + ), + ], + ), + ), + const SizedBox(height: 40), + const Text( + 'Dans la blockchain Ğ1', + style: TextStyle(fontSize: 20), + ), + const SizedBox(height: 20), + FutureBuilder( + future: _searchProvider.searchBlockchain(), + builder: (context, snapshot) { + if (snapshot.connectionState == ConnectionState.done) { + return Expanded( + child: ListView(children: [ + for (G1WalletsList g1Wallet in snapshot.data) + 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) + .avatar != + null + ? ClipOval( + child: g1WalletsBox + .get(g1Wallet.pubkey) + .avatar) + : FutureBuilder( future: _cesiumPlusProvider.getAvatar( g1Wallet.pubkey, _avatarSize), builder: (BuildContext context, @@ -98,52 +106,76 @@ class SearchResultScreen extends StatelessWidget { ]); } if (_avatar.hasData) { + g1WalletsBox + .get(g1Wallet.pubkey) + .avatar = _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: [ - Text( - _historyClass - .getShortPubkey(g1Wallet.pubkey), - style: const TextStyle( - fontSize: 18, - fontFamily: 'Monospace', - fontWeight: FontWeight.w500), - textAlign: TextAlign.center), - ]), - subtitle: Row(children: [ - Text(g1Wallet?.id?.username ?? '', - style: const TextStyle( - fontSize: 18, - fontWeight: FontWeight.w500), - textAlign: TextAlign.center), - ]), - dense: false, - isThreeLine: false, - onTap: () { - _historyClass.isPubkey( - context, g1Wallet.pubkey); + title: Row(children: [ + Text( + _walletsProfilesClass + .getShortPubkey(g1Wallet.pubkey), + style: const TextStyle( + fontSize: 18, + fontFamily: 'Monospace', + fontWeight: FontWeight.w500), + textAlign: TextAlign.center), + ]), + subtitle: Row(children: [ + Text(g1Wallet?.id?.username ?? '', + 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) + .id + ?.username, + avatar: g1WalletsBox + .get(g1Wallet.pubkey) + ?.avatar, + ); }), - ), - ]), - ); - } - return Center( - heightFactor: 5, - child: CircularProgressIndicator( - strokeWidth: 3, - backgroundColor: yellowC, - color: orangeC, - ), - ); - }, - ), - // Text( - // _searchProvider.searchResult.toString(), - // ) - ]), + ); + }), + ), + ]), + ); + } + return Center( + heightFactor: 5, + child: CircularProgressIndicator( + strokeWidth: 3, + backgroundColor: yellowC, + color: orangeC, + ), + ); + }, + ), + // Text( + // _searchProvider.searchResult.toString(), + // ) + ]), ), ), ); diff --git a/lib/screens/wallet_view.dart b/lib/screens/wallet_view.dart index 3aeefe5..a625d0e 100644 --- a/lib/screens/wallet_view.dart +++ b/lib/screens/wallet_view.dart @@ -1,39 +1,68 @@ import 'dart:ui'; - import 'package:flutter/services.dart'; import 'package:gecko/globals.dart'; import 'package:flutter/material.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/wallet_options.dart'; import 'package:gecko/screens/avatar_fullscreen.dart'; import 'package:graphql_flutter/graphql_flutter.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 { - TextEditingController tplController = TextEditingController(); - - WalletViewScreen({Key key}) : super(key: key); + const WalletViewScreen({this.pubkey, this.username, this.avatar, Key key}) + : super(key: key); + final String pubkey; + final String username; + final Image avatar; @override Widget build(BuildContext context) { SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); - HistoryProvider _historyProvider = Provider.of(context); + WalletsProfilesProvider _historyProvider = + Provider.of(context); CesiumPlusProvider _cesiumPlusProvider = Provider.of(context); + // WalletOptionsProvider _walletOptions = WalletOptionsProvider(); double _avatarSize = 150; return Scaffold( appBar: AppBar( - elevation: 0, - toolbarHeight: 60 * ratio, - title: const SizedBox( - height: 22, - child: Text('Voir un portefeuille'), - )), + elevation: 0, + toolbarHeight: 60 * ratio, + title: const SizedBox( + height: 22, + 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( child: Column(children: [ Container( @@ -56,51 +85,62 @@ class WalletViewScreen extends StatelessWidget { Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - GestureDetector( - key: const Key('copyPubkey'), - onTap: () { - Clipboard.setData( - ClipboardData(text: _historyProvider.pubkey)); - _historyProvider.snackCopyKey(context); - }, - child: Text( - _historyProvider - .getShortPubkey(_historyProvider.pubkey), - style: const TextStyle( - fontSize: 30, - fontWeight: FontWeight.w800, + Row(children: [ + GestureDetector( + key: const Key('copyPubkey'), + onTap: () { + Clipboard.setData(ClipboardData( + text: pubkey ?? _historyProvider.pubkey)); + _historyProvider.snackCopyKey(context); + }, + child: Text( + _historyProvider.getShortPubkey( + pubkey ?? _historyProvider.pubkey), + style: const TextStyle( + fontSize: 30, + fontWeight: FontWeight.w800, + ), ), ), - ), + ]), const SizedBox(height: 10), - Query( - options: QueryOptions( - document: gql(getId), - variables: { - 'pubkey': _historyProvider.pubkey, + if (username == null) + Query( + options: QueryOptions( + document: gql(getId), + 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, - {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), - ), - ), - ); - } - }, - ), + if (username != null) + Text( + username, + style: const TextStyle( + fontSize: 27, + color: Color(0xff814C00), + ), + ), const SizedBox(height: 25), FutureBuilder( future: _cesiumPlusProvider @@ -120,51 +160,72 @@ class WalletViewScreen extends StatelessWidget { ]), const Spacer(), Column(children: [ - FutureBuilder( - future: _cesiumPlusProvider.getAvatar( - _historyProvider.pubkey, _avatarSize), - builder: (BuildContext context, - AsyncSnapshot _avatar) { - if (_avatar.connectionState != ConnectionState.done || - _avatar.hasError) { - return Stack(children: [ - ClipOval( - child: _cesiumPlusProvider - .defaultAvatar(_avatarSize), - ), - Positioned( - top: 16.5, - right: 47.5, - width: 55, - height: 55, - child: CircularProgressIndicator( - strokeWidth: 6, - color: orangeC, + if (avatar == null) + FutureBuilder( + future: _cesiumPlusProvider.getAvatar( + _historyProvider.pubkey, _avatarSize), + builder: (BuildContext context, + AsyncSnapshot _avatar) { + if (_avatar.connectionState != + ConnectionState.done || + _avatar.hasError) { + return Stack(children: [ + ClipOval( + child: _cesiumPlusProvider + .defaultAvatar(_avatarSize), ), - ), - ]); - } - if (_avatar.hasData) { - return GestureDetector( - key: const Key('openAvatar'), - onTap: () { - Navigator.push( - context, - MaterialPageRoute(builder: (context) { - return AvatarFullscreen(_avatar.data); - }), - ); - }, - child: ClipOval( - child: _avatar.data, - ), + Positioned( + top: 16.5, + right: 47.5, + width: 55, + height: 55, + child: CircularProgressIndicator( + strokeWidth: 6, + color: orangeC, + ), + ), + ]); + } + if (_avatar.hasData) { + return GestureDetector( + key: const Key('openAvatar'), + onTap: () { + Navigator.push( + context, + MaterialPageRoute(builder: (context) { + return AvatarFullscreen(_avatar.data); + }), + ); + }, + child: ClipOval( + child: _avatar.data, + ), + ); + } + return ClipOval( + child: _cesiumPlusProvider + .defaultAvatar(_avatarSize), ); - } - return ClipOval( - child: - _cesiumPlusProvider.defaultAvatar(_avatarSize), + }), + if (avatar != null) + GestureDetector( + 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), ]), ]), @@ -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(), Container( height: 120, diff --git a/pubspec.yaml b/pubspec.yaml index 4522862..249c17f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -5,7 +5,7 @@ description: Pay with G1. # 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 -version: 0.0.3+8 +version: 0.0.3+9 environment: sdk: ">=2.7.0 <3.0.0"