enh: refactor askPinCode()
This commit is contained in:
parent
6b5bcadded
commit
e485af5194
|
@ -6,6 +6,7 @@ import 'dart:async';
|
|||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/wallet_data.dart';
|
||||
import 'package:gecko/providers/substrate_sdk.dart';
|
||||
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
|
||||
import 'package:gecko/widgets/commons/common_elements.dart';
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
@ -76,6 +77,20 @@ class MyWalletsProvider with ChangeNotifier {
|
|||
return targetedWallet;
|
||||
}
|
||||
|
||||
Future<bool> askPinCode() async {
|
||||
final defaultWallet = getDefaultWallet();
|
||||
|
||||
if (pinCode.isEmpty) {
|
||||
await Navigator.push(
|
||||
homeContext,
|
||||
MaterialPageRoute(
|
||||
builder: (homeContext) => UnlockingWallet(wallet: defaultWallet),
|
||||
),
|
||||
);
|
||||
}
|
||||
return pinCode.isNotEmpty;
|
||||
}
|
||||
|
||||
WalletData? getWalletDataByAddress(String address) {
|
||||
WalletData? targetedWallet;
|
||||
|
||||
|
|
|
@ -183,12 +183,12 @@ class SubstrateSdk with ChangeNotifier {
|
|||
}
|
||||
|
||||
Future<String> signDatapod(String document, String address) async {
|
||||
final myWallets =
|
||||
final myWalletProvider =
|
||||
Provider.of<MyWalletsProvider>(homeContext, listen: false);
|
||||
final messageToSign = Uint8List.fromList(document.codeUnits);
|
||||
|
||||
final signatureString =
|
||||
await _signMessage(messageToSign, address, myWallets.pinCode);
|
||||
await _signMessage(messageToSign, address, myWalletProvider.pinCode);
|
||||
final signatureInt = HEX.decode(signatureString.substring(2));
|
||||
final signature64 = base64Encode(signatureInt);
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ import 'package:flutter/material.dart';
|
|||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/queries_datapod.dart';
|
||||
import 'package:gecko/models/scale_functions.dart';
|
||||
import 'package:gecko/providers/my_wallets.dart';
|
||||
import 'package:gecko/providers/substrate_sdk.dart';
|
||||
import 'package:graphql_flutter/graphql_flutter.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
@ -15,9 +16,13 @@ class V2sDatapodProvider with ChangeNotifier {
|
|||
|
||||
Future<Map<String, dynamic>> _setSignedVariables(
|
||||
String address, Map<String, dynamic> messageToSign) async {
|
||||
final myWalletProvider =
|
||||
Provider.of<MyWalletsProvider>(homeContext, listen: false);
|
||||
|
||||
final sub = Provider.of<SubstrateSdk>(homeContext, listen: false);
|
||||
final hashDocBytes = utf8.encode(jsonEncode(messageToSign));
|
||||
final hashDoc = sha256.convert(hashDocBytes).toString().toUpperCase();
|
||||
if (!await myWalletProvider.askPinCode()) return {};
|
||||
final signature = await sub.signDatapod(hashDoc, address);
|
||||
|
||||
return <String, dynamic>{
|
||||
|
@ -53,6 +58,7 @@ class V2sDatapodProvider with ChangeNotifier {
|
|||
'socials': socials
|
||||
};
|
||||
final variables = await _setSignedVariables(address, messageToSign);
|
||||
if (variables.isEmpty) return false;
|
||||
|
||||
final result = await _execQuery(updateProfileQ, variables);
|
||||
if (result.hasException) {
|
||||
|
@ -66,6 +72,7 @@ class V2sDatapodProvider with ChangeNotifier {
|
|||
Future<bool> deleteProfile({required String address}) async {
|
||||
final messageToSign = {'address': address};
|
||||
final variables = await _setSignedVariables(address, messageToSign);
|
||||
if (variables.isEmpty) return false;
|
||||
|
||||
final result = await _execQuery(deleteProfileQ, variables);
|
||||
if (result.hasException) {
|
||||
|
@ -80,6 +87,7 @@ class V2sDatapodProvider with ChangeNotifier {
|
|||
{required String addressOld, required String addressNew}) async {
|
||||
final messageToSign = {'addressOld': addressOld, 'addressNew': addressNew};
|
||||
final variables = await _setSignedVariables(addressOld, messageToSign);
|
||||
if (variables.isEmpty) return false;
|
||||
|
||||
final result = await _execQuery(migrateProfileQ, variables);
|
||||
if (result.hasException) {
|
||||
|
@ -101,6 +109,7 @@ class V2sDatapodProvider with ChangeNotifier {
|
|||
'comment': comment,
|
||||
};
|
||||
final variables = await _setSignedVariables(issuer, messageToSign);
|
||||
if (variables.isEmpty) return false;
|
||||
|
||||
final result = await _execQuery(addTransactionCommentQ, variables);
|
||||
if (result.hasException) {
|
||||
|
|
|
@ -13,7 +13,6 @@ import 'package:gecko/models/wallet_data.dart';
|
|||
import 'package:gecko/providers/substrate_sdk.dart';
|
||||
import 'package:gecko/providers/v2s_datapod.dart';
|
||||
import 'package:gecko/widgets/commons/common_elements.dart';
|
||||
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
|
||||
import 'package:gecko/screens/transaction_in_progress.dart';
|
||||
import 'package:image_picker/image_picker.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
@ -224,21 +223,7 @@ class WalletOptionsProvider with ChangeNotifier {
|
|||
return;
|
||||
}
|
||||
|
||||
WalletData? defaultWallet =
|
||||
myWalletProvider.getDefaultWallet();
|
||||
|
||||
if (myWalletProvider.pinCode == '') {
|
||||
await Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (homeContext) {
|
||||
return UnlockingWallet(
|
||||
wallet: defaultWallet);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
if (myWalletProvider.pinCode == '') return;
|
||||
if (!await myWalletProvider.askPinCode()) return;
|
||||
|
||||
final wallet = myWalletProvider
|
||||
.getWalletDataByAddress(address.text);
|
||||
|
|
|
@ -4,10 +4,8 @@ import 'package:easy_localization/easy_localization.dart';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:durt/durt.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/wallet_data.dart';
|
||||
import 'package:gecko/providers/my_wallets.dart';
|
||||
import 'package:gecko/providers/substrate_sdk.dart';
|
||||
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
|
||||
import 'package:gecko/widgets/commons/top_appbar.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
|
@ -92,20 +90,9 @@ class _ChangePinScreenState extends State<ChangePinScreen> {
|
|||
backgroundColor: Colors.green[400],
|
||||
),
|
||||
onPressed: () async {
|
||||
WalletData defaultWallet =
|
||||
myWalletProvider.getDefaultWallet();
|
||||
final defaultWallet = myWalletProvider.getDefaultWallet();
|
||||
|
||||
if (myWalletProvider.pinCode == '') {
|
||||
await Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (homeContext) {
|
||||
return UnlockingWallet(wallet: defaultWallet);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
if (myWalletProvider.pinCode == '') return;
|
||||
if (!await myWalletProvider.askPinCode()) return;
|
||||
|
||||
await sub.changePassword(context, defaultWallet.address,
|
||||
widget.walletProvider.pinCode, newPin.text);
|
||||
|
|
|
@ -5,14 +5,12 @@ import 'package:flutter/material.dart';
|
|||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/chest_data.dart';
|
||||
import 'package:gecko/models/scale_functions.dart';
|
||||
import 'package:gecko/models/wallet_data.dart';
|
||||
import 'package:gecko/models/widgets_keys.dart';
|
||||
import 'package:gecko/providers/chest_provider.dart';
|
||||
import 'package:gecko/providers/my_wallets.dart';
|
||||
import 'package:gecko/providers/substrate_sdk.dart';
|
||||
import 'package:gecko/screens/myWallets/custom_derivations.dart';
|
||||
import 'package:gecko/screens/myWallets/show_seed.dart';
|
||||
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
|
||||
import 'package:gecko/widgets/bottom_app_bar.dart';
|
||||
import 'package:gecko/widgets/commons/offline_info.dart';
|
||||
import 'package:gecko/widgets/commons/top_appbar.dart';
|
||||
|
@ -44,18 +42,8 @@ class ChestOptions extends StatelessWidget {
|
|||
onTap: () async {
|
||||
final myWalletProvider =
|
||||
Provider.of<MyWalletsProvider>(context, listen: false);
|
||||
WalletData? defaultWallet =
|
||||
myWalletProvider.getDefaultWallet();
|
||||
final String? pin = await Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (homeContext) {
|
||||
return UnlockingWallet(wallet: defaultWallet);
|
||||
},
|
||||
),
|
||||
);
|
||||
if (!await myWalletProvider.askPinCode()) return;
|
||||
|
||||
if (pin == null) return;
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(builder: (context) {
|
||||
|
|
|
@ -5,10 +5,8 @@ import 'package:gecko/globals.dart';
|
|||
import 'package:gecko/models/scale_functions.dart';
|
||||
import 'package:gecko/models/widgets_keys.dart';
|
||||
import 'package:gecko/providers/my_wallets.dart';
|
||||
import 'package:gecko/models/wallet_data.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/screens/myWallets/restore_chest.dart';
|
||||
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
|
||||
import 'package:carousel_slider/carousel_slider.dart';
|
||||
import 'package:gecko/screens/onBoarding/5.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
@ -110,25 +108,13 @@ class _ChooseChestState extends State<ChooseChest> {
|
|||
onPressed: () async {
|
||||
await configBox.put('currentChest', currentChest);
|
||||
myWalletProvider.pinCode = '';
|
||||
WalletData? defaultWallet =
|
||||
myWalletProvider.getDefaultWallet();
|
||||
myWalletProvider.reload();
|
||||
if (!await myWalletProvider.askPinCode()) return;
|
||||
|
||||
await Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (homeContext) {
|
||||
return UnlockingWallet(wallet: defaultWallet);
|
||||
},
|
||||
),
|
||||
);
|
||||
Navigator.popUntil(
|
||||
context,
|
||||
ModalRoute.withName('/'),
|
||||
);
|
||||
if (myWalletProvider.pinCode != '') {
|
||||
Navigator.pushNamed(context, '/mywallets');
|
||||
}
|
||||
Navigator.pushNamed(context, '/mywallets');
|
||||
},
|
||||
child: Text(
|
||||
'openThisChest'.tr(),
|
||||
|
|
|
@ -6,7 +6,6 @@ import 'package:flutter/material.dart';
|
|||
import 'package:gecko/models/scale_functions.dart';
|
||||
import 'package:gecko/models/wallet_data.dart';
|
||||
import 'package:gecko/providers/my_wallets.dart';
|
||||
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
|
||||
import 'package:gecko/widgets/commons/top_appbar.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
|
@ -109,20 +108,7 @@ class _CustomDerivationState extends State<CustomDerivation> {
|
|||
backgroundColor: orangeC,
|
||||
),
|
||||
onPressed: () async {
|
||||
WalletData? defaultWallet =
|
||||
myWalletProvider.getDefaultWallet();
|
||||
if (myWalletProvider.pinCode == '') {
|
||||
await Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (homeContext) {
|
||||
return UnlockingWallet(wallet: defaultWallet);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
if (myWalletProvider.pinCode == '') return;
|
||||
if (!await myWalletProvider.askPinCode()) return;
|
||||
String newDerivationName =
|
||||
'${'wallet'.tr()} ${myWalletProvider.listWallets.last.number! + 2}';
|
||||
if (dropdownValue == 'root') {
|
||||
|
|
|
@ -4,13 +4,11 @@ import 'package:easy_localization/easy_localization.dart';
|
|||
import 'package:gecko/globals.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/models/scale_functions.dart';
|
||||
import 'package:gecko/models/wallet_data.dart';
|
||||
import 'package:gecko/models/widgets_keys.dart';
|
||||
import 'package:gecko/providers/my_wallets.dart';
|
||||
import 'package:gecko/providers/substrate_sdk.dart';
|
||||
import 'package:gecko/widgets/commons/common_elements.dart';
|
||||
import 'package:gecko/screens/myWallets/migrate_identity.dart';
|
||||
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
|
||||
import 'package:gecko/screens/transaction_in_progress.dart';
|
||||
import 'package:gecko/widgets/commons/top_appbar.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
@ -113,20 +111,7 @@ class ManageMembership extends StatelessWidget {
|
|||
Provider.of<MyWalletsProvider>(context, listen: false);
|
||||
final sub = Provider.of<SubstrateSdk>(context, listen: false);
|
||||
|
||||
WalletData? defaultWallet = myWalletProvider.getDefaultWallet();
|
||||
String? pin;
|
||||
if (myWalletProvider.pinCode == '') {
|
||||
pin = await Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (homeContext) {
|
||||
return UnlockingWallet(wallet: defaultWallet);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
if (pin == null || myWalletProvider.pinCode == '') return;
|
||||
if (!await myWalletProvider.askPinCode()) return;
|
||||
|
||||
final transactionId =
|
||||
await sub.revokeIdentity(address, myWalletProvider.pinCode);
|
||||
|
|
|
@ -6,7 +6,6 @@ import 'package:gecko/globals.dart';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/models/migrate_wallet_checks.dart';
|
||||
import 'package:gecko/models/scale_functions.dart';
|
||||
import 'package:gecko/models/wallet_data.dart';
|
||||
import 'package:gecko/models/widgets_keys.dart';
|
||||
import 'package:gecko/providers/duniter_indexer.dart';
|
||||
import 'package:gecko/providers/generate_wallets.dart';
|
||||
|
@ -14,7 +13,6 @@ import 'package:gecko/providers/my_wallets.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/screens/myWallets/unlocking_wallet.dart';
|
||||
import 'package:gecko/screens/transaction_in_progress.dart';
|
||||
import 'package:gecko/widgets/commons/top_appbar.dart';
|
||||
import 'package:polkawallet_sdk/api/apiKeyring.dart';
|
||||
|
@ -189,21 +187,7 @@ class MigrateIdentityScreen extends StatelessWidget {
|
|||
),
|
||||
onPressed: statusData.canValidate && mnemonicIsValid
|
||||
? () async {
|
||||
WalletData? defaultWallet =
|
||||
myWalletProvider.getDefaultWallet();
|
||||
|
||||
String? pin;
|
||||
if (myWalletProvider.pinCode == '') {
|
||||
pin = await Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (homeContext) {
|
||||
return UnlockingWallet(wallet: defaultWallet);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
if (myWalletProvider.pinCode == '') return;
|
||||
if (!await myWalletProvider.askPinCode()) return;
|
||||
|
||||
await sub.importAccount(
|
||||
mnemonic: newMnemonicSentence.text,
|
||||
|
@ -215,7 +199,7 @@ class MigrateIdentityScreen extends StatelessWidget {
|
|||
final transactionId = await sub.migrateIdentity(
|
||||
fromAddress: fromAddress,
|
||||
destAddress: newWalletAddress.text,
|
||||
fromPassword: pin ?? myWalletProvider.pinCode,
|
||||
fromPassword: myWalletProvider.pinCode,
|
||||
destPassword: 'password',
|
||||
withBalance: true,
|
||||
fromBalance: statusData.balance);
|
||||
|
|
|
@ -4,12 +4,10 @@ import 'dart:io';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/scale_functions.dart';
|
||||
import 'package:gecko/models/wallet_data.dart';
|
||||
import 'package:gecko/models/widgets_keys.dart';
|
||||
import 'package:gecko/providers/my_wallets.dart';
|
||||
import 'package:gecko/providers/search.dart';
|
||||
import 'package:gecko/providers/wallets_profiles.dart';
|
||||
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class GeckoBottomAppBar extends StatelessWidget {
|
||||
|
@ -93,20 +91,8 @@ class GeckoBottomAppBar extends StatelessWidget {
|
|||
onPressed: lockAction
|
||||
? null
|
||||
: () async {
|
||||
WalletData? defaultWallet =
|
||||
myWalletProvider.getDefaultWallet();
|
||||
if (myWalletProvider.pinCode == '') {
|
||||
await Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (homeContext) {
|
||||
return UnlockingWallet(wallet: defaultWallet);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
if (!await myWalletProvider.askPinCode()) return;
|
||||
|
||||
if (myWalletProvider.pinCode == '') return;
|
||||
Navigator.popUntil(context, ModalRoute.withName('/'));
|
||||
//FIXME: Should not have to wait 300 milliseconds when /mywallets exist in navigator...
|
||||
sleep(const Duration(milliseconds: 300));
|
||||
|
|
|
@ -4,10 +4,8 @@ import 'package:easy_localization/easy_localization.dart';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/scale_functions.dart';
|
||||
import 'package:gecko/models/wallet_data.dart';
|
||||
import 'package:gecko/models/widgets_keys.dart';
|
||||
import 'package:gecko/providers/my_wallets.dart';
|
||||
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class AddNewDerivationButton extends StatelessWidget {
|
||||
|
@ -31,19 +29,8 @@ class AddNewDerivationButton extends StatelessWidget {
|
|||
key: keyAddDerivation,
|
||||
onTap: () async {
|
||||
if (!myWalletProvider.isNewDerivationLoading) {
|
||||
WalletData? defaultWallet =
|
||||
myWalletProvider.getDefaultWallet();
|
||||
if (myWalletProvider.pinCode == '') {
|
||||
await Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (homeContext) {
|
||||
return UnlockingWallet(wallet: defaultWallet);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
if (myWalletProvider.pinCode == '') return;
|
||||
if (!await myWalletProvider.askPinCode()) return;
|
||||
|
||||
await myWalletProvider.generateNewDerivation(
|
||||
context, newDerivationName);
|
||||
}
|
||||
|
|
|
@ -12,7 +12,6 @@ import 'package:gecko/providers/substrate_sdk.dart';
|
|||
import 'package:gecko/providers/wallet_options.dart';
|
||||
import 'package:gecko/providers/wallets_profiles.dart';
|
||||
import 'package:gecko/screens/activity.dart';
|
||||
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
|
||||
import 'package:gecko/screens/transaction_in_progress.dart';
|
||||
import 'package:gecko/widgets/balance.dart';
|
||||
import 'package:gecko/widgets/name_by_address.dart';
|
||||
|
@ -34,17 +33,8 @@ void paymentPopup(BuildContext context, String toAddress, String? username) {
|
|||
walletViewProvider.payAmount.text = '';
|
||||
|
||||
Future executeTransfert() async {
|
||||
if (myWalletProvider.pinCode == '') {
|
||||
await Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (homeContext) {
|
||||
return UnlockingWallet(wallet: defaultWallet);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
if (myWalletProvider.pinCode == '') return;
|
||||
if (!await myWalletProvider.askPinCode()) return;
|
||||
|
||||
// Payment workflow !
|
||||
final sub = Provider.of<SubstrateSdk>(context, listen: false);
|
||||
final acc = sub.getCurrentWallet();
|
||||
|
|
Loading…
Reference in New Issue