refacto: new Balance and Certifications Widgets
This commit is contained in:
parent
4ef5f77888
commit
150f6892f8
|
@ -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),
|
||||||
]),
|
]),
|
||||||
]),
|
]),
|
||||||
),
|
),
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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));
|
|
||||||
}
|
|
||||||
|
|
|
@ -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';
|
||||||
|
|
|
@ -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),
|
||||||
])
|
])
|
||||||
]),
|
]),
|
||||||
),
|
),
|
||||||
|
|
|
@ -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),
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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)
|
|
||||||
],
|
],
|
||||||
)),
|
)),
|
||||||
);
|
);
|
||||||
|
|
|
@ -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),
|
||||||
]),
|
]),
|
||||||
]),
|
]),
|
||||||
),
|
),
|
||||||
|
|
|
@ -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),
|
||||||
]),
|
]),
|
||||||
]),
|
]),
|
||||||
),
|
),
|
||||||
|
|
|
@ -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),
|
||||||
]),
|
]),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
|
@ -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('');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
|
@ -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('');
|
||||||
|
});
|
||||||
|
}),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
|
@ -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),
|
|
||||||
]),
|
]),
|
||||||
]),
|
]),
|
||||||
),
|
),
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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,
|
||||||
|
),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue