forked from axiom-team/gecko
Merge branch 'dragNDropWalletsTransfert' into 'master'
Drag n drop wallets transfert See merge request clients/gecko!31
This commit is contained in:
commit
09e1592f55
|
@ -158,6 +158,7 @@
|
||||||
"months": "{} months",
|
"months": "{} months",
|
||||||
"certify": "Certify",
|
"certify": "Certify",
|
||||||
"from": "From:",
|
"from": "From:",
|
||||||
|
"to": "To:",
|
||||||
"amount": "Amount:",
|
"amount": "Amount:",
|
||||||
"choiceOfSourceWallet": "Choose a source wallet",
|
"choiceOfSourceWallet": "Choose a source wallet",
|
||||||
"extrinsicInProgress": "{} in progress",
|
"extrinsicInProgress": "{} in progress",
|
||||||
|
@ -193,5 +194,6 @@
|
||||||
"revokeMyIdentity": "Revoke my identity",
|
"revokeMyIdentity": "Revoke my identity",
|
||||||
"youCannotRevokeThisIdentity": "You cannot revoke this identity while\nit is member of the blacksmiths web",
|
"youCannotRevokeThisIdentity": "You cannot revoke this identity while\nit is member of the blacksmiths web",
|
||||||
"showUdAmounts": "Show amounts in UD",
|
"showUdAmounts": "Show amounts in UD",
|
||||||
"ud": "{}UD"
|
"ud": "{}UD",
|
||||||
|
"chooseATargetWallet": "Choose a target wallet"
|
||||||
}
|
}
|
|
@ -158,6 +158,7 @@
|
||||||
"months": "{} months",
|
"months": "{} months",
|
||||||
"certify": "Certify",
|
"certify": "Certify",
|
||||||
"from": "From:",
|
"from": "From:",
|
||||||
|
"to": "To:",
|
||||||
"amount": "Amount:",
|
"amount": "Amount:",
|
||||||
"choiceOfSourceWallet": "Choose a source wallet",
|
"choiceOfSourceWallet": "Choose a source wallet",
|
||||||
"extrinsicInProgress": "{} in progress",
|
"extrinsicInProgress": "{} in progress",
|
||||||
|
@ -193,5 +194,6 @@
|
||||||
"revokeMyIdentity": "Revoke my identity",
|
"revokeMyIdentity": "Revoke my identity",
|
||||||
"youCannotRevokeThisIdentity": "You cannot revoke this identity while\nit is member of the blacksmiths web",
|
"youCannotRevokeThisIdentity": "You cannot revoke this identity while\nit is member of the blacksmiths web",
|
||||||
"showUdAmounts": "Show amounts in UD",
|
"showUdAmounts": "Show amounts in UD",
|
||||||
"ud": "{}UD"
|
"ud": "{}UD",
|
||||||
|
"chooseATargetWallet": "Choose a target wallet"
|
||||||
}
|
}
|
|
@ -159,6 +159,7 @@
|
||||||
"months": "{} mois",
|
"months": "{} mois",
|
||||||
"certify": "Certifier",
|
"certify": "Certifier",
|
||||||
"from": "Depuis:",
|
"from": "Depuis:",
|
||||||
|
"to": "Vers:",
|
||||||
"amount": "Montant:",
|
"amount": "Montant:",
|
||||||
"choiceOfSourceWallet": "Choix du portefeuille source",
|
"choiceOfSourceWallet": "Choix du portefeuille source",
|
||||||
"extrinsicInProgress": "{} en cours",
|
"extrinsicInProgress": "{} en cours",
|
||||||
|
@ -194,5 +195,6 @@
|
||||||
"revokeMyIdentity": "Révoquer mon identité",
|
"revokeMyIdentity": "Révoquer mon identité",
|
||||||
"youCannotRevokeThisIdentity": "Vous ne pouvez pas révoquer cette identité tant\nqu'elle fait partie de la toile forgerons",
|
"youCannotRevokeThisIdentity": "Vous ne pouvez pas révoquer cette identité tant\nqu'elle fait partie de la toile forgerons",
|
||||||
"showUdAmounts": "Afficher les montants en DU",
|
"showUdAmounts": "Afficher les montants en DU",
|
||||||
"ud": "{}DU"
|
"ud": "{}DU",
|
||||||
|
"chooseATargetWallet": "Choisissez un portefeuille cible"
|
||||||
}
|
}
|
|
@ -339,7 +339,7 @@ class DuniterIndexer with ChangeNotifier {
|
||||||
MaterialPageRoute(builder: (context) {
|
MaterialPageRoute(builder: (context) {
|
||||||
walletsProfiles.address = profile['id'];
|
walletsProfiles.address = profile['id'];
|
||||||
return WalletViewScreen(
|
return WalletViewScreen(
|
||||||
pubkey: profile['id'],
|
address: profile['id'],
|
||||||
username: g1WalletsBox
|
username: g1WalletsBox
|
||||||
.get(profile['id'])
|
.get(profile['id'])
|
||||||
?.id
|
?.id
|
||||||
|
|
|
@ -13,6 +13,8 @@ class MyWalletsProvider with ChangeNotifier {
|
||||||
late String mnemonic;
|
late String mnemonic;
|
||||||
int? pinLenght;
|
int? pinLenght;
|
||||||
bool isNewDerivationLoading = false;
|
bool isNewDerivationLoading = false;
|
||||||
|
String lastFlyBy = '';
|
||||||
|
String dragAddress = '';
|
||||||
|
|
||||||
int getCurrentChest() {
|
int getCurrentChest() {
|
||||||
if (configBox.get('currentChest') == null) {
|
if (configBox.get('currentChest') == null) {
|
||||||
|
|
|
@ -44,7 +44,7 @@ class WalletsProfilesProvider with ChangeNotifier {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(builder: (context) {
|
MaterialPageRoute(builder: (context) {
|
||||||
return WalletViewScreen(pubkey: barcode!.rawContent);
|
return WalletViewScreen(address: barcode!.rawContent);
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -354,7 +354,7 @@ class ActivityScreen extends StatelessWidget with ChangeNotifier {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(builder: (context) {
|
MaterialPageRoute(builder: (context) {
|
||||||
return WalletViewScreen(pubkey: repository[1]);
|
return WalletViewScreen(address: repository[1]);
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
// Navigator.pop(context);
|
// Navigator.pop(context);
|
||||||
|
|
|
@ -53,8 +53,6 @@ class ChooseWalletScreen extends StatelessWidget {
|
||||||
),
|
),
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
await sub.setCurrentWallet(selectedWallet!);
|
await sub.setCurrentWallet(selectedWallet!);
|
||||||
|
|
||||||
// _walletViewProvider.reload();
|
|
||||||
sub.reload();
|
sub.reload();
|
||||||
|
|
||||||
// Navigator.pop(context);
|
// Navigator.pop(context);
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
|
// ignore_for_file: use_build_context_synchronously
|
||||||
|
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:easy_localization/easy_localization.dart';
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
|
import 'package:flutter_markdown/flutter_markdown.dart';
|
||||||
import 'package:gecko/globals.dart';
|
import 'package:gecko/globals.dart';
|
||||||
import 'package:gecko/models/chest_data.dart';
|
import 'package:gecko/models/chest_data.dart';
|
||||||
import 'package:gecko/models/widgets_keys.dart';
|
import 'package:gecko/models/widgets_keys.dart';
|
||||||
|
@ -18,6 +21,7 @@ import 'package:gecko/screens/myWallets/choose_chest.dart';
|
||||||
import 'package:gecko/screens/myWallets/import_g1_v1.dart';
|
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:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
class WalletsHome extends StatelessWidget {
|
class WalletsHome extends StatelessWidget {
|
||||||
|
@ -38,7 +42,6 @@ class WalletsHome extends StatelessWidget {
|
||||||
|
|
||||||
return WillPopScope(
|
return WillPopScope(
|
||||||
onWillPop: () {
|
onWillPop: () {
|
||||||
// myWalletProvider.pinCode = myWalletProvider.mnemonic = '';
|
|
||||||
Navigator.popUntil(
|
Navigator.popUntil(
|
||||||
context,
|
context,
|
||||||
ModalRoute.withName('/'),
|
ModalRoute.withName('/'),
|
||||||
|
@ -53,7 +56,6 @@ class WalletsHome extends StatelessWidget {
|
||||||
leading: IconButton(
|
leading: IconButton(
|
||||||
icon: const Icon(Icons.arrow_back, color: Colors.black),
|
icon: const Icon(Icons.arrow_back, color: Colors.black),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
// myWalletProvider.pinCode = myWalletProvider.mnemonic = '';
|
|
||||||
Navigator.popUntil(
|
Navigator.popUntil(
|
||||||
context,
|
context,
|
||||||
ModalRoute.withName('/'),
|
ModalRoute.withName('/'),
|
||||||
|
@ -63,7 +65,9 @@ class WalletsHome extends StatelessWidget {
|
||||||
style: TextStyle(color: Colors.grey[850])),
|
style: TextStyle(color: Colors.grey[850])),
|
||||||
backgroundColor: const Color(0xffFFD58D),
|
backgroundColor: const Color(0xffFFD58D),
|
||||||
),
|
),
|
||||||
bottomNavigationBar: homeProvider.bottomAppBar(context),
|
bottomNavigationBar: myWalletProvider.lastFlyBy == ''
|
||||||
|
? homeProvider.bottomAppBar(context)
|
||||||
|
: dragInfo(context),
|
||||||
body: SafeArea(
|
body: SafeArea(
|
||||||
child: Stack(children: [
|
child: Stack(children: [
|
||||||
myWalletsTiles(context, currentChestNumber),
|
myWalletsTiles(context, currentChestNumber),
|
||||||
|
@ -74,6 +78,37 @@ class WalletsHome extends StatelessWidget {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Widget dragInfo(BuildContext context) {
|
||||||
|
final myWalletProvider =
|
||||||
|
Provider.of<MyWalletsProvider>(context, listen: false);
|
||||||
|
|
||||||
|
final walletDataFrom =
|
||||||
|
myWalletProvider.getWalletDataByAddress(myWalletProvider.dragAddress);
|
||||||
|
final walletDataTo =
|
||||||
|
myWalletProvider.getWalletDataByAddress(myWalletProvider.lastFlyBy);
|
||||||
|
|
||||||
|
final bool isSameAddress =
|
||||||
|
myWalletProvider.dragAddress == myWalletProvider.lastFlyBy;
|
||||||
|
|
||||||
|
final double screenWidth = MediaQuery.of(homeContext).size.width;
|
||||||
|
return Container(
|
||||||
|
color: yellowC,
|
||||||
|
width: screenWidth,
|
||||||
|
height: 80,
|
||||||
|
child: Center(
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
const SizedBox(height: 5),
|
||||||
|
Text('${'executeATransfer'.tr()}:'),
|
||||||
|
MarkdownBody(data: '${'from'.tr()} **${walletDataFrom!.name}**'),
|
||||||
|
if (isSameAddress) Text('chooseATargetWallet'.tr()),
|
||||||
|
if (!isSameAddress)
|
||||||
|
MarkdownBody(data: 'Vers: **${walletDataTo!.name}**'),
|
||||||
|
],
|
||||||
|
)),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
Widget chestOptions(
|
Widget chestOptions(
|
||||||
BuildContext context, MyWalletsProvider myWalletProvider) {
|
BuildContext context, MyWalletsProvider myWalletProvider) {
|
||||||
return Column(children: [
|
return Column(children: [
|
||||||
|
@ -159,6 +194,7 @@ class WalletsHome extends StatelessWidget {
|
||||||
WalletOptionsProvider walletOptions =
|
WalletOptionsProvider walletOptions =
|
||||||
Provider.of<WalletOptionsProvider>(context, listen: false);
|
Provider.of<WalletOptionsProvider>(context, listen: false);
|
||||||
final bool isWalletsExists = myWalletProvider.checkIfWalletExist();
|
final bool isWalletsExists = myWalletProvider.checkIfWalletExist();
|
||||||
|
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false);
|
||||||
|
|
||||||
if (!isWalletsExists) {
|
if (!isWalletsExists) {
|
||||||
return const Text('');
|
return const Text('');
|
||||||
|
@ -196,93 +232,140 @@ class WalletsHome extends StatelessWidget {
|
||||||
mainAxisSpacing: 0,
|
mainAxisSpacing: 0,
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
for (WalletData repository in listWallets as Iterable<WalletData>)
|
for (WalletData repository in listWallets as Iterable<WalletData>)
|
||||||
Padding(
|
LongPressDraggable<String>(
|
||||||
padding: const EdgeInsets.all(16),
|
delay: const Duration(milliseconds: 200),
|
||||||
child: GestureDetector(
|
data: repository.address!,
|
||||||
key: keyOpenWallet(repository.address!),
|
// dragAnchorStrategy:
|
||||||
onTap: () {
|
// (Draggable<Object> _, BuildContext __, Offset ___) =>
|
||||||
walletOptions.getAddress(
|
// const Offset(40, 40),
|
||||||
currentChestNumber, repository.derivation!);
|
dragAnchorStrategy: pointerDragAnchorStrategy,
|
||||||
Navigator.push(
|
onDragStarted: () =>
|
||||||
context,
|
myWalletProvider.dragAddress = repository.address!,
|
||||||
SmoothTransition(
|
onDragEnd: (_) {
|
||||||
page: WalletOptions(
|
myWalletProvider.lastFlyBy = '';
|
||||||
wallet: repository,
|
myWalletProvider.dragAddress = '';
|
||||||
|
myWalletProvider.reload();
|
||||||
|
},
|
||||||
|
feedback: ElevatedButton(
|
||||||
|
onPressed: () {},
|
||||||
|
style: ElevatedButton.styleFrom(
|
||||||
|
backgroundColor: orangeC,
|
||||||
|
shape: const CircleBorder(),
|
||||||
|
padding: const EdgeInsets.all(15),
|
||||||
|
),
|
||||||
|
child: const SizedBox(
|
||||||
|
height: 35,
|
||||||
|
child: Image(image: AssetImage('assets/vector_white.png')),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: DragTarget<String>(
|
||||||
|
onAccept: (senderAddress) async {
|
||||||
|
log.d(
|
||||||
|
'INTERPAY: sender: $senderAddress --- receiver: ${repository.address!}');
|
||||||
|
final walletData = myWalletProvider
|
||||||
|
.getWalletDataByAddress(senderAddress);
|
||||||
|
await sub.setCurrentWallet(walletData!);
|
||||||
|
sub.reload();
|
||||||
|
paymentPopup(context, repository.address!);
|
||||||
|
},
|
||||||
|
onMove: (details) {
|
||||||
|
if (repository.address! != myWalletProvider.lastFlyBy) {
|
||||||
|
myWalletProvider.lastFlyBy = repository.address!;
|
||||||
|
myWalletProvider.reload();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onWillAccept: (senderAddress) =>
|
||||||
|
senderAddress != repository.address!,
|
||||||
|
builder: (
|
||||||
|
BuildContext context,
|
||||||
|
List<dynamic> accepted,
|
||||||
|
List<dynamic> rejected,
|
||||||
|
) {
|
||||||
|
return Padding(
|
||||||
|
padding: const EdgeInsets.all(16),
|
||||||
|
child: GestureDetector(
|
||||||
|
key: keyOpenWallet(repository.address!),
|
||||||
|
onTap: () {
|
||||||
|
walletOptions.getAddress(
|
||||||
|
currentChestNumber, repository.derivation!);
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
SmoothTransition(
|
||||||
|
page: WalletOptions(
|
||||||
|
wallet: repository,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
child: ClipOvalShadow(
|
||||||
|
shadow: const Shadow(
|
||||||
|
color: Colors.transparent,
|
||||||
|
offset: Offset(0, 0),
|
||||||
|
blurRadius: 5,
|
||||||
|
),
|
||||||
|
clipper: CustomClipperOval(),
|
||||||
|
child: ClipRRect(
|
||||||
|
borderRadius:
|
||||||
|
const BorderRadius.all(Radius.circular(12)),
|
||||||
|
child: Column(children: <Widget>[
|
||||||
|
Expanded(
|
||||||
|
child: Container(
|
||||||
|
width: double.infinity,
|
||||||
|
height: double.infinity,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
gradient: RadialGradient(
|
||||||
|
radius: 0.6,
|
||||||
|
colors: [
|
||||||
|
Colors.green[400]!,
|
||||||
|
const Color(0xFFE7E7A6),
|
||||||
|
],
|
||||||
|
)),
|
||||||
|
child:
|
||||||
|
// SvgPicture.asset('assets/chopp-gecko2.png',
|
||||||
|
// semanticsLabel: 'Gecko', height: 48),
|
||||||
|
repository.imageCustomPath == null ||
|
||||||
|
repository.imageCustomPath == ''
|
||||||
|
? Image.asset(
|
||||||
|
'assets/avatars/${repository.imageDefaultPath}',
|
||||||
|
alignment: Alignment.bottomCenter,
|
||||||
|
scale: 0.5,
|
||||||
|
)
|
||||||
|
: Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
shape: BoxShape.circle,
|
||||||
|
color: Colors.transparent,
|
||||||
|
image: DecorationImage(
|
||||||
|
fit: BoxFit.fitHeight,
|
||||||
|
image: FileImage(
|
||||||
|
File(repository
|
||||||
|
.imageCustomPath!),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)),
|
||||||
|
Stack(children: <Widget>[
|
||||||
|
balanceBuilder(
|
||||||
|
context,
|
||||||
|
repository.address!,
|
||||||
|
repository.address ==
|
||||||
|
defaultWallet.address),
|
||||||
|
nameBuilder(context, repository,
|
||||||
|
defaultWallet, currentChestNumber),
|
||||||
|
]),
|
||||||
|
]),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
},
|
}),
|
||||||
child: ClipOvalShadow(
|
),
|
||||||
shadow: const Shadow(
|
|
||||||
color: Colors.transparent,
|
|
||||||
offset: Offset(0, 0),
|
|
||||||
blurRadius: 5,
|
|
||||||
),
|
|
||||||
clipper: CustomClipperOval(),
|
|
||||||
child: ClipRRect(
|
|
||||||
borderRadius:
|
|
||||||
const BorderRadius.all(Radius.circular(12)),
|
|
||||||
child: Column(children: <Widget>[
|
|
||||||
Expanded(
|
|
||||||
child: Container(
|
|
||||||
width: double.infinity,
|
|
||||||
height: double.infinity,
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
gradient: RadialGradient(
|
|
||||||
radius: 0.6,
|
|
||||||
colors: [
|
|
||||||
Colors.green[400]!,
|
|
||||||
const Color(0xFFE7E7A6),
|
|
||||||
],
|
|
||||||
)),
|
|
||||||
child:
|
|
||||||
// SvgPicture.asset('assets/chopp-gecko2.png',
|
|
||||||
// semanticsLabel: 'Gecko', height: 48),
|
|
||||||
repository.imageCustomPath == null ||
|
|
||||||
repository.imageCustomPath == ''
|
|
||||||
? Image.asset(
|
|
||||||
'assets/avatars/${repository.imageDefaultPath}',
|
|
||||||
alignment: Alignment.bottomCenter,
|
|
||||||
scale: 0.5,
|
|
||||||
)
|
|
||||||
: Container(
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
shape: BoxShape.circle,
|
|
||||||
color: Colors.transparent,
|
|
||||||
image: DecorationImage(
|
|
||||||
fit: BoxFit.fitHeight,
|
|
||||||
image: FileImage(
|
|
||||||
File(repository.imageCustomPath!),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
)),
|
|
||||||
Stack(children: <Widget>[
|
|
||||||
balanceBuilder(context, repository.address!,
|
|
||||||
repository.address == defaultWallet.address),
|
|
||||||
nameBuilder(context, repository, defaultWallet,
|
|
||||||
currentChestNumber),
|
|
||||||
]),
|
|
||||||
]),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
)),
|
|
||||||
Consumer<SubstrateSdk>(builder: (context, sub, _) {
|
Consumer<SubstrateSdk>(builder: (context, sub, _) {
|
||||||
return sub.nodeConnected
|
return sub.nodeConnected
|
||||||
? addNewDerivation(context)
|
? addNewDerivation(context)
|
||||||
: const Text('');
|
: const Text('');
|
||||||
}),
|
}),
|
||||||
// SizedBox(height: 1),
|
|
||||||
// Padding(
|
|
||||||
// padding: EdgeInsets.symmetric(horizontal: 35),
|
|
||||||
// child: Text(
|
|
||||||
// 'Ajouter un portefeuille',
|
|
||||||
// textAlign: TextAlign.center,
|
|
||||||
// style: TextStyle(fontSize: 18),
|
|
||||||
// ))
|
|
||||||
]),
|
]),
|
||||||
// SliverToBoxAdapter(child: Spacer()),
|
|
||||||
SliverToBoxAdapter(child: chestOptions(context, myWalletProvider)),
|
SliverToBoxAdapter(child: chestOptions(context, myWalletProvider)),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
@ -316,14 +399,9 @@ class WalletsHome extends StatelessWidget {
|
||||||
return ListTile(
|
return ListTile(
|
||||||
shape: const RoundedRectangleBorder(
|
shape: const RoundedRectangleBorder(
|
||||||
borderRadius: BorderRadius.vertical(bottom: Radius.circular(12))),
|
borderRadius: BorderRadius.vertical(bottom: Radius.circular(12))),
|
||||||
// contentPadding: const EdgeInsets.only(left: 7.0),
|
|
||||||
tileColor: repository.address == defaultWallet.address
|
tileColor: repository.address == defaultWallet.address
|
||||||
? orangeC
|
? orangeC
|
||||||
: const Color(0xffFFD58D),
|
: const Color(0xffFFD58D),
|
||||||
// leading: Text('IMAGE'),
|
|
||||||
|
|
||||||
// subtitle: Text(_repository.split(':')[3],
|
|
||||||
// style: TextStyle(fontSize: 12.0, fontFamily: 'Monospace')),
|
|
||||||
title: Center(
|
title: Center(
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.only(left: 5, right: 5, bottom: 35, top: 5),
|
padding: const EdgeInsets.only(left: 5, right: 5, bottom: 35, top: 5),
|
||||||
|
@ -338,13 +416,7 @@ class WalletsHome extends StatelessWidget {
|
||||||
: Colors.black),
|
: Colors.black),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
// dense: true,
|
|
||||||
onTap: () {
|
onTap: () {
|
||||||
// _walletOptions.readLocalWallet(
|
|
||||||
// context,
|
|
||||||
// _repository,
|
|
||||||
// _myWalletProvider.pinCode,
|
|
||||||
// pinLength);
|
|
||||||
walletOptions.getAddress(currentChestNumber, repository.derivation!);
|
walletOptions.getAddress(currentChestNumber, repository.derivation!);
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
|
@ -420,12 +492,6 @@ class WalletsHome extends StatelessWidget {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// extension Range on num {
|
|
||||||
// bool isBetween(num from, num to) {
|
|
||||||
// return from < this && this < to;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
class CustomClipperOval extends CustomClipper<Rect> {
|
class CustomClipperOval extends CustomClipper<Rect> {
|
||||||
@override
|
@override
|
||||||
Rect getClip(Size size) {
|
Rect getClip(Size size) {
|
||||||
|
|
|
@ -116,7 +116,7 @@ class ContactsScreen extends StatelessWidget {
|
||||||
walletsProfilesClass.address =
|
walletsProfilesClass.address =
|
||||||
g1Wallet.pubkey;
|
g1Wallet.pubkey;
|
||||||
return WalletViewScreen(
|
return WalletViewScreen(
|
||||||
pubkey: g1Wallet.pubkey,
|
address: g1Wallet.pubkey,
|
||||||
username: g1WalletsBox
|
username: g1WalletsBox
|
||||||
.get(g1Wallet.pubkey)
|
.get(g1Wallet.pubkey)
|
||||||
?.id
|
?.id
|
||||||
|
|
|
@ -143,7 +143,7 @@ class SearchResultScreen extends StatelessWidget {
|
||||||
walletsProfilesClass.address =
|
walletsProfilesClass.address =
|
||||||
g1Wallet.pubkey;
|
g1Wallet.pubkey;
|
||||||
return WalletViewScreen(
|
return WalletViewScreen(
|
||||||
pubkey: g1Wallet.pubkey,
|
address: g1Wallet.pubkey,
|
||||||
username: g1WalletsBox
|
username: g1WalletsBox
|
||||||
.get(g1Wallet.pubkey)
|
.get(g1Wallet.pubkey)
|
||||||
?.id
|
?.id
|
||||||
|
|
|
@ -24,9 +24,9 @@ import 'package:qr_flutter/qr_flutter.dart';
|
||||||
|
|
||||||
class WalletViewScreen extends StatelessWidget {
|
class WalletViewScreen extends StatelessWidget {
|
||||||
const WalletViewScreen(
|
const WalletViewScreen(
|
||||||
{required this.pubkey, this.username, this.avatar, Key? key})
|
{required this.address, this.username, this.avatar, Key? key})
|
||||||
: super(key: key);
|
: super(key: key);
|
||||||
final String? pubkey;
|
final String? address;
|
||||||
final String? username;
|
final String? username;
|
||||||
final Image? avatar;
|
final Image? avatar;
|
||||||
final double buttonSize = 100;
|
final double buttonSize = 100;
|
||||||
|
@ -39,7 +39,7 @@ class WalletViewScreen extends StatelessWidget {
|
||||||
Provider.of<WalletsProfilesProvider>(context, listen: false);
|
Provider.of<WalletsProfilesProvider>(context, listen: false);
|
||||||
CesiumPlusProvider cesiumPlusProvider =
|
CesiumPlusProvider cesiumPlusProvider =
|
||||||
Provider.of<CesiumPlusProvider>(context, listen: false);
|
Provider.of<CesiumPlusProvider>(context, listen: false);
|
||||||
walletProfile.address = pubkey!;
|
walletProfile.address = address!;
|
||||||
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false);
|
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false);
|
||||||
HomeProvider homeProvider =
|
HomeProvider homeProvider =
|
||||||
Provider.of<HomeProvider>(context, listen: false);
|
Provider.of<HomeProvider>(context, listen: false);
|
||||||
|
@ -49,9 +49,6 @@ class WalletViewScreen extends StatelessWidget {
|
||||||
|
|
||||||
sub.setCurrentWallet(defaultWallet);
|
sub.setCurrentWallet(defaultWallet);
|
||||||
|
|
||||||
// sub.spawnBlock();
|
|
||||||
// sub.spawnBlock(0, 25);
|
|
||||||
|
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
backgroundColor: backgroundColor,
|
backgroundColor: backgroundColor,
|
||||||
resizeToAvoidBottomInset: true,
|
resizeToAvoidBottomInset: true,
|
||||||
|
@ -67,14 +64,14 @@ class WalletViewScreen extends StatelessWidget {
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
G1WalletsList? newContact;
|
G1WalletsList? newContact;
|
||||||
g1WalletsBox.toMap().forEach((key, value) {
|
g1WalletsBox.toMap().forEach((key, value) {
|
||||||
if (key == pubkey) newContact = value;
|
if (key == address) newContact = value;
|
||||||
});
|
});
|
||||||
// G1WalletsList(pubkey: pubkey!, username: username);
|
// G1WalletsList(pubkey: pubkey!, username: username);
|
||||||
await walletProfile.addContact(
|
await walletProfile.addContact(
|
||||||
newContact ?? G1WalletsList(pubkey: pubkey!));
|
newContact ?? G1WalletsList(pubkey: address!));
|
||||||
},
|
},
|
||||||
icon: Icon(
|
icon: Icon(
|
||||||
walletProfile.isContact(pubkey!)
|
walletProfile.isContact(address!)
|
||||||
? Icons.add_reaction_rounded
|
? Icons.add_reaction_rounded
|
||||||
: Icons.add_reaction_outlined,
|
: Icons.add_reaction_outlined,
|
||||||
size: 35,
|
size: 35,
|
||||||
|
@ -110,7 +107,7 @@ class WalletViewScreen extends StatelessWidget {
|
||||||
bottomNavigationBar: homeProvider.bottomAppBar(context),
|
bottomNavigationBar: homeProvider.bottomAppBar(context),
|
||||||
body: SafeArea(
|
body: SafeArea(
|
||||||
child: Column(children: <Widget>[
|
child: Column(children: <Widget>[
|
||||||
walletProfile.headerProfileView(context, pubkey!, username),
|
walletProfile.headerProfileView(context, address!, username),
|
||||||
SizedBox(height: isTall ? 10 : 0),
|
SizedBox(height: isTall ? 10 : 0),
|
||||||
Row(mainAxisAlignment: MainAxisAlignment.spaceAround, children: [
|
Row(mainAxisAlignment: MainAxisAlignment.spaceAround, children: [
|
||||||
Column(children: <Widget>[
|
Column(children: <Widget>[
|
||||||
|
@ -118,7 +115,7 @@ class WalletViewScreen extends StatelessWidget {
|
||||||
height: buttonSize,
|
height: buttonSize,
|
||||||
child: ClipOval(
|
child: ClipOval(
|
||||||
child: Material(
|
child: Material(
|
||||||
color: yellowC, //const Color(0xffFFD58D), // button color
|
color: yellowC,
|
||||||
child: InkWell(
|
child: InkWell(
|
||||||
key: keyViewActivity,
|
key: keyViewActivity,
|
||||||
splashColor: orangeC, // inkwell color
|
splashColor: orangeC, // inkwell color
|
||||||
|
@ -129,12 +126,11 @@ class WalletViewScreen extends StatelessWidget {
|
||||||
'assets/walletOptions/clock.png'),
|
'assets/walletOptions/clock.png'),
|
||||||
height: 90)),
|
height: 90)),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
// _historyProvider.nPage = 1;
|
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(builder: (context) {
|
MaterialPageRoute(builder: (context) {
|
||||||
return ActivityScreen(
|
return ActivityScreen(
|
||||||
address: pubkey,
|
address: address,
|
||||||
avatar:
|
avatar:
|
||||||
cesiumPlusProvider.defaultAvatar(50));
|
cesiumPlusProvider.defaultAvatar(50));
|
||||||
}),
|
}),
|
||||||
|
@ -154,8 +150,7 @@ class WalletViewScreen extends StatelessWidget {
|
||||||
Consumer<SubstrateSdk>(builder: (context, sub, _) {
|
Consumer<SubstrateSdk>(builder: (context, sub, _) {
|
||||||
WalletData? defaultWallet = myWalletProvider.getDefaultWallet();
|
WalletData? defaultWallet = myWalletProvider.getDefaultWallet();
|
||||||
return FutureBuilder(
|
return FutureBuilder(
|
||||||
future: sub.certState(defaultWallet.address!,
|
future: sub.certState(defaultWallet.address!, address!),
|
||||||
pubkey!), // .canCertify(_defaultWallet.address!, pubkey!),
|
|
||||||
builder: (context, AsyncSnapshot<Map<String, int>> snapshot) {
|
builder: (context, AsyncSnapshot<Map<String, int>> snapshot) {
|
||||||
if (snapshot.data == null) return const SizedBox();
|
if (snapshot.data == null) return const SizedBox();
|
||||||
String duration = '';
|
String duration = '';
|
||||||
|
@ -207,11 +202,10 @@ class WalletViewScreen extends StatelessWidget {
|
||||||
height: buttonSize,
|
height: buttonSize,
|
||||||
child: ClipOval(
|
child: ClipOval(
|
||||||
child: Material(
|
child: Material(
|
||||||
color:
|
color: const Color(0xffFFD58D),
|
||||||
const Color(0xffFFD58D), // button color
|
|
||||||
child: InkWell(
|
child: InkWell(
|
||||||
key: keyCertify,
|
key: keyCertify,
|
||||||
splashColor: orangeC, // inkwell color
|
splashColor: orangeC,
|
||||||
child: const Padding(
|
child: const Padding(
|
||||||
padding: EdgeInsets.only(bottom: 0),
|
padding: EdgeInsets.only(bottom: 0),
|
||||||
child: Image(
|
child: Image(
|
||||||
|
@ -223,7 +217,7 @@ class WalletViewScreen extends StatelessWidget {
|
||||||
context,
|
context,
|
||||||
"areYouSureYouWantToCertify".tr(
|
"areYouSureYouWantToCertify".tr(
|
||||||
args: [
|
args: [
|
||||||
getShortPubkey(pubkey!)
|
getShortPubkey(address!)
|
||||||
]));
|
]));
|
||||||
|
|
||||||
if (result ?? false) {
|
if (result ?? false) {
|
||||||
|
@ -293,17 +287,17 @@ class WalletViewScreen extends StatelessWidget {
|
||||||
height: buttonSize,
|
height: buttonSize,
|
||||||
child: ClipOval(
|
child: ClipOval(
|
||||||
child: Material(
|
child: Material(
|
||||||
color: const Color(0xffFFD58D), // button color
|
color: const Color(0xffFFD58D),
|
||||||
child: InkWell(
|
child: InkWell(
|
||||||
key: keyCopyAddress,
|
key: keyCopyAddress,
|
||||||
splashColor: orangeC, // inkwell color
|
splashColor: orangeC,
|
||||||
child: const Padding(
|
child: const Padding(
|
||||||
padding: EdgeInsets.all(20),
|
padding: EdgeInsets.all(20),
|
||||||
child: Image(
|
child: Image(
|
||||||
image: AssetImage('assets/copy_key.png'),
|
image: AssetImage('assets/copy_key.png'),
|
||||||
height: 90)),
|
height: 90)),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
Clipboard.setData(ClipboardData(text: pubkey));
|
Clipboard.setData(ClipboardData(text: address));
|
||||||
snackCopyKey(context);
|
snackCopyKey(context);
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
|
@ -334,20 +328,20 @@ class WalletViewScreen extends StatelessWidget {
|
||||||
),
|
),
|
||||||
child: ClipOval(
|
child: ClipOval(
|
||||||
child: Material(
|
child: Material(
|
||||||
color: orangeC, // button color
|
color: orangeC,
|
||||||
child: InkWell(
|
child: InkWell(
|
||||||
key: keyPay,
|
key: keyPay,
|
||||||
splashColor: yellowC,
|
splashColor: yellowC,
|
||||||
onTap: sub.nodeConnected
|
onTap: sub.nodeConnected
|
||||||
? () {
|
? () {
|
||||||
paymentPopup(context, walletProfile);
|
paymentPopup(context, address!);
|
||||||
}
|
}
|
||||||
: null, // inkwell color
|
: null,
|
||||||
child: const Padding(
|
child: const Padding(
|
||||||
padding: EdgeInsets.all(14),
|
padding: EdgeInsets.all(14),
|
||||||
child: Image(
|
child: Image(
|
||||||
image: AssetImage('assets/vector_white.png'),
|
image: AssetImage('assets/vector_white.png')),
|
||||||
))),
|
)),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -397,270 +391,279 @@ class WalletViewScreen extends StatelessWidget {
|
||||||
),
|
),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void paymentPopup(
|
void paymentPopup(BuildContext context, String toAddress) {
|
||||||
BuildContext context, WalletsProfilesProvider walletViewProvider) {
|
final walletViewProvider =
|
||||||
// WalletsProfilesProvider _walletViewProvider =
|
Provider.of<WalletsProfilesProvider>(context, listen: false);
|
||||||
// Provider.of<WalletsProfilesProvider>(context, listen: false);
|
|
||||||
|
|
||||||
final myWalletProvider =
|
final myWalletProvider =
|
||||||
Provider.of<MyWalletsProvider>(context, listen: false);
|
Provider.of<MyWalletsProvider>(context, listen: false);
|
||||||
final sub = Provider.of<SubstrateSdk>(context, listen: false);
|
final sub = Provider.of<SubstrateSdk>(context, listen: false);
|
||||||
|
|
||||||
const double shapeSize = 20;
|
const double shapeSize = 20;
|
||||||
WalletData? defaultWallet = myWalletProvider.getDefaultWallet();
|
WalletData? defaultWallet = myWalletProvider.getDefaultWallet();
|
||||||
log.d(defaultWallet.address);
|
log.d(defaultWallet.address);
|
||||||
|
|
||||||
bool canValidate = false;
|
bool canValidate = false;
|
||||||
|
|
||||||
final bool isUdUnit = configBox.get('isUdUnit') ?? false;
|
final bool isUdUnit = configBox.get('isUdUnit') ?? false;
|
||||||
final udValue = sub.udValue;
|
final udValue = sub.udValue;
|
||||||
final double balanceRatio = isUdUnit ? round(udValue / 100, 6) : 1;
|
final double balanceRatio = isUdUnit ? round(udValue / 100, 6) : 1;
|
||||||
|
|
||||||
showModalBottomSheet<void>(
|
final toWalletData = myWalletProvider.getWalletDataByAddress(toAddress);
|
||||||
shape: const RoundedRectangleBorder(
|
|
||||||
borderRadius: BorderRadius.only(
|
Future executeTransfert() async {
|
||||||
topRight: Radius.circular(shapeSize),
|
String? pin;
|
||||||
topLeft: Radius.circular(shapeSize),
|
if (myWalletProvider.pinCode == '') {
|
||||||
),
|
pin = await Navigator.push(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(
|
||||||
|
builder: (homeContext) {
|
||||||
|
return UnlockingWallet(wallet: defaultWallet);
|
||||||
|
},
|
||||||
),
|
),
|
||||||
isScrollControlled: true,
|
);
|
||||||
context: context,
|
}
|
||||||
builder: (BuildContext context) {
|
log.d(pin);
|
||||||
return StatefulBuilder(
|
if (pin != null || myWalletProvider.pinCode != '') {
|
||||||
builder: (BuildContext context, StateSetter setState) {
|
// Payment workflow !
|
||||||
if (walletViewProvider.payAmount.text != '' &&
|
WalletsProfilesProvider walletViewProvider =
|
||||||
(double.parse(walletViewProvider.payAmount.text) +
|
Provider.of<WalletsProfilesProvider>(context, listen: false);
|
||||||
2 / balanceRatio) <=
|
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false);
|
||||||
(balanceCache[defaultWallet.address] ?? 0) &&
|
final acc = sub.getCurrentWallet();
|
||||||
walletViewProvider.address != defaultWallet.address) {
|
log.d(
|
||||||
if ((balanceCache[pubkey] == 0 || balanceCache[pubkey] == null) &&
|
"fromAddress: ${acc.address!},destAddress: $toAddress, amount: ${double.parse(walletViewProvider.payAmount.text)}, password: $pin");
|
||||||
double.parse(walletViewProvider.payAmount.text) <
|
sub.pay(
|
||||||
5 / balanceRatio) {
|
fromAddress: acc.address!,
|
||||||
canValidate = false;
|
destAddress: toAddress,
|
||||||
} else {
|
amount: double.parse(walletViewProvider.payAmount.text),
|
||||||
canValidate = true;
|
password: pin ?? myWalletProvider.pinCode);
|
||||||
}
|
Navigator.push(
|
||||||
} else {
|
context,
|
||||||
|
MaterialPageRoute(builder: (context) {
|
||||||
|
return const TransactionInProgress();
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
showModalBottomSheet<void>(
|
||||||
|
shape: const RoundedRectangleBorder(
|
||||||
|
borderRadius: BorderRadius.only(
|
||||||
|
topRight: Radius.circular(shapeSize),
|
||||||
|
topLeft: Radius.circular(shapeSize),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
isScrollControlled: true,
|
||||||
|
context: context,
|
||||||
|
builder: (BuildContext context) {
|
||||||
|
return StatefulBuilder(
|
||||||
|
builder: (BuildContext context, StateSetter setState) {
|
||||||
|
if (walletViewProvider.payAmount.text != '' &&
|
||||||
|
(double.parse(walletViewProvider.payAmount.text) +
|
||||||
|
2 / balanceRatio) <=
|
||||||
|
(balanceCache[defaultWallet.address] ?? 0) &&
|
||||||
|
toAddress != defaultWallet.address) {
|
||||||
|
if ((balanceCache[toAddress] == 0 ||
|
||||||
|
balanceCache[toAddress] == null) &&
|
||||||
|
double.parse(walletViewProvider.payAmount.text) <
|
||||||
|
5 / balanceRatio) {
|
||||||
canValidate = false;
|
canValidate = false;
|
||||||
|
} else {
|
||||||
|
canValidate = true;
|
||||||
}
|
}
|
||||||
final bool isUdUnit = configBox.get('isUdUnit') ?? false;
|
} else {
|
||||||
return Padding(
|
canValidate = false;
|
||||||
padding: EdgeInsets.only(
|
}
|
||||||
bottom: MediaQuery.of(context).viewInsets.bottom),
|
final bool isUdUnit = configBox.get('isUdUnit') ?? false;
|
||||||
child: Container(
|
return Padding(
|
||||||
height: 400,
|
padding: EdgeInsets.only(
|
||||||
decoration: const ShapeDecoration(
|
bottom: MediaQuery.of(context).viewInsets.bottom),
|
||||||
color: Color(0xffffeed1),
|
child: Container(
|
||||||
shape: RoundedRectangleBorder(
|
height: 420,
|
||||||
borderRadius: BorderRadius.only(
|
decoration: const ShapeDecoration(
|
||||||
topRight: Radius.circular(shapeSize),
|
color: Color(0xffffeed1),
|
||||||
topLeft: Radius.circular(shapeSize),
|
shape: RoundedRectangleBorder(
|
||||||
),
|
borderRadius: BorderRadius.only(
|
||||||
|
topRight: Radius.circular(shapeSize),
|
||||||
|
topLeft: Radius.circular(shapeSize),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
child: Padding(
|
|
||||||
padding: const EdgeInsets.only(
|
|
||||||
top: 24, bottom: 0, left: 24, right: 24),
|
|
||||||
child: Column(
|
|
||||||
mainAxisSize: MainAxisSize.min,
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
|
||||||
children: <Widget>[
|
|
||||||
Row(
|
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
||||||
children: [
|
|
||||||
Text(
|
|
||||||
'executeATransfer'.tr(),
|
|
||||||
style: const TextStyle(
|
|
||||||
fontSize: 26, fontWeight: FontWeight.w700),
|
|
||||||
),
|
|
||||||
IconButton(
|
|
||||||
iconSize: 40,
|
|
||||||
icon: const Icon(Icons.cancel_outlined),
|
|
||||||
onPressed: () {
|
|
||||||
Navigator.pop(context);
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]),
|
|
||||||
const SizedBox(height: 20),
|
|
||||||
Text(
|
|
||||||
'from'.tr(),
|
|
||||||
style: TextStyle(
|
|
||||||
fontSize: 19,
|
|
||||||
fontWeight: FontWeight.w500,
|
|
||||||
color: Colors.grey[600]),
|
|
||||||
),
|
|
||||||
const SizedBox(height: 10),
|
|
||||||
Consumer<SubstrateSdk>(builder: (context, sub, _) {
|
|
||||||
return InkWell(
|
|
||||||
key: keyChangeChest,
|
|
||||||
onTap: () async {
|
|
||||||
String? pin;
|
|
||||||
if (myWalletProvider.pinCode == '') {
|
|
||||||
pin = await Navigator.push(
|
|
||||||
context,
|
|
||||||
MaterialPageRoute(
|
|
||||||
builder: (homeContext) {
|
|
||||||
return UnlockingWallet(
|
|
||||||
wallet: defaultWallet);
|
|
||||||
},
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (pin != null ||
|
|
||||||
myWalletProvider.pinCode != '') {
|
|
||||||
Navigator.push(
|
|
||||||
context,
|
|
||||||
MaterialPageRoute(builder: (context) {
|
|
||||||
return ChooseWalletScreen(
|
|
||||||
pin: pin ?? myWalletProvider.pinCode);
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
child: Container(
|
|
||||||
width: double.infinity,
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
border: Border.all(
|
|
||||||
color: Colors.blueAccent.shade200,
|
|
||||||
width: 2),
|
|
||||||
borderRadius: const BorderRadius.all(
|
|
||||||
Radius.circular(10.0)),
|
|
||||||
),
|
|
||||||
padding: const EdgeInsets.all(10),
|
|
||||||
child: Row(children: [
|
|
||||||
Text(defaultWallet.name!),
|
|
||||||
const Spacer(),
|
|
||||||
balance(context, defaultWallet.address!, 20)
|
|
||||||
]),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}),
|
|
||||||
const Spacer(),
|
|
||||||
|
|
||||||
// const SizedBox(height: 10),
|
|
||||||
Text(
|
|
||||||
'amount'.tr(),
|
|
||||||
style: TextStyle(
|
|
||||||
fontSize: 19,
|
|
||||||
fontWeight: FontWeight.w500,
|
|
||||||
color: Colors.grey[600]),
|
|
||||||
),
|
|
||||||
const SizedBox(height: 10),
|
|
||||||
TextField(
|
|
||||||
key: keyAmountField,
|
|
||||||
controller: walletViewProvider.payAmount,
|
|
||||||
autofocus: true,
|
|
||||||
maxLines: 1,
|
|
||||||
textAlign: TextAlign.center,
|
|
||||||
keyboardType: TextInputType.number,
|
|
||||||
onChanged: (_) => setState(() {
|
|
||||||
// _walletViewProvider.reload();
|
|
||||||
}),
|
|
||||||
inputFormatters: <TextInputFormatter>[
|
|
||||||
// FilteringTextInputFormatter.digitsOnly,
|
|
||||||
FilteringTextInputFormatter.deny(',',
|
|
||||||
replacementString: '.'),
|
|
||||||
FilteringTextInputFormatter.allow(
|
|
||||||
RegExp(r'(^\d+\.?\d{0,2})')),
|
|
||||||
],
|
|
||||||
// onChanged: (v) => _searchProvider.reload(),
|
|
||||||
decoration: InputDecoration(
|
|
||||||
hintText: '0.00',
|
|
||||||
suffix: Text(isUdUnit
|
|
||||||
? 'ud'.tr(args: [''])
|
|
||||||
: currencyName), // udUnitDisplay(40),
|
|
||||||
filled: true,
|
|
||||||
fillColor: Colors.transparent,
|
|
||||||
// border: OutlineInputBorder(
|
|
||||||
// borderSide:
|
|
||||||
// BorderSide(color: Colors.grey[500], width: 2),
|
|
||||||
// borderRadius: BorderRadius.circular(8)),
|
|
||||||
|
|
||||||
focusedBorder: OutlineInputBorder(
|
|
||||||
borderSide: BorderSide(
|
|
||||||
color: Colors.grey[500]!, width: 2),
|
|
||||||
borderRadius: BorderRadius.circular(8),
|
|
||||||
),
|
|
||||||
contentPadding: const EdgeInsets.all(20),
|
|
||||||
),
|
|
||||||
style: const TextStyle(
|
|
||||||
fontSize: 40,
|
|
||||||
color: Colors.black,
|
|
||||||
fontWeight: FontWeight.w600,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
// const SizedBox(height: 40),
|
|
||||||
const Spacer(),
|
|
||||||
SizedBox(
|
|
||||||
width: double.infinity,
|
|
||||||
height: 60,
|
|
||||||
child: ElevatedButton(
|
|
||||||
key: keyConfirmPayment,
|
|
||||||
style: ElevatedButton.styleFrom(
|
|
||||||
foregroundColor: Colors.white, elevation: 4,
|
|
||||||
backgroundColor: orangeC, // foreground
|
|
||||||
),
|
|
||||||
onPressed: canValidate
|
|
||||||
? () async {
|
|
||||||
String? pin;
|
|
||||||
if (myWalletProvider.pinCode == '') {
|
|
||||||
pin = await Navigator.push(
|
|
||||||
context,
|
|
||||||
MaterialPageRoute(
|
|
||||||
builder: (homeContext) {
|
|
||||||
return UnlockingWallet(
|
|
||||||
wallet: defaultWallet);
|
|
||||||
},
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
log.d(pin);
|
|
||||||
if (pin != null ||
|
|
||||||
myWalletProvider.pinCode != '') {
|
|
||||||
// Payment workflow !
|
|
||||||
WalletsProfilesProvider
|
|
||||||
walletViewProvider =
|
|
||||||
Provider.of<WalletsProfilesProvider>(
|
|
||||||
context,
|
|
||||||
listen: false);
|
|
||||||
SubstrateSdk sub =
|
|
||||||
Provider.of<SubstrateSdk>(context,
|
|
||||||
listen: false);
|
|
||||||
final acc = sub.getCurrentWallet();
|
|
||||||
log.d(
|
|
||||||
"fromAddress: ${acc.address!},destAddress: ${walletViewProvider.address!}, amount: ${double.parse(walletViewProvider.payAmount.text)}, password: $pin");
|
|
||||||
sub.pay(
|
|
||||||
fromAddress: acc.address!,
|
|
||||||
destAddress:
|
|
||||||
walletViewProvider.address!,
|
|
||||||
amount: double.parse(
|
|
||||||
walletViewProvider
|
|
||||||
.payAmount.text),
|
|
||||||
password:
|
|
||||||
pin ?? myWalletProvider.pinCode);
|
|
||||||
Navigator.push(
|
|
||||||
context,
|
|
||||||
MaterialPageRoute(builder: (context) {
|
|
||||||
return const TransactionInProgress();
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
: null,
|
|
||||||
child: Text(
|
|
||||||
'executeTheTransfer'.tr(),
|
|
||||||
style: const TextStyle(
|
|
||||||
fontSize: 20, fontWeight: FontWeight.w600),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
const Spacer(),
|
|
||||||
]),
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
);
|
child: Padding(
|
||||||
});
|
padding: const EdgeInsets.only(
|
||||||
}).then((value) => walletViewProvider.payAmount.text = '');
|
top: 24, bottom: 0, left: 24, right: 24),
|
||||||
}
|
child: Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: <Widget>[
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
'executeATransfer'.tr(),
|
||||||
|
style: const TextStyle(
|
||||||
|
fontSize: 26, fontWeight: FontWeight.w700),
|
||||||
|
),
|
||||||
|
IconButton(
|
||||||
|
iconSize: 40,
|
||||||
|
icon: const Icon(Icons.cancel_outlined),
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.pop(context);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
]),
|
||||||
|
const SizedBox(height: 20),
|
||||||
|
Text(
|
||||||
|
'from'.tr(),
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 19,
|
||||||
|
fontWeight: FontWeight.w500,
|
||||||
|
color: Colors.grey[600]),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 10),
|
||||||
|
Consumer<SubstrateSdk>(builder: (context, sub, _) {
|
||||||
|
return InkWell(
|
||||||
|
key: keyChangeChest,
|
||||||
|
onTap: () async {
|
||||||
|
String? pin;
|
||||||
|
if (myWalletProvider.pinCode == '') {
|
||||||
|
pin = await Navigator.push(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(
|
||||||
|
builder: (homeContext) {
|
||||||
|
return UnlockingWallet(
|
||||||
|
wallet: defaultWallet);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (pin != null || myWalletProvider.pinCode != '') {
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(builder: (context) {
|
||||||
|
return ChooseWalletScreen(
|
||||||
|
pin: pin ?? myWalletProvider.pinCode);
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
width: double.infinity,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
border: Border.all(
|
||||||
|
color: Colors.blueAccent.shade200, width: 2),
|
||||||
|
borderRadius:
|
||||||
|
const BorderRadius.all(Radius.circular(10.0)),
|
||||||
|
),
|
||||||
|
padding: const EdgeInsets.all(10),
|
||||||
|
child: Row(children: [
|
||||||
|
Text(defaultWallet.name!),
|
||||||
|
const Spacer(),
|
||||||
|
balance(context, defaultWallet.address!, 20)
|
||||||
|
]),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
const SizedBox(height: 12),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
'to'.tr(),
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 19,
|
||||||
|
fontWeight: FontWeight.w500,
|
||||||
|
color: Colors.grey[600]),
|
||||||
|
),
|
||||||
|
const SizedBox(width: 10),
|
||||||
|
Column(
|
||||||
|
children: [
|
||||||
|
const SizedBox(height: 2),
|
||||||
|
Text(
|
||||||
|
toWalletData == null
|
||||||
|
? getShortPubkey(toAddress)
|
||||||
|
: toWalletData.name!,
|
||||||
|
style: const TextStyle(
|
||||||
|
fontSize: 21,
|
||||||
|
fontWeight: FontWeight.w600,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
const SizedBox(height: 12),
|
||||||
|
Text(
|
||||||
|
'amount'.tr(),
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 19,
|
||||||
|
fontWeight: FontWeight.w500,
|
||||||
|
color: Colors.grey[600]),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 10),
|
||||||
|
TextField(
|
||||||
|
textInputAction: TextInputAction.done,
|
||||||
|
onEditingComplete: () async =>
|
||||||
|
canValidate ? await executeTransfert() : null,
|
||||||
|
key: keyAmountField,
|
||||||
|
controller: walletViewProvider.payAmount,
|
||||||
|
autofocus: true,
|
||||||
|
maxLines: 1,
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
keyboardType: TextInputType.number,
|
||||||
|
onChanged: (_) => setState(() {}),
|
||||||
|
inputFormatters: <TextInputFormatter>[
|
||||||
|
FilteringTextInputFormatter.deny(',',
|
||||||
|
replacementString: '.'),
|
||||||
|
FilteringTextInputFormatter.allow(
|
||||||
|
RegExp(r'(^\d+\.?\d{0,2})')),
|
||||||
|
],
|
||||||
|
decoration: InputDecoration(
|
||||||
|
hintText: '0.00',
|
||||||
|
suffix: Text(isUdUnit
|
||||||
|
? 'ud'.tr(args: [''])
|
||||||
|
: currencyName), // udUnitDisplay(40),
|
||||||
|
filled: true,
|
||||||
|
fillColor: Colors.transparent,
|
||||||
|
focusedBorder: OutlineInputBorder(
|
||||||
|
borderSide:
|
||||||
|
BorderSide(color: Colors.grey[500]!, width: 2),
|
||||||
|
borderRadius: BorderRadius.circular(8),
|
||||||
|
),
|
||||||
|
contentPadding: const EdgeInsets.all(20),
|
||||||
|
),
|
||||||
|
style: const TextStyle(
|
||||||
|
fontSize: 35,
|
||||||
|
color: Colors.black,
|
||||||
|
fontWeight: FontWeight.w600,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const Spacer(),
|
||||||
|
SizedBox(
|
||||||
|
width: double.infinity,
|
||||||
|
height: 60,
|
||||||
|
child: ElevatedButton(
|
||||||
|
key: keyConfirmPayment,
|
||||||
|
style: ElevatedButton.styleFrom(
|
||||||
|
foregroundColor: Colors.white, elevation: 4,
|
||||||
|
backgroundColor: orangeC, // foreground
|
||||||
|
),
|
||||||
|
onPressed: canValidate
|
||||||
|
? () async => await executeTransfert()
|
||||||
|
: null,
|
||||||
|
child: Text(
|
||||||
|
'executeTheTransfer'.tr(),
|
||||||
|
style: const TextStyle(
|
||||||
|
fontSize: 20, fontWeight: FontWeight.w600),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const Spacer(),
|
||||||
|
]),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}).then((value) => walletViewProvider.payAmount.text = '');
|
||||||
}
|
}
|
||||||
|
|
12
pubspec.lock
12
pubspec.lock
|
@ -611,7 +611,7 @@ packages:
|
||||||
name: image_picker_android
|
name: image_picker_android
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.8.5+2"
|
version: "0.8.5+3"
|
||||||
image_picker_for_web:
|
image_picker_for_web:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -826,7 +826,7 @@ packages:
|
||||||
name: package_info_plus_windows
|
name: package_info_plus_windows
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "2.1.0"
|
||||||
path:
|
path:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -980,7 +980,7 @@ packages:
|
||||||
name: pointycastle
|
name: pointycastle
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.6.1"
|
version: "3.6.2"
|
||||||
polkawallet_sdk:
|
polkawallet_sdk:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -1003,7 +1003,7 @@ packages:
|
||||||
name: printing
|
name: printing
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "5.9.2"
|
version: "5.9.3"
|
||||||
process:
|
process:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -1096,7 +1096,7 @@ packages:
|
||||||
name: shared_preferences_android
|
name: shared_preferences_android
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.12"
|
version: "2.0.13"
|
||||||
shared_preferences_ios:
|
shared_preferences_ios:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -1325,7 +1325,7 @@ packages:
|
||||||
name: win32
|
name: win32
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.7.0"
|
version: "3.0.0"
|
||||||
xdg_directories:
|
xdg_directories:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
|
@ -5,7 +5,7 @@ description: Pay with G1.
|
||||||
# pub.dev using `pub publish`. This is preferred for private packages.
|
# 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
|
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
|
||||||
|
|
||||||
version: 0.0.11+28
|
version: 0.0.11+29
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: '>=2.12.0 <3.0.0'
|
sdk: '>=2.12.0 <3.0.0'
|
||||||
|
|
Loading…
Reference in New Issue