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/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()),

View File

@ -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'];

View File

@ -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();
}

View File

@ -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';

View File

@ -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;
}

View File

@ -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) {

View File

@ -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,

View File

@ -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(

View File

@ -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,

View File

@ -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();

View File

@ -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,

View File

@ -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);
}),
),

View File

@ -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(),
// )
]),
),
),
);

View File

@ -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,

View File

@ -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"