refacto: new Balance and Certifications Widgets

This commit is contained in:
poka 2022-12-06 04:33:10 +01:00
parent 4ef5f77888
commit 150f6892f8
17 changed files with 249 additions and 204 deletions

View File

@ -11,9 +11,10 @@ import 'package:gecko/models/wallet_data.dart';
import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/models/widgets_keys.dart';
import 'package:gecko/providers/cesium_plus.dart'; import 'package:gecko/providers/cesium_plus.dart';
import 'package:gecko/providers/substrate_sdk.dart'; import 'package:gecko/providers/substrate_sdk.dart';
import 'package:gecko/providers/wallet_options.dart';
import 'package:gecko/providers/wallets_profiles.dart'; import 'package:gecko/providers/wallets_profiles.dart';
import 'package:gecko/screens/wallet_view.dart'; import 'package:gecko/screens/wallet_view.dart';
import 'package:gecko/widgets/balance.dart';
import 'package:gecko/widgets/wallet_name.dart';
import 'package:gecko/widgets/wallet_name_controller.dart'; import 'package:gecko/widgets/wallet_name_controller.dart';
import 'package:graphql_flutter/graphql_flutter.dart'; import 'package:graphql_flutter/graphql_flutter.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -164,14 +165,12 @@ class DuniterIndexer with ChangeNotifier {
Color color = Colors.black, Color color = Colors.black,
FontWeight fontWeight = FontWeight.w400, FontWeight fontWeight = FontWeight.w400,
FontStyle fontStyle = FontStyle.italic]) { FontStyle fontStyle = FontStyle.italic]) {
final walletOptions =
Provider.of<WalletOptionsProvider>(context, listen: false);
if (indexerEndpoint == '') { if (indexerEndpoint == '') {
if (wallet == null) { if (wallet == null) {
return const SizedBox(); return const SizedBox();
} else { } else {
if (canEdit) { if (canEdit) {
return walletOptions.walletName(context, wallet, size, color); return WalletName(wallet: wallet, size: size, color: color);
} else { } else {
return WalletNameController(wallet: wallet, size: size); return WalletNameController(wallet: wallet, size: size);
} }
@ -223,7 +222,7 @@ class DuniterIndexer with ChangeNotifier {
return const SizedBox(); return const SizedBox();
} else { } else {
if (canEdit) { if (canEdit) {
return walletOptions.walletName(context, wallet, size, color); return WalletName(wallet: wallet, size: size, color: color);
} else { } else {
return WalletNameController(wallet: wallet, size: size); return WalletNameController(wallet: wallet, size: size);
} }
@ -326,7 +325,8 @@ class DuniterIndexer with ChangeNotifier {
Column( Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
balance(context, profile['pubkey'], 16), Balance(
address: profile['pubkey'], size: 16),
]), ]),
]), ]),
), ),

View File

@ -68,9 +68,11 @@ class HomeProvider with ChangeNotifier {
Future changeCurrencyUnit(BuildContext context) async { Future changeCurrencyUnit(BuildContext context) async {
final sub = Provider.of<SubstrateSdk>(context, listen: false); final sub = Provider.of<SubstrateSdk>(context, listen: false);
final walletOptions =
Provider.of<WalletOptionsProvider>(context, listen: false);
final bool isUdUnit = configBox.get('isUdUnit') ?? false; final bool isUdUnit = configBox.get('isUdUnit') ?? false;
await configBox.put('isUdUnit', !isUdUnit); await configBox.put('isUdUnit', !isUdUnit);
balanceCache = {}; walletOptions.balanceCache = {};
sub.getBalanceRatio(); sub.getBalanceRatio();
notifyListeners(); notifyListeners();
} }

View File

@ -17,7 +17,6 @@ import 'package:gecko/screens/transaction_in_progress.dart';
import 'package:image_picker/image_picker.dart'; import 'package:image_picker/image_picker.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:image_cropper/image_cropper.dart'; import 'package:image_cropper/image_cropper.dart';
import 'package:truncate/truncate.dart';
class WalletOptionsProvider with ChangeNotifier { class WalletOptionsProvider with ChangeNotifier {
TextEditingController address = TextEditingController(); TextEditingController address = TextEditingController();
@ -31,6 +30,7 @@ class WalletOptionsProvider with ChangeNotifier {
late bool isDefaultWallet; late bool isDefaultWallet;
bool canValidateNameBool = false; bool canValidateNameBool = false;
Future<NewWallet>? get badWallet => null; Future<NewWallet>? get badWallet => null;
Map<String, double> balanceCache = {};
int getPinLenght(walletNbr) { int getPinLenght(walletNbr) {
return pinLength; return pinLength;
@ -391,135 +391,33 @@ class WalletOptionsProvider with ChangeNotifier {
return addressGet; return addressGet;
} }
Widget walletName(BuildContext context, WalletData wallet, Widget udUnitDisplay(double size, [Color color = Colors.black]) {
[double size = 20, Color color = Colors.black]) { final bool isUdUnit = configBox.get('isUdUnit') ?? false;
double newSize = wallet.name!.length <= 15 ? size : size - 2; return isUdUnit
? Row(
return Row(mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ mainAxisAlignment: MainAxisAlignment.end,
Text( children: [
truncate(wallet.name!, 20), Text(
textAlign: TextAlign.center, 'ud'.tr(args: ['']),
style: TextStyle( style: TextStyle(
fontSize: isTall ? newSize : newSize * 0.9, fontSize: isTall ? size : size * 0.9, color: color),
color: color, ),
fontWeight: FontWeight.w400, Column(
fontStyle: FontStyle.italic, children: [
), Text(
softWrap: false, currencyName,
overflow: TextOverflow.ellipsis, style: TextStyle(
), fontSize: (isTall ? size : size * 0.9) * 0.7,
]); fontWeight: FontWeight.w500,
color: color),
),
const SizedBox(height: 15)
],
)
],
)
: Text(currencyName,
style:
TextStyle(fontSize: isTall ? size : size * 0.9, color: color));
} }
} }
Map<String, double> balanceCache = {};
Widget balance(BuildContext context, String address, double size,
[Color color = Colors.black,
Color loadingColor = const Color(0xffd07316)]) {
return Column(children: <Widget>[
Consumer<SubstrateSdk>(builder: (context, sdk, _) {
return FutureBuilder(
future: sdk.getBalance(address),
builder: (BuildContext context,
AsyncSnapshot<Map<String, double>> globalBalance) {
if (globalBalance.connectionState != ConnectionState.done ||
globalBalance.hasError) {
if (balanceCache[address] != null &&
balanceCache[address] != -1) {
return Row(children: [
Text(balanceCache[address]!.toString(),
style: TextStyle(
fontSize: isTall ? size : size * 0.9, color: color)),
const SizedBox(width: 5),
udUnitDisplay(size, color),
]);
} else {
return SizedBox(
height: 15,
width: 15,
child: CircularProgressIndicator(
color: loadingColor,
strokeWidth: 2,
),
);
}
}
balanceCache[address] = globalBalance.data!['transferableBalance']!;
if (balanceCache[address] != -1) {
return Row(children: [
Text(
balanceCache[address]!.toString(),
style: TextStyle(
fontSize: isTall ? size : size * 0.9,
color: color,
),
),
const SizedBox(width: 5),
udUnitDisplay(size, color),
]);
} else {
return const Text('');
}
});
}),
]);
}
Widget getCerts(BuildContext context, String address, double size,
[Color color = Colors.black]) {
return Column(children: <Widget>[
Consumer<SubstrateSdk>(builder: (context, sdk, _) {
return FutureBuilder(
future: sdk.getCertsCounter(address),
builder: (BuildContext context, AsyncSnapshot<List<int>> certs) {
// log.d(_certs.data);
return certs.data?[0] != 0 && certs.data != null
? Row(
children: [
Image.asset('assets/medal.png', height: 20),
const SizedBox(width: 1),
Text(certs.data?[0].toString() ?? '0',
style: const TextStyle(fontSize: 20)),
const SizedBox(width: 5),
Text(
"(${certs.data?[1].toString() ?? '0'})",
style: const TextStyle(fontSize: 14),
)
],
)
: const Text('');
});
}),
]);
}
Widget udUnitDisplay(double size, [Color color = Colors.black]) {
final bool isUdUnit = configBox.get('isUdUnit') ?? false;
return isUdUnit
? Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Text(
'ud'.tr(args: ['']),
style:
TextStyle(fontSize: isTall ? size : size * 0.9, color: color),
),
Column(
children: [
Text(
currencyName,
style: TextStyle(
fontSize: (isTall ? size : size * 0.9) * 0.7,
fontWeight: FontWeight.w500,
color: color),
),
const SizedBox(height: 15)
],
)
],
)
: Text(currencyName,
style: TextStyle(fontSize: isTall ? size : size * 0.9, color: color));
}

View File

@ -14,7 +14,7 @@ import 'package:gecko/providers/wallets_profiles.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/providers/my_wallets.dart'; import 'package:gecko/providers/my_wallets.dart';
import 'package:gecko/models/wallet_data.dart'; import 'package:gecko/models/wallet_data.dart';
import 'package:gecko/screens/animated_text.dart'; import 'package:gecko/widgets/animated_text.dart';
import 'package:gecko/screens/common_elements.dart'; import 'package:gecko/screens/common_elements.dart';
import 'package:gecko/screens/myWallets/restore_chest.dart'; import 'package:gecko/screens/myWallets/restore_chest.dart';
import 'package:gecko/screens/myWallets/unlocking_wallet.dart'; import 'package:gecko/screens/myWallets/unlocking_wallet.dart';

View File

@ -10,8 +10,8 @@ import 'package:gecko/models/wallet_data.dart';
import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/models/widgets_keys.dart';
import 'package:gecko/providers/my_wallets.dart'; import 'package:gecko/providers/my_wallets.dart';
import 'package:gecko/providers/substrate_sdk.dart'; import 'package:gecko/providers/substrate_sdk.dart';
import 'package:gecko/providers/wallet_options.dart';
import 'package:gecko/screens/myWallets/wallets_home.dart'; import 'package:gecko/screens/myWallets/wallets_home.dart';
import 'package:gecko/widgets/balance.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
// import 'package:gecko/models/home.dart'; // import 'package:gecko/models/home.dart';
// import 'package:provider/provider.dart'; // import 'package:provider/provider.dart';
@ -222,8 +222,10 @@ class ChooseWalletScreen extends StatelessWidget {
// style: TextStyle(color: isDefault ? Colors.white : Colors.black), // style: TextStyle(color: isDefault ? Colors.white : Colors.black),
// ), // ),
Row(mainAxisAlignment: MainAxisAlignment.center, children: [ Row(mainAxisAlignment: MainAxisAlignment.center, children: [
balance( Balance(
context, address, 16, isDefault ? Colors.white : Colors.black), address: address,
size: 16,
color: isDefault ? Colors.white : Colors.black),
]) ])
]), ]),
), ),

View File

@ -11,10 +11,10 @@ import 'package:gecko/models/wallet_data.dart';
import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/models/widgets_keys.dart';
import 'package:gecko/providers/my_wallets.dart'; import 'package:gecko/providers/my_wallets.dart';
import 'package:gecko/providers/substrate_sdk.dart'; import 'package:gecko/providers/substrate_sdk.dart';
import 'package:gecko/providers/wallet_options.dart';
import 'package:gecko/providers/wallets_profiles.dart'; import 'package:gecko/providers/wallets_profiles.dart';
import 'package:gecko/screens/myWallets/unlocking_wallet.dart'; import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
import 'package:gecko/screens/transaction_in_progress.dart'; import 'package:gecko/screens/transaction_in_progress.dart';
import 'package:gecko/widgets/certifications.dart';
import 'package:gecko/widgets/idty_status.dart'; import 'package:gecko/widgets/idty_status.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -214,7 +214,7 @@ class ImportG1v1 extends StatelessWidget {
isOwner: false, isOwner: false,
color: Colors.black), color: Colors.black),
const SizedBox(width: 10), const SizedBox(width: 10),
getCerts(context, sub.g1V1NewAddress, 14) Certifications(address: sub.g1V1NewAddress, size: 14)
], ],
), ),
const SizedBox(height: 30), const SizedBox(height: 30),

View File

@ -17,6 +17,8 @@ import 'package:gecko/screens/common_elements.dart';
import 'package:gecko/screens/activity.dart'; import 'package:gecko/screens/activity.dart';
import 'package:gecko/screens/myWallets/manage_membership.dart'; import 'package:gecko/screens/myWallets/manage_membership.dart';
import 'package:gecko/screens/qrcode_fullscreen.dart'; import 'package:gecko/screens/qrcode_fullscreen.dart';
import 'package:gecko/widgets/balance.dart';
import 'package:gecko/widgets/certifications.dart';
import 'package:gecko/widgets/idty_status.dart'; import 'package:gecko/widgets/idty_status.dart';
import 'package:gecko/widgets/page_route_no_transition.dart'; import 'package:gecko/widgets/page_route_no_transition.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -143,8 +145,9 @@ class WalletOptions extends StatelessWidget {
// SizedBox(height: isTall ? 5 : 0), // SizedBox(height: isTall ? 5 : 0),
SizedBox(height: isTall ? 5 : 0), SizedBox(height: isTall ? 5 : 0),
balance( Balance(
context, walletProvider.address.text, 21), address: walletProvider.address.text,
size: 21),
const SizedBox(width: 30), const SizedBox(width: 30),
InkWell( InkWell(
@ -174,8 +177,10 @@ class WalletOptions extends StatelessWidget {
address: walletOptions.address.text, address: walletOptions.address.text,
isOwner: true, isOwner: true,
color: orangeC), color: orangeC),
getCerts(context, Certifications(
walletProvider.address.text, 15), address:
walletProvider.address.text,
size: 15)
]), ]),
), ),
@ -550,15 +555,15 @@ class WalletOptions extends StatelessWidget {
walletOptions.reload(); walletOptions.reload();
} }
Widget deleteWallet(BuildContext context, Widget deleteWallet(BuildContext context, WalletOptionsProvider walletOptions,
WalletOptionsProvider walletProvider, int currentChest) { int currentChest) {
final sub = Provider.of<SubstrateSdk>(context, listen: false); final sub = Provider.of<SubstrateSdk>(context, listen: false);
final myWalletProvider = final myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false); Provider.of<MyWalletsProvider>(context, listen: false);
final defaultWallet = myWalletProvider.getDefaultWallet(); final defaultWallet = myWalletProvider.getDefaultWallet();
final bool isDefaultWallet = final bool isDefaultWallet =
walletProvider.address.text == defaultWallet.address; walletOptions.address.text == defaultWallet.address;
// return Consumer<MyWalletsProvider>( // return Consumer<MyWalletsProvider>(
// builder: (context, _myWalletProvider, _) { // builder: (context, _myWalletProvider, _) {
return FutureBuilder( return FutureBuilder(
@ -569,7 +574,7 @@ class WalletOptions extends StatelessWidget {
return const Text(''); return const Text('');
} }
final double balance = final double balance =
balanceCache[walletProvider.address.text] ?? -1; walletOptions.balanceCache[walletOptions.address.text] ?? -1;
final bool canDelete = !isDefaultWallet && final bool canDelete = !isDefaultWallet &&
!hasConsumers.data! && !hasConsumers.data! &&
(balance > 2 || balance == 0); (balance > 2 || balance == 0);
@ -577,7 +582,7 @@ class WalletOptions extends StatelessWidget {
key: keyDeleteWallet, key: keyDeleteWallet,
onTap: canDelete onTap: canDelete
? () async { ? () async {
await walletProvider.deleteWallet(context, wallet); await walletOptions.deleteWallet(context, wallet);
WidgetsBinding.instance.addPostFrameCallback((_) { WidgetsBinding.instance.addPostFrameCallback((_) {
myWalletProvider.listWallets = myWalletProvider.listWallets =
myWalletProvider.readAllWallets(currentChest); myWalletProvider.readAllWallets(currentChest);

View File

@ -22,6 +22,7 @@ import 'package:gecko/screens/myWallets/import_g1_v1.dart';
import 'package:gecko/screens/myWallets/unlocking_wallet.dart'; import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
import 'package:gecko/screens/myWallets/wallet_options.dart'; import 'package:gecko/screens/myWallets/wallet_options.dart';
import 'package:gecko/screens/wallet_view.dart'; import 'package:gecko/screens/wallet_view.dart';
import 'package:gecko/widgets/balance.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
@ -392,12 +393,11 @@ class WalletsHome extends StatelessWidget {
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
balance( Balance(
context, address: address,
address, size: 15,
15, color: isDefault ? Colors.white : Colors.black,
isDefault ? Colors.white : Colors.black, loadingColor: isDefault ? yellowC : orangeC),
isDefault ? yellowC : orangeC)
], ],
)), )),
); );

View File

@ -8,10 +8,10 @@ import 'package:gecko/models/g1_wallets_list.dart';
import 'package:gecko/providers/duniter_indexer.dart'; import 'package:gecko/providers/duniter_indexer.dart';
import 'package:gecko/providers/home.dart'; import 'package:gecko/providers/home.dart';
import 'package:gecko/providers/substrate_sdk.dart'; import 'package:gecko/providers/substrate_sdk.dart';
import 'package:gecko/providers/wallet_options.dart';
import 'package:gecko/providers/wallets_profiles.dart'; import 'package:gecko/providers/wallets_profiles.dart';
import 'package:gecko/screens/common_elements.dart'; import 'package:gecko/screens/common_elements.dart';
import 'package:gecko/screens/wallet_view.dart'; import 'package:gecko/screens/wallet_view.dart';
import 'package:gecko/widgets/balance.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class ContactsScreen extends StatelessWidget { class ContactsScreen extends StatelessWidget {
@ -92,8 +92,10 @@ class ContactsScreen extends StatelessWidget {
mainAxisAlignment: mainAxisAlignment:
MainAxisAlignment.center, MainAxisAlignment.center,
children: [ children: [
balance(context, Balance(
g1Wallet.address, 16), address:
g1Wallet.address,
size: 16),
]), ]),
]), ]),
), ),

View File

@ -8,11 +8,11 @@ import 'package:gecko/models/g1_wallets_list.dart';
import 'package:gecko/providers/duniter_indexer.dart'; import 'package:gecko/providers/duniter_indexer.dart';
import 'package:gecko/providers/home.dart'; import 'package:gecko/providers/home.dart';
import 'package:gecko/providers/substrate_sdk.dart'; import 'package:gecko/providers/substrate_sdk.dart';
import 'package:gecko/providers/wallet_options.dart';
import 'package:gecko/providers/wallets_profiles.dart'; import 'package:gecko/providers/wallets_profiles.dart';
import 'package:gecko/providers/search.dart'; import 'package:gecko/providers/search.dart';
import 'package:gecko/screens/common_elements.dart'; import 'package:gecko/screens/common_elements.dart';
import 'package:gecko/screens/wallet_view.dart'; import 'package:gecko/screens/wallet_view.dart';
import 'package:gecko/widgets/balance.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class SearchResultScreen extends StatelessWidget { class SearchResultScreen extends StatelessWidget {
@ -115,10 +115,10 @@ class SearchResultScreen extends StatelessWidget {
MainAxisAlignment MainAxisAlignment
.center, .center,
children: [ children: [
balance( Balance(
context, address: g1Wallet
g1Wallet.address, .address,
16), size: 16),
]), ]),
]), ]),
), ),

View File

@ -11,9 +11,9 @@ import 'package:gecko/providers/cesium_plus.dart';
import 'package:gecko/providers/duniter_indexer.dart'; import 'package:gecko/providers/duniter_indexer.dart';
import 'package:gecko/providers/home.dart'; import 'package:gecko/providers/home.dart';
import 'package:gecko/providers/substrate_sdk.dart'; import 'package:gecko/providers/substrate_sdk.dart';
import 'package:gecko/providers/wallet_options.dart';
import 'package:gecko/providers/my_wallets.dart'; import 'package:gecko/providers/my_wallets.dart';
import 'package:gecko/models/wallet_data.dart'; import 'package:gecko/models/wallet_data.dart';
import 'package:gecko/providers/wallet_options.dart';
import 'package:gecko/providers/wallets_profiles.dart'; import 'package:gecko/providers/wallets_profiles.dart';
import 'package:gecko/screens/activity.dart'; import 'package:gecko/screens/activity.dart';
import 'package:gecko/screens/common_elements.dart'; import 'package:gecko/screens/common_elements.dart';
@ -21,6 +21,7 @@ import 'package:gecko/screens/myWallets/choose_wallet.dart';
import 'package:gecko/screens/myWallets/unlocking_wallet.dart'; import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
import 'package:gecko/screens/qrcode_fullscreen.dart'; import 'package:gecko/screens/qrcode_fullscreen.dart';
import 'package:gecko/screens/transaction_in_progress.dart'; import 'package:gecko/screens/transaction_in_progress.dart';
import 'package:gecko/widgets/balance.dart';
import 'package:gecko/widgets/header_profile.dart'; import 'package:gecko/widgets/header_profile.dart';
import 'package:gecko/widgets/page_route_no_transition.dart'; import 'package:gecko/widgets/page_route_no_transition.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -469,16 +470,19 @@ void paymentPopup(BuildContext context, String toAddress) {
context: context, context: context,
builder: (BuildContext context) { builder: (BuildContext context) {
final sub = Provider.of<SubstrateSdk>(homeContext, listen: false); final sub = Provider.of<SubstrateSdk>(homeContext, listen: false);
final walletOptions =
Provider.of<WalletOptionsProvider>(context, listen: false);
double fees = 0; double fees = 0;
return StatefulBuilder( return StatefulBuilder(
builder: (BuildContext context, StateSetter setState) { builder: (BuildContext context, StateSetter setState) {
if (walletViewProvider.payAmount.text != '' && if (walletViewProvider.payAmount.text != '' &&
(double.parse(walletViewProvider.payAmount.text) + (double.parse(walletViewProvider.payAmount.text) +
2 / balanceRatio) <= 2 / balanceRatio) <=
(balanceCache[defaultWallet.address] ?? 0) && (walletOptions.balanceCache[defaultWallet.address] ?? 0) &&
toAddress != defaultWallet.address) { toAddress != defaultWallet.address) {
if ((balanceCache[toAddress] == 0 || if ((walletOptions.balanceCache[toAddress] == 0 ||
balanceCache[toAddress] == null) && walletOptions.balanceCache[toAddress] == null) &&
double.parse(walletViewProvider.payAmount.text) < double.parse(walletViewProvider.payAmount.text) <
5 / balanceRatio) { 5 / balanceRatio) {
canValidate = false; canValidate = false;
@ -573,7 +577,8 @@ void paymentPopup(BuildContext context, String toAddress) {
child: Row(children: [ child: Row(children: [
Text(defaultWallet.name!), Text(defaultWallet.name!),
const Spacer(), const Spacer(),
balance(context, defaultWallet.address!, 20) Balance(
address: defaultWallet.address!, size: 20),
]), ]),
), ),
); );

74
lib/widgets/balance.dart Normal file
View File

@ -0,0 +1,74 @@
import 'package:flutter/material.dart';
import 'package:gecko/globals.dart';
import 'package:gecko/providers/substrate_sdk.dart';
import 'package:gecko/providers/wallet_options.dart';
import 'package:provider/provider.dart';
class Balance extends StatelessWidget {
const Balance(
{Key? key,
required this.address,
required this.size,
this.color = Colors.black,
this.loadingColor = const Color(0xffd07316)})
: super(key: key);
final String address;
final double size;
final Color color;
final Color loadingColor;
@override
Widget build(BuildContext context) {
final walletOptions =
Provider.of<WalletOptionsProvider>(context, listen: false);
return Column(children: <Widget>[
Consumer<SubstrateSdk>(builder: (context, sdk, _) {
return FutureBuilder(
future: sdk.getBalance(address),
builder: (BuildContext context,
AsyncSnapshot<Map<String, double>> globalBalance) {
if (globalBalance.connectionState != ConnectionState.done ||
globalBalance.hasError) {
if (walletOptions.balanceCache[address] != null &&
walletOptions.balanceCache[address] != -1) {
return Row(children: [
Text(walletOptions.balanceCache[address]!.toString(),
style: TextStyle(
fontSize: isTall ? size : size * 0.9,
color: color)),
const SizedBox(width: 5),
walletOptions.udUnitDisplay(size, color),
]);
} else {
return SizedBox(
height: 15,
width: 15,
child: CircularProgressIndicator(
color: loadingColor,
strokeWidth: 2,
),
);
}
}
walletOptions.balanceCache[address] =
globalBalance.data!['transferableBalance']!;
if (walletOptions.balanceCache[address] != -1) {
return Row(children: [
Text(
walletOptions.balanceCache[address]!.toString(),
style: TextStyle(
fontSize: isTall ? size : size * 0.9,
color: color,
),
),
const SizedBox(width: 5),
walletOptions.udUnitDisplay(size, color),
]);
} else {
return const Text('');
}
});
}),
]);
}
}

View File

@ -0,0 +1,44 @@
import 'package:flutter/material.dart';
import 'package:gecko/providers/substrate_sdk.dart';
import 'package:provider/provider.dart';
class Certifications extends StatelessWidget {
const Certifications(
{Key? key,
required this.address,
required this.size,
this.color = Colors.black})
: super(key: key);
final String address;
final double size;
final Color color;
@override
Widget build(BuildContext context) {
return Column(children: <Widget>[
Consumer<SubstrateSdk>(builder: (context, sdk, _) {
return FutureBuilder(
future: sdk.getCertsCounter(address),
builder: (BuildContext context, AsyncSnapshot<List<int>> certs) {
// log.d(_certs.data);
return certs.data?[0] != 0 && certs.data != null
? Row(
children: [
Image.asset('assets/medal.png', height: 20),
const SizedBox(width: 1),
Text(certs.data?[0].toString() ?? '0',
style: const TextStyle(fontSize: 20)),
const SizedBox(width: 5),
Text(
"(${certs.data?[1].toString() ?? '0'})",
style: const TextStyle(fontSize: 14),
)
],
)
: const Text('');
});
}),
]);
}
}

View File

@ -9,6 +9,8 @@ import 'package:gecko/providers/wallet_options.dart';
import 'package:gecko/providers/wallets_profiles.dart'; import 'package:gecko/providers/wallets_profiles.dart';
import 'package:gecko/screens/certifications.dart'; import 'package:gecko/screens/certifications.dart';
import 'package:gecko/screens/common_elements.dart'; import 'package:gecko/screens/common_elements.dart';
import 'package:gecko/widgets/balance.dart';
import 'package:gecko/widgets/certifications.dart';
import 'package:gecko/widgets/idty_status.dart'; import 'package:gecko/widgets/idty_status.dart';
import 'package:gecko/widgets/page_route_no_transition.dart'; import 'package:gecko/widgets/page_route_no_transition.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -27,11 +29,12 @@ class HeaderProfile extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
const double avatarSize = 140; const double avatarSize = 140;
final duniterIndexer = Provider.of<DuniterIndexer>(context, listen: false); final duniterIndexer = Provider.of<DuniterIndexer>(context, listen: false);
final walletOptions =
Provider.of<WalletOptionsProvider>(context, listen: false);
return Stack(children: <Widget>[ return Stack(children: <Widget>[
Consumer<SubstrateSdk>(builder: (context, sub, _) { Consumer<SubstrateSdk>(builder: (context, sub, _) {
// sub.getBlockchainStart(); bool isAccountExist = walletOptions.balanceCache[address] != 0;
bool isAccountExist = balanceCache[address] != 0;
return Container( return Container(
height: 180, height: 180,
decoration: BoxDecoration( decoration: BoxDecoration(
@ -53,7 +56,7 @@ class HeaderProfile extends StatelessWidget {
children: <Widget>[ children: <Widget>[
Container( Container(
height: 10, height: 10,
color: yellowC, // Colors.grey[400], color: yellowC,
), ),
Row(children: [ Row(children: [
GestureDetector( GestureDetector(
@ -72,9 +75,8 @@ class HeaderProfile extends StatelessWidget {
), ),
]), ]),
const SizedBox(height: 25), const SizedBox(height: 25),
balance(context, address, 22), Balance(address: address, size: 22),
const SizedBox(height: 10), const SizedBox(height: 10),
InkWell( InkWell(
onTap: () => duniterIndexer.walletNameIndexer[address] != null onTap: () => duniterIndexer.walletNameIndexer[address] != null
? { ? {
@ -96,41 +98,16 @@ class HeaderProfile extends StatelessWidget {
address: address, address: address,
isOwner: false, isOwner: false,
color: Colors.black), color: Colors.black),
getCerts(context, address, 14) Certifications(address: address, size: 14)
], ],
), ),
), ),
// if (username == null &&
// g1WalletsBox.get(address)?.username != null)
// SizedBox(
// width: 230,
// child: Text(
// g1WalletsBox.get(address)?.username ?? '',
// style: const TextStyle(
// fontSize: 27,
// color: Color(0xff814C00),
// ),
// ),
// ),
// if (username != null)
// SizedBox(
// width: 230,
// child: Text(
// username,
// style: const TextStyle(
// fontSize: 27,
// color: Color(0xff814C00),
// ),
// ),
// ),
// const SizedBox(height: 55),
]), ]),
const Spacer(), const Spacer(),
Column(children: <Widget>[ Column(children: <Widget>[
ClipOval( ClipOval(
child: defaultAvatar(avatarSize), child: defaultAvatar(avatarSize),
), ),
// const SizedBox(height: 25),
]), ]),
]), ]),
), ),

View File

@ -2,7 +2,7 @@ import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/providers/duniter_indexer.dart'; import 'package:gecko/providers/duniter_indexer.dart';
import 'package:gecko/providers/substrate_sdk.dart'; import 'package:gecko/providers/substrate_sdk.dart';
import 'package:gecko/screens/animated_text.dart'; import 'package:gecko/widgets/animated_text.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class IdentityStatus extends StatelessWidget { class IdentityStatus extends StatelessWidget {

View File

@ -0,0 +1,36 @@
import 'package:flutter/material.dart';
import 'package:gecko/globals.dart';
import 'package:gecko/models/wallet_data.dart';
import 'package:truncate/truncate.dart';
class WalletName extends StatelessWidget {
const WalletName(
{Key? key,
required this.wallet,
this.size = 20,
this.color = Colors.black})
: super(key: key);
final WalletData wallet;
final double size;
final Color color;
@override
Widget build(BuildContext context) {
double newSize = wallet.name!.length <= 15 ? size : size - 2;
return Row(mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[
Text(
truncate(wallet.name!, 20),
textAlign: TextAlign.center,
style: TextStyle(
fontSize: isTall ? newSize : newSize * 0.9,
color: color,
fontWeight: FontWeight.w400,
fontStyle: FontStyle.italic,
),
softWrap: false,
overflow: TextOverflow.ellipsis,
),
]);
}
}