Upgrade dependencies; apply new lints infos

This commit is contained in:
poka 2022-08-06 02:22:41 +02:00
parent 4fb40ff3f1
commit fad6ebd878
40 changed files with 1178 additions and 1183 deletions

View File

@ -65,7 +65,7 @@ android {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig signingConfigs.release //poka: comment this to build unsigned release, or set to signingConfigs.debug to sign with debug keys
signingConfig signingConfigs.debug //poka: comment this to build unsigned release, or set to signingConfigs.debug to sign with debug keys
useProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

View File

@ -13,8 +13,6 @@
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
// ignore_for_file: avoid_print
import 'dart:async';
import 'dart:io';
import 'package:flutter/services.dart';
@ -44,7 +42,6 @@ import 'package:flutter/foundation.dart';
import 'package:responsive_framework/responsive_framework.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:sentry_flutter/sentry_flutter.dart';
import 'package:window_size/window_size.dart';
import 'package:graphql_flutter/graphql_flutter.dart';
import 'package:easy_localization/easy_localization.dart';
@ -53,17 +50,12 @@ const bool enableSentry = true;
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await EasyLocalization.ensureInitialized();
if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) {
setWindowTitle('Ğecko');
setWindowMinSize(const Size(400, 700));
setWindowMaxSize(const Size(800, 1000));
}
HomeProvider _homeProvider = HomeProvider();
HomeProvider homeProvider = HomeProvider();
// DuniterIndexer _duniterIndexer = DuniterIndexer();
await initHiveForFlutter();
await _homeProvider.initHive();
appVersion = await _homeProvider.getAppVersion();
await homeProvider.initHive();
appVersion = await homeProvider.getAppVersion();
prefs = await SharedPreferences.getInstance();
// Reset GraphQL cache
@ -82,7 +74,7 @@ Future<void> main() async {
await Hive.deleteBoxFromDisk('g1WalletsBox');
g1WalletsBox = await Hive.openBox<G1WalletsList>("g1WalletsBox");
await _homeProvider.getValidEndpoints();
await homeProvider.getValidEndpoints();
// await configBox.delete('isCacheChecked');
if (configBox.get('isCacheChecked') == null) {
configBox.put('isCacheChecked', false);
@ -117,7 +109,7 @@ Future<void> main() async {
),
);
} else {
print('Debug mode enabled: No sentry alerte');
log.i('Debug mode enabled: No sentry alerte');
runApp(
EasyLocalization(

View File

@ -6,10 +6,10 @@ class StatefulWrapper extends StatefulWidget {
const StatefulWrapper({Key? key, required this.onInit, required this.child})
: super(key: key);
@override
_StatefulWrapperState createState() => _StatefulWrapperState();
StatefulWrapperState createState() => StatefulWrapperState();
}
class _StatefulWrapperState extends State<StatefulWrapper> {
class StatefulWrapperState extends State<StatefulWrapper> {
@override
void initState() {
widget.onInit();

View File

@ -13,18 +13,18 @@ class CesiumPlusProvider with ChangeNotifier {
CancelToken avatarCancelToken = CancelToken();
Future<List> _buildQuery(_pubkey) async {
Future<List> _buildQuery(pubkey) async {
var queryGetAvatar = json.encode({
"query": {
"bool": {
"should": [
{
"match": {
'_id': {"query": _pubkey, "boost": 2}
'_id': {"query": pubkey, "boost": 2}
}
},
{
"prefix": {'_id': _pubkey}
"prefix": {'_id': pubkey}
}
]
}
@ -60,14 +60,14 @@ class CesiumPlusProvider with ChangeNotifier {
return [podRequest, queryGetAvatar, headers];
}
Future<String> getName(String? _pubkey) async {
String? _name;
Future<String> getName(String? pubkey) async {
String? name;
if (g1WalletsBox.get(_pubkey)?.csName != null) {
return g1WalletsBox.get(_pubkey)!.csName!;
if (g1WalletsBox.get(pubkey)?.csName != null) {
return g1WalletsBox.get(pubkey)!.csName!;
}
List queryOptions = await _buildQuery(_pubkey);
List queryOptions = await _buildQuery(pubkey);
var dio = Dio();
late Response response;
@ -90,28 +90,28 @@ class CesiumPlusProvider with ChangeNotifier {
if (response.data['hits']['hits'].toString() == '[]') {
return '';
}
final bool _nameExist =
final bool nameExist =
response.data['hits']['hits'][0]['_source'].containsKey("title");
if (!_nameExist) {
if (!nameExist) {
return '';
}
_name = response.data['hits']['hits'][0]['_source']['title'];
name = response.data['hits']['hits'][0]['_source']['title'];
_name ??= '';
g1WalletsBox.get(_pubkey)!.csName = _name;
name ??= '';
g1WalletsBox.get(pubkey)!.csName = name;
return _name;
return name;
}
Future<Image?> getAvatar(String? _pubkey, double size) async {
if (g1WalletsBox.get(_pubkey)?.avatar != null) {
return g1WalletsBox.get(_pubkey)!.avatar;
Future<Image?> getAvatar(String? pubkey, double size) async {
if (g1WalletsBox.get(pubkey)?.avatar != null) {
return g1WalletsBox.get(pubkey)!.avatar;
}
var dio = Dio();
// log.d(_pubkey);
List queryOptions = await _buildQuery(_pubkey);
List queryOptions = await _buildQuery(pubkey);
late Response response;
try {
@ -138,12 +138,12 @@ class CesiumPlusProvider with ChangeNotifier {
return defaultAvatar(size);
}
final _avatar =
final avatar =
response.data['hits']['hits'][0]['_source']['avatar']['_content'];
var avatarFile =
File('${(await getTemporaryDirectory()).path}/avatar_$_pubkey.png');
await avatarFile.writeAsBytes(base64.decode(_avatar));
File('${(await getTemporaryDirectory()).path}/avatar_$pubkey.png');
await avatarFile.writeAsBytes(base64.decode(avatar));
final finalAvatar = Image.file(
avatarFile,
@ -151,7 +151,7 @@ class CesiumPlusProvider with ChangeNotifier {
fit: BoxFit.fitWidth,
);
g1WalletsBox.get(_pubkey)!.avatar = finalAvatar;
g1WalletsBox.get(pubkey)!.avatar = finalAvatar;
return finalAvatar;
}

View File

@ -13,16 +13,16 @@ class ChestProvider with ChangeNotifier {
notifyListeners();
}
Future deleteChest(context, ChestData _chest) async {
final bool? _answer = await (_confirmDeletingChest(context, _chest.name));
SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
if (_answer ?? false) {
await _sub.deleteAccounts(getChestWallets(_chest));
await chestBox.delete(_chest.key);
MyWalletsProvider _myWalletProvider =
Future deleteChest(context, ChestData chest) async {
final bool? answer = await (_confirmDeletingChest(context, chest.name));
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false);
if (answer ?? false) {
await sub.deleteAccounts(getChestWallets(chest));
await chestBox.delete(chest.key);
MyWalletsProvider myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false);
_myWalletProvider.pinCode = '';
myWalletProvider.pinCode = '';
if (chestBox.isEmpty) {
await configBox.put('currentChest', 0);
@ -39,24 +39,24 @@ class ChestProvider with ChangeNotifier {
}
}
List<String> getChestWallets(ChestData _chest) {
List<String> getChestWallets(ChestData chest) {
List<String> toDelete = [];
log.d(_chest.key);
log.d(chest.key);
walletBox.toMap().forEach((key, WalletData value) {
if (value.chest == _chest.key) {
if (value.chest == chest.key) {
toDelete.add(value.address!);
}
});
return toDelete;
}
Future<bool?> _confirmDeletingChest(context, String? _walletName) async {
Future<bool?> _confirmDeletingChest(context, String? walletName) async {
return showDialog<bool>(
context: context,
barrierDismissible: true, // user must tap button!
builder: (BuildContext context) {
return AlertDialog(
title: Text('areYouSureToDeleteWallet'.tr(args: [_walletName!])),
title: Text('areYouSureToDeleteWallet'.tr(args: [walletName!])),
actions: <Widget>[
TextButton(
child: Text("no".tr(), key: const Key('cancelDeleting')),

View File

@ -33,10 +33,10 @@ class DuniterIndexer with ChangeNotifier {
Future<bool> checkIndexerEndpoint(String endpoint) async {
isLoadingIndexer = true;
notifyListeners();
final _client = HttpClient();
_client.connectionTimeout = const Duration(milliseconds: 4000);
final client = HttpClient();
client.connectionTimeout = const Duration(milliseconds: 4000);
try {
final request = await _client.postUrl(Uri.parse('$endpoint/v1/graphql'));
final request = await client.postUrl(Uri.parse('$endpoint/v1/graphql'));
final response = await request.close();
if (response.statusCode != 200) {
log.d('INDEXER IS OFFILINE');
@ -102,10 +102,10 @@ class DuniterIndexer with ChangeNotifier {
int i = 0;
// String _endpoint = '';
int _statusCode = 0;
int statusCode = 0;
final _client = HttpClient();
_client.connectionTimeout = const Duration(milliseconds: 3000);
final client = HttpClient();
client.connectionTimeout = const Duration(milliseconds: 3000);
do {
int listLenght = listIndexerEndpoints.length;
@ -114,8 +114,7 @@ class DuniterIndexer with ChangeNotifier {
indexerEndpoint = '';
break;
}
log.d((i + 1).toString() +
'n indexer endpoint try: ${listIndexerEndpoints[i]}');
log.d('${i + 1}n indexer endpoint try: ${listIndexerEndpoints[i]}');
if (i != 0) {
await Future.delayed(const Duration(milliseconds: 300));
@ -124,33 +123,33 @@ class DuniterIndexer with ChangeNotifier {
try {
String endpointPath = '${listIndexerEndpoints[i]}/v1/graphql';
final request = await _client.postUrl(Uri.parse(endpointPath));
final request = await client.postUrl(Uri.parse(endpointPath));
final response = await request.close();
indexerEndpoint = listIndexerEndpoints[i];
await configBox.put('indexerEndpoint', listIndexerEndpoints[i]);
_statusCode = response.statusCode;
statusCode = response.statusCode;
i++;
} on TimeoutException catch (_) {
log.e('This endpoint is timeout, next');
_statusCode = 50;
statusCode = 50;
i++;
continue;
} on SocketException catch (_) {
log.e('This endpoint is a bad endpoint, next');
_statusCode = 70;
statusCode = 70;
i++;
continue;
} on Exception {
log.e('Unknown error');
_statusCode = 60;
statusCode = 60;
i++;
continue;
}
} while (_statusCode != 200);
} while (statusCode != 200);
log.i('INDEXER: ' + indexerEndpoint);
log.i('INDEXER: $indexerEndpoint');
return indexerEndpoint;
}
@ -158,34 +157,34 @@ class DuniterIndexer with ChangeNotifier {
[WalletData? wallet,
double size = 20,
bool canEdit = false,
Color _color = Colors.black,
Color color = Colors.black,
FontWeight fontWeight = FontWeight.w400,
FontStyle fontStyle = FontStyle.italic]) {
WalletOptionsProvider _walletOptions =
WalletOptionsProvider walletOptions =
Provider.of<WalletOptionsProvider>(context, listen: false);
if (indexerEndpoint == '') {
if (wallet == null) {
return const SizedBox();
} else {
if (canEdit) {
return _walletOptions.walletName(context, wallet, size, _color);
return walletOptions.walletName(context, wallet, size, color);
} else {
return _walletOptions.walletNameController(context, wallet, size);
return walletOptions.walletNameController(context, wallet, size);
}
}
}
final _httpLink = HttpLink(
final httpLink = HttpLink(
'$indexerEndpoint/v1/graphql',
);
final _client = ValueNotifier(
final client = ValueNotifier(
GraphQLClient(
cache: GraphQLCache(store: HiveStore()),
link: _httpLink,
link: httpLink,
),
);
return GraphQLProvider(
client: _client,
client: client,
child: Query(
options: QueryOptions(
document: gql(
@ -213,22 +212,21 @@ class DuniterIndexer with ChangeNotifier {
return const SizedBox();
} else {
if (canEdit) {
return _walletOptions.walletName(
context, wallet, size, _color);
return walletOptions.walletName(context, wallet, size, color);
} else {
return _walletOptions.walletNameController(
return walletOptions.walletNameController(
context, wallet, size);
}
}
}
return Text(
_color == Colors.grey[700]!
color == Colors.grey[700]!
? '(${walletNameIndexer[address]!})'
: truncate(walletNameIndexer[address]!, 20),
style: TextStyle(
fontSize: size,
color: _color,
color: color,
fontWeight: fontWeight,
fontStyle: fontStyle,
),
@ -240,28 +238,28 @@ class DuniterIndexer with ChangeNotifier {
Widget searchIdentity(BuildContext context, String name) {
// WalletOptionsProvider _walletOptions =
// Provider.of<WalletOptionsProvider>(context, listen: false);
CesiumPlusProvider _cesiumPlusProvider =
CesiumPlusProvider cesiumPlusProvider =
Provider.of<CesiumPlusProvider>(context, listen: false);
WalletsProfilesProvider _walletsProfiles =
WalletsProfilesProvider walletsProfiles =
Provider.of<WalletsProfilesProvider>(context, listen: false);
if (indexerEndpoint == '') {
return const Text('Aucun résultat');
}
log.d(indexerEndpoint);
final _httpLink = HttpLink(
final httpLink = HttpLink(
'$indexerEndpoint/v1/graphql',
);
final _client = ValueNotifier(
final client = ValueNotifier(
GraphQLClient(
cache: GraphQLCache(
store: HiveStore()), // GraphQLCache(store: HiveStore())
link: _httpLink,
link: httpLink,
),
);
return GraphQLProvider(
client: _client,
client: client,
child: Query(
options: QueryOptions(
document: gql(
@ -288,7 +286,7 @@ class DuniterIndexer with ChangeNotifier {
}
int keyID = 0;
double _avatarSize = 55;
double avatarSize = 55;
return Expanded(
child: ListView(children: <Widget>[
for (Map profile in identities)
@ -298,7 +296,7 @@ class DuniterIndexer with ChangeNotifier {
key: Key('searchResult${keyID++}'),
horizontalTitleGap: 40,
contentPadding: const EdgeInsets.all(5),
leading: _cesiumPlusProvider.defaultAvatar(_avatarSize),
leading: cesiumPlusProvider.defaultAvatar(avatarSize),
title: Row(children: <Widget>[
Text(getShortPubkey(profile['id']),
style: const TextStyle(
@ -322,7 +320,7 @@ class DuniterIndexer with ChangeNotifier {
Navigator.push(
context,
MaterialPageRoute(builder: (context) {
_walletsProfiles.address = profile['id'];
walletsProfiles.address = profile['id'];
return WalletViewScreen(
pubkey: profile['id'],
username: g1WalletsBox
@ -341,14 +339,14 @@ class DuniterIndexer with ChangeNotifier {
);
}
List parseHistory(blockchainTX, _pubkey) {
List parseHistory(blockchainTX, pubkey) {
var transBC = [];
int i = 0;
for (final trans in blockchainTX) {
final transaction = trans['node'];
final direction =
transaction['issuer_id'] != _pubkey ? 'RECEIVED' : 'SENT';
transaction['issuer_id'] != pubkey ? 'RECEIVED' : 'SENT';
transBC.add(i);
transBC[i] = [];
@ -362,7 +360,7 @@ class DuniterIndexer with ChangeNotifier {
} else if (direction == "SENT") {
transBC[i].add(transaction['receiver_id']);
transBC[i].add(transaction['receiver']['identity']?['name'] ?? '');
transBC[i].add('- ' + amount.toString());
transBC[i].add('- $amount');
}
// transBC[i].add(''); //transaction comment
@ -371,7 +369,7 @@ class DuniterIndexer with ChangeNotifier {
return transBC;
}
FetchMoreOptions? checkQueryResult(result, opts, _pubkey) {
FetchMoreOptions? checkQueryResult(result, opts, pubkey) {
final List<dynamic>? blockchainTX =
(result.data['transaction_connection']['edges'] as List<dynamic>?);
// final List<dynamic> mempoolTX =
@ -402,9 +400,9 @@ class DuniterIndexer with ChangeNotifier {
as List<dynamic>
];
log.d('repos: ' + previousResultData.toString());
log.d('repos: ' + fetchMoreResultData.toString());
log.d('repos: ' + repos.toString());
log.d('repos: $previousResultData');
log.d('repos: $fetchMoreResultData');
log.d('repos: $repos');
fetchMoreResultData['transaction_connection']['edges'] = repos;
return fetchMoreResultData;
@ -415,7 +413,7 @@ class DuniterIndexer with ChangeNotifier {
log.d(
"###### DEBUG H Parse blockchainTX list. Cursor: $fetchMoreCursor ######");
if (fetchMoreCursor != null) {
transBC = parseHistory(blockchainTX, _pubkey);
transBC = parseHistory(blockchainTX, pubkey);
} else {
log.i("###### DEBUG H - Début de l'historique");
}

View File

@ -65,7 +65,7 @@ class GenerateWalletsProvider with ChangeNotifier {
if (chestNumber == 0) {
chestName = 'geckoChest'.tr();
} else {
chestName = 'geckoChest'.tr() + '${chestNumber + 1}';
chestName = '${'geckoChest'.tr()}${chestNumber + 1}';
}
await configBox.put('currentChest', chestNumber);
@ -81,8 +81,8 @@ class GenerateWalletsProvider with ChangeNotifier {
notifyListeners();
}
void checkAskedWord(String inputWord, String _mnemo) {
final expectedWord = _mnemo.split(' ')[nbrWord];
void checkAskedWord(String inputWord, String mnemo) {
final expectedWord = mnemo.split(' ')[nbrWord];
final normInputWord = unorm.nfkd(inputWord);
log.i("Is $expectedWord equal to input $normInputWord ?");
@ -118,7 +118,7 @@ class GenerateWalletsProvider with ChangeNotifier {
return rng.nextInt(12);
}
String? intToString(int _nbr) {
String? intToString(int nbr) {
Map nbrToString = {};
nbrToString[1] = '1th'.tr();
nbrToString[2] = '2th'.tr();
@ -133,7 +133,7 @@ class GenerateWalletsProvider with ChangeNotifier {
nbrToString[11] = '11th'.tr();
nbrToString[12] = '12th'.tr();
nbrWordAlpha = nbrToString[_nbr];
nbrWordAlpha = nbrToString[nbr];
return nbrWordAlpha;
}
@ -222,12 +222,12 @@ class GenerateWalletsProvider with ChangeNotifier {
}
Future<void> generateCesiumWalletPubkey(
String _cesiumID, String _cesiumPWD) async {
cesiumWallet = durt.CesiumWallet(_cesiumID, _cesiumPWD);
String _walletPubkey = cesiumWallet.pubkey;
String cesiumID, String cesiumPWD) async {
cesiumWallet = durt.CesiumWallet(cesiumID, cesiumPWD);
String walletPubkey = cesiumWallet.pubkey;
cesiumPubkey.text = _walletPubkey;
log.d(_walletPubkey);
cesiumPubkey.text = walletPubkey;
log.d(walletPubkey);
}
void cesiumIDisVisible() {
@ -248,19 +248,19 @@ class GenerateWalletsProvider with ChangeNotifier {
}
Future<List<String>> generateWordList(BuildContext context) async {
SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false);
generatedMnemonic = await _sub.generateMnemonic(lang: appLang);
List<String> _wordsList = [];
generatedMnemonic = await sub.generateMnemonic(lang: appLang);
List<String> wordsList = [];
String word;
int _nbr = 1;
int nbr = 1;
for (word in generatedMnemonic!.split(' ')) {
_wordsList.add("$_nbr:$word");
_nbr++;
wordsList.add("$nbr:$word");
nbr++;
}
return _wordsList;
return wordsList;
}
bool isBipWord(String word, [bool checkRedondance = true]) {
@ -368,29 +368,29 @@ class GenerateWalletsProvider with ChangeNotifier {
Future<bool> scanDerivations(BuildContext context,
{int numberScan = 20}) async {
SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false);
final currentChestNumber = configBox.get('currentChest');
bool isAlive = false;
scanedWalletNumber = 0;
notifyListeners();
if (!_sub.nodeConnected) {
if (!sub.nodeConnected) {
return false;
}
final hasRoot = await scanRootBalance(_sub, currentChestNumber);
final hasRoot = await scanRootBalance(sub, currentChestNumber);
if (hasRoot) {
scanedWalletNumber = 1;
isAlive = true;
}
for (var derivationNbr in [for (var i = 0; i < numberScan; i += 1) i]) {
final addressData = await _sub.sdk.api.keyring.addressFromMnemonic(ss58,
final addressData = await sub.sdk.api.keyring.addressFromMnemonic(ss58,
cryptoType: CryptoType.sr25519,
mnemonic: generatedMnemonic!,
derivePath: '//$derivationNbr');
final balance = await _sub.getBalance(addressData.address!).timeout(
final balance = await sub.getBalance(addressData.address!).timeout(
const Duration(seconds: 1),
onTimeout: () => 0,
);
@ -401,8 +401,8 @@ class GenerateWalletsProvider with ChangeNotifier {
isAlive = true;
String walletName = scanedWalletNumber == 0
? 'currentWallet'.tr()
: 'wallet'.tr() + ' ${scanedWalletNumber + 1}';
await _sub.importAccount(
: '${'wallet'.tr()} ${scanedWalletNumber + 1}';
await sub.importAccount(
mnemonic: '',
fromMnemonic: true,
derivePath: '//$derivationNbr',
@ -425,12 +425,11 @@ class GenerateWalletsProvider with ChangeNotifier {
return isAlive;
}
Future<bool> scanRootBalance(
SubstrateSdk _sub, int currentChestNumber) async {
final addressData = await _sub.sdk.api.keyring.addressFromMnemonic(ss58,
Future<bool> scanRootBalance(SubstrateSdk sub, int currentChestNumber) async {
final addressData = await sub.sdk.api.keyring.addressFromMnemonic(ss58,
cryptoType: CryptoType.sr25519, mnemonic: generatedMnemonic!);
final balance = await _sub.getBalance(addressData.address!).timeout(
final balance = await sub.getBalance(addressData.address!).timeout(
const Duration(seconds: 1),
onTimeout: () => 0,
);
@ -438,7 +437,7 @@ class GenerateWalletsProvider with ChangeNotifier {
log.d(balance);
if (balance != 0) {
String walletName = 'myRootWallet'.tr();
await _sub.importAccount(
await sub.importAccount(
mnemonic: '', fromMnemonic: true, password: pin.text);
WalletData myWallet = WalletData(

View File

@ -1,3 +1,5 @@
// ignore_for_file: use_build_context_synchronously
import 'dart:convert';
import 'dart:io';
import 'dart:math';
@ -70,7 +72,7 @@ class HomeProvider with ChangeNotifier {
: (int.parse(packageInfo.buildNumber) - 1000).toString();
notifyListeners();
return version + '+' + buildNumber;
return '$version+$buildNumber';
}
Future changeMessage(String newMessage, int seconds) async {
@ -87,19 +89,19 @@ class HomeProvider with ChangeNotifier {
configBox.put('autoEndpoint', true);
}
List _listEndpoints = [];
List listEndpoints = [];
if (!configBox.containsKey('endpoint') ||
configBox.get('endpoint') == [] ||
configBox.get('endpoint') == '') {
_listEndpoints = await rootBundle
listEndpoints = await rootBundle
.loadString('config/gdev_endpoints.json')
.then((jsonStr) => jsonDecode(jsonStr));
_listEndpoints.shuffle();
configBox.put('endpoint', _listEndpoints);
listEndpoints.shuffle();
configBox.put('endpoint', listEndpoints);
}
log.i('ENDPOINT: ' + _listEndpoints.toString());
return _listEndpoints;
log.i('ENDPOINT: $listEndpoints');
return listEndpoints;
}
T getRandomElement<T>(List<T> list) {
@ -119,17 +121,17 @@ class HomeProvider with ChangeNotifier {
// }
Widget bottomAppBar(BuildContext context) {
MyWalletsProvider _myWalletProvider =
MyWalletsProvider myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false);
WalletsProfilesProvider _historyProvider =
WalletsProfilesProvider historyProvider =
Provider.of<WalletsProfilesProvider>(context, listen: false);
final size = MediaQuery.of(context).size;
const bool _showBottomBar = true;
const bool showBottomBar = true;
return Visibility(
visible: _showBottomBar,
visible: showBottomBar,
child: Container(
color: yellowC,
width: size.width,
@ -171,7 +173,7 @@ class HomeProvider with ChangeNotifier {
context,
ModalRoute.withName('/'),
);
_historyProvider.scan(homeContext);
historyProvider.scan(homeContext);
},
),
const Spacer(),
@ -180,10 +182,10 @@ class HomeProvider with ChangeNotifier {
iconSize: 60,
icon: const Image(image: AssetImage('assets/wallet.png')),
onPressed: () async {
WalletData? defaultWallet = _myWalletProvider.getDefaultWallet();
String? _pin;
if (_myWalletProvider.pinCode == '') {
_pin = await Navigator.push(
WalletData? defaultWallet = myWalletProvider.getDefaultWallet();
String? pin;
if (myWalletProvider.pinCode == '') {
pin = await Navigator.push(
context,
MaterialPageRoute(
builder: (homeContext) {
@ -193,7 +195,7 @@ class HomeProvider with ChangeNotifier {
);
}
if (_pin != null || _myWalletProvider.pinCode != '') {
if (pin != null || myWalletProvider.pinCode != '') {
Navigator.popUntil(
context,
ModalRoute.withName('/'),

View File

@ -31,11 +31,11 @@ class MyWalletsProvider with ChangeNotifier {
}
}
List<WalletData> readAllWallets([int? _chest]) {
_chest = _chest ?? configBox.get('currentChest') ?? 0;
List<WalletData> readAllWallets([int? chest]) {
chest = chest ?? configBox.get('currentChest') ?? 0;
listWallets.clear();
walletBox.toMap().forEach((key, value) {
if (value.chest == _chest) {
if (value.chest == chest) {
listWallets.add(value);
}
});
@ -43,33 +43,33 @@ class MyWalletsProvider with ChangeNotifier {
return listWallets;
}
WalletData? getWalletDataById(List<int?> _id) {
if (_id.isEmpty) return WalletData();
int? _chest = _id[0];
int? _nbr = _id[1];
WalletData? _targetedWallet;
WalletData? getWalletDataById(List<int?> id) {
if (id.isEmpty) return WalletData();
int? chest = id[0];
int? nbr = id[1];
WalletData? targetedWallet;
walletBox.toMap().forEach((key, value) {
if (value.chest == _chest && value.number == _nbr) {
_targetedWallet = value;
if (value.chest == chest && value.number == nbr) {
targetedWallet = value;
return;
}
});
return _targetedWallet;
return targetedWallet;
}
WalletData? getWalletDataByAddress(String address) {
WalletData? _targetedWallet;
WalletData? targetedWallet;
walletBox.toMap().forEach((key, value) {
if (value.address == address) {
_targetedWallet = value;
targetedWallet = value;
return;
}
});
return _targetedWallet;
return targetedWallet;
}
WalletData getDefaultWallet([int? chest]) {
@ -84,21 +84,21 @@ class MyWalletsProvider with ChangeNotifier {
}
Future<int> deleteAllWallet(context) async {
SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
MyWalletsProvider _myWalletProvider =
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false);
MyWalletsProvider myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false);
try {
log.w('DELETE ALL WALLETS ?');
final bool? _answer =
final bool? answer =
await (confirmPopup(context, 'areYouSureForgetAllChests'.tr()));
if (_answer!) {
if (answer!) {
await walletBox.clear();
await chestBox.clear();
await configBox.delete('defaultWallet');
await _sub.deleteAllAccounts();
await sub.deleteAllAccounts();
_myWalletProvider.pinCode = '';
myWalletProvider.pinCode = '';
await Navigator.of(context).pushNamedAndRemoveUntil(
'/',
@ -111,32 +111,32 @@ class MyWalletsProvider with ChangeNotifier {
}
}
Future<void> generateNewDerivation(context, String _name,
Future<void> generateNewDerivation(context, String name,
[int? number]) async {
isNewDerivationLoading = true;
notifyListeners();
final List idList = getNextWalletNumberAndDerivation();
int _newWalletNbr = idList[0];
int _newDerivationNbr = number ?? idList[1];
int newWalletNbr = idList[0];
int newDerivationNbr = number ?? idList[1];
int? _chest = getCurrentChest();
int? chest = getCurrentChest();
SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false);
WalletData defaultWallet = getDefaultWallet();
final address = await _sub.derive(
context, defaultWallet.address!, _newDerivationNbr, pinCode);
final address = await sub.derive(
context, defaultWallet.address!, newDerivationNbr, pinCode);
WalletData newWallet = WalletData(
version: dataVersion,
chest: _chest,
chest: chest,
address: address,
number: _newWalletNbr,
name: _name,
derivation: _newDerivationNbr,
imageDefaultPath: '${_newWalletNbr % 4}.png');
number: newWalletNbr,
name: name,
derivation: newDerivationNbr,
imageDefaultPath: '${newWalletNbr % 4}.png');
await walletBox.add(newWallet);
@ -144,37 +144,37 @@ class MyWalletsProvider with ChangeNotifier {
notifyListeners();
}
Future<void> generateRootWallet(context, String _name) async {
MyWalletsProvider _myWalletProvider =
Future<void> generateRootWallet(context, String name) async {
MyWalletsProvider myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false);
isNewDerivationLoading = true;
notifyListeners();
int _newWalletNbr;
int? _chest = getCurrentChest();
int newWalletNbr;
int? chest = getCurrentChest();
List<WalletData> _walletConfig = readAllWallets(_chest);
List<WalletData> walletConfig = readAllWallets(chest);
if (_walletConfig.isEmpty) {
_newWalletNbr = 0;
if (walletConfig.isEmpty) {
newWalletNbr = 0;
} else {
_newWalletNbr = _walletConfig.last.number! + 1;
newWalletNbr = walletConfig.last.number! + 1;
}
SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false);
WalletData defaultWallet = _myWalletProvider.getDefaultWallet();
WalletData defaultWallet = myWalletProvider.getDefaultWallet();
final address =
await _sub.generateRootKeypair(defaultWallet.address!, pinCode);
await sub.generateRootKeypair(defaultWallet.address!, pinCode);
WalletData newWallet = WalletData(
version: dataVersion,
chest: _chest,
chest: chest,
address: address,
number: _newWalletNbr,
name: _name,
number: newWalletNbr,
name: name,
derivation: -1,
imageDefaultPath: '${_newWalletNbr % 4}.png');
imageDefaultPath: '${newWalletNbr % 4}.png');
await walletBox.add(newWallet);
@ -184,29 +184,29 @@ class MyWalletsProvider with ChangeNotifier {
List<int> getNextWalletNumberAndDerivation(
{int? chestNumber, bool isOneshoot = false}) {
int _newDerivationNbr = 0;
int _newWalletNbr = 0;
int newDerivationNbr = 0;
int newWalletNbr = 0;
chestNumber ??= getCurrentChest();
List<WalletData> _walletConfig = readAllWallets(chestNumber);
List<WalletData> walletConfig = readAllWallets(chestNumber);
if (_walletConfig.isEmpty) {
_newDerivationNbr = 2;
if (walletConfig.isEmpty) {
newDerivationNbr = 2;
} else {
WalletData _lastWallet = _walletConfig.reduce(
WalletData lastWallet = walletConfig.reduce(
(curr, next) => curr.derivation! > next.derivation! ? curr : next);
if (_lastWallet.derivation == -1) {
_newDerivationNbr = 2;
if (lastWallet.derivation == -1) {
newDerivationNbr = 2;
} else {
_newDerivationNbr = _lastWallet.derivation! + (isOneshoot ? 1 : 2);
newDerivationNbr = lastWallet.derivation! + (isOneshoot ? 1 : 2);
}
_newWalletNbr = _walletConfig.last.number! + 1;
newWalletNbr = walletConfig.last.number! + 1;
}
return [_newWalletNbr, _newDerivationNbr];
return [newWalletNbr, newDerivationNbr];
}
int lockPin = 0;

View File

@ -68,12 +68,12 @@ class SearchProvider with ChangeNotifier {
// }
Future<List<G1WalletsList>> searchAddress() async {
final WalletsProfilesProvider _walletProfiles =
final WalletsProfilesProvider walletProfiles =
WalletsProfilesProvider('pubkey');
if (_walletProfiles.isAddress(searchController.text)) {
G1WalletsList _wallet = G1WalletsList(pubkey: searchController.text);
return [_wallet];
if (walletProfiles.isAddress(searchController.text)) {
G1WalletsList wallet = G1WalletsList(pubkey: searchController.text);
return [wallet];
} else {
return [];
}

View File

@ -1,5 +1,3 @@
// ignore_for_file: avoid_print
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
@ -46,7 +44,7 @@ class SubstrateSdk with ChangeNotifier {
}
Future<void> connectNode(BuildContext ctx) async {
HomeProvider _homeProvider = Provider.of<HomeProvider>(ctx, listen: false);
HomeProvider homeProvider = Provider.of<HomeProvider>(ctx, listen: false);
// var connectivityResult = await (Connectivity().checkConnectivity());
// if (connectivityResult == ConnectivityResult.mobile ||
@ -54,7 +52,7 @@ class SubstrateSdk with ChangeNotifier {
// _homeProvider.changeMessage("Vous n'êtes pas connecté à internet", 0);
// return;
// }
_homeProvider.changeMessage("connectionPending".tr(), 0);
homeProvider.changeMessage("connectionPending".tr(), 0);
// configBox.delete('customEndpoint');
final List<NetworkParams> listEndpoints =
@ -108,7 +106,7 @@ class SubstrateSdk with ChangeNotifier {
// log.d(sdk.api.connectedNode?.endpoint);
if (sdk.api.connectedNode?.endpoint == null) {
nodeConnected = false;
_homeProvider.changeMessage("networkLost".tr(), 0);
homeProvider.changeMessage("networkLost".tr(), 0);
} else {
nodeConnected = true;
}
@ -117,7 +115,7 @@ class SubstrateSdk with ChangeNotifier {
// currencyName = await getCurencyName();
notifyListeners();
_homeProvider.changeMessage(
homeProvider.changeMessage(
"wellConnectedToNode"
.tr(args: [getConnectedEndpoint()!.split('/')[2]]),
5);
@ -126,7 +124,7 @@ class SubstrateSdk with ChangeNotifier {
nodeConnected = false;
debugConnection = res.toString();
notifyListeners();
_homeProvider.changeMessage("noDuniterEndointAvailable".tr(), 0);
homeProvider.changeMessage("noDuniterEndointAvailable".tr(), 0);
// snackNode(ctx, false);
}
@ -136,10 +134,10 @@ class SubstrateSdk with ChangeNotifier {
List<NetworkParams> getDuniterBootstrap() {
List<NetworkParams> node = [];
for (String _endpoint in configBox.get('endpoint')) {
for (String endpoint in configBox.get('endpoint')) {
final n = NetworkParams();
n.name = currencyName;
n.endpoint = _endpoint;
n.endpoint = endpoint;
n.ss58 = ss58;
node.add(n);
}
@ -199,7 +197,7 @@ class SubstrateSdk with ChangeNotifier {
notifyListeners();
});
if (json == null) return '';
print(json);
log.d(json);
try {
await sdk.api.keyring.addAccount(
keyring,
@ -209,7 +207,7 @@ class SubstrateSdk with ChangeNotifier {
);
// Clipboard.setData(ClipboardData(text: jsonEncode(acc.toJson())));
} catch (e) {
print(e);
log.e(e);
importIsLoading = false;
notifyListeners();
}
@ -247,11 +245,11 @@ class SubstrateSdk with ChangeNotifier {
.evalJavascript('api.query.identity.identityIndexOf("$address")');
// log.d('u32: ' + idtyIndex.toString());
final _certsReceiver = await sdk.webView!
final certsReceiver = await sdk.webView!
.evalJavascript('api.query.cert.storageIdtyCertMeta($idtyIndex)') ??
[];
return [_certsReceiver['receivedCount'], _certsReceiver['issuedCount']];
return [certsReceiver['receivedCount'], certsReceiver['issuedCount']];
}
Future<Map> getCertData(String from, String to) async {
@ -261,22 +259,22 @@ class SubstrateSdk with ChangeNotifier {
final idtyIndexTo = await sdk.webView!
.evalJavascript('api.query.identity.identityIndexOf("$to")');
final _certData = await sdk.webView!.evalJavascript(
final certData = await sdk.webView!.evalJavascript(
'api.query.cert.storageCertsByIssuer($idtyIndexFrom, $idtyIndexTo)') ??
'';
if (_certData == '') return {};
if (certData == '') return {};
// log.d(_certData);
return _certData;
return certData;
}
Future<bool> hasAccountConsumers(String address) async {
final _accountInfo = await sdk.webView!
final accountInfo = await sdk.webView!
.evalJavascript('api.query.system.account("$address")');
final _consumers = _accountInfo['consumers'];
final consumers = accountInfo['consumers'];
// log.d('Consumers: $_consumers');
return _consumers == 0 ? false : true;
return consumers == 0 ? false : true;
}
Future<double> getBalance(String address, {bool isUd = false}) async {
@ -295,8 +293,8 @@ class SubstrateSdk with ChangeNotifier {
Future<double> subscribeBalance(String address, {bool isUd = false}) async {
double balance = 0.0;
if (nodeConnected) {
await sdk.api.account.subscribeBalance(address, (_balance) {
balance = int.parse(_balance.freeBalance) / 100;
await sdk.api.account.subscribeBalance(address, (balanceData) {
balance = int.parse(balanceData.freeBalance) / 100;
notifyListeners();
});
}
@ -316,21 +314,21 @@ class SubstrateSdk with ChangeNotifier {
return await sdk.api.keyring.checkPassword(account, pass);
}
Future<String> getSeed(String address, String _pin) async {
Future<String> getSeed(String address, String pin) async {
final account = getKeypair(address);
keyring.setCurrent(account);
final _seed = await sdk.api.keyring.getDecryptedSeed(keyring, _pin);
final seed = await sdk.api.keyring.getDecryptedSeed(keyring, pin);
String _seedText;
if (_seed == null) {
_seedText = '';
String seedText;
if (seed == null) {
seedText = '';
} else {
_seedText = _seed.seed!.split('//')[0];
seedText = seed.seed!.split('//')[0];
}
log.d(_seedText);
return _seedText;
log.d(seedText);
return seedText;
}
int getDerivationNumber(String address) {
@ -342,10 +340,10 @@ class SubstrateSdk with ChangeNotifier {
Future<KeyPairData?> changePassword(BuildContext context, String address,
String passOld, String? passNew) async {
final account = getKeypair(address);
MyWalletsProvider _myWalletProvider =
MyWalletsProvider myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false);
keyring.setCurrent(account);
_myWalletProvider.resetPinCode();
myWalletProvider.resetPinCode();
return await sdk.api.keyring.changePassword(keyring, passOld, passNew);
}
@ -372,14 +370,14 @@ class SubstrateSdk with ChangeNotifier {
return gen.mnemonic!;
}
Future<String> setCurrentWallet(WalletData _wallet) async {
Future<String> setCurrentWallet(WalletData wallet) async {
final currentChestNumber = configBox.get('currentChest');
ChestData _newChestData = chestBox.get(currentChestNumber)!;
_newChestData.defaultWallet = _wallet.number;
await chestBox.put(currentChestNumber, _newChestData);
ChestData newChestData = chestBox.get(currentChestNumber)!;
newChestData.defaultWallet = wallet.number;
await chestBox.put(currentChestNumber, newChestData);
try {
final acc = getKeypair(_wallet.address!);
final acc = getKeypair(wallet.address!);
keyring.setCurrent(acc);
return acc.address!;
} catch (e) {
@ -426,7 +424,7 @@ class SubstrateSdk with ChangeNotifier {
[destAddress, amount == -1 ? false : amountUnit],
password,
onStatusChange: (status) {
log.d('Transaction status: ' + status);
log.d('Transaction status: $status');
transactionStatus = status;
notifyListeners();
},
@ -457,16 +455,16 @@ class SubstrateSdk with ChangeNotifier {
transactionStatus = '';
// setCurrentWallet(fromAddress);
log.d('me: ' + fromAddress);
log.d('to: ' + toAddress);
log.d('me: $fromAddress');
log.d('to: $toAddress');
final _myIdtyStatus = await idtyStatus(fromAddress);
final _toIdtyStatus = await idtyStatus(toAddress);
final myIdtyStatus = await idtyStatus(fromAddress);
final toIdtyStatus = await idtyStatus(toAddress);
log.d(_myIdtyStatus);
log.d(_toIdtyStatus);
log.d(myIdtyStatus);
log.d(toIdtyStatus);
if (_myIdtyStatus != 'Validated') {
if (myIdtyStatus != 'Validated') {
transactionStatus = 'notMember';
notifyListeners();
return 'notMember';
@ -478,14 +476,14 @@ class SubstrateSdk with ChangeNotifier {
);
TxInfoData txInfo;
if (_toIdtyStatus == 'noid') {
if (toIdtyStatus == 'noid') {
txInfo = TxInfoData(
'identity',
'createIdentity',
sender,
);
} else if (_toIdtyStatus == 'Validated' ||
_toIdtyStatus == 'ConfirmedByOwner') {
} else if (toIdtyStatus == 'Validated' ||
toIdtyStatus == 'ConfirmedByOwner') {
txInfo = TxInfoData(
'cert',
'addCert',
@ -497,7 +495,7 @@ class SubstrateSdk with ChangeNotifier {
return 'cantBeCert';
}
log.d('Cert action: ' + txInfo.call!);
log.d('Cert action: ${txInfo.call!}');
try {
final hash = await sdk.api.tx
@ -543,9 +541,9 @@ class SubstrateSdk with ChangeNotifier {
.evalJavascript('api.query.identity.identities($idtyIndex)');
if (idtyStatus != null) {
final String _status = idtyStatus['status'];
final String status = idtyStatus['status'];
// log.d('Status $address: $_status');
return (_status);
return (status);
} else {
return 'expired';
}
@ -555,7 +553,7 @@ class SubstrateSdk with ChangeNotifier {
String fromAddress, String name, String password) async {
// Confirm identity
// setCurrentWallet(fromAddress);
log.d('me: ' + keyring.current.address!);
log.d('me: ${keyring.current.address!}');
final sender = TxSenderData(
keyring.current.address,
@ -574,7 +572,7 @@ class SubstrateSdk with ChangeNotifier {
[name],
password,
onStatusChange: (status) {
log.d('Transaction status: ' + status);
log.d('Transaction status: $status');
transactionStatus = status;
notifyListeners();
},
@ -601,7 +599,7 @@ class SubstrateSdk with ChangeNotifier {
}
}
Future<bool> isMember(String address) async {
Future<bool> isMemberGet(String address) async {
return await idtyStatus(address) == 'Validated';
}
@ -609,13 +607,13 @@ class SubstrateSdk with ChangeNotifier {
// TODOO: Continue digging memberAddress detection
String memberAddress = '';
walletBox.toMap().forEach((key, value) async {
final bool _isMember = await isMember(value.address!);
log.d(_isMember);
if (_isMember) {
final bool isMember = await isMemberGet(value.address!);
log.d(isMember);
if (isMember) {
final currentChestNumber = configBox.get('currentChest');
ChestData _newChestData = chestBox.get(currentChestNumber)!;
_newChestData.memberWallet = value.number;
await chestBox.put(currentChestNumber, _newChestData);
ChestData newChestData = chestBox.get(currentChestNumber)!;
newChestData.memberWallet = value.number;
await chestBox.put(currentChestNumber, newChestData);
memberAddress = value.address!;
return;
}
@ -625,39 +623,39 @@ class SubstrateSdk with ChangeNotifier {
}
Future<Map<String, int>> certState(String from, String to) async {
Map<String, int> _result = {};
if (from != to && await isMember(from)) {
final _certData = await getCertData(from, to);
final _certMeta = await getCertMeta(from);
final int _removableOn = _certData['removableOn'] ?? 0;
final int _nextIssuableOn = _certMeta['nextIssuableOn'] ?? 0;
final certRemovableDuration = (_removableOn - blocNumber) * 6;
Map<String, int> result = {};
if (from != to && await isMemberGet(from)) {
final certData = await getCertData(from, to);
final certMeta = await getCertMeta(from);
final int removableOn = certData['removableOn'] ?? 0;
final int nextIssuableOn = certMeta['nextIssuableOn'] ?? 0;
final certRemovableDuration = (removableOn - blocNumber) * 6;
const int renewDelay = 2 * 30 * 24 * 3600; // 2 months
if (certRemovableDuration >= renewDelay) {
final certRenewDuration = certRemovableDuration - renewDelay;
_result.putIfAbsent('certRenewable', () => certRenewDuration);
} else if (_nextIssuableOn > blocNumber) {
final certDelayDuration = (_nextIssuableOn - blocNumber) * 6;
_result.putIfAbsent('certDelay', () => certDelayDuration);
result.putIfAbsent('certRenewable', () => certRenewDuration);
} else if (nextIssuableOn > blocNumber) {
final certDelayDuration = (nextIssuableOn - blocNumber) * 6;
result.putIfAbsent('certDelay', () => certDelayDuration);
} else {
_result.putIfAbsent('canCert', () => 0);
result.putIfAbsent('canCert', () => 0);
}
}
return _result;
return result;
}
Future<Map> getCertMeta(String address) async {
var idtyIndex = await sdk.webView!
.evalJavascript('api.query.identity.identityIndexOf("$address")');
final _certMeta = await sdk.webView!
final certMeta = await sdk.webView!
.evalJavascript('api.query.cert.storageIdtyCertMeta($idtyIndex)') ??
'';
// if (_certMeta['nextIssuableOn'] != 0) return {};
// log.d(_certMeta);
return _certMeta;
return certMeta;
}
Future revokeIdentity(String address, String password) async {
@ -767,19 +765,19 @@ class AddressInfo {
}
void snackNode(BuildContext context, bool isConnected) {
String _message;
String message;
if (!isConnected) {
_message = "noDuniterNodeAvailableTryLater".tr() +
":\n${configBox.get('endpoint').first}";
message =
"${"noDuniterNodeAvailableTryLater".tr()}:\n${configBox.get('endpoint').first}";
} else {
SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false);
_message = "youAreConnectedToNode".tr() +
"\n${_sub.getConnectedEndpoint()!.split('//')[1]}";
message =
"${"youAreConnectedToNode".tr()}\n${sub.getConnectedEndpoint()!.split('//')[1]}";
}
final snackBar = SnackBar(
padding: const EdgeInsets.all(20),
content: Text(_message, style: const TextStyle(fontSize: 16)),
content: Text(message, style: const TextStyle(fontSize: 16)),
duration: const Duration(seconds: 4));
ScaffoldMessenger.of(context).showSnackBar(snackBar);
}

View File

@ -1,3 +1,5 @@
// ignore_for_file: use_build_context_synchronously
import 'dart:io';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
@ -31,43 +33,43 @@ class WalletOptionsProvider with ChangeNotifier {
Future<NewWallet>? get badWallet => null;
int getPinLenght(_walletNbr) {
int getPinLenght(walletNbr) {
return pinLength;
}
void _renameWallet(List<int?> _walletID, String _newName,
void _renameWallet(List<int?> walletID, String newName,
{required bool isCesium}) async {
MyWalletsProvider myWalletClass = MyWalletsProvider();
WalletData _walletTarget = myWalletClass.getWalletDataById(_walletID)!;
_walletTarget.name = _newName;
await walletBox.put(_walletTarget.key, _walletTarget);
WalletData walletTarget = myWalletClass.getWalletDataById(walletID)!;
walletTarget.name = newName;
await walletBox.put(walletTarget.key, walletTarget);
_newWalletName.text = '';
}
Future<int> deleteWallet(context, WalletData wallet) async {
SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
final bool? _answer = await (confirmPopup(
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false);
final bool? answer = await (confirmPopup(
context, 'areYouSureToForgetWallet'.tr(args: [wallet.name!])));
if (_answer ?? false) {
if (answer ?? false) {
//Check if balance is null
final _balance = await _sub.getBalance(wallet.address!);
if (_balance != 0) {
MyWalletsProvider _myWalletProvider =
final balance = await sub.getBalance(wallet.address!);
if (balance != 0) {
MyWalletsProvider myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false);
final _defaultWallet = _myWalletProvider.getDefaultWallet();
log.d(_defaultWallet.address);
_sub.pay(
final defaultWallet = myWalletProvider.getDefaultWallet();
log.d(defaultWallet.address);
sub.pay(
fromAddress: wallet.address!,
destAddress: _defaultWallet.address!,
destAddress: defaultWallet.address!,
amount: -1,
password: _myWalletProvider.pinCode);
password: myWalletProvider.pinCode);
}
await walletBox.delete(wallet.key);
await _sub.deleteAccounts([wallet.address!]);
await sub.deleteAccounts([wallet.address!]);
Navigator.pop(context);
}
@ -130,11 +132,11 @@ class WalletOptionsProvider with ChangeNotifier {
Widget idtyStatus(BuildContext context, String address,
{bool isOwner = false, Color color = Colors.black}) {
DuniterIndexer _duniterIndexer =
DuniterIndexer duniterIndexer =
Provider.of<DuniterIndexer>(context, listen: false);
_showText(String text,
[double size = 18, bool _bold = false, bool smooth = true]) {
[double size = 18, bool bold = false, bool smooth = true]) {
log.d(text);
return AnimatedFadeOutIn<String>(
data: text,
@ -144,15 +146,15 @@ class WalletOptionsProvider with ChangeNotifier {
textAlign: TextAlign.center,
style: TextStyle(
fontSize: size,
color: _bold ? color : Colors.black,
fontWeight: _bold ? FontWeight.w500 : FontWeight.w400),
color: bold ? color : Colors.black,
fontWeight: bold ? FontWeight.w500 : FontWeight.w400),
),
);
}
return Consumer<SubstrateSdk>(builder: (context, _sub, _) {
return Consumer<SubstrateSdk>(builder: (context, sub, _) {
return FutureBuilder(
future: _sub.idtyStatus(address),
future: sub.idtyStatus(address),
initialData: '',
builder: (context, snapshot) {
switch (snapshot.data.toString()) {
@ -176,7 +178,7 @@ class WalletOptionsProvider with ChangeNotifier {
{
return isOwner
? _showText('identityConfirmed'.tr())
: _duniterIndexer.getNameByAddress(
: duniterIndexer.getNameByAddress(
context,
address,
null,
@ -191,7 +193,7 @@ class WalletOptionsProvider with ChangeNotifier {
{
return isOwner
? _showText('memberValidated'.tr(), 18, true)
: _duniterIndexer.getNameByAddress(
: duniterIndexer.getNameByAddress(
context,
address,
null,
@ -215,16 +217,16 @@ class WalletOptionsProvider with ChangeNotifier {
}
Future<bool> isMember(BuildContext context, String address) async {
SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
return await _sub.idtyStatus(address) == 'Validated';
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false);
return await sub.idtyStatus(address) == 'Validated';
}
Future<String?> validateIdentity(BuildContext context) async {
TextEditingController idtyName = TextEditingController();
SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
WalletOptionsProvider _walletOptions =
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false);
WalletOptionsProvider walletOptions =
Provider.of<WalletOptionsProvider>(context, listen: false);
MyWalletsProvider _myWalletProvider =
MyWalletsProvider myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false);
return showDialog<String>(
@ -259,7 +261,7 @@ class WalletOptionsProvider with ChangeNotifier {
mainAxisAlignment: MainAxisAlignment.center,
children: [
Consumer<WalletOptionsProvider>(
builder: (context, _wOptions, _) {
builder: (context, wOptions, _) {
return TextButton(
key: const Key('infoPopup'),
child: Text(
@ -274,11 +276,11 @@ class WalletOptionsProvider with ChangeNotifier {
onPressed: () async {
if (idtyName.text.length >= 2) {
WalletData? defaultWallet =
_myWalletProvider.getDefaultWallet();
myWalletProvider.getDefaultWallet();
String? _pin;
if (_myWalletProvider.pinCode == '') {
_pin = await Navigator.push(
String? pin;
if (myWalletProvider.pinCode == '') {
pin = await Navigator.push(
context,
MaterialPageRoute(
builder: (homeContext) {
@ -287,12 +289,12 @@ class WalletOptionsProvider with ChangeNotifier {
),
);
}
if (_pin != null || _myWalletProvider.pinCode != '') {
final _wallet = _myWalletProvider
if (pin != null || myWalletProvider.pinCode != '') {
final wallet = myWalletProvider
.getWalletDataByAddress(address.text);
await _sub.setCurrentWallet(_wallet!);
_sub.confirmIdentity(_walletOptions.address.text,
idtyName.text, _myWalletProvider.pinCode);
await sub.setCurrentWallet(wallet!);
sub.confirmIdentity(walletOptions.address.text,
idtyName.text, myWalletProvider.pinCode);
Navigator.pop(context);
Navigator.push(
@ -316,7 +318,7 @@ class WalletOptionsProvider with ChangeNotifier {
);
}
Future<String?> editWalletName(BuildContext context, List<int?> _wID) async {
Future<String?> editWalletName(BuildContext context, List<int?> wID) async {
TextEditingController walletName = TextEditingController();
canValidateNameBool = false;
@ -348,7 +350,7 @@ class WalletOptionsProvider with ChangeNotifier {
mainAxisAlignment: MainAxisAlignment.center,
children: [
Consumer<WalletOptionsProvider>(
builder: (context, _wOptions, _) {
builder: (context, wOptions, _) {
return TextButton(
key: const Key('infoPopup'),
child: Text(
@ -364,7 +366,7 @@ class WalletOptionsProvider with ChangeNotifier {
onPressed: () async {
if (canValidateNameBool) {
nameController.text = walletName.text;
_renameWallet(_wID, walletName.text, isCesium: false);
_renameWallet(wID, walletName.text, isCesium: false);
// notifyListeners();
Navigator.pop(context);
}
@ -399,7 +401,7 @@ class WalletOptionsProvider with ChangeNotifier {
}
bool canValidateName(BuildContext context, TextEditingController walletName) {
MyWalletsProvider _myWalletProvider =
MyWalletsProvider myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false);
bool isNameValid = walletName.text.length >= 2 &&
@ -407,7 +409,7 @@ class WalletOptionsProvider with ChangeNotifier {
walletName.text.length <= 39;
if (isNameValid) {
for (var wallet in _myWalletProvider.listWallets) {
for (var wallet in myWalletProvider.listWallets) {
if (walletName.text == wallet.name!) {
canValidateNameBool = false;
break;
@ -432,26 +434,22 @@ class WalletOptionsProvider with ChangeNotifier {
}
String? getAddress(int chest, int derivation) {
String? _address;
String? addressGet;
walletBox.toMap().forEach((key, value) {
if (value.chest == chest && value.derivation == derivation) {
_address = value.address!;
addressGet = value.address!;
return;
}
});
address.text = _address ?? '';
address.text = addressGet ?? '';
return _address;
return addressGet;
}
Widget walletNameController(BuildContext context, WalletData wallet,
[double size = 20]) {
// WidgetsBinding.instance.addPostFrameCallback((_) {
log.d('aaaaaaaaaaaaaaaaaaaaa: ${wallet.name}');
nameController.text = wallet.name!;
// _walletOptions.reloadBuild();
// });
return SizedBox(
width: 260,
@ -527,39 +525,39 @@ class WalletOptionsProvider with ChangeNotifier {
Map<String, double> balanceCache = {};
Widget balance(BuildContext context, String address, double size,
[Color _color = Colors.black,
Color _loadingColor = const Color(0xffd07316)]) {
[Color color = Colors.black,
Color loadingColor = const Color(0xffd07316)]) {
return Column(children: <Widget>[
Consumer<SubstrateSdk>(builder: (context, _sdk, _) {
Consumer<SubstrateSdk>(builder: (context, sdk, _) {
return FutureBuilder(
future: _sdk.getBalance(address),
builder: (BuildContext context, AsyncSnapshot<double> _balance) {
if (_balance.connectionState != ConnectionState.done ||
_balance.hasError) {
future: sdk.getBalance(address),
builder: (BuildContext context, AsyncSnapshot<double> balance) {
if (balance.connectionState != ConnectionState.done ||
balance.hasError) {
if (balanceCache[address] != null &&
balanceCache[address] != -1) {
return Text(
"${balanceCache[address]!.toString()} $currencyName",
style: TextStyle(
fontSize: isTall ? size : size * 0.9, color: _color));
fontSize: isTall ? size : size * 0.9, color: color));
} else {
return SizedBox(
height: 15,
width: 15,
child: CircularProgressIndicator(
color: _loadingColor,
color: loadingColor,
strokeWidth: 2,
),
);
}
}
balanceCache[address] = _balance.data!;
balanceCache[address] = balance.data!;
if (balanceCache[address] != -1) {
return Text(
"${balanceCache[address]!.toString()} $currencyName",
style: TextStyle(
fontSize: isTall ? size : size * 0.9,
color: _color,
color: color,
),
);
} else {
@ -571,24 +569,24 @@ Widget balance(BuildContext context, String address, double size,
}
Widget getCerts(BuildContext context, String address, double size,
[Color _color = Colors.black]) {
[Color color = Colors.black]) {
return Column(children: <Widget>[
Consumer<SubstrateSdk>(builder: (context, _sdk, _) {
Consumer<SubstrateSdk>(builder: (context, sdk, _) {
return FutureBuilder(
future: _sdk.getCerts(address),
builder: (BuildContext context, AsyncSnapshot<List<int>> _certs) {
future: sdk.getCerts(address),
builder: (BuildContext context, AsyncSnapshot<List<int>> certs) {
// log.d(_certs.data);
return _certs.data?[0] != 0 && _certs.data != null
return certs.data?[0] != 0 && certs.data != null
? Row(
children: [
Image.asset('assets/medal.png', height: 20),
const SizedBox(width: 1),
Text(_certs.data?[0].toString() ?? '0',
Text(certs.data?[0].toString() ?? '0',
style: const TextStyle(fontSize: 20)),
const SizedBox(width: 5),
Text(
"(${_certs.data?[1].toString() ?? '0'})",
"(${certs.data?[1].toString() ?? '0'})",
style: const TextStyle(fontSize: 14),
)
],

View File

@ -100,8 +100,8 @@ class WalletsProfilesProvider with ChangeNotifier {
notifyListeners();
}
String generateIdenticon(String _pubkey) {
return Jdenticon.toSvg(_pubkey);
String generateIdenticon(String pubkey) {
return Jdenticon.toSvg(pubkey);
}
// Future<num> getBalance(String _pubkey) async {
@ -119,7 +119,7 @@ class WalletsProfilesProvider with ChangeNotifier {
// return balance;
// }
Future<num?> getBalance(String? _pubkey) async {
Future<num?> getBalance(String? pubkey) async {
while (_balance == null) {
await Future.delayed(const Duration(milliseconds: 50));
}
@ -128,19 +128,19 @@ class WalletsProfilesProvider with ChangeNotifier {
}
Widget headerProfileView(
BuildContext context, String _address, String? username) {
const double _avatarSize = 140;
BuildContext context, String address, String? username) {
const double avatarSize = 140;
WalletOptionsProvider _walletOptions =
WalletOptionsProvider walletOptions =
Provider.of<WalletOptionsProvider>(context, listen: false);
CesiumPlusProvider _cesiumPlusProvider =
CesiumPlusProvider cesiumPlusProvider =
Provider.of<CesiumPlusProvider>(context, listen: false);
// SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
bool isAccountExist = balanceCache[_address] != 0;
bool isAccountExist = balanceCache[address] != 0;
return Stack(children: <Widget>[
Consumer<SubstrateSdk>(builder: (context, _sub, _) {
Consumer<SubstrateSdk>(builder: (context, sub, _) {
return Container(
height: 180,
decoration: BoxDecoration(
@ -168,11 +168,11 @@ class WalletsProfilesProvider with ChangeNotifier {
GestureDetector(
key: const Key('copyPubkey'),
onTap: () {
Clipboard.setData(ClipboardData(text: _address));
Clipboard.setData(ClipboardData(text: address));
snackCopyKey(context);
},
child: Text(
getShortPubkey(_address),
getShortPubkey(address),
style: const TextStyle(
fontSize: 30,
fontWeight: FontWeight.w800,
@ -181,17 +181,17 @@ class WalletsProfilesProvider with ChangeNotifier {
),
]),
const SizedBox(height: 25),
balance(context, _address, 22),
balance(context, address, 22),
const SizedBox(height: 10),
_walletOptions.idtyStatus(context, _address,
walletOptions.idtyStatus(context, address,
isOwner: false, color: Colors.black),
getCerts(context, _address, 14),
getCerts(context, address, 14),
if (username == null &&
g1WalletsBox.get(_address)?.username != null)
g1WalletsBox.get(address)?.username != null)
SizedBox(
width: 230,
child: Text(
g1WalletsBox.get(_address)?.username ?? '',
g1WalletsBox.get(address)?.username ?? '',
style: const TextStyle(
fontSize: 27,
color: Color(0xff814C00),
@ -214,7 +214,7 @@ class WalletsProfilesProvider with ChangeNotifier {
const Spacer(),
Column(children: <Widget>[
ClipOval(
child: _cesiumPlusProvider.defaultAvatar(_avatarSize),
child: cesiumPlusProvider.defaultAvatar(avatarSize),
),
const SizedBox(height: 25),
]),

View File

@ -30,9 +30,9 @@ class ActivityScreen extends StatelessWidget with ChangeNotifier {
@override
Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
WalletsProfilesProvider _walletProfile =
WalletsProfilesProvider walletProfile =
Provider.of<WalletsProfilesProvider>(context, listen: false);
HomeProvider _homeProvider =
HomeProvider homeProvider =
Provider.of<HomeProvider>(context, listen: false);
return Scaffold(
@ -45,15 +45,15 @@ class ActivityScreen extends StatelessWidget with ChangeNotifier {
child: Text('accountActivity'.tr()),
),
),
bottomNavigationBar: _homeProvider.bottomAppBar(context),
bottomNavigationBar: homeProvider.bottomAppBar(context),
body: Column(children: <Widget>[
_walletProfile.headerProfileView(context, address!, username),
walletProfile.headerProfileView(context, address!, username),
historyQuery(context),
]));
}
Widget historyQuery(context) {
DuniterIndexer _duniterIndexer =
DuniterIndexer duniterIndexer =
Provider.of<DuniterIndexer>(context, listen: false);
if (indexerEndpoint == '') {
@ -67,19 +67,19 @@ class ActivityScreen extends StatelessWidget with ChangeNotifier {
]);
}
final _httpLink = HttpLink(
final httpLink = HttpLink(
'$indexerEndpoint/v1beta1/relay',
);
final _client = ValueNotifier(
final client = ValueNotifier(
GraphQLClient(
cache: GraphQLCache(),
link: _httpLink,
link: httpLink,
),
);
return GraphQLProvider(
client: _client,
client: client,
child: Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
@ -102,7 +102,7 @@ class ActivityScreen extends StatelessWidget with ChangeNotifier {
}
if (result.hasException) {
log.e('Error Indexer: ' + result.exception.toString());
log.e('Error Indexer: ${result.exception}');
return Column(children: <Widget>[
const SizedBox(height: 50),
Text(
@ -124,7 +124,7 @@ class ActivityScreen extends StatelessWidget with ChangeNotifier {
if (result.isNotLoading) {
// log.d(result.data);
opts = _duniterIndexer.checkQueryResult(result, opts, address!);
opts = duniterIndexer.checkQueryResult(result, opts, address!);
}
// Build history list
@ -142,7 +142,7 @@ class ActivityScreen extends StatelessWidget with ChangeNotifier {
if (t is ScrollEndNotification &&
scrollController.position.pixels >=
scrollController.position.maxScrollExtent * 0.7 &&
_duniterIndexer.pageInfo!['hasNextPage'] &&
duniterIndexer.pageInfo!['hasNextPage'] &&
result.isNotLoading) {
fetchMore!(opts!);
}
@ -156,10 +156,10 @@ class ActivityScreen extends StatelessWidget with ChangeNotifier {
}
Widget historyView(context, result) {
DuniterIndexer _duniterIndexer =
DuniterIndexer duniterIndexer =
Provider.of<DuniterIndexer>(context, listen: false);
return _duniterIndexer.transBC == null
return duniterIndexer.transBC == null
? Column(children: <Widget>[
const SizedBox(height: 50),
Text(
@ -168,16 +168,15 @@ class ActivityScreen extends StatelessWidget with ChangeNotifier {
)
])
: Column(children: <Widget>[
getTransactionTile(context, _duniterIndexer),
if (result.isLoading &&
_duniterIndexer.pageInfo!['hasPreviousPage'])
getTransactionTile(context, duniterIndexer),
if (result.isLoading && duniterIndexer.pageInfo!['hasPreviousPage'])
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: const <Widget>[
CircularProgressIndicator(),
],
),
if (!_duniterIndexer.pageInfo!['hasNextPage'])
if (!duniterIndexer.pageInfo!['hasNextPage'])
Column(
children: const <Widget>[
SizedBox(height: 15),
@ -191,13 +190,13 @@ class ActivityScreen extends StatelessWidget with ChangeNotifier {
}
Widget getTransactionTile(
BuildContext context, DuniterIndexer _duniterIndexer) {
CesiumPlusProvider _cesiumPlusProvider =
BuildContext context, DuniterIndexer duniterIndexer) {
CesiumPlusProvider cesiumPlusProvider =
Provider.of<CesiumPlusProvider>(context, listen: false);
int keyID = 0;
String? dateDelimiter;
String? lastDateDelimiter;
const double _avatarSize = 200;
const double avatarSize = 200;
bool isTody = false;
bool isYesterday = false;
@ -219,7 +218,7 @@ class ActivityScreen extends StatelessWidget with ChangeNotifier {
};
return Column(
children: _duniterIndexer.transBC!.map((repository) {
children: duniterIndexer.transBC!.map((repository) {
// log.d('bbbbbbbbbbbbbbbbbbbbbb: ' + repository.toString());
DateTime now = DateTime.now();
@ -291,7 +290,7 @@ class ActivityScreen extends StatelessWidget with ChangeNotifier {
contentPadding: const EdgeInsets.only(
left: 20, right: 30, top: 15, bottom: 15),
leading: ClipOval(
child: _cesiumPlusProvider.defaultAvatar(_avatarSize),
child: cesiumPlusProvider.defaultAvatar(avatarSize),
),
title: Padding(
padding: const EdgeInsets.only(bottom: 5),
@ -334,7 +333,7 @@ class ActivityScreen extends StatelessWidget with ChangeNotifier {
dense: false,
isThreeLine: false,
onTap: () {
_duniterIndexer.nPage = 1;
duniterIndexer.nPage = 1;
// _cesiumPlusProvider.avatarCancelToken.cancel('cancelled');
Navigator.push(
context,

View File

@ -29,10 +29,10 @@ class AnimatedFadeOutIn<T> extends StatefulWidget {
}) : super(key: key);
@override
_AnimatedFadeOutInState<T> createState() => _AnimatedFadeOutInState<T>();
AnimatedFadeOutInState<T> createState() => AnimatedFadeOutInState<T>();
}
class _AnimatedFadeOutInState<T> extends State<AnimatedFadeOutIn<T>>
class AnimatedFadeOutInState<T> extends State<AnimatedFadeOutIn<T>>
with SingleTickerProviderStateMixin {
late AnimationController controller;
late Animation<double> animation;

View File

@ -131,6 +131,17 @@ class CommonElements {
EdgeInsets padding,
) {
return Container(
decoration: const BoxDecoration(
shape: BoxShape.circle,
color: Colors.white,
boxShadow: [
BoxShadow(
color: Colors.grey,
blurRadius: 4.0,
offset: Offset(2.0, 2.5),
spreadRadius: 0.5)
],
),
child: ClipOval(
child: Material(
color: const Color(0xffFFD58D), // button color
@ -144,26 +155,15 @@ class CommonElements {
}),
),
),
decoration: const BoxDecoration(
shape: BoxShape.circle,
color: Colors.white,
boxShadow: [
BoxShadow(
color: Colors.grey,
blurRadius: 4.0,
offset: Offset(2.0, 2.5),
spreadRadius: 0.5)
],
),
);
}
Widget offlineInfo(BuildContext context) {
// SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
final double screenWidth = MediaQuery.of(context).size.width;
return Consumer<SubstrateSdk>(builder: (context, _sub, _) {
return Consumer<SubstrateSdk>(builder: (context, sub, _) {
return Visibility(
visible: !_sub.nodeConnected,
visible: !sub.nodeConnected,
child: Positioned(
top: 0,
child: Container(

View File

@ -1,3 +1,5 @@
// ignore_for_file: use_build_context_synchronously
import 'package:bubble/bubble.dart';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:easy_localization/easy_localization.dart';
@ -29,12 +31,12 @@ class HomeScreen extends StatelessWidget {
Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
homeContext = context;
MyWalletsProvider _myWalletProvider =
MyWalletsProvider myWalletProvider =
Provider.of<MyWalletsProvider>(context);
Provider.of<ChestProvider>(context);
SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false);
final bool isWalletsExists = _myWalletProvider.checkIfWalletExist();
final bool isWalletsExists = myWalletProvider.checkIfWalletExist();
isTall = false;
ratio = 1;
@ -50,15 +52,15 @@ class HomeScreen extends StatelessWidget {
Expanded(
child: ListView(padding: EdgeInsets.zero, children: <Widget>[
DrawerHeader(
decoration: BoxDecoration(
color: orangeC,
),
child: Column(children: const <Widget>[
SizedBox(height: 0),
Image(
image: AssetImage('assets/icon/gecko_final.png'),
height: 130),
]),
decoration: BoxDecoration(
color: orangeC,
),
),
ListTile(
key: const Key('parameters'),
@ -106,12 +108,12 @@ class HomeScreen extends StatelessWidget {
builder: (ctx) => StatefulWrapper(
onInit: () {
WidgetsBinding.instance.addPostFrameCallback((_) async {
DuniterIndexer _duniterIndexer =
DuniterIndexer duniterIndexer =
Provider.of<DuniterIndexer>(ctx, listen: false);
_duniterIndexer.getValidIndexerEndpoint();
duniterIndexer.getValidIndexerEndpoint();
if (!_sub.sdkReady && !_sub.sdkLoading) await _sub.initApi();
if (_sub.sdkReady && !_sub.nodeConnected) {
if (!sub.sdkReady && !sub.sdkLoading) await sub.initApi();
if (sub.sdkReady && !sub.nodeConnected) {
// Check if versionData non compatible, drop everything
if (walletBox.isNotEmpty &&
walletBox.getAt(0)!.version! < dataVersion) {
@ -120,19 +122,19 @@ class HomeScreen extends StatelessWidget {
await walletBox.clear();
await chestBox.clear();
await configBox.delete('defaultWallet');
await _sub.deleteAllAccounts();
_myWalletProvider.rebuildWidget();
await sub.deleteAllAccounts();
myWalletProvider.rebuildWidget();
}
var connectivityResult =
await (Connectivity().checkConnectivity());
HomeProvider _homeProvider =
HomeProvider homeProvider =
Provider.of<HomeProvider>(ctx, listen: false);
if (connectivityResult != ConnectivityResult.mobile &&
connectivityResult != ConnectivityResult.wifi) {
_homeProvider.changeMessage(
homeProvider.changeMessage(
"notConnectedToInternet".tr(), 0);
_sub.nodeConnected = false;
sub.nodeConnected = false;
}
Connectivity()
@ -140,13 +142,13 @@ class HomeScreen extends StatelessWidget {
.listen((ConnectivityResult result) async {
log.d('Network changed: $result');
if (result == ConnectivityResult.none) {
_sub.nodeConnected = false;
await _sub.sdk.api.setting.unsubscribeBestNumber();
_homeProvider.changeMessage(
sub.nodeConnected = false;
await sub.sdk.api.setting.unsubscribeBestNumber();
homeProvider.changeMessage(
"notConnectedToInternet".tr(), 0);
_sub.reload();
sub.reload();
} else {
await _sub.connectNode(ctx);
await sub.connectNode(ctx);
}
});
}
@ -182,10 +184,10 @@ class HomeScreen extends StatelessWidget {
}
Widget geckHome(context) {
MyWalletsProvider _myWalletProvider = Provider.of<MyWalletsProvider>(context);
MyWalletsProvider myWalletProvider = Provider.of<MyWalletsProvider>(context);
Provider.of<ChestProvider>(context);
WalletsProfilesProvider _historyProvider =
WalletsProfilesProvider historyProvider =
Provider.of<WalletsProfilesProvider>(context);
final double statusBarHeight = MediaQuery.of(context).padding.top;
return Container(
@ -241,9 +243,9 @@ Widget geckHome(context) {
),
],
),
child: Consumer<HomeProvider>(builder: (context, _homeP, _) {
child: Consumer<HomeProvider>(builder: (context, homeP, _) {
return AnimatedFadeOutIn<String>(
data: _homeP.homeMessage,
data: homeP.homeMessage,
duration: const Duration(milliseconds: 100),
builder: (value) => Text(value),
);
@ -270,6 +272,16 @@ Widget geckHome(context) {
Row(mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[
Column(children: <Widget>[
Container(
decoration: const BoxDecoration(
shape: BoxShape.circle,
color: Colors.black,
boxShadow: [
BoxShadow(
blurRadius: 2,
offset: Offset(1, 1.5),
spreadRadius: 0.5)
],
),
child: ClipOval(
child: Material(
color: orangeC, // button color
@ -291,16 +303,6 @@ Widget geckHome(context) {
}),
),
),
decoration: const BoxDecoration(
shape: BoxShape.circle,
color: Colors.black,
boxShadow: [
BoxShadow(
blurRadius: 2,
offset: Offset(1, 1.5),
spreadRadius: 0.5)
],
),
),
const SizedBox(height: 12),
Text(
@ -315,6 +317,16 @@ Widget geckHome(context) {
const SizedBox(width: 120),
Column(children: <Widget>[
Container(
decoration: const BoxDecoration(
shape: BoxShape.circle,
color: Colors.black,
boxShadow: [
BoxShadow(
blurRadius: 2,
offset: Offset(1, 1.5),
spreadRadius: 0.5)
],
),
child: ClipOval(
key: const Key('manageWallets'),
child: Material(
@ -328,10 +340,10 @@ Widget geckHome(context) {
height: 68 * ratio)),
onTap: () async {
WalletData? defaultWallet =
_myWalletProvider.getDefaultWallet();
String? _pin;
if (_myWalletProvider.pinCode == '') {
_pin = await Navigator.push(
myWalletProvider.getDefaultWallet();
String? pin;
if (myWalletProvider.pinCode == '') {
pin = await Navigator.push(
context,
MaterialPageRoute(
builder: (homeContext) {
@ -341,8 +353,7 @@ Widget geckHome(context) {
),
);
}
if (_pin != null ||
_myWalletProvider.pinCode != '') {
if (pin != null || myWalletProvider.pinCode != '') {
Navigator.push(
context,
MaterialPageRoute(builder: (context) {
@ -357,16 +368,6 @@ Widget geckHome(context) {
}),
),
),
decoration: const BoxDecoration(
shape: BoxShape.circle,
color: Colors.black,
boxShadow: [
BoxShadow(
blurRadius: 2,
offset: Offset(1, 1.5),
spreadRadius: 0.5)
],
),
),
const SizedBox(height: 12),
Text(
@ -386,6 +387,16 @@ Widget geckHome(context) {
children: <Widget>[
Column(children: <Widget>[
Container(
decoration: const BoxDecoration(
shape: BoxShape.circle,
color: Colors.black,
boxShadow: [
BoxShadow(
blurRadius: 2,
offset: Offset(1, 1.5),
spreadRadius: 0.5)
],
),
child: ClipOval(
child: Material(
color: orangeC, // button color
@ -397,20 +408,10 @@ Widget geckHome(context) {
'assets/home/qrcode.png'),
height: 68 * ratio)),
onTap: () async {
await _historyProvider.scan(context);
await historyProvider.scan(context);
}),
),
),
decoration: const BoxDecoration(
shape: BoxShape.circle,
color: Colors.black,
boxShadow: [
BoxShadow(
blurRadius: 2,
offset: Offset(1, 1.5),
spreadRadius: 0.5)
],
),
),
const SizedBox(height: 12),
Text(

View File

@ -1,3 +1,5 @@
// ignore_for_file: use_build_context_synchronously
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:durt/durt.dart';
@ -28,8 +30,8 @@ class ChangePinScreen extends StatelessWidget with ChangeNotifier {
@override
Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
MyWalletsProvider _myWalletProvider =
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false);
MyWalletsProvider myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false);
return WillPopScope(
@ -106,11 +108,11 @@ class ChangePinScreen extends StatelessWidget with ChangeNotifier {
),
onPressed: () async {
WalletData defaultWallet =
_myWalletProvider.getDefaultWallet();
myWalletProvider.getDefaultWallet();
String? _pin;
if (_myWalletProvider.pinCode == '') {
_pin = await Navigator.push(
String? pin;
if (myWalletProvider.pinCode == '') {
pin = await Navigator.push(
context,
MaterialPageRoute(
builder: (homeContext) {
@ -119,8 +121,8 @@ class ChangePinScreen extends StatelessWidget with ChangeNotifier {
),
);
}
if (_pin != null || _myWalletProvider.pinCode != '') {
await _sub.changePassword(context, defaultWallet.address!,
if (pin != null || myWalletProvider.pinCode != '') {
await sub.changePassword(context, defaultWallet.address!,
walletProvider.pinCode, newPin.text);
walletProvider.pinCode = newPin.text;
newPin.text = '';

View File

@ -1,3 +1,5 @@
// ignore_for_file: use_build_context_synchronously
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:gecko/globals.dart';
@ -23,9 +25,9 @@ class ChestOptions extends StatelessWidget {
@override
Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
ChestProvider _chestProvider =
ChestProvider chestProvider =
Provider.of<ChestProvider>(context, listen: false);
HomeProvider _homeProvider =
HomeProvider homeProvider =
Provider.of<HomeProvider>(context, listen: false);
ChestData currentChest = chestBox.get(configBox.get('currentChest'))!;
@ -49,7 +51,7 @@ class ChestOptions extends StatelessWidget {
height: 22,
child: Text(currentChest.name!),
)),
bottomNavigationBar: _homeProvider.bottomAppBar(context),
bottomNavigationBar: homeProvider.bottomAppBar(context),
body: Stack(children: [
Builder(
builder: (ctx) => SafeArea(
@ -58,12 +60,12 @@ class ChestOptions extends StatelessWidget {
InkWell(
key: const Key('showSeed'),
onTap: () async {
MyWalletsProvider _myWalletProvider =
MyWalletsProvider myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false);
WalletData? defaultWallet =
_myWalletProvider.getDefaultWallet();
String? _pin;
_pin = await Navigator.push(
myWalletProvider.getDefaultWallet();
String? pin;
pin = await Navigator.push(
context,
MaterialPageRoute(
builder: (homeContext) {
@ -72,7 +74,7 @@ class ChestOptions extends StatelessWidget {
),
);
if (_pin != null) {
if (pin != null) {
Navigator.push(
context,
MaterialPageRoute(builder: (context) {
@ -104,10 +106,10 @@ class ChestOptions extends StatelessWidget {
),
),
SizedBox(height: 10 * ratio),
Consumer<SubstrateSdk>(builder: (context, _sub, _) {
Consumer<SubstrateSdk>(builder: (context, sub, _) {
return InkWell(
key: const Key('changePin'),
onTap: _sub.nodeConnected
onTap: sub.nodeConnected
? () async {
// await _chestProvider.changePin(context, cesiumWallet);
String? pinResult = await Navigator.push(
@ -140,7 +142,7 @@ class ChestOptions extends StatelessWidget {
'changePassword'.tr(),
style: TextStyle(
fontSize: 20,
color: _sub.nodeConnected
color: sub.nodeConnected
? Colors.black
: Colors.grey[500]),
),
@ -148,10 +150,10 @@ class ChestOptions extends StatelessWidget {
);
}),
SizedBox(height: 10 * ratio),
Consumer<SubstrateSdk>(builder: (context, _sub, _) {
Consumer<SubstrateSdk>(builder: (context, sub, _) {
return InkWell(
key: const Key('createRootDerivation'),
onTap: _sub.nodeConnected
onTap: sub.nodeConnected
? () async {
await Navigator.push(
context,
@ -176,7 +178,7 @@ class ChestOptions extends StatelessWidget {
'createDerivation'.tr(),
style: TextStyle(
fontSize: 20,
color: _sub.nodeConnected
color: sub.nodeConnected
? Colors.black
: Colors.grey[500]),
),
@ -188,7 +190,7 @@ class ChestOptions extends StatelessWidget {
InkWell(
key: const Key('deleteChest'),
onTap: () async {
await _chestProvider.deleteChest(context, currentChest);
await chestProvider.deleteChest(context, currentChest);
},
child: SizedBox(
height: 50,

View File

@ -1,3 +1,5 @@
// ignore_for_file: use_build_context_synchronously
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/services.dart';
import 'package:gecko/globals.dart';
@ -29,7 +31,7 @@ class _ChooseChestState extends State<ChooseChest> {
@override
Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
MyWalletsProvider _myWalletProvider =
MyWalletsProvider myWalletProvider =
Provider.of<MyWalletsProvider>(context);
return Scaffold(
@ -114,10 +116,10 @@ class _ChooseChestState extends State<ChooseChest> {
),
onPressed: () async {
await configBox.put('currentChest', currentChest);
_myWalletProvider.pinCode = '';
myWalletProvider.pinCode = '';
WalletData? defaultWallet =
_myWalletProvider.getDefaultWallet();
_myWalletProvider.rebuildWidget();
myWalletProvider.getDefaultWallet();
myWalletProvider.rebuildWidget();
await Navigator.push(
context,
@ -131,7 +133,7 @@ class _ChooseChestState extends State<ChooseChest> {
context,
ModalRoute.withName('/'),
);
if (_myWalletProvider.pinCode != '') {
if (myWalletProvider.pinCode != '') {
Navigator.push(
context,
MaterialPageRoute(builder: (context) {

View File

@ -1,3 +1,5 @@
// ignore_for_file: use_build_context_synchronously
import 'dart:io';
import 'package:easy_localization/easy_localization.dart';
@ -22,7 +24,7 @@ class ChooseWalletScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false);
final int chest = configBox.get('currentChest');
return Scaffold(
@ -50,10 +52,10 @@ class ChooseWalletScreen extends StatelessWidget {
onPrimary: Colors.white, // foreground
),
onPressed: () async {
await _sub.setCurrentWallet(selectedWallet!);
await sub.setCurrentWallet(selectedWallet!);
// _walletViewProvider.reload();
_sub.reload();
sub.reload();
// Navigator.pop(context);
Navigator.pop(context);
@ -73,21 +75,21 @@ class ChooseWalletScreen extends StatelessWidget {
}
Widget myWalletsTiles(BuildContext context, int? currentChest) {
MyWalletsProvider _myWalletProvider =
MyWalletsProvider myWalletProvider =
Provider.of<MyWalletsProvider>(context);
// SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
final bool isWalletsExists = _myWalletProvider.checkIfWalletExist();
WalletData? defaultWallet = _myWalletProvider.getDefaultWallet();
final bool isWalletsExists = myWalletProvider.checkIfWalletExist();
WalletData? defaultWallet = myWalletProvider.getDefaultWallet();
selectedWallet ??= defaultWallet;
_myWalletProvider.readAllWallets(currentChest);
myWalletProvider.readAllWallets(currentChest);
if (!isWalletsExists) {
return const Text('');
}
if (_myWalletProvider.listWallets.isEmpty) {
if (myWalletProvider.listWallets.isEmpty) {
return Column(children: const <Widget>[
Center(
child: Text(
@ -97,7 +99,7 @@ class ChooseWalletScreen extends StatelessWidget {
]);
}
List _listWallets = _myWalletProvider.listWallets;
List listWallets = myWalletProvider.listWallets;
final double screenWidth = MediaQuery.of(context).size.width;
int nTule = 2;
@ -116,13 +118,13 @@ class ChooseWalletScreen extends StatelessWidget {
crossAxisSpacing: 0,
mainAxisSpacing: 0,
children: <Widget>[
for (WalletData _repository in _listWallets as Iterable<WalletData>)
for (WalletData repository in listWallets as Iterable<WalletData>)
Padding(
padding: const EdgeInsets.all(16),
child: GestureDetector(
onTap: () {
selectedWallet = _repository;
_myWalletProvider.rebuildWidget();
selectedWallet = repository;
myWalletProvider.rebuildWidget();
},
child: ClipOvalShadow(
shadow: const Shadow(
@ -147,9 +149,9 @@ class ChooseWalletScreen extends StatelessWidget {
const Color(0xFFE7E7A6),
],
)),
child: _repository.imageCustomPath == null
child: repository.imageCustomPath == null
? Image.asset(
'assets/avatars/${_repository.imageDefaultPath}',
'assets/avatars/${repository.imageDefaultPath}',
alignment: Alignment.bottomCenter,
scale: 0.5,
)
@ -162,14 +164,14 @@ class ChooseWalletScreen extends StatelessWidget {
image: DecorationImage(
fit: BoxFit.contain,
image: FileImage(
File(_repository.imageCustomPath!),
File(repository.imageCustomPath!),
),
),
),
),
)),
balanceBuilder(context, _repository.address!,
selectedWallet!.address == _repository.address!),
balanceBuilder(context, repository.address!,
selectedWallet!.address == repository.address!),
ListTile(
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(
@ -177,7 +179,7 @@ class ChooseWalletScreen extends StatelessWidget {
),
),
tileColor:
_repository.address == selectedWallet!.address
repository.address == selectedWallet!.address
? orangeC
: const Color(0xffFFD58D),
title: Center(
@ -185,11 +187,11 @@ class ChooseWalletScreen extends StatelessWidget {
padding:
const EdgeInsets.symmetric(horizontal: 5),
child: Text(
_repository.name!,
repository.name!,
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 17.0,
color: _repository.address ==
color: repository.address ==
selectedWallet!.address
? const Color(0xffF9F9F1)
: Colors.black,
@ -198,8 +200,8 @@ class ChooseWalletScreen extends StatelessWidget {
),
),
onTap: () async {
selectedWallet = _repository;
_myWalletProvider.rebuildWidget();
selectedWallet = repository;
myWalletProvider.rebuildWidget();
},
)
]),
@ -210,7 +212,7 @@ class ChooseWalletScreen extends StatelessWidget {
]);
}
Widget balanceBuilder(context, String _address, bool isDefault) {
Widget balanceBuilder(context, String address, bool isDefault) {
return Container(
width: double.infinity,
color: isDefault ? orangeC : yellowC,
@ -223,8 +225,7 @@ class ChooseWalletScreen extends StatelessWidget {
// textAlign: TextAlign.center,
// style: TextStyle(color: isDefault ? Colors.white : Colors.black),
// ),
balance(
context, _address, 15, isDefault ? Colors.white : Colors.black)
balance(context, address, 15, isDefault ? Colors.white : Colors.black)
]),
),
);

View File

@ -1,3 +1,5 @@
// ignore_for_file: use_build_context_synchronously
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/services.dart';
import 'package:gecko/globals.dart';
@ -26,7 +28,7 @@ class _CustomDerivationState extends State<CustomDerivation> {
@override
Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
MyWalletsProvider _myWalletProvider =
MyWalletsProvider myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false);
final derivationList = <String>[
@ -34,11 +36,11 @@ class _CustomDerivationState extends State<CustomDerivation> {
for (var i = 0; i < 51; i += 1) i.toString()
];
final listWallets = _myWalletProvider.readAllWallets();
final listWallets = myWalletProvider.readAllWallets();
for (WalletData _wallet in listWallets) {
derivationList.remove(_wallet.derivation.toString());
if (_wallet.derivation == -1) {
for (WalletData wallet in listWallets) {
derivationList.remove(wallet.derivation.toString());
if (wallet.derivation == -1) {
derivationList.remove('root');
}
}
@ -111,10 +113,10 @@ class _CustomDerivationState extends State<CustomDerivation> {
),
onPressed: () async {
WalletData? defaultWallet =
_myWalletProvider.getDefaultWallet();
String? _pin;
if (_myWalletProvider.pinCode == '') {
_pin = await Navigator.push(
myWalletProvider.getDefaultWallet();
String? pin;
if (myWalletProvider.pinCode == '') {
pin = await Navigator.push(
context,
MaterialPageRoute(
builder: (homeContext) {
@ -124,16 +126,16 @@ class _CustomDerivationState extends State<CustomDerivation> {
);
}
if (_pin != null || _myWalletProvider.pinCode != '') {
String _newDerivationName = 'wallet'.tr() +
' ${_myWalletProvider.listWallets.last.number! + 2}';
if (pin != null || myWalletProvider.pinCode != '') {
String newDerivationName =
'${'wallet'.tr()} ${myWalletProvider.listWallets.last.number! + 2}';
if (dropdownValue == 'root') {
await _myWalletProvider.generateRootWallet(
await myWalletProvider.generateRootWallet(
context, 'Portefeuille racine');
} else {
await _myWalletProvider.generateNewDerivation(
await myWalletProvider.generateNewDerivation(
context,
_newDerivationName,
newDerivationName,
int.parse(dropdownValue!),
);
}

View File

@ -21,7 +21,7 @@ class RestoreChest extends StatelessWidget {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
GenerateWalletsProvider genW =
Provider.of<GenerateWalletsProvider>(context, listen: false);
SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false);
genW.actualWallet = null;
if (genW.isSentenceComplete(context)) {
@ -96,7 +96,7 @@ class RestoreChest extends StatelessWidget {
onPrimary: Colors.white, // foreground
),
onPressed: () async {
if (await _sub.isMnemonicValid(genW.generatedMnemonic!)) {
if (await sub.isMnemonicValid(genW.generatedMnemonic!)) {
genW.resetImportView();
await Navigator.push(
context,
@ -184,6 +184,12 @@ class RestoreChest extends StatelessWidget {
return Container(
width: 102,
height: 40 * ratio,
// ),
decoration: BoxDecoration(
border: Border.all(color: Colors.grey),
color: Colors.white,
borderRadius: BorderRadius.circular(3),
),
// child: RawKeyboardListener(
// focusNode: FocusNode(), // or FocusNode()
// onKey: (event) {
@ -210,12 +216,6 @@ class RestoreChest extends StatelessWidget {
textAlign: TextAlign.center,
style: const TextStyle(fontSize: 20),
),
// ),
decoration: BoxDecoration(
border: Border.all(color: Colors.grey),
color: Colors.white,
borderRadius: BorderRadius.circular(3),
),
);
}

View File

@ -24,13 +24,13 @@ class ShowSeed extends StatelessWidget {
@override
Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
MyWalletsProvider _myWalletProvider =
MyWalletsProvider myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false);
CommonElements common = CommonElements();
SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false);
WalletData defaultWallet = _myWalletProvider.getDefaultWallet();
WalletData defaultWallet = myWalletProvider.getDefaultWallet();
return Scaffold(
backgroundColor: backgroundColor,
@ -44,11 +44,11 @@ class ShowSeed extends StatelessWidget {
child: Column(children: <Widget>[
const Spacer(flex: 1),
FutureBuilder(
future: _sub.getSeed(
defaultWallet.address!, walletProvider.pinCode),
builder: (BuildContext context, AsyncSnapshot<String?> _seed) {
if (_seed.connectionState != ConnectionState.done ||
_seed.hasError) {
future:
sub.getSeed(defaultWallet.address!, walletProvider.pinCode),
builder: (BuildContext context, AsyncSnapshot<String?> seed) {
if (seed.connectionState != ConnectionState.done ||
seed.hasError) {
return SizedBox(
height: 15,
width: 15,
@ -57,7 +57,7 @@ class ShowSeed extends StatelessWidget {
strokeWidth: 2,
),
);
} else if (!_seed.hasData) {
} else if (!seed.hasData) {
return const Text('');
}
@ -67,7 +67,7 @@ class ShowSeed extends StatelessWidget {
Column(children: [
common.buildText('keepYourMnemonicSecret'.tr()),
SizedBox(height: 35 * ratio),
sentanceArray(context, _seed.data!.split(' ')),
sentanceArray(context, seed.data!.split(' ')),
const SizedBox(height: 20),
SizedBox(
height: 40,
@ -82,7 +82,7 @@ class ShowSeed extends StatelessWidget {
),
onPressed: () {
Clipboard.setData(
ClipboardData(text: _seed.data));
ClipboardData(text: seed.data));
snackCopyKey(context);
},
child: Row(children: <Widget>[
@ -105,7 +105,7 @@ class ShowSeed extends StatelessWidget {
Navigator.push(
context,
MaterialPageRoute(builder: (context) {
return PrintWallet(_seed.data);
return PrintWallet(seed.data);
}),
);
},
@ -152,7 +152,7 @@ class ShowSeed extends StatelessWidget {
ScaffoldMessenger.of(context).showSnackBar(snackBar);
}
Widget sentanceArray(BuildContext context, List _mnemonic) {
Widget sentanceArray(BuildContext context, List mnemonic) {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 3),
child: Container(
@ -170,24 +170,24 @@ class ShowSeed extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Row(children: <Widget>[
arrayCell(_mnemonic[0], 1),
arrayCell(_mnemonic[1], 2),
arrayCell(_mnemonic[2], 3),
arrayCell(_mnemonic[3], 4),
arrayCell(mnemonic[0], 1),
arrayCell(mnemonic[1], 2),
arrayCell(mnemonic[2], 3),
arrayCell(mnemonic[3], 4),
]),
const SizedBox(height: 15),
Row(children: <Widget>[
arrayCell(_mnemonic[4], 5),
arrayCell(_mnemonic[5], 6),
arrayCell(_mnemonic[6], 7),
arrayCell(_mnemonic[7], 8),
arrayCell(mnemonic[4], 5),
arrayCell(mnemonic[5], 6),
arrayCell(mnemonic[6], 7),
arrayCell(mnemonic[7], 8),
]),
const SizedBox(height: 15),
Row(children: <Widget>[
arrayCell(_mnemonic[8], 9),
arrayCell(_mnemonic[9], 10),
arrayCell(_mnemonic[10], 11),
arrayCell(_mnemonic[11], 12),
arrayCell(mnemonic[8], 9),
arrayCell(mnemonic[9], 10),
arrayCell(mnemonic[10], 11),
arrayCell(mnemonic[11], 12),
]),
])),
);
@ -249,26 +249,26 @@ class PrintWallet extends StatelessWidget {
);
}
Future<Uint8List> printWallet(String _seed) async {
Future<Uint8List> printWallet(String seed) async {
final ByteData fontData =
await rootBundle.load("assets/OpenSans-Regular.ttf");
final pw.Font ttf = pw.Font.ttf(fontData.buffer.asByteData());
final pdf = pw.Document();
int nbr = 1;
final _seedList = _seed.split(' ');
final seedList = seed.split(' ');
// const imageProvider = AssetImage('assets/icon/gecko_final.png');
// final geckoLogo = await flutterImageProvider(imageProvider);
pw.Widget arrayCell(String dataWord, int _nbr) {
pw.Widget arrayCell(String dataWord, int nbr) {
nbr++;
return pw.SizedBox(
width: 120,
child: pw.Column(children: <pw.Widget>[
pw.Text(
_nbr.toString(),
nbr.toString(),
style: pw.TextStyle(
fontSize: 15, color: const PdfColor(0.5, 0, 0), font: ttf),
),
@ -292,22 +292,22 @@ class PrintWallet extends StatelessWidget {
// crossAxisAlignment: pw.CrossAxisAlignment.center,
children: <pw.Widget>[
pw.Row(children: <pw.Widget>[
arrayCell(_seedList[0], nbr),
arrayCell(_seedList[1], nbr),
arrayCell(_seedList[2], nbr),
arrayCell(_seedList[3], nbr),
arrayCell(seedList[0], nbr),
arrayCell(seedList[1], nbr),
arrayCell(seedList[2], nbr),
arrayCell(seedList[3], nbr),
]),
pw.Row(children: <pw.Widget>[
arrayCell(_seedList[4], nbr),
arrayCell(_seedList[5], nbr),
arrayCell(_seedList[6], nbr),
arrayCell(_seedList[7], nbr),
arrayCell(seedList[4], nbr),
arrayCell(seedList[5], nbr),
arrayCell(seedList[6], nbr),
arrayCell(seedList[7], nbr),
]),
pw.Row(children: <pw.Widget>[
arrayCell(_seedList[8], nbr),
arrayCell(_seedList[9], nbr),
arrayCell(_seedList[10], nbr),
arrayCell(_seedList[11], nbr)
arrayCell(seedList[8], nbr),
arrayCell(seedList[9], nbr),
arrayCell(seedList[10], nbr),
arrayCell(seedList[11], nbr)
]),
pw.Expanded(
child: pw.Align(

View File

@ -1,5 +1,3 @@
// ignore_for_file: avoid_print
import 'dart:async';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/services.dart';
@ -32,14 +30,14 @@ class UnlockingWallet extends StatelessWidget {
@override
Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
WalletOptionsProvider _walletOptions =
WalletOptionsProvider walletOptions =
Provider.of<WalletOptionsProvider>(context);
// final double statusBarHeight = MediaQuery.of(context).padding.top;
currentChestNumber = configBox.get('currentChest');
currentChest = chestBox.get(currentChestNumber)!;
int _pinLenght = _walletOptions.getPinLenght(wallet!.number);
int pinLenght = walletOptions.getPinLenght(wallet!.number);
errorController = StreamController<ErrorAnimationType>();
return Scaffold(
@ -101,12 +99,12 @@ class UnlockingWallet extends StatelessWidget {
fontWeight: FontWeight.w400),
)),
SizedBox(height: 40 * ratio),
pinForm(context, _pinLenght),
pinForm(context, pinLenght),
SizedBox(height: 3 * ratio),
if (canUnlock)
InkWell(
onTap: () {
_walletOptions.changePinCacheChoice();
walletOptions.changePinCacheChoice();
},
child: Row(children: [
const SizedBox(height: 30),
@ -157,20 +155,20 @@ class UnlockingWallet extends StatelessWidget {
));
}
Widget pinForm(context, _pinLenght) {
Widget pinForm(context, pinLenght) {
// var _walletPin = '';
// ignore: close_sinks
StreamController<ErrorAnimationType> errorController =
StreamController<ErrorAnimationType>();
TextEditingController _enterPin = TextEditingController();
WalletOptionsProvider _walletOptions =
TextEditingController enterPin = TextEditingController();
WalletOptionsProvider walletOptions =
Provider.of<WalletOptionsProvider>(context);
MyWalletsProvider _myWalletProvider =
MyWalletsProvider myWalletProvider =
Provider.of<MyWalletsProvider>(context);
SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false);
FocusNode pinFocus = FocusNode();
WalletData defaultWallet = _myWalletProvider.getDefaultWallet();
WalletData defaultWallet = myWalletProvider.getDefaultWallet();
// defaultWallet.address = null;
if (defaultWallet.address == null) {
@ -195,14 +193,13 @@ class UnlockingWallet extends StatelessWidget {
color: Colors.green.shade600,
fontWeight: FontWeight.bold,
),
length: _pinLenght,
length: pinLenght,
obscureText: true,
obscuringCharacter: '*',
animationType: AnimationType.fade,
validator: (v) {
if (v!.length < _pinLenght) {
return "yourPasswordLengthIsX"
.tr(args: [_pinLenght.toString()]);
if (v!.length < pinLenght) {
return "yourPasswordLengthIsX".tr(args: [pinLenght.toString()]);
} else {
return null;
}
@ -222,7 +219,7 @@ class UnlockingWallet extends StatelessWidget {
backgroundColor: const Color(0xffF9F9F1),
enableActiveFill: false,
errorAnimationController: errorController,
controller: _enterPin,
controller: enterPin,
keyboardType: TextInputType.visiblePassword,
boxShadows: const [
BoxShadow(
@ -231,23 +228,23 @@ class UnlockingWallet extends StatelessWidget {
blurRadius: 10,
)
],
onCompleted: (_pin) async {
_myWalletProvider.pinCode = _pin.toUpperCase();
final isValid = await _sub.checkPassword(
defaultWallet.address!, _pin.toUpperCase());
onCompleted: (pin) async {
myWalletProvider.pinCode = pin.toUpperCase();
final isValid = await sub.checkPassword(
defaultWallet.address!, pin.toUpperCase());
if (!isValid) {
await Future.delayed(const Duration(milliseconds: 50));
errorController.add(ErrorAnimationType
.shake); // Triggering error shake animation
pinColor = Colors.red[600];
_myWalletProvider.pinCode = _myWalletProvider.mnemonic = '';
_walletOptions.reloadBuild();
myWalletProvider.pinCode = myWalletProvider.mnemonic = '';
walletOptions.reloadBuild();
pinFocus.requestFocus();
} else {
pinColor = Colors.green[400];
_myWalletProvider.resetPinCode();
Navigator.pop(context, _pin.toUpperCase());
myWalletProvider.resetPinCode();
Navigator.pop(context, pin.toUpperCase());
}
},
onChanged: (value) {

View File

@ -26,30 +26,30 @@ class WalletOptions extends StatelessWidget {
@override
Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
WalletOptionsProvider _walletOptions =
WalletOptionsProvider walletOptions =
Provider.of<WalletOptionsProvider>(context, listen: false);
WalletsProfilesProvider _historyProvider =
WalletsProfilesProvider historyProvider =
Provider.of<WalletsProfilesProvider>(context, listen: false);
MyWalletsProvider _myWalletProvider =
MyWalletsProvider myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false);
HomeProvider _homeProvider =
HomeProvider homeProvider =
Provider.of<HomeProvider>(context, listen: false);
DuniterIndexer _duniterIndexer =
DuniterIndexer duniterIndexer =
Provider.of<DuniterIndexer>(context, listen: false);
log.d(_walletOptions.address.text);
log.d(walletOptions.address.text);
final int _currentChest = _myWalletProvider.getCurrentChest();
final int currentChest = myWalletProvider.getCurrentChest();
// final currentWallet = _myWalletProvider.getDefaultWallet();
// log.d(_walletOptions.getAddress(_currentChest, 3));
log.d("Wallet options: $_currentChest:${wallet.derivation}");
log.d("Wallet options: $currentChest:${wallet.derivation}");
return WillPopScope(
onWillPop: () {
_walletOptions.isEditing = false;
_walletOptions.isBalanceBlur = false;
_myWalletProvider.rebuildWidget();
walletOptions.isEditing = false;
walletOptions.isBalanceBlur = false;
myWalletProvider.rebuildWidget();
Navigator.pop(context);
return Future<bool>.value(true);
},
@ -62,9 +62,9 @@ class WalletOptions extends StatelessWidget {
leading: IconButton(
icon: const Icon(Icons.arrow_back, color: Colors.black),
onPressed: () {
_walletOptions.isEditing = false;
_walletOptions.isBalanceBlur = false;
_myWalletProvider.rebuildWidget();
walletOptions.isEditing = false;
walletOptions.isBalanceBlur = false;
myWalletProvider.rebuildWidget();
Navigator.pop(context);
}),
title: SizedBox(
@ -81,20 +81,20 @@ class WalletOptions extends StatelessWidget {
context,
MaterialPageRoute(builder: (context) {
return QrCodeFullscreen(
_walletOptions.address.text,
walletOptions.address.text,
);
}),
);
},
child: QrImageWidget(
data: _walletOptions.address.text,
data: walletOptions.address.text,
version: QrVersions.auto,
size: 80,
),
),
],
),
bottomNavigationBar: _homeProvider.bottomAppBar(context),
bottomNavigationBar: homeProvider.bottomAppBar(context),
body: Stack(children: [
Builder(
builder: (ctx) => SafeArea(
@ -124,7 +124,7 @@ class WalletOptions extends StatelessWidget {
Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
_duniterIndexer.getNameByAddress(
duniterIndexer.getNameByAddress(
context,
walletProvider.address.text,
wallet,
@ -143,8 +143,8 @@ class WalletOptions extends StatelessWidget {
crossAxisAlignment:
CrossAxisAlignment.center,
children: [
_walletOptions.idtyStatus(
context, _walletOptions.address.text,
walletOptions.idtyStatus(
context, walletOptions.address.text,
isOwner: true, color: orangeC),
getCerts(context,
walletProvider.address.text, 15),
@ -184,34 +184,34 @@ class WalletOptions extends StatelessWidget {
pubkeyWidget(walletProvider, ctx),
SizedBox(height: 10 * ratio),
activityWidget(
context, _historyProvider, walletProvider),
context, historyProvider, walletProvider),
SizedBox(height: 12 * ratio),
setDefaultWalletWidget(
context,
walletProvider,
_myWalletProvider,
_walletOptions,
_currentChest),
myWalletProvider,
walletOptions,
currentChest),
SizedBox(height: 17 * ratio),
// walletProvider.isMember(context, _walletOptions.address.text)
FutureBuilder(
future: walletProvider.isMember(
context, _walletOptions.address.text),
context, walletOptions.address.text),
builder: (BuildContext context,
AsyncSnapshot<bool> _isMember) {
if (_isMember.connectionState !=
AsyncSnapshot<bool> isMember) {
if (isMember.connectionState !=
ConnectionState.done ||
_isMember.hasError) {
isMember.hasError) {
return const Text('');
}
return Column(children: [
if (!walletProvider.isDefaultWallet &&
!_isMember.data!)
!isMember.data!)
deleteWallet(context, walletProvider,
_currentChest)
currentChest)
else
const SizedBox(),
if (_isMember.data!)
if (isMember.data!)
manageMemberStatus(context)
]);
}),
@ -234,9 +234,9 @@ class WalletOptions extends StatelessWidget {
children: <Widget>[
InkWell(
onTap: () async {
final _newPath = await (walletProvider.changeAvatar());
if (_newPath != '') {
wallet.imageCustomPath = _newPath;
final newPath = await (walletProvider.changeAvatar());
if (newPath != '') {
wallet.imageCustomPath = newPath;
walletBox.put(wallet.key, wallet);
}
walletProvider.reloadBuild();
@ -339,7 +339,7 @@ class WalletOptions extends StatelessWidget {
Widget activityWidget(
BuildContext context,
WalletsProfilesProvider _historyProvider,
WalletsProfilesProvider historyProvider,
WalletOptionsProvider walletProvider) {
return InkWell(
key: const Key('displayActivity'),
@ -380,7 +380,7 @@ class WalletOptions extends StatelessWidget {
}
Widget manageMemberStatus(BuildContext context) {
WalletOptionsProvider _walletOptions =
WalletOptionsProvider walletOptions =
Provider.of<WalletOptionsProvider>(context, listen: false);
return InkWell(
key: const Key('manageStatus'),
@ -389,7 +389,7 @@ class WalletOptions extends StatelessWidget {
context,
MaterialPageRoute(builder: (context) {
return ManageMembership(
address: _walletOptions.address.text,
address: walletOptions.address.text,
);
}),
);
@ -412,18 +412,17 @@ class WalletOptions extends StatelessWidget {
Widget setDefaultWalletWidget(
BuildContext context,
WalletOptionsProvider walletProvider,
MyWalletsProvider _myWalletProvider,
WalletOptionsProvider _walletOptions,
int _currentChest) {
return Consumer<MyWalletsProvider>(
builder: (context, _myWalletProvider, _) {
WalletData defaultWallet = _myWalletProvider.getDefaultWallet();
_walletOptions.isDefaultWallet = (defaultWallet.number == wallet.id()[1]);
MyWalletsProvider myWalletProvider,
WalletOptionsProvider walletOptions,
int currentChest) {
return Consumer<MyWalletsProvider>(builder: (context, myWalletProvider, _) {
WalletData defaultWallet = myWalletProvider.getDefaultWallet();
walletOptions.isDefaultWallet = (defaultWallet.number == wallet.id()[1]);
return InkWell(
key: const Key('setDefaultWallet'),
onTap: !walletProvider.isDefaultWallet
? () async {
await setDefaultWallet(context, _currentChest);
await setDefaultWallet(context, currentChest);
}
: null,
child: SizedBox(
@ -454,50 +453,50 @@ class WalletOptions extends StatelessWidget {
});
}
Future setDefaultWallet(BuildContext context, int _currentChest) async {
SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
MyWalletsProvider _myWalletProvider =
Future setDefaultWallet(BuildContext context, int currentChest) async {
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false);
MyWalletsProvider myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false);
// WalletData defaultWallet = _myWalletProvider.getDefaultWallet()!;
// defaultWallet = wallet;
await _sub.setCurrentWallet(wallet);
_myWalletProvider.readAllWallets(_currentChest);
_myWalletProvider.rebuildWidget();
await sub.setCurrentWallet(wallet);
myWalletProvider.readAllWallets(currentChest);
myWalletProvider.rebuildWidget();
}
Widget deleteWallet(BuildContext context,
WalletOptionsProvider walletProvider, int _currentChest) {
SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
MyWalletsProvider _myWalletProvider =
WalletOptionsProvider walletProvider, int currentChest) {
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false);
MyWalletsProvider myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false);
final _defaultWallet = _myWalletProvider.getDefaultWallet();
final defaultWallet = myWalletProvider.getDefaultWallet();
final bool isDefaultWallet =
walletProvider.address.text == _defaultWallet.address;
walletProvider.address.text == defaultWallet.address;
// return Consumer<MyWalletsProvider>(
// builder: (context, _myWalletProvider, _) {
return FutureBuilder(
future: _sub.hasAccountConsumers(wallet.address!),
builder: (BuildContext context, AsyncSnapshot<bool> _hasConsumers) {
if (_hasConsumers.connectionState != ConnectionState.done ||
_hasConsumers.hasError) {
future: sub.hasAccountConsumers(wallet.address!),
builder: (BuildContext context, AsyncSnapshot<bool> hasConsumers) {
if (hasConsumers.connectionState != ConnectionState.done ||
hasConsumers.hasError) {
return const Text('');
}
final double _balance =
final double balance =
balanceCache[walletProvider.address.text] ?? -1;
final bool canDelete = !isDefaultWallet &&
!_hasConsumers.data! &&
(_balance > 2 || _balance == 0);
!hasConsumers.data! &&
(balance > 2 || balance == 0);
return InkWell(
key: const Key('deleteWallet'),
onTap: canDelete
? () async {
await walletProvider.deleteWallet(context, wallet);
WidgetsBinding.instance.addPostFrameCallback((_) {
_myWalletProvider.listWallets =
_myWalletProvider.readAllWallets(_currentChest);
_myWalletProvider.rebuildWidget();
myWalletProvider.listWallets =
myWalletProvider.readAllWallets(currentChest);
myWalletProvider.rebuildWidget();
});
}
: null,

View File

@ -26,13 +26,13 @@ class WalletsHome extends StatelessWidget {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
MyWalletsProvider myWalletProvider =
Provider.of<MyWalletsProvider>(context);
HomeProvider _homeProvider =
HomeProvider homeProvider =
Provider.of<HomeProvider>(context, listen: false);
final int? _currentChestNumber = myWalletProvider.getCurrentChest();
final ChestData _currentChest = chestBox.get(_currentChestNumber)!;
final int currentChestNumber = myWalletProvider.getCurrentChest();
final ChestData currentChest = chestBox.get(currentChestNumber)!;
myWalletProvider.listWallets =
myWalletProvider.readAllWallets(_currentChestNumber);
myWalletProvider.readAllWallets(currentChestNumber);
return WillPopScope(
onWillPop: () {
@ -57,16 +57,16 @@ class WalletsHome extends StatelessWidget {
ModalRoute.withName('/'),
);
}),
title: Text(_currentChest.name!,
title: Text(currentChest.name!,
key: const Key('myWallets'),
style: TextStyle(color: Colors.grey[850])),
backgroundColor: const Color(0xffFFD58D),
),
bottomNavigationBar: _homeProvider.bottomAppBar(context),
bottomNavigationBar: homeProvider.bottomAppBar(context),
body: SafeArea(
child: Stack(
children: [
myWalletsTiles(context, _currentChestNumber!),
myWalletsTiles(context, currentChestNumber),
CommonElements().offlineInfo(context),
],
),
@ -76,7 +76,7 @@ class WalletsHome extends StatelessWidget {
}
Widget chestOptions(
BuildContext context, MyWalletsProvider _myWalletProvider) {
BuildContext context, MyWalletsProvider myWalletProvider) {
return Column(children: [
const SizedBox(height: 50),
SizedBox(
@ -95,11 +95,11 @@ class WalletsHome extends StatelessWidget {
onPressed: () => Navigator.push(
context,
MaterialPageRoute(builder: (context) {
return ChestOptions(walletProvider: _myWalletProvider);
return ChestOptions(walletProvider: myWalletProvider);
}),
),
label: Text(
" " + "manageChest".tr(),
" ${"manageChest".tr()}",
style: const TextStyle(
fontSize: 22,
fontWeight: FontWeight.w700,
@ -133,18 +133,18 @@ class WalletsHome extends StatelessWidget {
]);
}
Widget myWalletsTiles(BuildContext context, int _currentChestNumber) {
MyWalletsProvider _myWalletProvider =
Widget myWalletsTiles(BuildContext context, int currentChestNumber) {
MyWalletsProvider myWalletProvider =
Provider.of<MyWalletsProvider>(context);
WalletOptionsProvider _walletOptions =
WalletOptionsProvider walletOptions =
Provider.of<WalletOptionsProvider>(context, listen: false);
final bool isWalletsExists = _myWalletProvider.checkIfWalletExist();
final bool isWalletsExists = myWalletProvider.checkIfWalletExist();
if (!isWalletsExists) {
return const Text('');
}
if (_myWalletProvider.listWallets.isEmpty) {
if (myWalletProvider.listWallets.isEmpty) {
return Expanded(
child: Column(children: const <Widget>[
Center(
@ -155,8 +155,8 @@ class WalletsHome extends StatelessWidget {
]));
}
List _listWallets = _myWalletProvider.listWallets;
WalletData? defaultWallet = _myWalletProvider.getDefaultWallet();
List listWallets = myWalletProvider.listWallets;
WalletData? defaultWallet = myWalletProvider.getDefaultWallet();
final double screenWidth = MediaQuery.of(context).size.width;
int nTule = 2;
@ -176,18 +176,18 @@ class WalletsHome extends StatelessWidget {
crossAxisSpacing: 0,
mainAxisSpacing: 0,
children: <Widget>[
for (WalletData _repository in _listWallets as Iterable<WalletData>)
for (WalletData repository in listWallets as Iterable<WalletData>)
Padding(
padding: const EdgeInsets.all(16),
child: GestureDetector(
onTap: () {
_walletOptions.getAddress(
_currentChestNumber, _repository.derivation!);
walletOptions.getAddress(
currentChestNumber, repository.derivation!);
Navigator.push(
context,
SmoothTransition(
page: WalletOptions(
wallet: _repository,
wallet: repository,
),
),
);
@ -218,10 +218,10 @@ class WalletsHome extends StatelessWidget {
child:
// SvgPicture.asset('assets/chopp-gecko2.png',
// semanticsLabel: 'Gecko', height: 48),
_repository.imageCustomPath == null ||
_repository.imageCustomPath == ''
repository.imageCustomPath == null ||
repository.imageCustomPath == ''
? Image.asset(
'assets/avatars/${_repository.imageDefaultPath}',
'assets/avatars/${repository.imageDefaultPath}',
alignment: Alignment.bottomCenter,
scale: 0.5,
)
@ -232,25 +232,24 @@ 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
Consumer<SubstrateSdk>(builder: (context, sub, _) {
return sub.nodeConnected
? addNewDerivation(context)
: const Text('');
}),
@ -264,11 +263,11 @@ class WalletsHome extends StatelessWidget {
// ))
]),
// SliverToBoxAdapter(child: Spacer()),
SliverToBoxAdapter(child: chestOptions(context, _myWalletProvider)),
SliverToBoxAdapter(child: chestOptions(context, myWalletProvider)),
]);
}
Widget balanceBuilder(context, String _address, bool isDefault) {
Widget balanceBuilder(context, String address, bool isDefault) {
return Container(
width: double.infinity,
color: isDefault ? orangeC : yellowC,
@ -276,24 +275,24 @@ class WalletsHome extends StatelessWidget {
padding: const EdgeInsets.only(left: 5, right: 5, top: 38),
child: balance(
context,
_address,
address,
15,
isDefault ? Colors.white : Colors.black,
isDefault ? yellowC : orangeC)),
);
}
Widget nameBuilder(BuildContext context, WalletData _repository,
WalletData defaultWallet, int _currentChestNumber) {
WalletOptionsProvider _walletOptions =
Widget nameBuilder(BuildContext context, WalletData repository,
WalletData defaultWallet, int currentChestNumber) {
WalletOptionsProvider walletOptions =
Provider.of<WalletOptionsProvider>(context, listen: false);
DuniterIndexer _duniterIndexer =
DuniterIndexer duniterIndexer =
Provider.of<DuniterIndexer>(context, listen: false);
return ListTile(
shape: const RoundedRectangleBorder(
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
: const Color(0xffFFD58D),
// leading: Text('IMAGE'),
@ -303,13 +302,13 @@ class WalletsHome extends StatelessWidget {
title: Center(
child: Padding(
padding: const EdgeInsets.only(left: 5, right: 5, bottom: 35, top: 5),
child: _duniterIndexer.getNameByAddress(
child: duniterIndexer.getNameByAddress(
context,
_repository.address!,
_repository,
repository.address!,
repository,
20,
true,
_repository.id()[1] == defaultWallet.id()[1]
repository.id()[1] == defaultWallet.id()[1]
? const Color(0xffF9F9F1)
: Colors.black),
),
@ -321,12 +320,12 @@ class WalletsHome extends StatelessWidget {
// _repository,
// _myWalletProvider.pinCode,
// pinLength);
_walletOptions.getAddress(_currentChestNumber, _repository.derivation!);
walletOptions.getAddress(currentChestNumber, repository.derivation!);
Navigator.push(
context,
SmoothTransition(
page: WalletOptions(
wallet: _repository,
wallet: repository,
),
),
);
@ -335,11 +334,11 @@ class WalletsHome extends StatelessWidget {
}
Widget addNewDerivation(context) {
MyWalletsProvider _myWalletProvider =
MyWalletsProvider myWalletProvider =
Provider.of<MyWalletsProvider>(context);
String _newDerivationName =
'wallet'.tr() + ' ${_myWalletProvider.listWallets.last.number! + 2}';
String newDerivationName =
'${'wallet'.tr()} ${myWalletProvider.listWallets.last.number! + 2}';
return Padding(
padding: const EdgeInsets.all(16),
child: ClipRRect(
@ -349,12 +348,12 @@ class WalletsHome extends StatelessWidget {
child: InkWell(
key: const Key('addDerivation'),
onTap: () async {
if (!_myWalletProvider.isNewDerivationLoading) {
if (!myWalletProvider.isNewDerivationLoading) {
WalletData? defaultWallet =
_myWalletProvider.getDefaultWallet();
String? _pin;
if (_myWalletProvider.pinCode == '') {
_pin = await Navigator.push(
myWalletProvider.getDefaultWallet();
String? pin;
if (myWalletProvider.pinCode == '') {
pin = await Navigator.push(
context,
MaterialPageRoute(
builder: (homeContext) {
@ -363,9 +362,9 @@ class WalletsHome extends StatelessWidget {
),
);
}
if (_pin != null || _myWalletProvider.pinCode != '') {
await _myWalletProvider.generateNewDerivation(
context, _newDerivationName);
if (pin != null || myWalletProvider.pinCode != '') {
await myWalletProvider.generateNewDerivation(
context, newDerivationName);
}
}
},
@ -374,7 +373,7 @@ class WalletsHome extends StatelessWidget {
height: double.infinity,
decoration: BoxDecoration(color: floattingYellow),
child: Center(
child: _myWalletProvider.isNewDerivationLoading
child: myWalletProvider.isNewDerivationLoading
? SizedBox(
height: 60,
width: 60,
@ -435,7 +434,7 @@ class ClipOvalShadow extends StatelessWidget {
clipper: clipper,
shadow: shadow,
),
child: ClipRect(child: child, clipper: clipper),
child: ClipRect(clipper: clipper, child: child),
);
}
}

View File

@ -28,12 +28,12 @@ class OnboardingStepTen extends StatelessWidget {
@override
Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
GenerateWalletsProvider _generateWalletProvider =
GenerateWalletsProvider generateWalletProvider =
Provider.of<GenerateWalletsProvider>(context);
WalletOptionsProvider _walletOptions =
WalletOptionsProvider walletOptions =
Provider.of<WalletOptionsProvider>(context);
CommonElements common = CommonElements();
final int _pinLenght = _generateWalletProvider.pin.text.length;
final int pinLenght = generateWalletProvider.pin.text.length;
return Scaffold(
backgroundColor: backgroundColor,
@ -56,7 +56,7 @@ class OnboardingStepTen extends StatelessWidget {
common.buildText("geckoWillCheckPassword".tr()),
SizedBox(height: isTall ? 80 : 20),
Visibility(
visible: _generateWalletProvider.scanedWalletNumber != -1,
visible: generateWalletProvider.scanedWalletNumber != -1,
child: Padding(
padding: const EdgeInsets.only(bottom: 15),
child: SizedBox(
@ -69,9 +69,9 @@ class OnboardingStepTen extends StatelessWidget {
),
),
),
Consumer<SubstrateSdk>(builder: (context, _sub, _) {
return _sub.nodeConnected
? pinForm(context, _walletOptions, _pinLenght, 1, 2)
Consumer<SubstrateSdk>(builder: (context, sub, _) {
return sub.nodeConnected
? pinForm(context, walletOptions, pinLenght, 1, 2)
: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: const [
@ -86,11 +86,11 @@ class OnboardingStepTen extends StatelessWidget {
),
]);
}),
Consumer<SubstrateSdk>(builder: (context, _sub, _) {
return _sub.nodeConnected
Consumer<SubstrateSdk>(builder: (context, sub, _) {
return sub.nodeConnected
? InkWell(
onTap: () {
_walletOptions.changePinCacheChoice();
walletOptions.changePinCacheChoice();
},
child: Row(children: [
const SizedBox(height: 30),
@ -116,20 +116,20 @@ class OnboardingStepTen extends StatelessWidget {
));
}
Widget pinForm(context, WalletOptionsProvider _walletOptions, _pinLenght,
int _walletNbr, int _derivation) {
Widget pinForm(context, WalletOptionsProvider walletOptions, pinLenght,
int walletNbr, int derivation) {
// var _walletPin = '';
// ignore: close_sinks
StreamController<ErrorAnimationType> errorController =
StreamController<ErrorAnimationType>();
TextEditingController _enterPin = TextEditingController();
MyWalletsProvider _myWalletProvider =
TextEditingController enterPin = TextEditingController();
MyWalletsProvider myWalletProvider =
Provider.of<MyWalletsProvider>(context);
GenerateWalletsProvider _generateWalletProvider =
GenerateWalletsProvider generateWalletProvider =
Provider.of<GenerateWalletsProvider>(context);
SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false);
final int? _currentChest = _myWalletProvider.getCurrentChest();
final int currentChest = myWalletProvider.getCurrentChest();
return Form(
key: formKey,
@ -143,14 +143,13 @@ class OnboardingStepTen extends StatelessWidget {
color: Colors.green.shade600,
fontWeight: FontWeight.bold,
),
length: _pinLenght,
length: pinLenght,
obscureText: true,
obscuringCharacter: '*',
animationType: AnimationType.fade,
validator: (v) {
if (v!.length < _pinLenght) {
return "yourPasswordLengthIsX"
.tr(args: [_pinLenght.toString()]);
if (v!.length < pinLenght) {
return "yourPasswordLengthIsX".tr(args: [pinLenght.toString()]);
} else {
return null;
}
@ -170,7 +169,7 @@ class OnboardingStepTen extends StatelessWidget {
backgroundColor: const Color(0xffF9F9F1),
enableActiveFill: false,
errorAnimationController: errorController,
controller: _enterPin,
controller: enterPin,
keyboardType: TextInputType.visiblePassword,
boxShadows: const [
BoxShadow(
@ -179,25 +178,25 @@ class OnboardingStepTen extends StatelessWidget {
blurRadius: 10,
)
],
onCompleted: (_pin) async {
_myWalletProvider.pinCode = _pin.toUpperCase();
_myWalletProvider.pinLenght = _pinLenght;
log.d(_pin + ' || ' + _generateWalletProvider.pin.text);
if (_pin.toUpperCase() == _generateWalletProvider.pin.text) {
onCompleted: (pin) async {
myWalletProvider.pinCode = pin.toUpperCase();
myWalletProvider.pinLenght = pinLenght;
log.d('$pin || ${generateWalletProvider.pin.text}');
if (pin.toUpperCase() == generateWalletProvider.pin.text) {
pinColor = Colors.green[500];
await _generateWalletProvider.storeHDWChest(context);
await generateWalletProvider.storeHDWChest(context);
bool isAlive = false;
if (scanDerivation) {
isAlive = await _generateWalletProvider
isAlive = await generateWalletProvider
.scanDerivations(context, numberScan: 20);
}
if (!isAlive) {
final address = await _sub.importAccount(
final address = await sub.importAccount(
fromMnemonic: true,
mnemonic: _generateWalletProvider.generatedMnemonic!,
mnemonic: generateWalletProvider.generatedMnemonic!,
derivePath: '//2',
password: _generateWalletProvider.pin.text);
password: generateWalletProvider.pin.text);
WalletData myWallet = WalletData(
version: dataVersion,
chest: configBox.get('currentChest'),
@ -208,11 +207,11 @@ class OnboardingStepTen extends StatelessWidget {
imageDefaultPath: '0.png');
await walletBox.add(myWallet);
}
_myWalletProvider.readAllWallets(_currentChest);
_myWalletProvider.rebuildWidget();
myWalletProvider.readAllWallets(currentChest);
myWalletProvider.rebuildWidget();
_generateWalletProvider.generatedMnemonic = '';
_myWalletProvider.resetPinCode();
generateWalletProvider.generatedMnemonic = '';
myWalletProvider.resetPinCode();
Navigator.push(
context,
FaderTransition(
@ -223,7 +222,7 @@ class OnboardingStepTen extends StatelessWidget {
.shake); // Triggering error shake animation
hasError = true;
pinColor = Colors.red[600];
_walletOptions.reloadBuild();
walletOptions.reloadBuild();
}
},
onChanged: (value) {

View File

@ -29,7 +29,7 @@ class _ChooseChestState extends State<OnboardingStepFive> {
@override
Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
GenerateWalletsProvider _generateWalletProvider =
GenerateWalletsProvider generateWalletProvider =
Provider.of<GenerateWalletsProvider>(context, listen: false);
final CommonElements common = CommonElements();
@ -61,7 +61,7 @@ class _ChooseChestState extends State<OnboardingStepFive> {
Navigator.push(
context,
MaterialPageRoute(builder: (context) {
return PrintWallet(_generateWalletProvider.generatedMnemonic);
return PrintWallet(generateWalletProvider.generatedMnemonic);
}),
);
},
@ -106,7 +106,7 @@ class _ChooseChestState extends State<OnboardingStepFive> {
}
Widget sentanceArray(BuildContext context) {
GenerateWalletsProvider _generateWalletProvider =
GenerateWalletsProvider generateWalletProvider =
Provider.of<GenerateWalletsProvider>(context, listen: false);
return Padding(
@ -121,36 +121,36 @@ Widget sentanceArray(BuildContext context) {
)),
padding: const EdgeInsets.all(20),
child: FutureBuilder(
future: _generateWalletProvider.generateWordList(context),
builder: (BuildContext context, AsyncSnapshot<List> _data) {
if (!_data.hasData) {
future: generateWalletProvider.generateWordList(context),
builder: (BuildContext context, AsyncSnapshot<List> data) {
if (!data.hasData) {
return const Text('');
} else {
mnemoList = _data;
mnemoList = data;
return Column(
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.max,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Row(children: <Widget>[
arrayCell(_data.data![0]),
arrayCell(_data.data![1]),
arrayCell(_data.data![2]),
arrayCell(_data.data![3]),
arrayCell(data.data![0]),
arrayCell(data.data![1]),
arrayCell(data.data![2]),
arrayCell(data.data![3]),
]),
const SizedBox(height: 15),
Row(children: <Widget>[
arrayCell(_data.data![4]),
arrayCell(_data.data![5]),
arrayCell(_data.data![6]),
arrayCell(_data.data![7]),
arrayCell(data.data![4]),
arrayCell(data.data![5]),
arrayCell(data.data![6]),
arrayCell(data.data![7]),
]),
const SizedBox(height: 15),
Row(children: <Widget>[
arrayCell(_data.data![8]),
arrayCell(_data.data![9]),
arrayCell(_data.data![10]),
arrayCell(_data.data![11]),
arrayCell(data.data![8]),
arrayCell(data.data![9]),
arrayCell(data.data![10]),
arrayCell(data.data![11]),
]),
]);
}
@ -184,7 +184,7 @@ class PrintWallet extends StatelessWidget {
@override
Widget build(BuildContext context) {
GenerateWalletsProvider _generateWalletProvider =
GenerateWalletsProvider generateWalletProvider =
Provider.of<GenerateWalletsProvider>(context, listen: false);
return MaterialApp(
home: Scaffold(
@ -208,7 +208,7 @@ class PrintWallet extends StatelessWidget {
body: PdfPreview(
canDebug: false,
canChangeOrientation: false,
build: (format) => _generateWalletProvider.printWallet(mnemoList),
build: (format) => generateWalletProvider.printWallet(mnemoList),
),
),
);
@ -217,9 +217,9 @@ class PrintWallet extends StatelessWidget {
Widget nextButton(
BuildContext context, String text, bool isFast, bool skipIntro) {
GenerateWalletsProvider _generateWalletProvider =
GenerateWalletsProvider generateWalletProvider =
Provider.of<GenerateWalletsProvider>(context, listen: false);
MyWalletsProvider _myWalletProvider =
MyWalletsProvider myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false);
return SizedBox(
width: 380 * ratio,
@ -231,17 +231,16 @@ Widget nextButton(
onPrimary: Colors.white, // foreground
),
onPressed: () {
_generateWalletProvider.nbrWord =
_generateWalletProvider.getRandomInt();
_generateWalletProvider.nbrWordAlpha = _generateWalletProvider
.intToString(_generateWalletProvider.nbrWord + 1);
_myWalletProvider.mnemonic = _generateWalletProvider.generatedMnemonic!;
generateWalletProvider.nbrWord = generateWalletProvider.getRandomInt();
generateWalletProvider.nbrWordAlpha = generateWalletProvider
.intToString(generateWalletProvider.nbrWord + 1);
myWalletProvider.mnemonic = generateWalletProvider.generatedMnemonic!;
Navigator.push(
context,
FaderTransition(
page: OnboardingStepSix(
generatedMnemonic: _generateWalletProvider.generatedMnemonic,
generatedMnemonic: generateWalletProvider.generatedMnemonic,
skipIntro: skipIntro),
isFast: true),
);

View File

@ -24,7 +24,7 @@ class OnboardingStepSix extends StatelessWidget {
@override
Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
GenerateWalletsProvider _generateWalletProvider =
GenerateWalletsProvider generateWalletProvider =
Provider.of<GenerateWalletsProvider>(context, listen: true);
CommonElements common = CommonElements();
@ -32,8 +32,8 @@ class OnboardingStepSix extends StatelessWidget {
return WillPopScope(
onWillPop: () {
_generateWalletProvider.isAskedWordValid = false;
_generateWalletProvider.askedWordColor = Colors.black;
generateWalletProvider.isAskedWordValid = false;
generateWalletProvider.askedWordColor = Colors.black;
return Future<bool>.value(true);
},
child: Scaffold(
@ -59,11 +59,11 @@ class OnboardingStepSix extends StatelessWidget {
SizedBox(height: isTall ? 40 : 20),
common.buildText(
"didYouNoteMnemonicToBeSureTypeWord".tr(
args: [(_generateWalletProvider.nbrWord + 1).toString()]),
args: [(generateWalletProvider.nbrWord + 1).toString()]),
20,
true),
SizedBox(height: isTall ? 70 : 20),
Text('${_generateWalletProvider.nbrWord + 1}',
Text('${generateWalletProvider.nbrWord + 1}',
key: const Key('askedWord'),
style: TextStyle(
fontSize: isTall ? 17 : 15,
@ -81,11 +81,11 @@ class OnboardingStepSix extends StatelessWidget {
child: TextFormField(
key: const Key('inputWord'),
autofocus: true,
enabled: !_generateWalletProvider.isAskedWordValid,
enabled: !generateWalletProvider.isAskedWordValid,
controller: wordController,
textInputAction: TextInputAction.next,
onChanged: (value) {
_generateWalletProvider.checkAskedWord(
generateWalletProvider.checkAskedWord(
value, _mnemonicController.text);
},
maxLines: 1,
@ -95,20 +95,19 @@ class OnboardingStepSix extends StatelessWidget {
fontSize: 22.0,
color: Colors.grey[500],
fontWeight: FontWeight.w500),
labelText: _generateWalletProvider.isAskedWordValid
labelText: generateWalletProvider.isAskedWordValid
? "itsTheGoodWord".tr()
: "${_generateWalletProvider.nbrWordAlpha} " +
"nthMnemonicWord".tr(),
: "${generateWalletProvider.nbrWordAlpha} ${"nthMnemonicWord".tr()}",
fillColor: const Color(0xffeeeedd),
filled: true,
contentPadding: const EdgeInsets.all(12),
),
style: TextStyle(
fontSize: 40.0,
color: _generateWalletProvider.askedWordColor,
color: generateWalletProvider.askedWordColor,
fontWeight: FontWeight.w500))),
Visibility(
visible: _generateWalletProvider.isAskedWordValid,
visible: generateWalletProvider.isAskedWordValid,
child: Expanded(
child: Align(
alignment: Alignment.bottomCenter,
@ -141,7 +140,7 @@ class OnboardingStepSix extends StatelessWidget {
}
Widget sentanceArray(BuildContext context) {
GenerateWalletsProvider _generateWalletProvider =
GenerateWalletsProvider generateWalletProvider =
Provider.of<GenerateWalletsProvider>(context);
return Padding(
@ -156,9 +155,9 @@ Widget sentanceArray(BuildContext context) {
)),
padding: const EdgeInsets.all(20),
child: FutureBuilder(
future: _generateWalletProvider.generateWordList(context),
builder: (BuildContext context, AsyncSnapshot<List> _data) {
if (!_data.hasData) {
future: generateWalletProvider.generateWordList(context),
builder: (BuildContext context, AsyncSnapshot<List> data) {
if (!data.hasData) {
return const Text('');
} else {
return Column(
@ -167,24 +166,24 @@ Widget sentanceArray(BuildContext context) {
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Row(children: <Widget>[
arrayCell(_data.data![0]),
arrayCell(_data.data![1]),
arrayCell(_data.data![2]),
arrayCell(_data.data![3]),
arrayCell(data.data![0]),
arrayCell(data.data![1]),
arrayCell(data.data![2]),
arrayCell(data.data![3]),
]),
const SizedBox(height: 15),
Row(children: <Widget>[
arrayCell(_data.data![4]),
arrayCell(_data.data![5]),
arrayCell(_data.data![6]),
arrayCell(_data.data![7]),
arrayCell(data.data![4]),
arrayCell(data.data![5]),
arrayCell(data.data![6]),
arrayCell(data.data![7]),
]),
const SizedBox(height: 15),
Row(children: <Widget>[
arrayCell(_data.data![8]),
arrayCell(_data.data![9]),
arrayCell(_data.data![10]),
arrayCell(_data.data![11]),
arrayCell(data.data![8]),
arrayCell(data.data![9]),
arrayCell(data.data![10]),
arrayCell(data.data![11]),
]),
]);
}
@ -211,11 +210,11 @@ Widget arrayCell(dataWord) {
}
Widget nextButton(BuildContext context, String text, nextScreen, bool isFast) {
GenerateWalletsProvider _generateWalletProvider =
GenerateWalletsProvider generateWalletProvider =
Provider.of<GenerateWalletsProvider>(context, listen: false);
_generateWalletProvider.isAskedWordValid = false;
_generateWalletProvider.askedWordColor = Colors.black;
generateWalletProvider.isAskedWordValid = false;
generateWalletProvider.askedWordColor = Colors.black;
return SizedBox(
width: 380 * ratio,

View File

@ -17,15 +17,15 @@ class OnboardingStepNine extends StatelessWidget {
@override
Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
GenerateWalletsProvider _generateWalletProvider =
GenerateWalletsProvider generateWalletProvider =
Provider.of<GenerateWalletsProvider>(context);
// MyWalletsProvider myWalletProvider =
// Provider.of<MyWalletsProvider>(context);
CommonElements common = CommonElements();
_generateWalletProvider.pin.text = debugPin // kDebugMode &&
generateWalletProvider.pin.text = debugPin // kDebugMode &&
? 'AAAAA'
: _generateWalletProvider.changePinCode(reload: false).toUpperCase();
: generateWalletProvider.changePinCode(reload: false).toUpperCase();
return Scaffold(
backgroundColor: backgroundColor,
@ -53,7 +53,7 @@ class OnboardingStepNine extends StatelessWidget {
TextField(
key: const Key('generatedPin'),
enabled: false,
controller: _generateWalletProvider.pin,
controller: generateWalletProvider.pin,
maxLines: 1,
textAlign: TextAlign.center,
decoration: const InputDecoration(),
@ -66,7 +66,7 @@ class OnboardingStepNine extends StatelessWidget {
icon: const Icon(Icons.replay),
color: orangeC,
onPressed: () {
_generateWalletProvider.changePinCode(reload: true);
generateWalletProvider.changePinCode(reload: true);
},
),
],
@ -85,7 +85,7 @@ class OnboardingStepNine extends StatelessWidget {
onPrimary: Colors.black, // foreground
),
onPressed: () {
_generateWalletProvider.changePinCode(reload: true);
generateWalletProvider.changePinCode(reload: true);
},
child: Text("chooseAnotherPassword".tr(),
style: TextStyle(

View File

@ -16,14 +16,14 @@ class SearchScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
SearchProvider _searchProvider = Provider.of<SearchProvider>(context);
SearchProvider searchProvider = Provider.of<SearchProvider>(context);
final double screenHeight = MediaQuery.of(context).size.height;
// HomeProvider _homeProvider =
// Provider.of<HomeProvider>(context, listen: false);
return WillPopScope(
onWillPop: () {
_searchProvider.searchController.text = '';
searchProvider.searchController.text = '';
return Future<bool>.value(true);
},
child: Scaffold(
@ -39,7 +39,7 @@ class SearchScreen extends StatelessWidget {
leading: IconButton(
icon: const Icon(Icons.arrow_back, color: Colors.black),
onPressed: () {
_searchProvider.searchController.text = '';
searchProvider.searchController.text = '';
Navigator.of(context).pop();
}),
),
@ -51,11 +51,11 @@ class SearchScreen extends StatelessWidget {
Padding(
padding: const EdgeInsets.symmetric(horizontal: 17),
child: TextField(
controller: _searchProvider.searchController,
controller: searchProvider.searchController,
autofocus: true,
maxLines: 1,
textAlign: TextAlign.left,
onChanged: (v) => _searchProvider.rebuildWidget(),
onChanged: (v) => searchProvider.rebuildWidget(),
decoration: InputDecoration(
filled: true,
fillColor: Colors.white,
@ -96,7 +96,7 @@ class SearchScreen extends StatelessWidget {
primary: orangeC, // background
onPrimary: Colors.white, // foreground
),
onPressed: _searchProvider.searchController.text.length >= 2
onPressed: searchProvider.searchController.text.length >= 2
? () {
Navigator.push(
context,

View File

@ -20,19 +20,19 @@ class SearchResultScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
SearchProvider _searchProvider =
SearchProvider searchProvider =
Provider.of<SearchProvider>(context, listen: false);
CesiumPlusProvider _cesiumPlusProvider =
CesiumPlusProvider cesiumPlusProvider =
Provider.of<CesiumPlusProvider>(context, listen: false);
WalletsProfilesProvider _walletsProfilesClass =
WalletsProfilesProvider walletsProfilesClass =
Provider.of<WalletsProfilesProvider>(context, listen: false);
HomeProvider _homeProvider =
HomeProvider homeProvider =
Provider.of<HomeProvider>(context, listen: false);
DuniterIndexer _duniterIndexer =
DuniterIndexer duniterIndexer =
Provider.of<DuniterIndexer>(context, listen: false);
int keyID = 0;
double _avatarSize = 55;
double avatarSize = 55;
return Scaffold(
backgroundColor: backgroundColor,
@ -44,7 +44,7 @@ class SearchResultScreen extends StatelessWidget {
child: Text('researchResults'.tr()),
),
),
bottomNavigationBar: _homeProvider.bottomAppBar(context),
bottomNavigationBar: homeProvider.bottomAppBar(context),
body: SafeArea(
child: Stack(children: [
Padding(
@ -64,7 +64,7 @@ class SearchResultScreen extends StatelessWidget {
text: "resultsFor".tr(),
),
TextSpan(
text: '"${_searchProvider.searchController.text}"',
text: '"${searchProvider.searchController.text}"',
style: const TextStyle(fontStyle: FontStyle.italic),
),
],
@ -77,13 +77,13 @@ class SearchResultScreen extends StatelessWidget {
),
const SizedBox(height: 20),
FutureBuilder(
future: _searchProvider.searchAddress(),
future: searchProvider.searchAddress(),
builder: (context, AsyncSnapshot<List?> snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
log.d(snapshot.data);
if (snapshot.data?.isEmpty ?? true) {
return _duniterIndexer.searchIdentity(
context, _searchProvider.searchController.text);
return duniterIndexer.searchIdentity(
context, searchProvider.searchController.text);
// const Text('Aucun résultat');
} else {
@ -98,8 +98,8 @@ class SearchResultScreen extends StatelessWidget {
key: Key('searchResult${keyID++}'),
horizontalTitleGap: 40,
contentPadding: const EdgeInsets.all(5),
leading: _cesiumPlusProvider
.defaultAvatar(_avatarSize),
leading: cesiumPlusProvider
.defaultAvatar(avatarSize),
title: Row(children: <Widget>[
Text(getShortPubkey(g1Wallet.pubkey!),
style: const TextStyle(
@ -116,7 +116,7 @@ class SearchResultScreen extends StatelessWidget {
context, g1Wallet.pubkey!, 16)
]),
subtitle: Row(children: <Widget>[
_duniterIndexer.getNameByAddress(
duniterIndexer.getNameByAddress(
context, g1Wallet.pubkey!)
]),
dense: false,
@ -125,7 +125,7 @@ class SearchResultScreen extends StatelessWidget {
Navigator.push(
context,
MaterialPageRoute(builder: (context) {
_walletsProfilesClass.address =
walletsProfilesClass.address =
g1Wallet.pubkey;
return WalletViewScreen(
pubkey: g1Wallet.pubkey,

View File

@ -68,13 +68,13 @@ class SettingsScreen extends StatelessWidget {
}
Widget duniterEndpointSelection(BuildContext context) {
SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false);
String? selectedDuniterEndpoint;
// List of items in our dropdown menu
var duniterBootstrapNodes = _sub.getDuniterBootstrap();
var duniterBootstrapNodes = sub.getDuniterBootstrap();
selectedDuniterEndpoint =
_sub.getConnectedEndpoint() ?? duniterBootstrapNodes.first.endpoint;
sub.getConnectedEndpoint() ?? duniterBootstrapNodes.first.endpoint;
final customEndpoint = NetworkParams();
customEndpoint.name = currencyName;
@ -95,15 +95,15 @@ class SettingsScreen extends StatelessWidget {
selectedDuniterEndpoint = customEndpoint.endpoint;
}
TextEditingController _endpointController = TextEditingController(
TextEditingController endpointController = TextEditingController(
text: configBox.containsKey('customEndpoint')
? configBox.get('customEndpoint')
: 'wss://');
return Column(children: <Widget>[
Row(children: [
Consumer<SubstrateSdk>(builder: (context, _sub, _) {
log.d(_sub.sdk.api.connectedNode?.endpoint);
Consumer<SubstrateSdk>(builder: (context, sub, _) {
log.d(sub.sdk.api.connectedNode?.endpoint);
return Expanded(
child: Row(children: [
const SizedBox(width: 10),
@ -114,49 +114,49 @@ class SettingsScreen extends StatelessWidget {
),
),
const Spacer(),
Icon(_sub.nodeConnected && !_sub.isLoadingEndpoint
Icon(sub.nodeConnected && !sub.isLoadingEndpoint
? Icons.check
: Icons.close),
const Spacer(),
SizedBox(
width: 265,
child: Consumer<SettingsProvider>(builder: (context, _set, _) {
child: Consumer<SettingsProvider>(builder: (context, set, _) {
return DropdownButtonHideUnderline(
child: DropdownButton(
// alignment: AlignmentDirectional.topStart,
value: selectedDuniterEndpoint,
icon: const Icon(Icons.keyboard_arrow_down),
items: duniterBootstrapNodes
.map((NetworkParams _endpointParams) {
.map((NetworkParams endpointParams) {
return DropdownMenuItem(
value: _endpointParams.endpoint,
child: Text(_endpointParams.endpoint!),
value: endpointParams.endpoint,
child: Text(endpointParams.endpoint!),
);
}).toList(),
onChanged: (String? _newEndpoint) {
log.d(_newEndpoint!);
selectedDuniterEndpoint = _newEndpoint;
_set.reload();
onChanged: (String? newEndpoint) {
log.d(newEndpoint!);
selectedDuniterEndpoint = newEndpoint;
set.reload();
},
),
);
}),
),
const Spacer(flex: 5),
_sub.isLoadingEndpoint
sub.isLoadingEndpoint
? CircularProgressIndicator(color: orangeC)
: Consumer<SettingsProvider>(builder: (context, _set, _) {
: Consumer<SettingsProvider>(builder: (context, set, _) {
return IconButton(
icon: Icon(
Icons.send,
color: selectedDuniterEndpoint !=
_sub.getConnectedEndpoint()
sub.getConnectedEndpoint()
? orangeC
: Colors.grey[500],
size: 40,
),
onPressed: selectedDuniterEndpoint !=
_sub.getConnectedEndpoint()
sub.getConnectedEndpoint()
? () async {
if (selectedDuniterEndpoint == 'Auto') {
configBox.delete('customEndpoint');
@ -166,12 +166,12 @@ class SettingsScreen extends StatelessWidget {
final finalEndpoint =
selectedDuniterEndpoint ==
'Personnalisé'
? _endpointController.text
? endpointController.text
: selectedDuniterEndpoint;
configBox.put(
'customEndpoint', finalEndpoint);
}
await _sub.connectNode(context);
await sub.connectNode(context);
}
: null);
}),
@ -180,31 +180,31 @@ class SettingsScreen extends StatelessWidget {
);
}),
]),
Consumer<SettingsProvider>(builder: (context, _set, _) {
Consumer<SettingsProvider>(builder: (context, set, _) {
return Visibility(
visible: selectedDuniterEndpoint == 'Personnalisé',
child: SizedBox(
width: 200,
height: 50,
child: TextField(
controller: _endpointController,
controller: endpointController,
autocorrect: false,
),
),
);
}),
Consumer<SubstrateSdk>(builder: (context, _sub, _) {
Consumer<SubstrateSdk>(builder: (context, sub, _) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Consumer<SettingsProvider>(builder: (context, _set, _) {
Consumer<SettingsProvider>(builder: (context, set, _) {
return Visibility(
visible: selectedDuniterEndpoint == 'Auto',
child: SizedBox(
width: 250,
height: _sub.getConnectedEndpoint() == null ? 60 : 20,
height: sub.getConnectedEndpoint() == null ? 60 : 20,
child: Text(
_sub.getConnectedEndpoint() ??
sub.getConnectedEndpoint() ??
"Un noeud sûr et valide sera choisi automatiquement parmis une liste aléatoire.",
style: TextStyle(
fontSize: 15,
@ -215,7 +215,7 @@ class SettingsScreen extends StatelessWidget {
);
}),
Text(
'bloc N°${_sub.blocNumber}',
'bloc N°${sub.blocNumber}',
style: TextStyle(fontSize: 14, color: Colors.grey[700]),
)
],
@ -225,7 +225,7 @@ class SettingsScreen extends StatelessWidget {
}
Widget indexerEndpointSelection(BuildContext context) {
DuniterIndexer _indexer =
DuniterIndexer indexer =
Provider.of<DuniterIndexer>(context, listen: false);
String? selectedIndexerEndpoint;
@ -236,19 +236,19 @@ class SettingsScreen extends StatelessWidget {
}
if (selectedIndexerEndpoint == '') {
selectedIndexerEndpoint = _indexer.listIndexerEndpoints[0];
selectedIndexerEndpoint = indexer.listIndexerEndpoints[0];
}
TextEditingController _indexerEndpointController = TextEditingController(
TextEditingController indexerEndpointController = TextEditingController(
text: configBox.containsKey('customIndexer')
? configBox.get('customIndexer')
: 'https://');
return Column(children: <Widget>[
Row(children: [
Consumer<DuniterIndexer>(builder: (context, _indexer, _) {
Consumer<DuniterIndexer>(builder: (context, indexer, _) {
log.d(selectedIndexerEndpoint);
log.d(_indexer.listIndexerEndpoints);
log.d(indexer.listIndexerEndpoints);
return Expanded(
child: Row(children: [
const SizedBox(width: 10),
@ -261,32 +261,32 @@ class SettingsScreen extends StatelessWidget {
const Spacer(),
SizedBox(
width: 265,
child: Consumer<SettingsProvider>(builder: (context, _set, _) {
child: Consumer<SettingsProvider>(builder: (context, set, _) {
return DropdownButtonHideUnderline(
child: DropdownButton(
// alignment: AlignmentDirectional.topStart,
value: selectedIndexerEndpoint,
icon: const Icon(Icons.keyboard_arrow_down),
items:
_indexer.listIndexerEndpoints.map((_indexerEndpoint) {
indexer.listIndexerEndpoints.map((indexerEndpoint) {
return DropdownMenuItem(
value: _indexerEndpoint,
child: Text(_indexerEndpoint),
value: indexerEndpoint,
child: Text(indexerEndpoint),
);
}).toList(),
onChanged: (_newEndpoint) {
log.d(_newEndpoint!);
selectedIndexerEndpoint = _newEndpoint.toString();
_set.reload();
onChanged: (newEndpoint) {
log.d(newEndpoint!);
selectedIndexerEndpoint = newEndpoint.toString();
set.reload();
},
),
);
}),
),
const Spacer(flex: 5),
_indexer.isLoadingIndexer
indexer.isLoadingIndexer
? CircularProgressIndicator(color: orangeC)
: Consumer<SettingsProvider>(builder: (context, _set, _) {
: Consumer<SettingsProvider>(builder: (context, set, _) {
return IconButton(
icon: Icon(
Icons.send,
@ -299,18 +299,18 @@ class SettingsScreen extends StatelessWidget {
? () async {
final finalEndpoint =
selectedIndexerEndpoint == 'Personnalisé'
? _indexerEndpointController.text
? indexerEndpointController.text
: selectedIndexerEndpoint!;
if (selectedIndexerEndpoint ==
'Personnalisé') {
configBox.put('customIndexer',
_indexerEndpointController.text);
indexerEndpointController.text);
} else {
configBox.delete('customIndexer');
}
log.d('connection to indexer $finalEndpoint');
await _indexer
await indexer
.checkIndexerEndpoint(finalEndpoint);
}
: null);
@ -320,28 +320,28 @@ class SettingsScreen extends StatelessWidget {
);
}),
]),
Consumer<SettingsProvider>(builder: (context, _set, _) {
Consumer<SettingsProvider>(builder: (context, set, _) {
return Visibility(
visible: selectedIndexerEndpoint == 'Personnalisé',
child: SizedBox(
width: 200,
height: 50,
child: TextField(
controller: _indexerEndpointController,
controller: indexerEndpointController,
autocorrect: false,
),
),
);
}),
Consumer<SubstrateSdk>(builder: (context, _sub, _) {
return Consumer<SettingsProvider>(builder: (context, _set, _) {
Consumer<SubstrateSdk>(builder: (context, sub, _) {
return Consumer<SettingsProvider>(builder: (context, set, _) {
return Visibility(
visible: selectedIndexerEndpoint == 'Auto',
child: SizedBox(
width: 250,
height: 60,
child: Text(
_sub.getConnectedEndpoint() ??
sub.getConnectedEndpoint() ??
"Un noeud sûr et valide sera choisi automatiquement parmis une liste aléatoire.",
style: TextStyle(
fontSize: 15,

View File

@ -1,3 +1,5 @@
// ignore_for_file: use_build_context_synchronously
import 'package:flutter/material.dart';
import 'package:gecko/globals.dart';
import 'package:gecko/models/stateful_wrapper.dart';
@ -25,21 +27,21 @@ class SubstrateSandBox extends StatelessWidget {
),
),
body: SafeArea(
child: Consumer<SubstrateSdk>(builder: (context, _sub, _) {
child: Consumer<SubstrateSdk>(builder: (context, sub, _) {
return SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text('js-api chargé ?: ${_sub.sdkReady}'),
Text('js-api chargé ?: ${sub.sdkReady}'),
InkWell(
onTap: () async {
await _sub.connectNode(context);
await sub.connectNode(context);
},
child: Text(
'🌐 Noeud connecté ?: ${_sub.nodeConnected} (${_sub.sdk.api.connectedNode?.endpoint})')),
if (_sub.nodeConnected)
'🌐 Noeud connecté ?: ${sub.nodeConnected} (${sub.sdk.api.connectedNode?.endpoint})')),
if (sub.nodeConnected)
Text(
'🏆 Noeud "$currencyName", bloc N°${_sub.blocNumber}'),
'🏆 Noeud "$currencyName", bloc N°${sub.blocNumber}'),
const SizedBox(height: 20),
Row(children: [
const Text('💳 Liste des coffres:'),
@ -50,22 +52,22 @@ class SubstrateSandBox extends StatelessWidget {
height: 35,
),
onTap: () async {
await _sub.deleteAllAccounts();
_sub.reload();
await sub.deleteAllAccounts();
sub.reload();
},
),
const SizedBox(width: 10),
]),
FutureBuilder(
future: _sub.getKeyStoreAddress(),
future: sub.getKeyStoreAddress(),
builder: (BuildContext context,
AsyncSnapshot<List<AddressInfo>> _data) {
AsyncSnapshot<List<AddressInfo>> data) {
return Column(children: [
if (_data.data != null)
for (final AddressInfo addressInfo in _data.data!)
if (data.data != null)
for (final AddressInfo addressInfo in data.data!)
Row(children: [
InkWell(
onTap: () => _sub.keyring.setCurrent(_sub
onTap: () => sub.keyring.setCurrent(sub
.keyring.keyPairs
.firstWhere((element) =>
element.address ==
@ -89,11 +91,11 @@ class SubstrateSandBox extends StatelessWidget {
// ),
const SizedBox(width: 20),
InkWell(
onTap: () async => await _sub.derive(
onTap: () async => await sub.derive(
context,
addressInfo.address!,
2,
_sub.keystorePassword.text),
sub.keystorePassword.text),
child: const Text("🏂 Dériver"),
)
])
@ -102,12 +104,12 @@ class SubstrateSandBox extends StatelessWidget {
const SizedBox(height: 20),
const Text('🔒 Mot de passe du coffre:'),
TextField(
controller: _sub.keystorePassword,
controller: sub.keystorePassword,
obscureText: true,
obscuringCharacter: '',
enableSuggestions: false,
autocorrect: false,
onChanged: (_) => _sub.reload(),
onChanged: (_) => sub.reload(),
),
Column(
mainAxisAlignment: MainAxisAlignment.center,
@ -118,11 +120,11 @@ class SubstrateSandBox extends StatelessWidget {
primary: yellowC, // background
onPrimary: Colors.black, // foreground
),
onPressed: _sub.keystorePassword.text.isNotEmpty
onPressed: sub.keystorePassword.text.isNotEmpty
? () async {
final res = await _sub.importAccount();
_sub.importIsLoading = false;
_sub.reload();
final res = await sub.importAccount();
sub.importIsLoading = false;
sub.reload();
snack(
context,
res != ''
@ -135,7 +137,7 @@ class SubstrateSandBox extends StatelessWidget {
style: TextStyle(fontSize: 20),
),
),
if (_sub.importIsLoading)
if (sub.importIsLoading)
const CircularProgressIndicator(),
const SizedBox(height: 20),
ElevatedButton(
@ -144,9 +146,9 @@ class SubstrateSandBox extends StatelessWidget {
onPrimary: Colors.black, // foreground
),
onPressed: () async {
await _sub.generateMnemonic();
_sub.importIsLoading = false;
_sub.reload();
await sub.generateMnemonic();
sub.importIsLoading = false;
sub.reload();
snack(context, 'Le mnemonic a été copié');
},
child: const Text(
@ -158,13 +160,13 @@ class SubstrateSandBox extends StatelessWidget {
SizedBox(
width: 400,
child: Text(
_sub.generatedMnemonic,
sub.generatedMnemonic,
textAlign: TextAlign.center,
),
),
const Text('-〰️---〰️---〰️-'),
const SizedBox(height: 10),
Text(_sub.debugConnection)
Text(sub.debugConnection)
])
]),
);

View File

@ -18,123 +18,123 @@ class TransactionInProgress extends StatelessWidget {
@override
Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: true);
WalletsProfilesProvider _walletViewProvider =
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: true);
WalletsProfilesProvider walletViewProvider =
Provider.of<WalletsProfilesProvider>(context, listen: false);
MyWalletsProvider _myWalletProvider =
MyWalletsProvider myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false);
bool isValid = false;
String _resultText;
String resultText;
bool isLoading = true;
// Map jsonResult;
final _result = _sub.transactionStatus;
final result = sub.transactionStatus;
log.d(_walletViewProvider.address!);
log.d(walletViewProvider.address!);
final from = _myWalletProvider.getDefaultWallet().name!;
final to = getShortPubkey(_walletViewProvider.address!);
final amount = _walletViewProvider.payAmount.text;
String _actionName = '';
final from = myWalletProvider.getDefaultWallet().name!;
final to = getShortPubkey(walletViewProvider.address!);
final amount = walletViewProvider.payAmount.text;
String actionName = '';
switch (transType) {
case 'pay':
{
_actionName = 'transaction'.tr();
actionName = 'transaction'.tr();
}
break;
case 'cert':
{
_actionName = 'certification'.tr();
actionName = 'certification'.tr();
}
break;
case 'comfirmIdty':
{
_actionName = "identityConfirm".tr();
actionName = "identityConfirm".tr();
}
break;
case 'revokeIdty':
{
_actionName = "revokeAdhesion".tr();
actionName = "revokeAdhesion".tr();
}
break;
default:
{
_actionName = 'strangeTransaction'.tr();
actionName = 'strangeTransaction'.tr();
}
}
switch (_result) {
switch (result) {
case '':
{
_resultText = 'sending'.tr();
resultText = 'sending'.tr();
}
break;
case 'Ready':
{
_resultText = 'propagating'.tr();
resultText = 'propagating'.tr();
}
break;
case 'Broadcast':
{
_resultText = 'validating'.tr();
resultText = 'validating'.tr();
}
break;
default:
{
isLoading = false;
// jsonResult = json.decode(_result);
log.d(_result);
if (_result.contains('blockHash: ')) {
log.d(result);
if (result.contains('blockHash: ')) {
isValid = true;
_resultText = 'extrinsicValidated'.tr(args: [_actionName]);
resultText = 'extrinsicValidated'.tr(args: [actionName]);
} else {
isValid = false;
_resultText = "anErrorOccured".tr() + ":\n";
final List _exceptionSplit = _result.split('Exception: ');
String _exception;
if (_exceptionSplit.length > 1) {
_exception = _exceptionSplit[1];
resultText = "${"anErrorOccured".tr()}:\n";
final List exceptionSplit = result.split('Exception: ');
String exception;
if (exceptionSplit.length > 1) {
exception = exceptionSplit[1];
} else {
_exception = _exceptionSplit[0];
exception = exceptionSplit[0];
}
// log.d('expection: $_exception');
switch (_exception) {
switch (exception) {
case 'cert.NotRespectCertPeriod':
case 'identity.CreatorNotAllowedToCreateIdty':
{
_resultText = "24hbetweenCerts".tr();
resultText = "24hbetweenCerts".tr();
}
break;
case 'cert.CannotCertifySelf':
{
_resultText = "canNotCertifySelf".tr();
resultText = "canNotCertifySelf".tr();
}
break;
case 'identity.IdtyNameAlreadyExist':
{
_resultText = "nameAlreadyExist".tr();
resultText = "nameAlreadyExist".tr();
}
break;
case 'balances.KeepAlive':
{
_resultText = "2GDtoKeepAlive".tr();
resultText = "2GDtoKeepAlive".tr();
}
break;
case '1010: Invalid Transaction: Inability to pay some fees , e.g. account balance too low':
{
_resultText = "youHaveToFeedThisAccountBeforeUsing".tr();
resultText = "youHaveToFeedThisAccountBeforeUsing".tr();
}
break;
case 'timeout':
{
_resultText += "execTimeoutOver".tr();
resultText += "execTimeoutOver".tr();
}
break;
default:
{
_resultText += "\n$_exception";
resultText += "\n$exception";
}
break;
}
@ -144,7 +144,7 @@ class TransactionInProgress extends StatelessWidget {
return WillPopScope(
onWillPop: () {
_sub.transactionStatus = '';
sub.transactionStatus = '';
Navigator.pop(context);
if (transType == 'pay') Navigator.pop(context);
return Future<bool>.value(true);
@ -160,7 +160,7 @@ class TransactionInProgress extends StatelessWidget {
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('extrinsicInProgress'.tr(args: [_actionName]))
Text('extrinsicInProgress'.tr(args: [actionName]))
]),
)),
body: SafeArea(
@ -238,7 +238,7 @@ class TransactionInProgress extends StatelessWidget {
),
const SizedBox(height: 10),
Text(
_resultText,
resultText,
textAlign: TextAlign.center,
style: TextStyle(fontSize: 19 * ratio),
),
@ -258,7 +258,7 @@ class TransactionInProgress extends StatelessWidget {
),
onPressed: () {
Navigator.pop(context);
_sub.transactionStatus = '';
sub.transactionStatus = '';
if (transType == 'pay') Navigator.pop(context);
},
child: Text(

View File

@ -1,3 +1,5 @@
// ignore_for_file: use_build_context_synchronously
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/services.dart';
import 'package:gecko/globals.dart';
@ -31,19 +33,19 @@ class WalletViewScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
WalletsProfilesProvider _walletProfile =
WalletsProfilesProvider walletProfile =
Provider.of<WalletsProfilesProvider>(context, listen: false);
CesiumPlusProvider _cesiumPlusProvider =
CesiumPlusProvider cesiumPlusProvider =
Provider.of<CesiumPlusProvider>(context, listen: false);
_walletProfile.address = pubkey!;
SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
HomeProvider _homeProvider =
walletProfile.address = pubkey!;
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false);
HomeProvider homeProvider =
Provider.of<HomeProvider>(context, listen: false);
MyWalletsProvider _myWalletProvider =
MyWalletsProvider myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false);
WalletData? defaultWallet = _myWalletProvider.getDefaultWallet();
_sub.setCurrentWallet(defaultWallet);
WalletData? defaultWallet = myWalletProvider.getDefaultWallet();
sub.setCurrentWallet(defaultWallet);
return Scaffold(
backgroundColor: backgroundColor,
@ -58,13 +60,13 @@ class WalletViewScreen extends StatelessWidget {
context,
MaterialPageRoute(builder: (context) {
return QrCodeFullscreen(
_walletProfile.address!,
walletProfile.address!,
);
}),
);
},
child: QrImageWidget(
data: _walletProfile.address!,
data: walletProfile.address!,
version: QrVersions.auto,
size: 80,
),
@ -75,10 +77,10 @@ class WalletViewScreen extends StatelessWidget {
child: Text('seeAWallet'.tr()),
),
),
bottomNavigationBar: _homeProvider.bottomAppBar(context),
bottomNavigationBar: homeProvider.bottomAppBar(context),
body: SafeArea(
child: Column(children: <Widget>[
_walletProfile.headerProfileView(context, pubkey!, username),
walletProfile.headerProfileView(context, pubkey!, username),
SizedBox(height: isTall ? 10 : 0),
Row(mainAxisAlignment: MainAxisAlignment.spaceAround, children: [
Column(children: <Widget>[
@ -104,7 +106,7 @@ class WalletViewScreen extends StatelessWidget {
return ActivityScreen(
address: pubkey,
avatar:
_cesiumPlusProvider.defaultAvatar(50));
cesiumPlusProvider.defaultAvatar(50));
}),
);
}),
@ -119,53 +121,52 @@ class WalletViewScreen extends StatelessWidget {
fontSize: buttonFontSize, fontWeight: FontWeight.w500),
),
]),
Consumer<SubstrateSdk>(builder: (context, _sub, _) {
WalletData? _defaultWallet =
_myWalletProvider.getDefaultWallet();
Consumer<SubstrateSdk>(builder: (context, sub, _) {
WalletData? defaultWallet = myWalletProvider.getDefaultWallet();
return FutureBuilder(
future: _sub.certState(_defaultWallet.address!,
future: sub.certState(defaultWallet.address!,
pubkey!), // .canCertify(_defaultWallet.address!, pubkey!),
builder: (context, AsyncSnapshot<Map<String, int>> snapshot) {
// log.d(snapshot.data);
if (snapshot.data == null) return const SizedBox();
String _duration = '';
String duration = '';
if (snapshot.data!['certDelay'] != null ||
snapshot.data!['certRenewable'] != null) {
final Duration _durationSeconds = Duration(
final Duration durationSeconds = Duration(
seconds: snapshot.data!['certDelay'] ??
snapshot.data!['certRenewable']!);
final int _seconds = _durationSeconds.inSeconds;
final int _minutes = _durationSeconds.inMinutes;
final int seconds = durationSeconds.inSeconds;
final int minutes = durationSeconds.inMinutes;
if (_seconds <= 0) {
_duration = 'seconds'.tr(args: ['0']);
} else if (_seconds <= 60) {
_duration = 'seconds'.tr(args: [_seconds.toString()]);
} else if (_seconds <= 3600) {
_duration = 'minutes'.tr(args: [_minutes.toString()]);
} else if (_seconds <= 86400) {
final int _hours = _durationSeconds.inHours;
final int _minutesLeft = _minutes - _hours * 60;
String _showMinutes = '';
if (_minutesLeft < 60) {}
_showMinutes =
'minutes'.tr(args: [_minutesLeft.toString()]);
_duration =
'hours'.tr(args: [_hours.toString(), _showMinutes]);
} else if (_seconds <= 2592000) {
final int _days = _durationSeconds.inDays;
_duration = 'days'.tr(args: [_days.toString()]);
if (seconds <= 0) {
duration = 'seconds'.tr(args: ['0']);
} else if (seconds <= 60) {
duration = 'seconds'.tr(args: [seconds.toString()]);
} else if (seconds <= 3600) {
duration = 'minutes'.tr(args: [minutes.toString()]);
} else if (seconds <= 86400) {
final int hours = durationSeconds.inHours;
final int minutesLeft = minutes - hours * 60;
String showMinutes = '';
if (minutesLeft < 60) {}
showMinutes =
'minutes'.tr(args: [minutesLeft.toString()]);
duration =
'hours'.tr(args: [hours.toString(), showMinutes]);
} else if (seconds <= 2592000) {
final int days = durationSeconds.inDays;
duration = 'days'.tr(args: [days.toString()]);
} else {
final int _months =
(_durationSeconds.inDays / 30).round();
_duration = 'months'.tr(args: [_months.toString()]);
final int months =
(durationSeconds.inDays / 30).round();
duration = 'months'.tr(args: [months.toString()]);
}
}
return Visibility(
visible: (snapshot.data != {}),
child: Column(children: <Widget>[
if (snapshot.data!['canCert'] != null ||
_duration == 'seconds'.tr(args: ['0']))
duration == 'seconds'.tr(args: ['0']))
Column(children: <Widget>[
SizedBox(
height: buttonSize,
@ -183,18 +184,17 @@ class WalletViewScreen extends StatelessWidget {
'assets/gecko_certify.png')),
),
onTap: () async {
final bool? _result =
await confirmPopup(
context,
"areYouSureYouWantToCertify".tr(
args: [
getShortPubkey(pubkey!)
]));
final bool? result = await confirmPopup(
context,
"areYouSureYouWantToCertify".tr(
args: [
getShortPubkey(pubkey!)
]));
if (_result ?? false) {
String? _pin;
if (_myWalletProvider.pinCode == '') {
_pin = await Navigator.push(
if (result ?? false) {
String? pin;
if (myWalletProvider.pinCode == '') {
pin = await Navigator.push(
context,
MaterialPageRoute(
builder: (homeContext) {
@ -204,19 +204,18 @@ class WalletViewScreen extends StatelessWidget {
),
);
}
if (_pin != null ||
_myWalletProvider.pinCode != '') {
if (pin != null ||
myWalletProvider.pinCode != '') {
WalletsProfilesProvider
_walletViewProvider = Provider
walletViewProvider = Provider
.of<WalletsProfilesProvider>(
context,
listen: false);
final acc = _sub.getCurrentWallet();
_sub.certify(
final acc = sub.getCurrentWallet();
sub.certify(
acc.address!,
_pin ??
_myWalletProvider.pinCode,
_walletViewProvider.address!);
pin ?? myWalletProvider.pinCode,
walletViewProvider.address!);
Navigator.push(
context,
@ -263,7 +262,7 @@ class WalletViewScreen extends StatelessWidget {
),
Text(
"mustWaitXBeforeCertify"
.tr(args: [_duration.toString()]),
.tr(args: [duration.toString()]),
textAlign: TextAlign.center,
style: TextStyle(
fontSize: buttonFontSize - 4,
@ -272,7 +271,7 @@ class WalletViewScreen extends StatelessWidget {
),
]),
if (snapshot.data!['certRenewable'] != null &&
_duration != 'seconds'.tr(args: ['0']))
duration != 'seconds'.tr(args: ['0']))
Column(children: <Widget>[
SizedBox(
height: buttonSize,
@ -293,8 +292,7 @@ class WalletViewScreen extends StatelessWidget {
),
),
Text(
"canRenewCertInX"
.tr(args: [_duration.toString()]),
"canRenewCertInX".tr(args: [duration.toString()]),
textAlign: TextAlign.center,
style: TextStyle(
fontSize: buttonFontSize - 4,
@ -338,9 +336,9 @@ class WalletViewScreen extends StatelessWidget {
]),
]),
const Spacer(),
Consumer<SubstrateSdk>(builder: (context, _sub, _) {
Consumer<SubstrateSdk>(builder: (context, sub, _) {
return Opacity(
opacity: _sub.nodeConnected ? 1 : 0.5,
opacity: sub.nodeConnected ? 1 : 0.5,
child: Container(
height: buttonSize,
decoration: BoxDecoration(
@ -356,29 +354,29 @@ class WalletViewScreen extends StatelessWidget {
color: orangeC, // button color
child: InkWell(
key: const Key('pay'),
splashColor: yellowC, // inkwell color
splashColor: yellowC,
onTap: sub.nodeConnected
? () {
paymentPopup(context, walletProfile);
}
: null, // inkwell color
child: const Padding(
padding: EdgeInsets.all(14),
child: Image(
image: AssetImage('assets/vector_white.png'),
)),
onTap: _sub.nodeConnected
? () {
paymentPopup(context, _walletProfile);
}
: null),
))),
),
),
),
);
}),
const SizedBox(height: 9),
Consumer<SubstrateSdk>(builder: (context, _sub, _) {
Consumer<SubstrateSdk>(builder: (context, sub, _) {
return Text(
'doATransfer'.tr(),
textAlign: TextAlign.center,
style: TextStyle(
color: _sub.nodeConnected ? Colors.black : Colors.grey[500],
color: sub.nodeConnected ? Colors.black : Colors.grey[500],
fontSize: buttonFontSize,
fontWeight: FontWeight.w500),
);
@ -389,16 +387,16 @@ class WalletViewScreen extends StatelessWidget {
}
void paymentPopup(
BuildContext context, WalletsProfilesProvider _walletViewProvider) {
BuildContext context, WalletsProfilesProvider walletViewProvider) {
// WalletsProfilesProvider _walletViewProvider =
// Provider.of<WalletsProfilesProvider>(context, listen: false);
MyWalletsProvider _myWalletProvider =
MyWalletsProvider myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false);
// SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
const double shapeSize = 20;
WalletData? defaultWallet = _myWalletProvider.getDefaultWallet();
WalletData? defaultWallet = myWalletProvider.getDefaultWallet();
log.d(defaultWallet.address);
bool canValidate = false;
@ -415,12 +413,12 @@ class WalletViewScreen extends StatelessWidget {
builder: (BuildContext context) {
return StatefulBuilder(
builder: (BuildContext context, StateSetter setState) {
if (_walletViewProvider.payAmount.text != '' &&
(double.parse(_walletViewProvider.payAmount.text) + 2) <=
if (walletViewProvider.payAmount.text != '' &&
(double.parse(walletViewProvider.payAmount.text) + 2) <=
(balanceCache[defaultWallet.address] ?? 0) &&
_walletViewProvider.address != defaultWallet.address) {
walletViewProvider.address != defaultWallet.address) {
if ((balanceCache[pubkey] == 0 || balanceCache[pubkey] == null) &&
double.parse(_walletViewProvider.payAmount.text) < 5) {
double.parse(walletViewProvider.payAmount.text) < 5) {
canValidate = false;
} else {
canValidate = true;
@ -474,12 +472,12 @@ class WalletViewScreen extends StatelessWidget {
color: Colors.grey[600]),
),
const SizedBox(height: 10),
Consumer<SubstrateSdk>(builder: (context, _sub, _) {
Consumer<SubstrateSdk>(builder: (context, sub, _) {
return InkWell(
onTap: () async {
String? _pin;
if (_myWalletProvider.pinCode == '') {
_pin = await Navigator.push(
String? pin;
if (myWalletProvider.pinCode == '') {
pin = await Navigator.push(
context,
MaterialPageRoute(
builder: (homeContext) {
@ -489,13 +487,13 @@ class WalletViewScreen extends StatelessWidget {
),
);
}
if (_pin != null ||
_myWalletProvider.pinCode != '') {
if (pin != null ||
myWalletProvider.pinCode != '') {
Navigator.push(
context,
MaterialPageRoute(builder: (context) {
return ChooseWalletScreen(
pin: _pin ?? _myWalletProvider.pinCode);
pin: pin ?? myWalletProvider.pinCode);
}),
);
}
@ -515,12 +513,12 @@ class WalletViewScreen extends StatelessWidget {
const Spacer(),
FutureBuilder(
future:
_sub.getBalance(defaultWallet.address!),
sub.getBalance(defaultWallet.address!),
builder: (BuildContext context,
AsyncSnapshot<double> _balance) {
if (_balance.connectionState !=
AsyncSnapshot<double> balance) {
if (balance.connectionState !=
ConnectionState.done ||
_balance.hasError) {
balance.hasError) {
if (balanceCache[
defaultWallet.address!] !=
null) {
@ -541,7 +539,7 @@ class WalletViewScreen extends StatelessWidget {
}
}
balanceCache[defaultWallet.address!] =
_balance.data!;
balance.data!;
return Text(
"${balanceCache[defaultWallet.address!]} $currencyName",
style: const TextStyle(
@ -565,7 +563,7 @@ class WalletViewScreen extends StatelessWidget {
),
const SizedBox(height: 10),
TextField(
controller: _walletViewProvider.payAmount,
controller: walletViewProvider.payAmount,
autofocus: true,
maxLines: 1,
textAlign: TextAlign.center,
@ -617,9 +615,9 @@ class WalletViewScreen extends StatelessWidget {
),
onPressed: canValidate
? () async {
String? _pin;
if (_myWalletProvider.pinCode == '') {
_pin = await Navigator.push(
String? pin;
if (myWalletProvider.pinCode == '') {
pin = await Navigator.push(
context,
MaterialPageRoute(
builder: (homeContext) {
@ -629,30 +627,30 @@ class WalletViewScreen extends StatelessWidget {
),
);
}
log.d(_pin);
if (_pin != null ||
_myWalletProvider.pinCode != '') {
log.d(pin);
if (pin != null ||
myWalletProvider.pinCode != '') {
// Payment workflow !
WalletsProfilesProvider
_walletViewProvider =
walletViewProvider =
Provider.of<WalletsProfilesProvider>(
context,
listen: false);
SubstrateSdk _sub =
SubstrateSdk sub =
Provider.of<SubstrateSdk>(context,
listen: false);
final acc = _sub.getCurrentWallet();
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");
sub.pay(
fromAddress: acc.address!,
destAddress:
_walletViewProvider.address!,
walletViewProvider.address!,
amount: double.parse(
_walletViewProvider
walletViewProvider
.payAmount.text),
password: _pin ??
_myWalletProvider.pinCode);
password:
pin ?? myWalletProvider.pinCode);
Navigator.push(
context,
MaterialPageRoute(builder: (context) {
@ -675,6 +673,6 @@ class WalletViewScreen extends StatelessWidget {
),
);
});
}).then((value) => _walletViewProvider.payAmount.text = '');
}).then((value) => walletViewProvider.payAmount.text = '');
}
}

View File

@ -7,14 +7,14 @@ packages:
name: _fe_analyzer_shared
url: "https://pub.dartlang.org"
source: hosted
version: "40.0.0"
version: "44.0.0"
analyzer:
dependency: transitive
description:
name: analyzer
url: "https://pub.dartlang.org"
source: hosted
version: "4.1.0"
version: "4.4.0"
archive:
dependency: transitive
description:
@ -35,7 +35,7 @@ packages:
name: assorted_layout_widgets
url: "https://pub.dartlang.org"
source: hosted
version: "5.8.5"
version: "6.1.1"
async:
dependency: transitive
description:
@ -70,7 +70,7 @@ packages:
name: bip32_ed25519
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.1"
version: "0.2.2"
bip39_multi_nullsafety:
dependency: transitive
description:
@ -105,7 +105,7 @@ packages:
name: build_config
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.0"
version: "1.1.0"
build_daemon:
dependency: transitive
description:
@ -126,7 +126,7 @@ packages:
name: build_runner
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.11"
version: "2.2.0"
build_runner_core:
dependency: transitive
description:
@ -147,7 +147,7 @@ packages:
name: built_value
url: "https://pub.dartlang.org"
source: hosted
version: "8.3.2"
version: "8.4.0"
carousel_slider:
dependency: "direct main"
description:
@ -189,7 +189,7 @@ packages:
name: code_builder
url: "https://pub.dartlang.org"
source: hosted
version: "4.1.0"
version: "4.2.0"
collection:
dependency: transitive
description:
@ -210,7 +210,7 @@ packages:
name: connectivity_plus
url: "https://pub.dartlang.org"
source: hosted
version: "2.3.3"
version: "2.3.6"
connectivity_plus_linux:
dependency: transitive
description:
@ -224,7 +224,7 @@ packages:
name: connectivity_plus_macos
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.3"
version: "1.2.4"
connectivity_plus_platform_interface:
dependency: transitive
description:
@ -238,7 +238,7 @@ packages:
name: connectivity_plus_web
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.1"
version: "1.2.3"
connectivity_plus_windows:
dependency: transitive
description:
@ -287,7 +287,7 @@ packages:
name: dbus
url: "https://pub.dartlang.org"
source: hosted
version: "0.7.3"
version: "0.7.4"
desktop_window:
dependency: "direct main"
description:
@ -315,7 +315,7 @@ packages:
name: dropdown_button2
url: "https://pub.dartlang.org"
source: hosted
version: "1.6.3"
version: "1.7.1"
durt:
dependency: "direct main"
description:
@ -395,7 +395,7 @@ packages:
name: flutter_hooks
url: "https://pub.dartlang.org"
source: hosted
version: "0.18.4"
version: "0.18.5+1"
flutter_inappwebview:
dependency: transitive
description:
@ -409,7 +409,7 @@ packages:
name: flutter_lints
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.4"
version: "2.0.1"
flutter_localizations:
dependency: transitive
description: flutter
@ -421,28 +421,28 @@ packages:
name: flutter_logs
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.6"
version: "2.1.7"
flutter_markdown:
dependency: "direct main"
description:
name: flutter_markdown
url: "https://pub.dartlang.org"
source: hosted
version: "0.6.10+2"
version: "0.6.10+3"
flutter_plugin_android_lifecycle:
dependency: transitive
description:
name: flutter_plugin_android_lifecycle
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.6"
version: "2.0.7"
flutter_svg:
dependency: "direct main"
description:
name: flutter_svg
url: "https://pub.dartlang.org"
source: hosted
version: "0.22.0"
version: "1.1.3"
flutter_test:
dependency: "direct dev"
description: flutter
@ -485,7 +485,7 @@ packages:
name: glob
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.2"
version: "2.1.0"
gql:
dependency: transitive
description:
@ -541,14 +541,14 @@ packages:
name: graphql
url: "https://pub.dartlang.org"
source: hosted
version: "5.1.2-beta.2"
version: "5.1.2-beta.4"
graphql_flutter:
dependency: "direct main"
description:
name: graphql_flutter
url: "https://pub.dartlang.org"
source: hosted
version: "5.1.1-beta.3"
version: "5.1.1-beta.4"
graphs:
dependency: transitive
description:
@ -569,7 +569,7 @@ packages:
name: hive
url: "https://pub.dartlang.org"
source: hosted
version: "2.2.1"
version: "2.2.3"
hive_flutter:
dependency: "direct main"
description:
@ -590,14 +590,14 @@ packages:
name: http
url: "https://pub.dartlang.org"
source: hosted
version: "0.13.4"
version: "0.13.5"
http_multi_server:
dependency: transitive
description:
name: http_multi_server
url: "https://pub.dartlang.org"
source: hosted
version: "3.2.0"
version: "3.2.1"
http_parser:
dependency: transitive
description:
@ -618,14 +618,14 @@ packages:
name: icons_launcher
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.9"
version: "2.0.2"
image:
dependency: transitive
description:
name: image
url: "https://pub.dartlang.org"
source: hosted
version: "3.1.3"
version: "3.2.0"
image_cropper:
dependency: "direct main"
description:
@ -660,7 +660,7 @@ packages:
name: image_picker_android
url: "https://pub.dartlang.org"
source: hosted
version: "0.8.4+13"
version: "0.8.5+2"
image_picker_for_web:
dependency: transitive
description:
@ -674,14 +674,14 @@ packages:
name: image_picker_ios
url: "https://pub.dartlang.org"
source: hosted
version: "0.8.5+5"
version: "0.8.5+6"
image_picker_platform_interface:
dependency: transitive
description:
name: image_picker_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "2.5.0"
version: "2.6.1"
infinite_scroll_pagination:
dependency: "direct main"
description:
@ -749,14 +749,14 @@ packages:
name: json_annotation
url: "https://pub.dartlang.org"
source: hosted
version: "4.5.0"
version: "4.6.0"
lints:
dependency: transitive
description:
name: lints
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.1"
version: "2.0.0"
logger:
dependency: "direct main"
description:
@ -819,7 +819,7 @@ packages:
name: mobx
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.7+2"
version: "2.0.7+5"
nested:
dependency: transitive
description:
@ -854,7 +854,7 @@ packages:
name: package_config
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.2"
version: "2.1.0"
package_info_plus:
dependency: "direct main"
description:
@ -910,35 +910,35 @@ packages:
name: path_drawing
url: "https://pub.dartlang.org"
source: hosted
version: "0.5.1+1"
version: "1.0.1"
path_parsing:
dependency: transitive
description:
name: path_parsing
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.1"
version: "1.0.1"
path_provider:
dependency: "direct main"
description:
name: path_provider
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.10"
version: "2.0.11"
path_provider_android:
dependency: transitive
description:
name: path_provider_android
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.14"
version: "2.0.17"
path_provider_ios:
dependency: transitive
description:
name: path_provider_ios
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.9"
version: "2.0.11"
path_provider_linux:
dependency: transitive
description:
@ -980,14 +980,28 @@ packages:
name: pdf
url: "https://pub.dartlang.org"
source: hosted
version: "3.8.1"
version: "3.8.2"
permission_handler:
dependency: "direct main"
description:
name: permission_handler
url: "https://pub.dartlang.org"
source: hosted
version: "8.3.0"
version: "10.0.0"
permission_handler_android:
dependency: transitive
description:
name: permission_handler_android
url: "https://pub.dartlang.org"
source: hosted
version: "10.0.0"
permission_handler_apple:
dependency: transitive
description:
name: permission_handler_apple
url: "https://pub.dartlang.org"
source: hosted
version: "9.0.4"
permission_handler_platform_interface:
dependency: transitive
description:
@ -995,6 +1009,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "3.7.0"
permission_handler_windows:
dependency: transitive
description:
name: permission_handler_windows
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.0"
petitparser:
dependency: transitive
description:
@ -1036,7 +1057,7 @@ packages:
name: pointycastle
url: "https://pub.dartlang.org"
source: hosted
version: "3.6.0"
version: "3.6.1"
polkawallet_sdk:
dependency: "direct main"
description:
@ -1052,14 +1073,14 @@ packages:
name: pool
url: "https://pub.dartlang.org"
source: hosted
version: "1.5.0"
version: "1.5.1"
printing:
dependency: "direct main"
description:
name: printing
url: "https://pub.dartlang.org"
source: hosted
version: "5.9.1"
version: "5.9.2"
process:
dependency: transitive
description:
@ -1073,7 +1094,7 @@ packages:
name: protobuf
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.1"
version: "2.1.0"
provider:
dependency: "direct main"
description:
@ -1138,21 +1159,21 @@ packages:
name: rxdart
url: "https://pub.dartlang.org"
source: hosted
version: "0.27.4"
version: "0.27.5"
sentry:
dependency: "direct main"
description:
name: sentry
url: "https://pub.dartlang.org"
source: hosted
version: "6.5.1"
version: "6.9.0"
sentry_flutter:
dependency: "direct main"
description:
name: sentry_flutter
url: "https://pub.dartlang.org"
source: hosted
version: "6.5.1"
version: "6.9.0"
shared_preferences:
dependency: "direct main"
description:
@ -1215,28 +1236,28 @@ packages:
name: shelf
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.0"
version: "1.3.2"
shelf_packages_handler:
dependency: transitive
description:
name: shelf_packages_handler
url: "https://pub.dartlang.org"
source: hosted
version: "3.0.0"
version: "3.0.1"
shelf_static:
dependency: transitive
description:
name: shelf_static
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
version: "1.1.1"
shelf_web_socket:
dependency: transitive
description:
name: shelf_web_socket
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.1"
version: "1.0.2"
sky_engine:
dependency: transitive
description: flutter
@ -1248,7 +1269,7 @@ packages:
name: sliver_tools
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.6"
version: "0.2.7"
source_gen:
dependency: transitive
description:
@ -1444,21 +1465,21 @@ packages:
name: webview_flutter_android
url: "https://pub.dartlang.org"
source: hosted
version: "2.8.9"
version: "2.9.3"
webview_flutter_platform_interface:
dependency: transitive
description:
name: webview_flutter_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "1.9.0"
version: "1.9.1"
webview_flutter_wkwebview:
dependency: transitive
description:
name: webview_flutter_wkwebview
url: "https://pub.dartlang.org"
source: hosted
version: "2.8.0"
version: "2.9.3"
win32:
dependency: transitive
description:
@ -1466,15 +1487,6 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.6.1"
window_size:
dependency: "direct main"
description:
path: "plugins/window_size"
ref: HEAD
resolved-ref: "5c51870ced62a00e809ba4b81a846a052d241c9f"
url: "https://github.com/google/flutter-desktop-embedding.git"
source: git
version: "0.1.0"
xdg_directories:
dependency: transitive
description:
@ -1488,7 +1500,7 @@ packages:
name: xml
url: "https://pub.dartlang.org"
source: hosted
version: "5.4.1"
version: "6.1.0"
yaml:
dependency: transitive
description:
@ -1497,5 +1509,5 @@ packages:
source: hosted
version: "3.1.1"
sdks:
dart: ">=2.17.0 <3.0.0"
dart: ">=2.17.1 <3.0.0"
flutter: ">=3.0.0"

View File

@ -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.9+15
version: 0.0.9+16
environment:
sdk: '>=2.12.0 <3.0.0'
@ -15,19 +15,15 @@ dependencies:
sdk: flutter
flutter_driver:
sdk: flutter
window_size:
git:
url: https://github.com/google/flutter-desktop-embedding.git
path: plugins/window_size
assorted_layout_widgets: ^5.2.1
assorted_layout_widgets: ^6.1.1
bubble: ^1.2.1
carousel_slider: ^4.0.0
confirm_dialog: ^1.0.0
crypto: ^3.0.1
fast_base58: ^0.2.0
flutter_lints: ^1.0.4
flutter_lints: ^2.0.1
flutter_logs: ^2.1.4
flutter_svg: ^0.22.0
flutter_svg: ^1.1.3
graphql_flutter: ^5.1.1-beta.3
hive: ^2.0.4
hive_flutter: ^1.1.0
@ -40,7 +36,7 @@ dependencies:
logger: ^1.1.0
path_provider: ^2.0.9
pdf: ^3.7.1
permission_handler: ^8.3.0
permission_handler: ^10.0.0
pin_code_fields: ^7.3.0
printing: ^5.9.1
provider: ^6.0.1
@ -58,7 +54,7 @@ dependencies:
test: ^1.17.10
truncate: ^3.0.1
unorm_dart: ^0.2.0
xml: ^5.3.0
xml: ^6.1.0
pull_to_refresh: ^2.0.0
dio: ^4.0.4
desktop_window: ^0.4.0
@ -66,7 +62,7 @@ dependencies:
package_info_plus: ^1.4.2
polkawallet_sdk: #^0.4.8
git:
url: https://github.com/poka-IT/sdk.git #https://github.com/poka-IT/sdk.git
url: https://github.com/poka-IT/sdk.git
ref: gecko-old
dots_indicator: ^2.1.0
web_socket_channel: ^2.2.0
@ -79,7 +75,7 @@ dependencies:
dev_dependencies:
# flutter_launcher_icons: ^0.9.2
# flutter_launcher_icons_maker: ^^0.10.2
icons_launcher: ^1.1.8
icons_launcher: ^2.0.2
build_runner: ^2.1.2
flutter_test:
sdk: flutter

View File

@ -1,9 +1,8 @@
// ignore_for_file: avoid_print
import 'dart:async';
import 'dart:io';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter_driver/flutter_driver.dart';
import 'package:gecko/globals.dart';
import 'package:test/test.dart';
// import 'package:flutter/services.dart';
@ -56,8 +55,8 @@ void main() {
}
// Easy sleep
Future sleep(int _time) async {
await Future.delayed(Duration(milliseconds: _time));
Future sleep(int time) async {
await Future.delayed(Duration(milliseconds: time));
}
// Test if widget exist on screen, return a boolean
@ -78,10 +77,10 @@ void main() {
}
// Delete a derivation
Future deleteWallet(bool _confirm) async {
Future deleteWallet(bool confirm) async {
await tapOn('deleteWallet');
await sleep(100);
_confirm ? await tapOn('confirmDeleting') : await tapOn('cancelDeleting');
confirm ? await tapOn('confirmDeleting') : await tapOn('cancelDeleting');
await sleep(300);
}
@ -105,7 +104,7 @@ void main() {
await sleep(300);
await tapOn('generateKeychain');
while (await getText('generatedPin') == '') {
print('Waiting for pin code generation...');
log.d('Waiting for pin code generation...');
await sleep(100);
}
pinCode = await getText('generatedPin');
@ -169,7 +168,7 @@ void main() {
await tapOn('goStep7');
while (await getText('word1') == '...') {
print('Waiting for Mnemonic generation...');
log.d('Waiting for Mnemonic generation...');
await sleep(100);
}
@ -224,7 +223,7 @@ void main() {
await tapOn('goStep11');
while (await getText('generatedPin') == '') {
print('Waiting for pin code generation...');
log.d('Waiting for pin code generation...');
await sleep(100);
}