Skip to content
Snippets Groups Projects
Commit 09e1592f authored by poka's avatar poka
Browse files

Merge branch 'dragNDropWalletsTransfert' into 'master'

Drag n drop wallets transfert

See merge request !31
parents edbe1d8b a432db33
Branches
Tags
1 merge request!31Drag n drop wallets transfert
Pipeline #17163 waiting for manual action
......@@ -158,6 +158,7 @@
"months": "{} months",
"certify": "Certify",
"from": "From:",
"to": "To:",
"amount": "Amount:",
"choiceOfSourceWallet": "Choose a source wallet",
"extrinsicInProgress": "{} in progress",
......@@ -193,5 +194,6 @@
"revokeMyIdentity": "Revoke my identity",
"youCannotRevokeThisIdentity": "You cannot revoke this identity while\nit is member of the blacksmiths web",
"showUdAmounts": "Show amounts in UD",
"ud": "{}UD"
"ud": "{}UD",
"chooseATargetWallet": "Choose a target wallet"
}
\ No newline at end of file
......@@ -158,6 +158,7 @@
"months": "{} months",
"certify": "Certify",
"from": "From:",
"to": "To:",
"amount": "Amount:",
"choiceOfSourceWallet": "Choose a source wallet",
"extrinsicInProgress": "{} in progress",
......@@ -193,5 +194,6 @@
"revokeMyIdentity": "Revoke my identity",
"youCannotRevokeThisIdentity": "You cannot revoke this identity while\nit is member of the blacksmiths web",
"showUdAmounts": "Show amounts in UD",
"ud": "{}UD"
"ud": "{}UD",
"chooseATargetWallet": "Choose a target wallet"
}
\ No newline at end of file
......@@ -159,6 +159,7 @@
"months": "{} mois",
"certify": "Certifier",
"from": "Depuis:",
"to": "Vers:",
"amount": "Montant:",
"choiceOfSourceWallet": "Choix du portefeuille source",
"extrinsicInProgress": "{} en cours",
......@@ -194,5 +195,6 @@
"revokeMyIdentity": "Révoquer mon identité",
"youCannotRevokeThisIdentity": "Vous ne pouvez pas révoquer cette identité tant\nqu'elle fait partie de la toile forgerons",
"showUdAmounts": "Afficher les montants en DU",
"ud": "{}DU"
"ud": "{}DU",
"chooseATargetWallet": "Choisissez un portefeuille cible"
}
\ No newline at end of file
......@@ -339,7 +339,7 @@ class DuniterIndexer with ChangeNotifier {
MaterialPageRoute(builder: (context) {
walletsProfiles.address = profile['id'];
return WalletViewScreen(
pubkey: profile['id'],
address: profile['id'],
username: g1WalletsBox
.get(profile['id'])
?.id
......
......@@ -13,6 +13,8 @@ class MyWalletsProvider with ChangeNotifier {
late String mnemonic;
int? pinLenght;
bool isNewDerivationLoading = false;
String lastFlyBy = '';
String dragAddress = '';
int getCurrentChest() {
if (configBox.get('currentChest') == null) {
......
......@@ -44,7 +44,7 @@ class WalletsProfilesProvider with ChangeNotifier {
Navigator.push(
context,
MaterialPageRoute(builder: (context) {
return WalletViewScreen(pubkey: barcode!.rawContent);
return WalletViewScreen(address: barcode!.rawContent);
}),
);
} else {
......
......@@ -354,7 +354,7 @@ class ActivityScreen extends StatelessWidget with ChangeNotifier {
Navigator.push(
context,
MaterialPageRoute(builder: (context) {
return WalletViewScreen(pubkey: repository[1]);
return WalletViewScreen(address: repository[1]);
}),
);
// Navigator.pop(context);
......
......@@ -53,8 +53,6 @@ class ChooseWalletScreen extends StatelessWidget {
),
onPressed: () async {
await sub.setCurrentWallet(selectedWallet!);
// _walletViewProvider.reload();
sub.reload();
// Navigator.pop(context);
......
// ignore_for_file: use_build_context_synchronously
import 'dart:io';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/services.dart';
import 'package:flutter_markdown/flutter_markdown.dart';
import 'package:gecko/globals.dart';
import 'package:gecko/models/chest_data.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/unlocking_wallet.dart';
import 'package:gecko/screens/myWallets/wallet_options.dart';
import 'package:gecko/screens/wallet_view.dart';
import 'package:provider/provider.dart';
class WalletsHome extends StatelessWidget {
......@@ -38,7 +42,6 @@ class WalletsHome extends StatelessWidget {
return WillPopScope(
onWillPop: () {
// myWalletProvider.pinCode = myWalletProvider.mnemonic = '';
Navigator.popUntil(
context,
ModalRoute.withName('/'),
......@@ -53,7 +56,6 @@ class WalletsHome extends StatelessWidget {
leading: IconButton(
icon: const Icon(Icons.arrow_back, color: Colors.black),
onPressed: () {
// myWalletProvider.pinCode = myWalletProvider.mnemonic = '';
Navigator.popUntil(
context,
ModalRoute.withName('/'),
......@@ -63,7 +65,9 @@ class WalletsHome extends StatelessWidget {
style: TextStyle(color: Colors.grey[850])),
backgroundColor: const Color(0xffFFD58D),
),
bottomNavigationBar: homeProvider.bottomAppBar(context),
bottomNavigationBar: myWalletProvider.lastFlyBy == ''
? homeProvider.bottomAppBar(context)
: dragInfo(context),
body: SafeArea(
child: Stack(children: [
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(
BuildContext context, MyWalletsProvider myWalletProvider) {
return Column(children: [
......@@ -159,6 +194,7 @@ class WalletsHome extends StatelessWidget {
WalletOptionsProvider walletOptions =
Provider.of<WalletOptionsProvider>(context, listen: false);
final bool isWalletsExists = myWalletProvider.checkIfWalletExist();
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false);
if (!isWalletsExists) {
return const Text('');
......@@ -196,7 +232,56 @@ class WalletsHome extends StatelessWidget {
mainAxisSpacing: 0,
children: <Widget>[
for (WalletData repository in listWallets as Iterable<WalletData>)
Padding(
LongPressDraggable<String>(
delay: const Duration(milliseconds: 200),
data: repository.address!,
// dragAnchorStrategy:
// (Draggable<Object> _, BuildContext __, Offset ___) =>
// const Offset(40, 40),
dragAnchorStrategy: pointerDragAnchorStrategy,
onDragStarted: () =>
myWalletProvider.dragAddress = repository.address!,
onDragEnd: (_) {
myWalletProvider.lastFlyBy = '';
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!),
......@@ -252,37 +337,35 @@ class WalletsHome extends StatelessWidget {
image: DecorationImage(
fit: BoxFit.fitHeight,
image: FileImage(
File(repository.imageCustomPath!),
File(repository
.imageCustomPath!),
),
),
),
),
)),
Stack(children: <Widget>[
balanceBuilder(context, repository.address!,
repository.address == defaultWallet.address),
nameBuilder(context, repository, defaultWallet,
currentChestNumber),
balanceBuilder(
context,
repository.address!,
repository.address ==
defaultWallet.address),
nameBuilder(context, repository,
defaultWallet, currentChestNumber),
]),
]),
),
),
)),
),
);
}),
),
Consumer<SubstrateSdk>(builder: (context, sub, _) {
return sub.nodeConnected
? addNewDerivation(context)
: 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)),
]);
}
......@@ -316,14 +399,9 @@ class WalletsHome extends StatelessWidget {
return ListTile(
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(bottom: Radius.circular(12))),
// contentPadding: const EdgeInsets.only(left: 7.0),
tileColor: repository.address == defaultWallet.address
? orangeC
: const Color(0xffFFD58D),
// leading: Text('IMAGE'),
// subtitle: Text(_repository.split(':')[3],
// style: TextStyle(fontSize: 12.0, fontFamily: 'Monospace')),
title: Center(
child: Padding(
padding: const EdgeInsets.only(left: 5, right: 5, bottom: 35, top: 5),
......@@ -338,13 +416,7 @@ class WalletsHome extends StatelessWidget {
: Colors.black),
),
),
// dense: true,
onTap: () {
// _walletOptions.readLocalWallet(
// context,
// _repository,
// _myWalletProvider.pinCode,
// pinLength);
walletOptions.getAddress(currentChestNumber, repository.derivation!);
Navigator.push(
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> {
@override
Rect getClip(Size size) {
......
......@@ -116,7 +116,7 @@ class ContactsScreen extends StatelessWidget {
walletsProfilesClass.address =
g1Wallet.pubkey;
return WalletViewScreen(
pubkey: g1Wallet.pubkey,
address: g1Wallet.pubkey,
username: g1WalletsBox
.get(g1Wallet.pubkey)
?.id
......
......@@ -143,7 +143,7 @@ class SearchResultScreen extends StatelessWidget {
walletsProfilesClass.address =
g1Wallet.pubkey;
return WalletViewScreen(
pubkey: g1Wallet.pubkey,
address: g1Wallet.pubkey,
username: g1WalletsBox
.get(g1Wallet.pubkey)
?.id
......
This diff is collapsed.
......@@ -611,7 +611,7 @@ packages:
name: image_picker_android
url: "https://pub.dartlang.org"
source: hosted
version: "0.8.5+2"
version: "0.8.5+3"
image_picker_for_web:
dependency: transitive
description:
......@@ -826,7 +826,7 @@ packages:
name: package_info_plus_windows
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
version: "2.1.0"
path:
dependency: transitive
description:
......@@ -980,7 +980,7 @@ packages:
name: pointycastle
url: "https://pub.dartlang.org"
source: hosted
version: "3.6.1"
version: "3.6.2"
polkawallet_sdk:
dependency: "direct main"
description:
......@@ -1003,7 +1003,7 @@ packages:
name: printing
url: "https://pub.dartlang.org"
source: hosted
version: "5.9.2"
version: "5.9.3"
process:
dependency: transitive
description:
......@@ -1096,7 +1096,7 @@ packages:
name: shared_preferences_android
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.12"
version: "2.0.13"
shared_preferences_ios:
dependency: transitive
description:
......@@ -1325,7 +1325,7 @@ packages:
name: win32
url: "https://pub.dartlang.org"
source: hosted
version: "2.7.0"
version: "3.0.0"
xdg_directories:
dependency: transitive
description:
......
......@@ -5,7 +5,7 @@ description: Pay with G1.
# pub.dev using `pub publish`. This is preferred for private packages.
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
version: 0.0.11+28
version: 0.0.11+29
environment:
sdk: '>=2.12.0 <3.0.0'
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment