enh: refactor pin check by removing useless tmp local var

This commit is contained in:
poka 2024-01-03 21:24:25 +01:00
parent 007d62054b
commit 5718d170f3
30 changed files with 129 additions and 175 deletions

View File

@ -238,7 +238,7 @@ Future bkSetNode([String? endpoint]) async {
endpoint = 'ws://$ipAddress:9944';
}
configBox.put('customEndpoint', endpoint);
sub.connectNode(homeContext);
sub.connectNode();
}
// Restore chest in background

View File

@ -1,14 +1,9 @@
// ignore_for_file: use_build_context_synchronously
import 'dart:convert';
import 'dart:io';
import 'dart:math';
// import 'package:audioplayers/audio_cache.dart';
// import 'package:audioplayers/audioplayers.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'dart:async';
import 'package:gecko/globals.dart';
import 'package:gecko/providers/substrate_sdk.dart';

View File

@ -1,5 +1,3 @@
// ignore_for_file: use_build_context_synchronously, body_might_complete_normally_catch_error
import 'dart:convert';
import 'package:easy_localization/easy_localization.dart';
import 'package:fast_base58/fast_base58.dart';
@ -600,9 +598,10 @@ class SubstrateSdk with ChangeNotifier {
return sdk.api.connectedNode?.endpoint;
}
Future<void> connectNode(BuildContext ctx) async {
final homeProvider = Provider.of<HomeProvider>(ctx, listen: false);
final myWalletProvider = Provider.of<MyWalletsProvider>(ctx, listen: false);
Future<void> connectNode() async {
final homeProvider = Provider.of<HomeProvider>(homeContext, listen: false);
final myWalletProvider =
Provider.of<MyWalletsProvider>(homeContext, listen: false);
homeProvider.changeMessage("connectionPending".tr(), 0);
@ -658,7 +657,7 @@ class SubstrateSdk with ChangeNotifier {
nodeConnected = false;
notifyListeners();
homeProvider.changeMessage("noDuniterEndointAvailable".tr(), 0);
if (!myWalletProvider.isWalletsExists()) snackNode(homeContext, false);
if (!myWalletProvider.isWalletsExists()) snackNode(false);
}
log.i('Connected to node: ${sdk.api.connectedNode?.endpoint}');
@ -711,6 +710,7 @@ class SubstrateSdk with ChangeNotifier {
.catchError((e) {
importIsLoading = false;
notifyListeners();
return e;
});
if (json == null) return '';
try {
@ -1229,12 +1229,12 @@ newKeySig: $newKeySigType""");
/////// 6: UI ELEMENTS (off class) /////////
////////////////////////////////////////////
void snackNode(BuildContext context, bool isConnected) {
void snackNode(bool isConnected) {
String message;
if (!isConnected) {
message = "noDuniterNodeAvailableTryLater".tr();
} else {
final sub = Provider.of<SubstrateSdk>(context, listen: false);
final sub = Provider.of<SubstrateSdk>(homeContext, listen: false);
message =
"${"youAreConnectedToNode".tr()}\n${sub.getConnectedEndpoint()!.split('//')[1]}";
@ -1244,7 +1244,7 @@ void snackNode(BuildContext context, bool isConnected) {
padding: const EdgeInsets.all(20),
content: Text(message, style: const TextStyle(fontSize: 16)),
duration: const Duration(seconds: 4));
ScaffoldMessenger.of(context).showSnackBar(snackBar);
ScaffoldMessenger.of(homeContext).showSnackBar(snackBar);
}
String getShortPubkey(String pubkey) {

View File

@ -80,7 +80,8 @@ class WalletOptionsProvider with ChangeNotifier {
}
Future<String> changeAvatar() async {
// File _image;
final datapod = Provider.of<V2sDatapodProvider>(homeContext, listen: false);
final picker = ImagePicker();
XFile? pickedFile = await picker.pickImage(source: ImageSource.gallery);
@ -110,9 +111,6 @@ class WalletOptionsProvider with ChangeNotifier {
],
);
final datapod =
Provider.of<V2sDatapodProvider>(homeContext, listen: false);
final newPath = "${imageDirectory.path}/${pickedFile.name}";
if (croppedFile != null) {
@ -195,48 +193,47 @@ class WalletOptionsProvider with ChangeNotifier {
idtyName.text =
idtyName.text.trim().replaceAll(' ', '');
if (idtyName.text.length.clamp(3, 32) ==
if (idtyName.text.length.clamp(3, 32) !=
idtyName.text.length) {
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 != '') {
final wallet = myWalletProvider
.getWalletDataByAddress(address.text);
await sub.setCurrentWallet(wallet!);
final transactionId = await sub.confirmIdentity(
walletOptions.address.text,
idtyName.text,
myWalletProvider.pinCode);
Navigator.pop(context);
Navigator.push(
context,
MaterialPageRoute(builder: (context) {
return TransactionInProgress(
transactionId: transactionId,
transType: 'comfirmIdty',
fromAddress:
getShortPubkey(wallet.address),
toAddress: getShortPubkey(wallet.address),
);
}),
);
}
return;
}
WalletData? defaultWallet =
myWalletProvider.getDefaultWallet();
if (myWalletProvider.pinCode == '') {
await Navigator.push(
context,
MaterialPageRoute(
builder: (homeContext) {
return UnlockingWallet(
wallet: defaultWallet);
},
),
);
}
if (myWalletProvider.pinCode == '') return;
final wallet = myWalletProvider
.getWalletDataByAddress(address.text);
await sub.setCurrentWallet(wallet!);
final transactionId = await sub.confirmIdentity(
walletOptions.address.text,
idtyName.text,
myWalletProvider.pinCode);
Navigator.pop(context);
Navigator.push(
context,
MaterialPageRoute(builder: (context) {
return TransactionInProgress(
transactionId: transactionId,
transType: 'comfirmIdty',
fromAddress: getShortPubkey(wallet.address),
toAddress: getShortPubkey(wallet.address),
);
}),
);
}
: null,
child: Text(

View File

@ -9,7 +9,6 @@ import 'package:gecko/models/scale_functions.dart';
import 'package:gecko/screens/wallet_view.dart';
import 'package:jdenticon_dart/jdenticon_dart.dart';
import 'package:permission_handler/permission_handler.dart';
// import 'package:qrscan/qrscan.dart' as scanner;
import 'package:barcode_scan2/barcode_scan2.dart';
class WalletsProfilesProvider with ChangeNotifier {

View File

@ -1,5 +1,3 @@
// ignore_for_file: use_build_context_synchronously
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:gecko/globals.dart';
@ -36,8 +34,7 @@ class _HomeScreenState extends State<HomeScreen> {
@override
void initState() {
WidgetsBinding.instance.addPostFrameCallback((_) async {
final homeProviderInit =
Provider.of<HomeProvider>(context, listen: false);
final homeProvider = Provider.of<HomeProvider>(context, listen: false);
final sub = Provider.of<SubstrateSdk>(context, listen: false);
final duniterIndexer =
Provider.of<DuniterIndexer>(context, listen: false);
@ -74,18 +71,16 @@ class _HomeScreenState extends State<HomeScreen> {
g1WalletsBox = await Hive.openBox<G1WalletsList>("g1WalletsBox");
contactsBox = await Hive.openBox<G1WalletsList>("contactsBox");
homeProviderInit.isWalletBoxInit = true;
homeProvider.isWalletBoxInit = true;
myWalletProvider.reload();
duniterIndexer.getValidIndexerEndpoint();
await homeProviderInit.getValidEndpoints();
await homeProvider.getValidEndpoints();
if (configBox.get('isCacheChecked') == null) {
configBox.put('isCacheChecked', false);
}
HomeProvider homeProvider =
Provider.of<HomeProvider>(context, listen: false);
Connectivity()
.onConnectivityChanged
.listen((ConnectivityResult result) async {
@ -99,7 +94,7 @@ class _HomeScreenState extends State<HomeScreen> {
// Check if the phone is actually connected to the internet
var connectivityResult = await (Connectivity().checkConnectivity());
if (connectivityResult != ConnectivityResult.none) {
await sub.connectNode(context);
await sub.connectNode();
}
}
});

View File

@ -3,14 +3,12 @@
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/scale_functions.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:provider/provider.dart';
class ChangePinScreen extends StatefulWidget with ChangeNotifier {
@ -101,9 +99,8 @@ class _ChangePinScreenState extends State<ChangePinScreen> {
WalletData defaultWallet =
myWalletProvider.getDefaultWallet();
String? pin;
if (myWalletProvider.pinCode == '') {
pin = await Navigator.push(
await Navigator.push(
context,
MaterialPageRoute(
builder: (homeContext) {
@ -112,13 +109,13 @@ class _ChangePinScreenState extends State<ChangePinScreen> {
),
);
}
if (pin != null || myWalletProvider.pinCode != '') {
await sub.changePassword(context, defaultWallet.address,
widget.walletProvider.pinCode, newPin.text);
widget.walletProvider.pinCode = newPin.text;
newPin.text = '';
Navigator.pop(context);
}
if (myWalletProvider.pinCode == '') return;
await sub.changePassword(context, defaultWallet.address,
widget.walletProvider.pinCode, newPin.text);
widget.walletProvider.pinCode = newPin.text;
newPin.text = '';
Navigator.pop(context);
},
child: Text(
'confirm'.tr(),

View File

@ -5,7 +5,6 @@ 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';
@ -47,8 +46,7 @@ class ChestOptions extends StatelessWidget {
Provider.of<MyWalletsProvider>(context, listen: false);
WalletData? defaultWallet =
myWalletProvider.getDefaultWallet();
String? pin;
pin = await Navigator.push(
final String? pin = await Navigator.push(
context,
MaterialPageRoute(
builder: (homeContext) {
@ -57,17 +55,16 @@ class ChestOptions extends StatelessWidget {
),
);
if (pin != null) {
Navigator.push(
context,
MaterialPageRoute(builder: (context) {
return ShowSeed(
walletName: currentChest.name,
walletProvider: walletProvider,
);
}),
);
}
if (pin == null) return;
Navigator.push(
context,
MaterialPageRoute(builder: (context) {
return ShowSeed(
walletName: currentChest.name,
walletProvider: walletProvider,
);
}),
);
},
child: ScaledSizedBox(
height: 60,

View File

@ -1,7 +1,6 @@
// ignore_for_file: use_build_context_synchronously
import 'package:easy_localization/easy_localization.dart';
import 'package:gecko/globals.dart';
import 'package:gecko/models/scale_functions.dart';
import 'package:gecko/models/widgets_keys.dart';

View File

@ -1,7 +1,6 @@
// ignore_for_file: use_build_context_synchronously
import 'package:easy_localization/easy_localization.dart';
import 'package:gecko/globals.dart';
import 'package:flutter/material.dart';
import 'package:gecko/models/scale_functions.dart';
@ -112,9 +111,8 @@ class _CustomDerivationState extends State<CustomDerivation> {
onPressed: () async {
WalletData? defaultWallet =
myWalletProvider.getDefaultWallet();
String? pin;
if (myWalletProvider.pinCode == '') {
pin = await Navigator.push(
await Navigator.push(
context,
MaterialPageRoute(
builder: (homeContext) {
@ -124,22 +122,21 @@ class _CustomDerivationState extends State<CustomDerivation> {
);
}
if (pin != null || myWalletProvider.pinCode != '') {
String newDerivationName =
'${'wallet'.tr()} ${myWalletProvider.listWallets.last.number! + 2}';
if (dropdownValue == 'root') {
await myWalletProvider.generateRootWallet(
context, 'rootWallet'.tr());
} else {
await myWalletProvider.generateNewDerivation(
context,
newDerivationName,
int.parse(dropdownValue!),
);
}
Navigator.popUntil(
context, ModalRoute.withName('/mywallets'));
if (myWalletProvider.pinCode != '') return;
String newDerivationName =
'${'wallet'.tr()} ${myWalletProvider.listWallets.last.number! + 2}';
if (dropdownValue == 'root') {
await myWalletProvider.generateRootWallet(
context, 'rootWallet'.tr());
} else {
await myWalletProvider.generateNewDerivation(
context,
newDerivationName,
int.parse(dropdownValue!),
);
}
Navigator.popUntil(
context, ModalRoute.withName('/mywallets'));
},
child: Text(
'validate'.tr(),

View File

@ -1,10 +1,8 @@
// ignore_for_file: use_build_context_synchronously
import 'dart:async';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/services.dart';
import 'package:gecko/globals.dart';
import 'package:flutter/material.dart';
import 'package:gecko/models/scale_functions.dart';

View File

@ -1,7 +1,6 @@
// ignore_for_file: use_build_context_synchronously
import 'package:easy_localization/easy_localization.dart';
import 'package:gecko/globals.dart';
import 'package:flutter/material.dart';
import 'package:gecko/models/scale_functions.dart';

View File

@ -1,7 +1,6 @@
// ignore_for_file: use_build_context_synchronously
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter_markdown/flutter_markdown.dart';
import 'package:gecko/globals.dart';
import 'package:flutter/material.dart';

View File

@ -2,7 +2,6 @@
import 'package:bubble/bubble.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:gecko/globals.dart';
import 'package:flutter/material.dart';
import 'package:gecko/models/scale_functions.dart';

View File

@ -1,6 +1,5 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/services.dart';
import 'package:gecko/globals.dart';
import 'package:flutter/material.dart';
import 'package:gecko/models/scale_functions.dart';

View File

@ -3,7 +3,6 @@
import 'dart:async';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/foundation.dart';
import 'package:gecko/models/chest_data.dart';
import 'package:gecko/models/scale_functions.dart';
import 'package:gecko/models/widgets_keys.dart';

View File

@ -324,7 +324,8 @@ class WalletOptions extends StatelessWidget {
child: ElevatedButton(
key: keyConfirmIdentity,
style: ElevatedButton.styleFrom(
foregroundColor: Colors.white, elevation: 4,
foregroundColor: Colors.white,
elevation: 4,
backgroundColor: orangeC,
),
onPressed: () {

View File

@ -1,5 +1,4 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:gecko/globals.dart';
import 'package:flutter/material.dart';
import 'package:gecko/providers/wallets_profiles.dart';

View File

@ -1,6 +1,5 @@
// ignore_for_file: file_names
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:gecko/globals.dart';
import 'package:gecko/screens/onBoarding/2.dart';

View File

@ -1,7 +1,6 @@
// ignore_for_file: file_names
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:gecko/globals.dart';
import 'package:gecko/screens/onBoarding/3.dart';

View File

@ -1,7 +1,6 @@
// ignore_for_file: file_names
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:gecko/globals.dart';
import 'package:gecko/screens/onBoarding/4.dart';

View File

@ -1,7 +1,6 @@
// ignore_for_file: file_names
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:gecko/globals.dart';
import 'package:gecko/screens/onBoarding/5.dart';

View File

@ -1,7 +1,6 @@
// ignore_for_file: file_names
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:gecko/globals.dart';

View File

@ -1,5 +1,4 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:gecko/globals.dart';
import 'package:flutter/material.dart';
import 'package:gecko/models/scale_functions.dart';

View File

@ -1,7 +1,6 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:gecko/models/scale_functions.dart';
import 'package:gecko/models/widgets_keys.dart';
import 'package:gecko/providers/duniter_indexer.dart';
import 'package:gecko/providers/home.dart';
@ -215,7 +214,7 @@ class SettingsScreen extends StatelessWidget {
configBox.put(
'customEndpoint', finalEndpoint);
}
await sub.connectNode(context);
await sub.connectNode();
}
: null);
}),

View File

@ -207,29 +207,6 @@ class TransactionDetails {
String resultText = '';
TransactionStatus txStatus = TransactionStatus.none;
Map<String, String> actionMap = {
'pay': 'transaction'.tr(),
'cert': 'certification'.tr(),
'comfirmIdty': 'identityConfirm'.tr(),
'revokeIdty': 'revokeAdhesion'.tr(),
'identityMigration': 'identityMigration'.tr(),
};
Map<String, String> resultMap = {
'sending': 'sending'.tr(),
'Ready': 'propagating'.tr(),
'Broadcast': 'validating'.tr(),
'cert.NotRespectCertPeriod': '24hbetweenCerts'.tr(),
'identity.CreatorNotAllowedToCreateIdty': '24hbetweenCerts'.tr(),
'cert.CannotCertifySelf': 'canNotCertifySelf'.tr(),
'identity.IdtyNameAlreadyExist': 'nameAlreadyExist'.tr(),
'balances.KeepAlive': '2GDtoKeepAlive'.tr(),
'1010: Invalid Transaction: Inability to pay some fees , e.g. account balance too low':
'youHaveToFeedThisAccountBeforeUsing'.tr(),
'Token.FundsUnavailable': 'fundsUnavailable'.tr(),
'Exception: timeout': 'execTimeoutOver'.tr(),
};
TransactionDetails({
required transactionId,
required this.fromAddress,
@ -268,7 +245,7 @@ class TransactionDetails {
} else if (result.contains('blockHash: ')) {
txStatus = TransactionStatus.success;
resultText = 'extrinsicValidated'
.tr(args: [actionMap[transType] ?? 'strangeTransaction']);
.tr(args: [actionMap[transType] ?? 'strangeTransaction'.tr()]);
} else if (result.contains('Exception: ')) {
txStatus = TransactionStatus.failed;
String exception = result.split('Exception: ')[1];
@ -278,4 +255,27 @@ class TransactionDetails {
resultText = resultMap[result] ?? 'Unknown status: $result';
}
}
Map<String, String> actionMap = {
'pay': 'transaction'.tr(),
'cert': 'certification'.tr(),
'comfirmIdty': 'identityConfirm'.tr(),
'revokeIdty': 'revokeAdhesion'.tr(),
'identityMigration': 'identityMigration'.tr(),
};
Map<String, String> resultMap = {
'sending': 'sending'.tr(),
'Ready': 'propagating'.tr(),
'Broadcast': 'validating'.tr(),
'cert.NotRespectCertPeriod': '24hbetweenCerts'.tr(),
'identity.CreatorNotAllowedToCreateIdty': '24hbetweenCerts'.tr(),
'cert.CannotCertifySelf': 'canNotCertifySelf'.tr(),
'identity.IdtyNameAlreadyExist': 'nameAlreadyExist'.tr(),
'balances.KeepAlive': '2GDtoKeepAlive'.tr(),
'1010: Invalid Transaction: Inability to pay some fees , e.g. account balance too low':
'youHaveToFeedThisAccountBeforeUsing'.tr(),
'Token.FundsUnavailable': 'fundsUnavailable'.tr(),
'Exception: timeout': 'execTimeoutOver'.tr(),
};
}

View File

@ -336,9 +336,8 @@ class WalletViewScreen extends StatelessWidget {
splashColor: yellowC,
onTap: sub.nodeConnected
? () async {
String? pin;
if (myWalletProvider.pinCode == '') {
pin = await Navigator.push(
await Navigator.push(
context,
MaterialPageRoute(
builder: (homeContext) {
@ -348,10 +347,8 @@ class WalletViewScreen extends StatelessWidget {
),
);
}
if (pin != null ||
myWalletProvider.pinCode != '') {
paymentPopup(context, address, username);
}
if (myWalletProvider.pinCode == '') return;
paymentPopup(context, address, username);
}
: null,
child: Padding(

View File

@ -95,9 +95,8 @@ class GeckoBottomAppBar extends StatelessWidget {
: () async {
WalletData? defaultWallet =
myWalletProvider.getDefaultWallet();
String? pin;
if (myWalletProvider.pinCode == '') {
pin = await Navigator.push(
await Navigator.push(
context,
MaterialPageRoute(
builder: (homeContext) {
@ -105,8 +104,8 @@ class GeckoBottomAppBar extends StatelessWidget {
},
),
);
}
if (pin != null || myWalletProvider.pinCode != '') {
if (myWalletProvider.pinCode == '') return;
Navigator.popUntil(
context, ModalRoute.withName('/'));
//FIXME: Should not have to wait 300 milliseconds when /mywallets exist in navigator...

View File

@ -33,9 +33,8 @@ class AddNewDerivationButton extends StatelessWidget {
if (!myWalletProvider.isNewDerivationLoading) {
WalletData? defaultWallet =
myWalletProvider.getDefaultWallet();
String? pin;
if (myWalletProvider.pinCode == '') {
pin = await Navigator.push(
await Navigator.push(
context,
MaterialPageRoute(
builder: (homeContext) {
@ -44,10 +43,9 @@ class AddNewDerivationButton extends StatelessWidget {
),
);
}
if (pin != null || myWalletProvider.pinCode != '') {
await myWalletProvider.generateNewDerivation(
context, newDerivationName);
}
if (myWalletProvider.pinCode == '') return;
await myWalletProvider.generateNewDerivation(
context, newDerivationName);
}
},
child: Container(

View File

@ -92,9 +92,8 @@ class HomeButtons extends StatelessWidget {
: () async {
WalletData? defaultWallet =
myWalletProvider.getDefaultWallet();
String? pin;
if (myWalletProvider.pinCode == '') {
pin = await Navigator.push(
await Navigator.push(
context,
MaterialPageRoute(
builder: (homeContext) {
@ -104,9 +103,8 @@ class HomeButtons extends StatelessWidget {
),
);
}
if (pin != null || myWalletProvider.pinCode != '') {
Navigator.pushNamed(context, '/mywallets');
}
if (myWalletProvider.pinCode == '') return;
Navigator.pushNamed(context, '/mywallets');
},
child: Padding(
padding: EdgeInsets.all(scaleSize(14.5)),