Optimize profile view
This commit is contained in:
parent
39881ba136
commit
bd87ea5ab8
Binary file not shown.
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
@ -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()),
|
||||
|
|
|
@ -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<String, dynamic> json) {
|
||||
pubkey = json['pubkey'];
|
||||
|
|
|
@ -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<G1WalletsList> {
|
|||
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<Id> {
|
|||
|
||||
@override
|
||||
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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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';
|
||||
|
||||
|
|
|
@ -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<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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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) {
|
|
@ -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,
|
||||
|
|
|
@ -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<MyWalletsProvider>(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;
|
||||
return Container(
|
||||
decoration: const BoxDecoration(
|
||||
|
|
|
@ -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<WalletOptionsProvider>(context);
|
||||
ChestProvider _chestProvider =
|
||||
Provider.of<ChestProvider>(context, listen: false);
|
||||
HistoryProvider _historyProvider = Provider.of<HistoryProvider>(context);
|
||||
WalletsProfilesProvider _historyProvider =
|
||||
Provider.of<WalletsProfilesProvider>(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,
|
||||
|
|
|
@ -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<WalletOptionsProvider>(context);
|
||||
MyWalletsProvider _myWalletProvider =
|
||||
Provider.of<MyWalletsProvider>(context);
|
||||
HistoryProvider _historyProvider = Provider.of<HistoryProvider>(context);
|
||||
WalletsProfilesProvider _historyProvider =
|
||||
Provider.of<WalletsProfilesProvider>(context);
|
||||
|
||||
FocusNode pinFocus = FocusNode();
|
||||
|
||||
|
|
|
@ -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<WalletOptionsProvider>(context);
|
||||
MyWalletsProvider _myWalletProvider =
|
||||
Provider.of<MyWalletsProvider>(context);
|
||||
HistoryProvider _historyProvider = Provider.of<HistoryProvider>(context);
|
||||
WalletsProfilesProvider _historyProvider =
|
||||
Provider.of<WalletsProfilesProvider>(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,
|
||||
|
|
|
@ -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<HistoryProvider>(context);
|
||||
WalletsProfilesProvider _historyProvider =
|
||||
Provider.of<WalletsProfilesProvider>(context);
|
||||
HomeProvider _homeProvider = Provider.of<HomeProvider>(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<HistoryProvider>(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<HistoryProvider>(context);
|
||||
WalletsProfilesProvider _historyProvider =
|
||||
Provider.of<WalletsProfilesProvider>(context);
|
||||
HomeProvider _homeProvider =
|
||||
Provider.of<HomeProvider>(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);
|
||||
}),
|
||||
),
|
|
@ -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<SearchProvider>(context);
|
||||
CesiumPlusProvider _cesiumPlusProvider =
|
||||
Provider.of<CesiumPlusProvider>(context);
|
||||
HistoryProvider _historyClass =
|
||||
Provider.of<HistoryProvider>(context, listen: false);
|
||||
WalletsProfilesProvider _walletsProfilesClass =
|
||||
Provider.of<WalletsProfilesProvider>(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: <Widget>[
|
||||
const SizedBox(height: 30),
|
||||
RichText(
|
||||
text: TextSpan(
|
||||
style: TextStyle(
|
||||
fontSize: 18,
|
||||
color: Colors.grey[700],
|
||||
),
|
||||
children: <TextSpan>[
|
||||
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: <TextSpan>[
|
||||
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: <Widget>[
|
||||
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: <Widget>[
|
||||
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: <Widget>[
|
||||
Text(
|
||||
_historyClass
|
||||
.getShortPubkey(g1Wallet.pubkey),
|
||||
style: const TextStyle(
|
||||
fontSize: 18,
|
||||
fontFamily: 'Monospace',
|
||||
fontWeight: FontWeight.w500),
|
||||
textAlign: TextAlign.center),
|
||||
]),
|
||||
subtitle: Row(children: <Widget>[
|
||||
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: <Widget>[
|
||||
Text(
|
||||
_walletsProfilesClass
|
||||
.getShortPubkey(g1Wallet.pubkey),
|
||||
style: const TextStyle(
|
||||
fontSize: 18,
|
||||
fontFamily: 'Monospace',
|
||||
fontWeight: FontWeight.w500),
|
||||
textAlign: TextAlign.center),
|
||||
]),
|
||||
subtitle: Row(children: <Widget>[
|
||||
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(),
|
||||
// )
|
||||
]),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
|
|
@ -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<HistoryProvider>(context);
|
||||
WalletsProfilesProvider _historyProvider =
|
||||
Provider.of<WalletsProfilesProvider>(context);
|
||||
CesiumPlusProvider _cesiumPlusProvider =
|
||||
Provider.of<CesiumPlusProvider>(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: <Widget>[
|
||||
Container(
|
||||
|
@ -56,51 +85,62 @@ class WalletViewScreen extends StatelessWidget {
|
|||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: <Widget>[
|
||||
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: <Widget>[
|
||||
FutureBuilder(
|
||||
future: _cesiumPlusProvider.getAvatar(
|
||||
_historyProvider.pubkey, _avatarSize),
|
||||
builder: (BuildContext context,
|
||||
AsyncSnapshot<Image> _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<Image> _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,
|
||||
|
|
|
@ -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"
|
||||
|
|
Loading…
Reference in New Issue