Merge branch 'dev'

This commit is contained in:
poka 2024-03-09 10:27:35 +01:00
commit 694c682aba
38 changed files with 619 additions and 643 deletions

View File

@ -1,3 +1,9 @@
plugins {
id 'com.android.application'
id 'kotlin-android'
id "dev.flutter.flutter-gradle-plugin"
}
def localProperties = new Properties() def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties') def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) { if (localPropertiesFile.exists()) {
@ -6,11 +12,6 @@ if (localPropertiesFile.exists()) {
} }
} }
def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
throw new RuntimeException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}
def flutterVersionCode = localProperties.getProperty('flutter.versionCode') def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) { if (flutterVersionCode == null) {
flutterVersionCode = '1' flutterVersionCode = '1'
@ -21,10 +22,6 @@ if (flutterVersionName == null) {
flutterVersionName = '1.0' flutterVersionName = '1.0'
} }
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
def keystoreProperties = new Properties() def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties') def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) { if (keystorePropertiesFile.exists()) {
@ -32,21 +29,30 @@ if (keystorePropertiesFile.exists()) {
} }
android { android {
compileSdkVersion 33 namespace "gecko.axiomteam.fr"
compileSdk flutter.compileSdkVersion
ndkVersion flutter.ndkVersion
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
sourceSets { sourceSets {
main.java.srcDirs += 'src/main/kotlin' main.java.srcDirs += 'src/main/kotlin'
} }
lintOptions {
disable 'InvalidPackage'
}
defaultConfig { defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "gecko.axiomteam.fr" applicationId "gecko.axiomteam.fr"
minSdkVersion 19 // You can update the following values to match your application needs.
targetSdkVersion 33 // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
minSdkVersion flutter.minSdkVersion
targetSdkVersion flutter.targetSdkVersion
versionCode flutterVersionCode.toInteger() versionCode flutterVersionCode.toInteger()
versionName flutterVersionName versionName flutterVersionName
multiDexEnabled true multiDexEnabled true
@ -65,7 +71,7 @@ android {
release { release {
// TODO: Add your own signing config for the release build. // TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works. // 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.release
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
} }
@ -76,11 +82,9 @@ android {
} }
} }
flutter { flutter {
source '../..' source '../..'
} }
dependencies { dependencies {}
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.work:work-runtime-ktx:2.7.0'
}

View File

@ -1,20 +1,7 @@
buildscript {
ext.kotlin_version = '1.7.10'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.3.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
allprojects { allprojects {
repositories { repositories {
google() google()
jcenter() mavenCentral()
} }
} }

View File

@ -1,11 +1,26 @@
include ':app' pluginManagement {
def flutterSdkPath = {
def properties = new Properties()
file("local.properties").withInputStream { properties.load(it) }
def flutterSdkPath = properties.getProperty("flutter.sdk")
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
return flutterSdkPath
}
settings.ext.flutterSdkPath = flutterSdkPath()
def localPropertiesFile = new File(rootProject.projectDir, "local.properties") includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle")
def properties = new Properties()
assert localPropertiesFile.exists() repositories {
localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } google()
mavenCentral()
gradlePluginPortal()
}
}
def flutterSdkPath = properties.getProperty("flutter.sdk") plugins {
assert flutterSdkPath != null, "flutter.sdk not set in local.properties" id "dev.flutter.flutter-plugin-loader" version "1.0.0"
apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" id "com.android.application" version "7.3.0" apply false
id "org.jetbrains.kotlin.android" version "1.7.10" apply false
}
include ":app"

View File

@ -1,7 +1,15 @@
{ {
"ud": 1000, "ud": 1000,
"first_ud": 6000, "first_ud": null,
"first_ud_reeval": 600000, "first_ud_reeval": null,
"genesis_parameters": {
"genesis_certs_expire_on": 1000,
"genesis_certs_min_received": 2,
"genesis_memberships_expire_on": 1000,
"genesis_smith_certs_expire_on": 1000,
"genesis_smith_certs_min_received": 2,
"genesis_smith_memberships_expire_on": 100000
},
"parameters": { "parameters": {
"babe_epoch_duration": 30, "babe_epoch_duration": 30,
"cert_period": 15, "cert_period": 15,
@ -11,6 +19,7 @@
"idty_confirm_period": 40, "idty_confirm_period": 40,
"idty_creation_period": 50, "idty_creation_period": 50,
"membership_period": 1000, "membership_period": 1000,
"membership_renewal_period": 1000,
"pending_membership_period": 500, "pending_membership_period": 500,
"ud_creation_period": 10, "ud_creation_period": 10,
"ud_reeval_period": 50, "ud_reeval_period": 50,
@ -19,6 +28,7 @@
"smith_cert_min_received_cert_to_issue_cert": 2, "smith_cert_min_received_cert_to_issue_cert": 2,
"smith_cert_validity_period": 1000, "smith_cert_validity_period": 1000,
"smith_membership_period": 1000, "smith_membership_period": 1000,
"smith_inactivity_max_duration": 1000,
"smith_pending_membership_period": 500, "smith_pending_membership_period": 500,
"smith_wot_first_cert_issuable_on": 4, "smith_wot_first_cert_issuable_on": 4,
"smith_wot_min_cert_for_membership": 3, "smith_wot_min_cert_for_membership": 3,
@ -30,7 +40,8 @@
{ "name": "test1" }, { "name": "test1" },
{ "name": "test2" }, { "name": "test2" },
{ "name": "test3" }, { "name": "test3" },
{ "name": "test4" } { "name": "test4" },
{ "name": "Alice" }
], ],
"sudo_key": "5FeggKqw2AbnGZF9Y9WPM2QTgzENS3Hit94Ewgmzdg5a3LNa", "sudo_key": "5FeggKqw2AbnGZF9Y9WPM2QTgzENS3Hit94Ewgmzdg5a3LNa",
"treasury_funder_address": "5FeggKqw2AbnGZF9Y9WPM2QTgzENS3Hit94Ewgmzdg5a3LNa", "treasury_funder_address": "5FeggKqw2AbnGZF9Y9WPM2QTgzENS3Hit94Ewgmzdg5a3LNa",

View File

@ -1,77 +1,126 @@
{ {
"initial_monetary_mass": 60100, "initial_monetary_mass": 90100,
"current_block": {
"number": 0,
"medianTime": 1700000000
},
"identities": { "identities": {
"test1": { "test1": {
"index": 0, "index": 7,
"balance": 10000, "balance": 10000,
"membership_expire_on": 1705509948, "revoked": false,
"next_cert_issuable_on": 1668347505, "membership_expire_on": 2700000000,
"membership_revokes_on": 2700000001,
"next_cert_issuable_on": 0,
"certs_received": { "certs_received": {
"test2": 1727758466, "test2": 2700000000,
"test3": 1727758466, "test3": 2700000000,
"test4": 1727758466 "test4": 2700000000
}, },
"owner_pubkey": "BgC76sdA6zxPSAMW6sZ1e3NEntLrkLT8DY3z2MEmJJgK" "owner_pubkey": "BgC76sdA6zxPSAMW6sZ1e3NEntLrkLT8DY3z2MEmJJgK"
}, },
"test2": { "test2": {
"index": 1, "index": 1,
"balance": 10000, "balance": 10000,
"membership_expire_on": 1705509948, "revoked": false,
"next_cert_issuable_on": 1668347505, "membership_expire_on": 2700000000,
"membership_revokes_on": 2700000001,
"next_cert_issuable_on": 0,
"certs_received": { "certs_received": {
"test1": 1727758466, "test1": 2700000000,
"test3": 1727758466, "test3": 2700000000,
"test4": 1727758466 "test4": 2700000000
}, },
"owner_pubkey": "6xNFhRFHKyx9iZ3ucc3AFf5cjsWw5jH3p6EnFXw3D8T6" "owner_pubkey": "6xNFhRFHKyx9iZ3ucc3AFf5cjsWw5jH3p6EnFXw3D8T6"
}, },
"test3": { "test3": {
"index": 2, "index": 2,
"balance": 10000, "balance": 10000,
"membership_expire_on": 1705509948, "revoked": false,
"next_cert_issuable_on": 1668347505, "membership_expire_on": 2700000000,
"membership_revokes_on": 2700000001,
"next_cert_issuable_on": 0,
"certs_received": { "certs_received": {
"test1": 1727758466, "test1": 2700000000,
"test2": 1727758466, "test2": 2700000000,
"test4": 1727758466 "test4": 2700000000
}, },
"owner_pubkey": "BpSSPEVE1yze9wrfjkU4wfnFa7WgKNysHxe3H9iT9fvx" "owner_pubkey": "BpSSPEVE1yze9wrfjkU4wfnFa7WgKNysHxe3H9iT9fvx"
}, },
"test4": { "test4": {
"index": 3, "index": 3,
"balance": 10000, "balance": 10000,
"membership_expire_on": 1705509948, "revoked": false,
"next_cert_issuable_on": 1668347505, "membership_expire_on": 2700000000,
"membership_revokes_on": 2700000001,
"next_cert_issuable_on": 0,
"certs_received": { "certs_received": {
"test1": 1727758466, "test1": 2700000000,
"test2": 1727758466, "test2": 2700000000,
"test3": 1727758466 "test3": 2700000000
}, },
"owner_pubkey": "5LqbvutJtRTHvnforyndwPbkC4Kf5cJtdRQaDcHoMi8S" "owner_pubkey": "5LqbvutJtRTHvnforyndwPbkC4Kf5cJtdRQaDcHoMi8S"
}, },
"test5": { "test5": {
"index": 4, "index": 4,
"balance": 10000, "balance": 10000,
"membership_expire_on": 1705509948, "revoked": false,
"next_cert_issuable_on": 1668347505, "membership_expire_on": 2700000000,
"membership_revokes_on": 2700000001,
"next_cert_issuable_on": 0,
"certs_received": { "certs_received": {
"test1": 1727758466, "test1": 2700000000,
"test2": 1727758466, "test2": 2700000000,
"test3": 1727758466 "test3": 2700000000
}, },
"owner_pubkey": "6FgzG8NwatTWHo7rM7sPP6P4Q95R2ZQNqYiHCs38RT21" "owner_pubkey": "6FgzG8NwatTWHo7rM7sPP6P4Q95R2ZQNqYiHCs38RT21"
}, },
"testCesium1": { "test6": {
"index": 5, "index": 5,
"balance": 10000, "balance": 10000,
"membership_expire_on": 1705509948, "revoked": false,
"next_cert_issuable_on": 1668347505, "membership_expire_on": 2700000000,
"membership_revokes_on": 2700000001,
"next_cert_issuable_on": 0,
"certs_received": { "certs_received": {
"test1": 1727758466, "test1": 2700000000
"test2": 1727758466, },
"test3": 1727758466 "owner_pubkey": "FZ8URw5rPqpWegWnufpcBDkg6tMpc2JmNZVCuPA9g3nq"
},
"testCesium1": {
"index": 6,
"balance": 10000,
"revoked": false,
"membership_expire_on": 2700000000,
"membership_revokes_on": 2700000001,
"next_cert_issuable_on": 0,
"certs_received": {
"test1": 2700000000,
"test2": 2700000000,
"test3": 2700000000
}, },
"owner_pubkey": "DCovzCEnQm9GUWe6mr8u42JR1JAuoj3HbQUGdCkfTzSr" "owner_pubkey": "DCovzCEnQm9GUWe6mr8u42JR1JAuoj3HbQUGdCkfTzSr"
},
"Alice": {
"index": 8,
"balance": 10000,
"revoked": false,
"membership_expire_on": 2700000000,
"membership_revokes_on": 2700000001,
"certs_received": {
"test1": 2700000000,
"test2": 2700000000,
"test3": 2700000000,
"test4": 2700000000,
"test5": 2700000000,
"test6": 2700000000,
"testCesium1": 2700000000
},
"owner_address": "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY",
"next_cert_issuable_on": 0
} }
},
"wallets": {
"BPKBoTrrLD1XWmpZdRsfDnDT1M6PBBvgzPxAKNdutVV2": 10000
} }
} }

View File

@ -30,7 +30,7 @@ const cesiumPod = "https://g1.data.le-sou.org";
// String cesiumPod = "https://g1.data.e-is.pro"; // String cesiumPod = "https://g1.data.e-is.pro";
const datapodEndpoint = 'gdev-datapod.p2p.legal'; const datapodEndpoint = 'gdev-datapod.p2p.legal';
// const v2sDatapod = 'http://10.0.2.2:8080'; // const datapodEndpoint = '10.0.2.2:8080';
// Contexts // Contexts
late BuildContext homeContext; late BuildContext homeContext;

View File

@ -1,6 +1,6 @@
const String updateProfileQ = r''' const String updateProfileQ = r'''
mutation ($address: String!, $hash: String!, $signature: String!, $title: String, $description: String, $avatar: String, $geoloc: GeolocInput, $city: String, $socials: [SocialInput!]) { mutation ($address: String!, $hash: String!, $signature: String!, $title: String, $description: String, $avatarBase64: String, $geoloc: GeolocInput, $city: String, $socials: [SocialInput!]) {
updateProfile(address: $address, hash: $hash, signature: $signature, title: $title, description: $description, avatarBase64: $avatar, geoloc: $geoloc, city: $city, socials: $socials) { updateProfile(address: $address, hash: $hash, signature: $signature, title: $title, description: $description, avatarBase64: $avatarBase64, geoloc: $geoloc, city: $city, socials: $socials) {
message message
success success
} }
@ -25,6 +25,15 @@ mutation ($addressOld: String!, $addressNew: String!, $hash: String!, $signature
} }
'''; ''';
const String addTransactionCommentQ = r'''
mutation ($id: String!, $address: String!, $hash: String!, $signature: String!, $comment: String!) {
addTransaction(id: $id, address: $address, hash: $hash, signature: $signature, comment: $comment) {
message
success
}
}
''';
const String getAvatarQ = r''' const String getAvatarQ = r'''
query ($address: String!) { query ($address: String!) {
profiles_by_pk(address: $address) { profiles_by_pk(address: $address) {

View File

@ -203,7 +203,7 @@ class DuniterIndexer with ChangeNotifier {
'name': name, 'name': name,
}; };
final result = await _execQuery(isIdtyExistQ, variables); final result = await _execQuery(isIdtyExistQ, variables);
return result.data!['identity']?.isNotEmpty ?? false; return result.data?['identity']?.isNotEmpty ?? false;
} }
Future<DateTime> getBlockStart() async { Future<DateTime> getBlockStart() async {

View File

@ -6,6 +6,7 @@ import 'dart:async';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:gecko/models/wallet_data.dart'; import 'package:gecko/models/wallet_data.dart';
import 'package:gecko/providers/substrate_sdk.dart'; import 'package:gecko/providers/substrate_sdk.dart';
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
import 'package:gecko/widgets/commons/common_elements.dart'; import 'package:gecko/widgets/commons/common_elements.dart';
import 'package:path_provider/path_provider.dart'; import 'package:path_provider/path_provider.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -76,6 +77,20 @@ class MyWalletsProvider with ChangeNotifier {
return targetedWallet; return targetedWallet;
} }
Future<bool> askPinCode() async {
final defaultWallet = getDefaultWallet();
if (pinCode.isEmpty) {
await Navigator.push(
homeContext,
MaterialPageRoute(
builder: (homeContext) => UnlockingWallet(wallet: defaultWallet),
),
);
}
return pinCode.isNotEmpty;
}
WalletData? getWalletDataByAddress(String address) { WalletData? getWalletDataByAddress(String address) {
WalletData? targetedWallet; WalletData? targetedWallet;

View File

@ -183,12 +183,12 @@ class SubstrateSdk with ChangeNotifier {
} }
Future<String> signDatapod(String document, String address) async { Future<String> signDatapod(String document, String address) async {
final myWallets = final myWalletProvider =
Provider.of<MyWalletsProvider>(homeContext, listen: false); Provider.of<MyWalletsProvider>(homeContext, listen: false);
final messageToSign = Uint8List.fromList(document.codeUnits); final messageToSign = Uint8List.fromList(document.codeUnits);
final signatureString = final signatureString =
await _signMessage(messageToSign, address, myWallets.pinCode); await _signMessage(messageToSign, address, myWalletProvider.pinCode);
final signatureInt = HEX.decode(signatureString.substring(2)); final signatureInt = HEX.decode(signatureString.substring(2));
final signature64 = base64Encode(signatureInt); final signature64 = base64Encode(signatureInt);
@ -209,26 +209,27 @@ class SubstrateSdk with ChangeNotifier {
await _getStorage('identity.identityIndexOf.multi($jsonString)')); await _getStorage('identity.identityIndexOf.multi($jsonString)'));
} }
Future<List<int>?> getCertsCounter(String address) async { Future<List<int>> getCertsCounter(String address) async {
final idtyIndex = await _getIdentityIndexOf(address); final idtyIndex = await _getIdentityIndexOf(address);
if (idtyIndex == null) { if (idtyIndex == null) {
return null; return [];
} }
final certsReceiver = final certsReceiver =
await _getStorage('cert.storageIdtyCertMeta($idtyIndex)') ?? []; await _getStorage('cert.storageIdtyCertMeta($idtyIndex)') ?? [];
if (certsCounterCache[address] == null) {
certsCounterCache.putIfAbsent(address, () => []);
}
try { try {
certsCounterCache.update( certsCounterCache.update(
address, address,
(value) => [ (value) => [
certsReceiver['receivedCount'] as int, certsReceiver['receivedCount'] as int,
certsReceiver['issuedCount'] as int certsReceiver['issuedCount'] as int
],
ifAbsent: () => [
certsReceiver['receivedCount'] as int,
certsReceiver['issuedCount'] as int
]); ]);
} catch (e) { } catch (e) {
// catching String to int error .. network error? log.e(e);
} }
return certsCounterCache[address]!; return certsCounterCache[address]!;
} }
@ -1059,7 +1060,7 @@ class SubstrateSdk with ChangeNotifier {
final toCerts = await getCertsCounter(destAddress); final toCerts = await getCertsCounter(destAddress);
log.d( log.d(
"debug toCert: ${toCerts?[0]} --- ${currencyParameters['minCertForMembership']!} --- $toIdtyStatus"); "debug toCert: ${toCerts[0]} --- ${currencyParameters['minCertForMembership']!} --- $toIdtyStatus");
if (toIdtyStatus == IdtyStatus.none) { if (toIdtyStatus == IdtyStatus.none) {
txInfo = TxInfoData( txInfo = TxInfoData(
@ -1070,7 +1071,7 @@ class SubstrateSdk with ChangeNotifier {
txOptions = [destAddress]; txOptions = [destAddress];
} else if (toIdtyStatus == IdtyStatus.validated || } else if (toIdtyStatus == IdtyStatus.validated ||
toIdtyStatus == IdtyStatus.confirmed) { toIdtyStatus == IdtyStatus.confirmed) {
if (toCerts![0] >= currencyParameters['minCertForMembership']! - 1 && if (toCerts[0] >= currencyParameters['minCertForMembership']! - 1 &&
toIdtyStatus != IdtyStatus.validated) { toIdtyStatus != IdtyStatus.validated) {
log.d('Batch cert and membership validation'); log.d('Batch cert and membership validation');
txInfo = TxInfoData( txInfo = TxInfoData(

View File

@ -5,6 +5,7 @@ import 'package:flutter/material.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:gecko/models/queries_datapod.dart'; import 'package:gecko/models/queries_datapod.dart';
import 'package:gecko/models/scale_functions.dart'; import 'package:gecko/models/scale_functions.dart';
import 'package:gecko/providers/my_wallets.dart';
import 'package:gecko/providers/substrate_sdk.dart'; import 'package:gecko/providers/substrate_sdk.dart';
import 'package:graphql_flutter/graphql_flutter.dart'; import 'package:graphql_flutter/graphql_flutter.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -13,6 +14,24 @@ import 'package:uuid/uuid.dart';
class V2sDatapodProvider with ChangeNotifier { class V2sDatapodProvider with ChangeNotifier {
late GraphQLClient datapodClient; late GraphQLClient datapodClient;
Future<Map<String, dynamic>> _setSignedVariables(
String address, Map<String, dynamic> messageToSign) async {
final myWalletProvider =
Provider.of<MyWalletsProvider>(homeContext, listen: false);
final sub = Provider.of<SubstrateSdk>(homeContext, listen: false);
final hashDocBytes = utf8.encode(jsonEncode(messageToSign));
final hashDoc = sha256.convert(hashDocBytes).toString().toUpperCase();
if (!await myWalletProvider.askPinCode()) return {};
final signature = await sub.signDatapod(hashDoc, address);
return <String, dynamic>{
...messageToSign,
'hash': hashDoc,
'signature': signature
};
}
Future<QueryResult> _execQuery( Future<QueryResult> _execQuery(
String query, Map<String, dynamic> variables) async { String query, Map<String, dynamic> variables) async {
final QueryOptions options = final QueryOptions options =
@ -29,9 +48,7 @@ class V2sDatapodProvider with ChangeNotifier {
String? city, String? city,
List<Map<String, String>>? socials, List<Map<String, String>>? socials,
Map<String, double>? geoloc}) async { Map<String, double>? geoloc}) async {
final sub = Provider.of<SubstrateSdk>(homeContext, listen: false); final messageToSign = {
final messageToSign = jsonEncode({
'address': address, 'address': address,
'description': description, 'description': description,
'avatarBase64': avatar, 'avatarBase64': avatar,
@ -39,22 +56,10 @@ class V2sDatapodProvider with ChangeNotifier {
'title': title, 'title': title,
'city': city, 'city': city,
'socials': socials 'socials': socials
});
final hashDocBytes = utf8.encode(messageToSign);
final hashDoc = sha256.convert(hashDocBytes).toString().toUpperCase();
final signature = await sub.signDatapod(hashDoc, address);
final variables = <String, dynamic>{
'address': address,
'hash': hashDoc,
'signature': signature,
'title': title,
'description': description,
'avatar': avatar,
'city': city,
'socials': socials,
'geoloc': geoloc,
}; };
final variables = await _setSignedVariables(address, messageToSign);
if (variables.isEmpty) return false;
final result = await _execQuery(updateProfileQ, variables); final result = await _execQuery(updateProfileQ, variables);
if (result.hasException) { if (result.hasException) {
log.e(result.exception.toString()); log.e(result.exception.toString());
@ -65,18 +70,10 @@ class V2sDatapodProvider with ChangeNotifier {
} }
Future<bool> deleteProfile({required String address}) async { Future<bool> deleteProfile({required String address}) async {
final sub = Provider.of<SubstrateSdk>(homeContext, listen: false); final messageToSign = {'address': address};
final variables = await _setSignedVariables(address, messageToSign);
if (variables.isEmpty) return false;
final messageToSign = jsonEncode({'address': address});
final hashDocBytes = utf8.encode(messageToSign);
final hashDoc = sha256.convert(hashDocBytes).toString().toUpperCase();
final signature = await sub.signDatapod(hashDoc, address);
final variables = <String, dynamic>{
'address': address,
'hash': hashDoc,
'signature': signature
};
final result = await _execQuery(deleteProfileQ, variables); final result = await _execQuery(deleteProfileQ, variables);
if (result.hasException) { if (result.hasException) {
log.e(result.exception.toString()); log.e(result.exception.toString());
@ -88,20 +85,10 @@ class V2sDatapodProvider with ChangeNotifier {
Future<bool> migrateProfile( Future<bool> migrateProfile(
{required String addressOld, required String addressNew}) async { {required String addressOld, required String addressNew}) async {
final sub = Provider.of<SubstrateSdk>(homeContext, listen: false); final messageToSign = {'addressOld': addressOld, 'addressNew': addressNew};
final variables = await _setSignedVariables(addressOld, messageToSign);
if (variables.isEmpty) return false;
final messageToSign =
jsonEncode({'addressOld': addressOld, 'addressNew': addressNew});
final hashDocBytes = utf8.encode(messageToSign);
final hashDoc = sha256.convert(hashDocBytes).toString().toUpperCase();
final signature = await sub.signDatapod(hashDoc, addressOld);
final variables = <String, dynamic>{
'addressOld': addressOld,
'addressNew': addressNew,
'hash': hashDoc,
'signature': signature
};
final result = await _execQuery(migrateProfileQ, variables); final result = await _execQuery(migrateProfileQ, variables);
if (result.hasException) { if (result.hasException) {
log.e(result.exception.toString()); log.e(result.exception.toString());
@ -111,6 +98,28 @@ class V2sDatapodProvider with ChangeNotifier {
return true; return true;
} }
Future<bool> addTransactionComment({
required String id,
required String issuer,
required String comment,
}) async {
final messageToSign = {
'id': id,
'address': issuer,
'comment': comment,
};
final variables = await _setSignedVariables(issuer, messageToSign);
if (variables.isEmpty) return false;
final result = await _execQuery(addTransactionCommentQ, variables);
if (result.hasException) {
log.e(result.exception.toString());
return false;
}
log.d(result.data!['addTransaction']['message']);
return true;
}
Future<bool> setAvatar(String address, String avatarPath) async { Future<bool> setAvatar(String address, String avatarPath) async {
final avatarBytes = await File(avatarPath).readAsBytes(); final avatarBytes = await File(avatarPath).readAsBytes();
final avatarString = base64Encode(avatarBytes); final avatarString = base64Encode(avatarBytes);

View File

@ -13,7 +13,6 @@ import 'package:gecko/models/wallet_data.dart';
import 'package:gecko/providers/substrate_sdk.dart'; import 'package:gecko/providers/substrate_sdk.dart';
import 'package:gecko/providers/v2s_datapod.dart'; import 'package:gecko/providers/v2s_datapod.dart';
import 'package:gecko/widgets/commons/common_elements.dart'; import 'package:gecko/widgets/commons/common_elements.dart';
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
import 'package:gecko/screens/transaction_in_progress.dart'; import 'package:gecko/screens/transaction_in_progress.dart';
import 'package:image_picker/image_picker.dart'; import 'package:image_picker/image_picker.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -67,11 +66,14 @@ class WalletOptionsProvider with ChangeNotifier {
password: myWalletProvider.pinCode); password: myWalletProvider.pinCode);
} }
await walletBox.delete(wallet.key); await walletBox.delete(wallet.address);
if (wallet.imageCustomPath != null) { if (wallet.imageCustomPath != null) {
final avatarFile = File(wallet.imageCustomPath!); final avatarFile = File(wallet.imageCustomPath!);
await avatarFile.delete(); if (await avatarFile.exists()) {
await avatarFile.delete();
}
} }
datapod.deleteProfile(address: wallet.address); datapod.deleteProfile(address: wallet.address);
await sub.deleteAccounts([wallet.address]); await sub.deleteAccounts([wallet.address]);
@ -221,21 +223,7 @@ class WalletOptionsProvider with ChangeNotifier {
return; return;
} }
WalletData? defaultWallet = if (!await myWalletProvider.askPinCode()) return;
myWalletProvider.getDefaultWallet();
if (myWalletProvider.pinCode == '') {
await Navigator.push(
context,
MaterialPageRoute(
builder: (homeContext) {
return UnlockingWallet(
wallet: defaultWallet);
},
),
);
}
if (myWalletProvider.pinCode == '') return;
final wallet = myWalletProvider final wallet = myWalletProvider
.getWalletDataByAddress(address.text); .getWalletDataByAddress(address.text);

View File

@ -82,8 +82,10 @@ class _HomeScreenState extends State<HomeScreen> {
'wss://$validIndexerEndpoint/v1/graphql', 'wss://$validIndexerEndpoint/v1/graphql',
); );
const headerWebsocket =
datapodEndpoint == '10.0.2.2:8080' ? 'ws' : 'wss';
final wsLinkDatapod = WebSocketLink( final wsLinkDatapod = WebSocketLink(
'wss://$datapodEndpoint/v1/graphql', '$headerWebsocket://$datapodEndpoint/v1/graphql',
); );
duniterIndexer.indexerClient = GraphQLClient( duniterIndexer.indexerClient = GraphQLClient(

View File

@ -4,10 +4,8 @@ import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:durt/durt.dart'; import 'package:durt/durt.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:gecko/models/wallet_data.dart';
import 'package:gecko/providers/my_wallets.dart'; import 'package:gecko/providers/my_wallets.dart';
import 'package:gecko/providers/substrate_sdk.dart'; import 'package:gecko/providers/substrate_sdk.dart';
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
import 'package:gecko/widgets/commons/top_appbar.dart'; import 'package:gecko/widgets/commons/top_appbar.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -92,20 +90,9 @@ class _ChangePinScreenState extends State<ChangePinScreen> {
backgroundColor: Colors.green[400], backgroundColor: Colors.green[400],
), ),
onPressed: () async { onPressed: () async {
WalletData defaultWallet = final defaultWallet = myWalletProvider.getDefaultWallet();
myWalletProvider.getDefaultWallet();
if (myWalletProvider.pinCode == '') { if (!await myWalletProvider.askPinCode()) return;
await Navigator.push(
context,
MaterialPageRoute(
builder: (homeContext) {
return UnlockingWallet(wallet: defaultWallet);
},
),
);
}
if (myWalletProvider.pinCode == '') return;
await sub.changePassword(context, defaultWallet.address, await sub.changePassword(context, defaultWallet.address,
widget.walletProvider.pinCode, newPin.text); widget.walletProvider.pinCode, newPin.text);

View File

@ -5,14 +5,12 @@ import 'package:flutter/material.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:gecko/models/chest_data.dart'; import 'package:gecko/models/chest_data.dart';
import 'package:gecko/models/scale_functions.dart'; import 'package:gecko/models/scale_functions.dart';
import 'package:gecko/models/wallet_data.dart';
import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/models/widgets_keys.dart';
import 'package:gecko/providers/chest_provider.dart'; import 'package:gecko/providers/chest_provider.dart';
import 'package:gecko/providers/my_wallets.dart'; import 'package:gecko/providers/my_wallets.dart';
import 'package:gecko/providers/substrate_sdk.dart'; import 'package:gecko/providers/substrate_sdk.dart';
import 'package:gecko/screens/myWallets/custom_derivations.dart'; import 'package:gecko/screens/myWallets/custom_derivations.dart';
import 'package:gecko/screens/myWallets/show_seed.dart'; import 'package:gecko/screens/myWallets/show_seed.dart';
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
import 'package:gecko/widgets/bottom_app_bar.dart'; import 'package:gecko/widgets/bottom_app_bar.dart';
import 'package:gecko/widgets/commons/offline_info.dart'; import 'package:gecko/widgets/commons/offline_info.dart';
import 'package:gecko/widgets/commons/top_appbar.dart'; import 'package:gecko/widgets/commons/top_appbar.dart';
@ -44,18 +42,8 @@ class ChestOptions extends StatelessWidget {
onTap: () async { onTap: () async {
final myWalletProvider = final myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false); Provider.of<MyWalletsProvider>(context, listen: false);
WalletData? defaultWallet = if (!await myWalletProvider.askPinCode()) return;
myWalletProvider.getDefaultWallet();
final String? pin = await Navigator.push(
context,
MaterialPageRoute(
builder: (homeContext) {
return UnlockingWallet(wallet: defaultWallet);
},
),
);
if (pin == null) return;
Navigator.push( Navigator.push(
context, context,
MaterialPageRoute(builder: (context) { MaterialPageRoute(builder: (context) {

View File

@ -5,10 +5,8 @@ import 'package:gecko/globals.dart';
import 'package:gecko/models/scale_functions.dart'; import 'package:gecko/models/scale_functions.dart';
import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/models/widgets_keys.dart';
import 'package:gecko/providers/my_wallets.dart'; import 'package:gecko/providers/my_wallets.dart';
import 'package:gecko/models/wallet_data.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/screens/myWallets/restore_chest.dart'; import 'package:gecko/screens/myWallets/restore_chest.dart';
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
import 'package:carousel_slider/carousel_slider.dart'; import 'package:carousel_slider/carousel_slider.dart';
import 'package:gecko/screens/onBoarding/5.dart'; import 'package:gecko/screens/onBoarding/5.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -110,25 +108,13 @@ class _ChooseChestState extends State<ChooseChest> {
onPressed: () async { onPressed: () async {
await configBox.put('currentChest', currentChest); await configBox.put('currentChest', currentChest);
myWalletProvider.pinCode = ''; myWalletProvider.pinCode = '';
WalletData? defaultWallet = if (!await myWalletProvider.askPinCode()) return;
myWalletProvider.getDefaultWallet();
myWalletProvider.reload();
await Navigator.push(
context,
MaterialPageRoute(
builder: (homeContext) {
return UnlockingWallet(wallet: defaultWallet);
},
),
);
Navigator.popUntil( Navigator.popUntil(
context, context,
ModalRoute.withName('/'), ModalRoute.withName('/'),
); );
if (myWalletProvider.pinCode != '') { Navigator.pushNamed(context, '/mywallets');
Navigator.pushNamed(context, '/mywallets');
}
}, },
child: Text( child: Text(
'openThisChest'.tr(), 'openThisChest'.tr(),

View File

@ -6,7 +6,6 @@ import 'package:flutter/material.dart';
import 'package:gecko/models/scale_functions.dart'; import 'package:gecko/models/scale_functions.dart';
import 'package:gecko/models/wallet_data.dart'; import 'package:gecko/models/wallet_data.dart';
import 'package:gecko/providers/my_wallets.dart'; import 'package:gecko/providers/my_wallets.dart';
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
import 'package:gecko/widgets/commons/top_appbar.dart'; import 'package:gecko/widgets/commons/top_appbar.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -109,20 +108,7 @@ class _CustomDerivationState extends State<CustomDerivation> {
backgroundColor: orangeC, backgroundColor: orangeC,
), ),
onPressed: () async { onPressed: () async {
WalletData? defaultWallet = if (!await myWalletProvider.askPinCode()) return;
myWalletProvider.getDefaultWallet();
if (myWalletProvider.pinCode == '') {
await Navigator.push(
context,
MaterialPageRoute(
builder: (homeContext) {
return UnlockingWallet(wallet: defaultWallet);
},
),
);
}
if (myWalletProvider.pinCode != '') return;
String newDerivationName = String newDerivationName =
'${'wallet'.tr()} ${myWalletProvider.listWallets.last.number! + 2}'; '${'wallet'.tr()} ${myWalletProvider.listWallets.last.number! + 2}';
if (dropdownValue == 'root') { if (dropdownValue == 'root') {

View File

@ -4,13 +4,11 @@ import 'package:easy_localization/easy_localization.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/models/scale_functions.dart'; import 'package:gecko/models/scale_functions.dart';
import 'package:gecko/models/wallet_data.dart';
import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/models/widgets_keys.dart';
import 'package:gecko/providers/my_wallets.dart'; import 'package:gecko/providers/my_wallets.dart';
import 'package:gecko/providers/substrate_sdk.dart'; import 'package:gecko/providers/substrate_sdk.dart';
import 'package:gecko/widgets/commons/common_elements.dart'; import 'package:gecko/widgets/commons/common_elements.dart';
import 'package:gecko/screens/myWallets/migrate_identity.dart'; import 'package:gecko/screens/myWallets/migrate_identity.dart';
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
import 'package:gecko/screens/transaction_in_progress.dart'; import 'package:gecko/screens/transaction_in_progress.dart';
import 'package:gecko/widgets/commons/top_appbar.dart'; import 'package:gecko/widgets/commons/top_appbar.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -113,20 +111,7 @@ class ManageMembership extends StatelessWidget {
Provider.of<MyWalletsProvider>(context, listen: false); Provider.of<MyWalletsProvider>(context, listen: false);
final sub = Provider.of<SubstrateSdk>(context, listen: false); final sub = Provider.of<SubstrateSdk>(context, listen: false);
WalletData? defaultWallet = myWalletProvider.getDefaultWallet(); if (!await myWalletProvider.askPinCode()) return;
String? pin;
if (myWalletProvider.pinCode == '') {
pin = await Navigator.push(
context,
MaterialPageRoute(
builder: (homeContext) {
return UnlockingWallet(wallet: defaultWallet);
},
),
);
}
if (pin == null || myWalletProvider.pinCode == '') return;
final transactionId = final transactionId =
await sub.revokeIdentity(address, myWalletProvider.pinCode); await sub.revokeIdentity(address, myWalletProvider.pinCode);

View File

@ -6,7 +6,6 @@ import 'package:gecko/globals.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/models/migrate_wallet_checks.dart'; import 'package:gecko/models/migrate_wallet_checks.dart';
import 'package:gecko/models/scale_functions.dart'; import 'package:gecko/models/scale_functions.dart';
import 'package:gecko/models/wallet_data.dart';
import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/models/widgets_keys.dart';
import 'package:gecko/providers/duniter_indexer.dart'; import 'package:gecko/providers/duniter_indexer.dart';
import 'package:gecko/providers/generate_wallets.dart'; import 'package:gecko/providers/generate_wallets.dart';
@ -14,7 +13,6 @@ import 'package:gecko/providers/my_wallets.dart';
import 'package:gecko/providers/substrate_sdk.dart'; import 'package:gecko/providers/substrate_sdk.dart';
import 'package:gecko/providers/wallet_options.dart'; import 'package:gecko/providers/wallet_options.dart';
import 'package:gecko/providers/wallets_profiles.dart'; import 'package:gecko/providers/wallets_profiles.dart';
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
import 'package:gecko/screens/transaction_in_progress.dart'; import 'package:gecko/screens/transaction_in_progress.dart';
import 'package:gecko/widgets/commons/top_appbar.dart'; import 'package:gecko/widgets/commons/top_appbar.dart';
import 'package:polkawallet_sdk/api/apiKeyring.dart'; import 'package:polkawallet_sdk/api/apiKeyring.dart';
@ -189,21 +187,7 @@ class MigrateIdentityScreen extends StatelessWidget {
), ),
onPressed: statusData.canValidate && mnemonicIsValid onPressed: statusData.canValidate && mnemonicIsValid
? () async { ? () async {
WalletData? defaultWallet = if (!await myWalletProvider.askPinCode()) return;
myWalletProvider.getDefaultWallet();
String? pin;
if (myWalletProvider.pinCode == '') {
pin = await Navigator.push(
context,
MaterialPageRoute(
builder: (homeContext) {
return UnlockingWallet(wallet: defaultWallet);
},
),
);
}
if (myWalletProvider.pinCode == '') return;
await sub.importAccount( await sub.importAccount(
mnemonic: newMnemonicSentence.text, mnemonic: newMnemonicSentence.text,
@ -215,7 +199,7 @@ class MigrateIdentityScreen extends StatelessWidget {
final transactionId = await sub.migrateIdentity( final transactionId = await sub.migrateIdentity(
fromAddress: fromAddress, fromAddress: fromAddress,
destAddress: newWalletAddress.text, destAddress: newWalletAddress.text,
fromPassword: pin ?? myWalletProvider.pinCode, fromPassword: myWalletProvider.pinCode,
destPassword: 'password', destPassword: 'password',
withBalance: true, withBalance: true,
fromBalance: statusData.balance); fromBalance: statusData.balance);

View File

@ -327,6 +327,9 @@ class WalletOptions extends StatelessWidget {
initialData: const [IdtyStatus.unknown], initialData: const [IdtyStatus.unknown],
builder: builder:
(BuildContext context, AsyncSnapshot<List<IdtyStatus>> snapshot) { (BuildContext context, AsyncSnapshot<List<IdtyStatus>> snapshot) {
if (!snapshot.hasData || snapshot.hasError) {
return const SizedBox.shrink();
}
if (snapshot.data!.first == IdtyStatus.created) { if (snapshot.data!.first == IdtyStatus.created) {
return Column(children: [ return Column(children: [
ScaledSizedBox( ScaledSizedBox(
@ -526,7 +529,8 @@ class WalletOptions extends StatelessWidget {
future: sub.hasAccountConsumers(wallet.address), future: sub.hasAccountConsumers(wallet.address),
builder: (BuildContext context, AsyncSnapshot<bool> hasConsumers) { builder: (BuildContext context, AsyncSnapshot<bool> hasConsumers) {
if (hasConsumers.connectionState != ConnectionState.done || if (hasConsumers.connectionState != ConnectionState.done ||
hasConsumers.hasError) { hasConsumers.hasError ||
!hasConsumers.hasData) {
return const Text(''); return const Text('');
} }
final double balance = final double balance =

View File

@ -18,8 +18,6 @@ import 'package:gecko/widgets/commons/offline_info.dart';
import 'package:gecko/widgets/commons/top_appbar.dart'; import 'package:gecko/widgets/commons/top_appbar.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
AsyncSnapshot<List>? mnemoList;
class OnboardingStepFive extends StatefulWidget { class OnboardingStepFive extends StatefulWidget {
const OnboardingStepFive({Key? key, this.skipIntro = false}) const OnboardingStepFive({Key? key, this.skipIntro = false})
: super(key: key); : super(key: key);
@ -155,35 +153,35 @@ Widget sentanceArray(BuildContext context) {
padding: EdgeInsets.all(scaleSize(11)), padding: EdgeInsets.all(scaleSize(11)),
child: FutureBuilder( child: FutureBuilder(
future: generateWalletProvider.generateWordList(context), future: generateWalletProvider.generateWordList(context),
builder: (BuildContext context, AsyncSnapshot<List> data) { builder: (BuildContext context, AsyncSnapshot<List> mnemoListData) {
if (!data.hasData) { if (!mnemoListData.hasData) {
return const Text(''); return const Text('');
} else { } else {
mnemoList = data; final mnemoList = mnemoListData.data!;
return Column( return Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.max, mainAxisSize: MainAxisSize.max,
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[ children: <Widget>[
Row(children: <Widget>[ Row(children: <Widget>[
arrayCell(data.data![0]), arrayCell(mnemoList[0]),
arrayCell(data.data![1]), arrayCell(mnemoList[1]),
arrayCell(data.data![2]), arrayCell(mnemoList[2]),
arrayCell(data.data![3]), arrayCell(mnemoList[3]),
]), ]),
ScaledSizedBox(height: 12), ScaledSizedBox(height: 12),
Row(children: <Widget>[ Row(children: <Widget>[
arrayCell(data.data![4]), arrayCell(mnemoList[4]),
arrayCell(data.data![5]), arrayCell(mnemoList[5]),
arrayCell(data.data![6]), arrayCell(mnemoList[6]),
arrayCell(data.data![7]), arrayCell(mnemoList[7]),
]), ]),
ScaledSizedBox(height: 12), ScaledSizedBox(height: 12),
Row(children: <Widget>[ Row(children: <Widget>[
arrayCell(data.data![8]), arrayCell(mnemoList[8]),
arrayCell(data.data![9]), arrayCell(mnemoList[9]),
arrayCell(data.data![10]), arrayCell(mnemoList[10]),
arrayCell(data.data![11]), arrayCell(mnemoList[11]),
]), ]),
]); ]);
} }

View File

@ -34,7 +34,7 @@ class _SearchScreenState extends State<SearchScreen> {
// Function to check clipboard and update if necessary // Function to check clipboard and update if necessary
Future<void> checkAndUpdateClipboard() async { Future<void> checkAndUpdateClipboard() async {
var clipboardData = await Clipboard.getData(Clipboard.kTextPlain); final clipboardData = await Clipboard.getData(Clipboard.kTextPlain);
if (clipboardData?.text != null && clipboardData!.text != pastedAddress) { if (clipboardData?.text != null && clipboardData!.text != pastedAddress) {
pastedAddress = clipboardData.text ?? ''; pastedAddress = clipboardData.text ?? '';
canPasteAddress = await isAddress(pastedAddress); canPasteAddress = await isAddress(pastedAddress);

View File

@ -6,6 +6,7 @@ import 'package:gecko/models/widgets_keys.dart';
import 'package:gecko/providers/my_wallets.dart'; import 'package:gecko/providers/my_wallets.dart';
import 'package:gecko/providers/substrate_sdk.dart'; import 'package:gecko/providers/substrate_sdk.dart';
import 'package:gecko/providers/wallets_profiles.dart'; import 'package:gecko/providers/wallets_profiles.dart';
import 'package:gecko/widgets/commons/loading.dart';
import 'package:gecko/widgets/transaction_status.dart'; import 'package:gecko/widgets/transaction_status.dart';
import 'package:gecko/widgets/transaction_status_icon.dart'; import 'package:gecko/widgets/transaction_status_icon.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -36,7 +37,7 @@ class _TransactionInProgressState extends State<TransactionInProgress> {
late String toUsernameFormat; late String toUsernameFormat;
late String amount; late String amount;
late bool isUdUnit; late bool isUdUnit;
late TransactionContent txContent; TransactionContent? txContent;
@override @override
void initState() { void initState() {
@ -59,33 +60,49 @@ class _TransactionInProgressState extends State<TransactionInProgress> {
amount = walletProfiles.payAmount.text; amount = walletProfiles.payAmount.text;
isUdUnit = configBox.get('isUdUnit') ?? false; isUdUnit = configBox.get('isUdUnit') ?? false;
waitForTransactionStatus();
super.initState(); super.initState();
} }
void waitForTransactionStatus() async {
final sub = Provider.of<SubstrateSdk>(context, listen: false);
while (!sub.transactionStatus.containsKey(widget.transactionId)) {
await Future.delayed(const Duration(seconds: 2));
}
setState(() {
txContent = sub.transactionStatus[widget.transactionId]!;
});
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final sub = Provider.of<SubstrateSdk>(context, listen: true); final sub = Provider.of<SubstrateSdk>(context, listen: true);
if (txContent == null) {
return const Center(child: Loading());
}
if (sub.transactionStatus.containsKey(widget.transactionId)) { if (sub.transactionStatus.containsKey(widget.transactionId)) {
txContent = sub.transactionStatus[widget.transactionId]!; txContent = sub.transactionStatus[widget.transactionId]!;
} }
if (txContent.status == TransactionStatus.success) { if (txContent!.status == TransactionStatus.success) {
resultText = 'extrinsicValidated' resultText = 'extrinsicValidated'
.tr(args: [actionMap[widget.transType] ?? 'strangeTransaction'.tr()]); .tr(args: [actionMap[widget.transType] ?? 'strangeTransaction'.tr()]);
} else if (txContent.status == TransactionStatus.failed) { } else if (txContent!.status == TransactionStatus.failed) {
resultText = errorTransactionMap[txContent.error] ?? txContent.error!; resultText = errorTransactionMap[txContent!.error] ?? txContent!.error!;
} else { } else {
resultText = statusStatusMap[txContent.status] ?? resultText = statusStatusMap[txContent!.status] ??
'Unknown status: ${txContent.status}'; 'Unknown status: ${txContent!.status}';
} }
Widget buildTransactionStatus() { Widget buildTransactionStatus() {
return Column( return Column(
children: [ children: [
TransactionStatusIcon(txContent.status), TransactionStatusIcon(txContent!.status),
ScaledSizedBox(height: 7), ScaledSizedBox(height: 7),
if (txContent.status != TransactionStatus.none) if (txContent!.status != TransactionStatus.none)
Text( Text(
resultText, resultText,
textAlign: TextAlign.center, textAlign: TextAlign.center,

View File

@ -152,13 +152,14 @@ class WalletViewScreen extends StatelessWidget {
future: sub.certState(defaultWallet.address, address), future: sub.certState(defaultWallet.address, address),
builder: (context, AsyncSnapshot<Map<String, int>> snapshot) { builder: (context, AsyncSnapshot<Map<String, int>> snapshot) {
if (snapshot.data == null) return const SizedBox.shrink(); if (snapshot.data == null) return const SizedBox.shrink();
final certStateData = snapshot.data!;
String duration = ''; String duration = '';
if (snapshot.data!['certDelay'] != null || if (certStateData['certDelay'] != null ||
snapshot.data!['certRenewable'] != null) { certStateData['certRenewable'] != null) {
final Duration durationSeconds = Duration( final Duration durationSeconds = Duration(
seconds: snapshot.data!['certDelay'] ?? seconds: certStateData['certDelay'] ??
snapshot.data!['certRenewable']!); certStateData['certRenewable']!);
final seconds = durationSeconds.inSeconds; final seconds = durationSeconds.inSeconds;
final minutes = durationSeconds.inMinutes; final minutes = durationSeconds.inMinutes;
@ -186,12 +187,12 @@ class WalletViewScreen extends StatelessWidget {
} }
} }
final toStatus = snapshot.data!['toStatus']; final toStatus = certStateData['toStatus'];
return Visibility( return Visibility(
visible: (snapshot.data != {}), visible: (snapshot.data != {}),
child: Column(children: <Widget>[ child: Column(children: <Widget>[
if (snapshot.data!['canCert'] != null || if (certStateData['canCert'] != null ||
duration == 'seconds'.tr(args: ['0'])) duration == 'seconds'.tr(args: ['0']))
Column(children: <Widget>[ Column(children: <Widget>[
ScaledSizedBox( ScaledSizedBox(
@ -273,10 +274,10 @@ class WalletViewScreen extends StatelessWidget {
]) ])
else if (toStatus == 1) else if (toStatus == 1)
waitToCert('mustConfirmHisIdentity', duration) waitToCert('mustConfirmHisIdentity', duration)
else if (snapshot.data!['certRenewable'] != null && else if (certStateData['certRenewable'] != null &&
duration != 'seconds'.tr(args: ['0'])) duration != 'seconds'.tr(args: ['0']))
waitToCert('canRenewCertInX', duration) waitToCert('canRenewCertInX', duration)
else if (snapshot.data!['certDelay'] != null) else if (certStateData['certDelay'] != null)
waitToCert('mustWaitXBeforeCertify', duration) waitToCert('mustWaitXBeforeCertify', duration)
]), ]),
); );

View File

@ -10,62 +10,57 @@ class Balance extends StatelessWidget {
{Key? key, {Key? key,
required this.address, required this.address,
required this.size, required this.size,
this.color = Colors.black, this.color = Colors.black})
this.loadingColor = const Color(0xffd07316)})
: super(key: key); : super(key: key);
final String address; final String address;
final double size; final double size;
final Color color; final Color color;
final Color loadingColor;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final walletOptions = final walletOptions =
Provider.of<WalletOptionsProvider>(context, listen: false); Provider.of<WalletOptionsProvider>(context, listen: false);
return Consumer<SubstrateSdk>(builder: (context, sdk, _) { return Consumer<SubstrateSdk>(builder: (context, sdk, _) {
return FutureBuilder( return ScaledSizedBox(
future: sdk.getBalance(address), height: size * 1.4,
builder: (BuildContext context, child: FutureBuilder(
AsyncSnapshot<Map<String, double>> globalBalance) { future: sdk.getBalance(address),
if (globalBalance.connectionState != ConnectionState.done || builder: (BuildContext context,
globalBalance.hasError) { AsyncSnapshot<Map<String, double>> globalBalance) {
if (walletOptions.balanceCache[address] != null && if (globalBalance.connectionState != ConnectionState.done ||
walletOptions.balanceCache[address] != -1) { globalBalance.hasError ||
!globalBalance.hasData) {
if (walletOptions.balanceCache[address] != null &&
walletOptions.balanceCache[address] != -1) {
return Row(children: [
Text(walletOptions.balanceCache[address]!.toString(),
style: scaledTextStyle(fontSize: size, color: color)),
ScaledSizedBox(width: 5),
UdUnitDisplay(size: scaleSize(size), color: color),
]);
} else {
return const SizedBox.shrink();
}
}
walletOptions.balanceCache[address] =
globalBalance.data!['transferableBalance']!;
if (walletOptions.balanceCache[address] != -1) {
return Row(children: [ return Row(children: [
Text(walletOptions.balanceCache[address]!.toString(), Text(
style: scaledTextStyle(fontSize: size, color: color)), walletOptions.balanceCache[address]!.toString(),
style: scaledTextStyle(
fontSize: size,
color: color,
),
),
ScaledSizedBox(width: 5), ScaledSizedBox(width: 5),
UdUnitDisplay(size: scaleSize(size), color: color), UdUnitDisplay(size: scaleSize(size), color: color),
]); ]);
} else { } else {
return ScaledSizedBox( return const Text('');
height: 15,
width: 15,
child: CircularProgressIndicator(
color: loadingColor,
strokeWidth: 2,
),
);
} }
} }),
walletOptions.balanceCache[address] = );
globalBalance.data!['transferableBalance']!;
if (walletOptions.balanceCache[address] != -1) {
return Row(children: [
Text(
walletOptions.balanceCache[address]!.toString(),
style: scaledTextStyle(
fontSize: size,
color: color,
),
),
ScaledSizedBox(width: 5),
UdUnitDisplay(size: scaleSize(size), color: color),
]);
} else {
return const Text('');
}
});
}); });
} }
} }

View File

@ -4,12 +4,10 @@ import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:gecko/models/scale_functions.dart'; import 'package:gecko/models/scale_functions.dart';
import 'package:gecko/models/wallet_data.dart';
import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/models/widgets_keys.dart';
import 'package:gecko/providers/my_wallets.dart'; import 'package:gecko/providers/my_wallets.dart';
import 'package:gecko/providers/search.dart'; import 'package:gecko/providers/search.dart';
import 'package:gecko/providers/wallets_profiles.dart'; import 'package:gecko/providers/wallets_profiles.dart';
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class GeckoBottomAppBar extends StatelessWidget { class GeckoBottomAppBar extends StatelessWidget {
@ -93,20 +91,8 @@ class GeckoBottomAppBar extends StatelessWidget {
onPressed: lockAction onPressed: lockAction
? null ? null
: () async { : () async {
WalletData? defaultWallet = if (!await myWalletProvider.askPinCode()) return;
myWalletProvider.getDefaultWallet();
if (myWalletProvider.pinCode == '') {
await Navigator.push(
context,
MaterialPageRoute(
builder: (homeContext) {
return UnlockingWallet(wallet: defaultWallet);
},
),
);
}
if (myWalletProvider.pinCode == '') return;
Navigator.popUntil(context, ModalRoute.withName('/')); Navigator.popUntil(context, ModalRoute.withName('/'));
//FIXME: Should not have to wait 300 milliseconds when /mywallets exist in navigator... //FIXME: Should not have to wait 300 milliseconds when /mywallets exist in navigator...
sleep(const Duration(milliseconds: 300)); sleep(const Duration(milliseconds: 300));

View File

@ -4,10 +4,8 @@ import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:gecko/models/scale_functions.dart'; import 'package:gecko/models/scale_functions.dart';
import 'package:gecko/models/wallet_data.dart';
import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/models/widgets_keys.dart';
import 'package:gecko/providers/my_wallets.dart'; import 'package:gecko/providers/my_wallets.dart';
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class AddNewDerivationButton extends StatelessWidget { class AddNewDerivationButton extends StatelessWidget {
@ -31,19 +29,8 @@ class AddNewDerivationButton extends StatelessWidget {
key: keyAddDerivation, key: keyAddDerivation,
onTap: () async { onTap: () async {
if (!myWalletProvider.isNewDerivationLoading) { if (!myWalletProvider.isNewDerivationLoading) {
WalletData? defaultWallet = if (!await myWalletProvider.askPinCode()) return;
myWalletProvider.getDefaultWallet();
if (myWalletProvider.pinCode == '') {
await Navigator.push(
context,
MaterialPageRoute(
builder: (homeContext) {
return UnlockingWallet(wallet: defaultWallet);
},
),
);
}
if (myWalletProvider.pinCode == '') return;
await myWalletProvider.generateNewDerivation( await myWalletProvider.generateNewDerivation(
context, newDerivationName); context, newDerivationName);
} }

View File

@ -16,31 +16,35 @@ class Certifications extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final sub = Provider.of<SubstrateSdk>(context);
return Column(children: <Widget>[ return Column(children: <Widget>[
Consumer<SubstrateSdk>(builder: (context, sdk, _) { FutureBuilder(
return FutureBuilder( future: sub.getCertsCounter(address),
future: sdk.getCertsCounter(address), builder: (BuildContext context, AsyncSnapshot<List<int>?> certs) {
builder: (BuildContext context, AsyncSnapshot<List<int>?> certs) { if ((certs.data != null && certs.data!.isEmpty) ||
return certs.data != null sub.certsCounterCache[address] == null) {
? Row( return const SizedBox.shrink();
children: [ }
Image.asset('assets/medal.png',
color: color, height: scaleSize(18)), final receivedCount = sub.certsCounterCache[address]![0];
ScaledSizedBox(width: 1), final sentCount = sub.certsCounterCache[address]![1];
Text(certs.data?[0].toString() ?? '0',
style: return Row(
scaledTextStyle(fontSize: size, color: color)), children: [
ScaledSizedBox(width: 5), Image.asset('assets/medal.png',
Text( color: color, height: scaleSize(18)),
"(${certs.data?[1].toString() ?? '0'})", ScaledSizedBox(width: 1),
style: scaledTextStyle( Text(receivedCount.toString(),
fontSize: size * 0.7, color: color), style: scaledTextStyle(fontSize: size, color: color)),
) ScaledSizedBox(width: 5),
], Text(
) "($sentCount)",
: const SizedBox(); style: scaledTextStyle(fontSize: size * 0.7, color: color),
}); )
}), ],
);
}),
]); ]);
} }
} }

View File

@ -44,9 +44,9 @@ class DragTuleAction extends StatelessWidget {
), ),
), ),
child: DragTarget<String>( child: DragTarget<String>(
onAccept: (senderAddress) async { onAcceptWithDetails: (senderAddress) async {
final walletData = final walletData =
myWalletProvider.getWalletDataByAddress(senderAddress); myWalletProvider.getWalletDataByAddress(senderAddress.data);
await sub.setCurrentWallet(walletData!); await sub.setCurrentWallet(walletData!);
sub.reload(); sub.reload();
paymentPopup(context, wallet.address, paymentPopup(context, wallet.address,
@ -58,7 +58,8 @@ class DragTuleAction extends StatelessWidget {
myWalletProvider.reload(); myWalletProvider.reload();
} }
}, },
onWillAccept: (senderAddress) => senderAddress != wallet.address, onWillAcceptWithDetails: (senderAddress) =>
senderAddress.data != wallet.address,
builder: ( builder: (
BuildContext context, BuildContext context,
List<dynamic> accepted, List<dynamic> accepted,

View File

@ -63,22 +63,45 @@ class HistoryQuery extends StatelessWidget {
} }
final List transactions = result.data?["transaction"]; final List transactions = result.data?["transaction"];
// Get transaction in progress if exist
String? transactionId;
for (final entry in sub.transactionStatus.entries) {
if (entry.value.from == address) {
transactionId = entry.key;
break;
}
}
if (result.hasException) { if (result.hasException) {
log.e('Error Indexer: ${result.exception}'); log.e('Error Indexer: ${result.exception}');
return Column(children: <Widget>[ return Column(children: <Widget>[
ScaledSizedBox(height: 50), Column(
Text( children: [
"noNetworkNoHistory".tr(), if (transactionId != null)
textAlign: TextAlign.center, TransactionInProgressTule(
style: scaledTextStyle(fontSize: 18), address: address, transactionId: transactionId),
ScaledSizedBox(height: 50),
Text(
"noNetworkNoHistory".tr(),
textAlign: TextAlign.center,
style: scaledTextStyle(fontSize: 18),
),
],
) )
]); ]);
} else if (transactions.isEmpty) { } else if (transactions.isEmpty) {
return Column(children: <Widget>[ return Column(children: <Widget>[
ScaledSizedBox(height: 50), Column(
Text( children: [
"noDataToDisplay".tr(), if (transactionId != null)
style: scaledTextStyle(fontSize: 18), TransactionInProgressTule(
address: address, transactionId: transactionId),
ScaledSizedBox(height: 50),
Text(
"noDataToDisplay".tr(),
style: scaledTextStyle(fontSize: 18),
),
],
) )
]); ]);
} }
@ -96,15 +119,6 @@ class HistoryQuery extends StatelessWidget {
offset: transactions.length, offset: transactions.length,
); );
// Get transaction in progress if exist
String? transactionId;
for (final entry in sub.transactionStatus.entries) {
if (entry.value.from == address) {
transactionId = entry.key;
break;
}
}
// Build history list // Build history list
return NotificationListener( return NotificationListener(
child: Builder( child: Builder(

View File

@ -28,26 +28,25 @@ class IdentityStatus extends StatelessWidget {
future: sub.idtyStatus([address]), future: sub.idtyStatus([address]),
initialData: [walletData.identityStatus], initialData: [walletData.identityStatus],
builder: (context, AsyncSnapshot<List<IdtyStatus>> snapshot) { builder: (context, AsyncSnapshot<List<IdtyStatus>> snapshot) {
if (snapshot.hasError || snapshot.data == null) { if (snapshot.data != null && !snapshot.hasError) {
log.e(snapshot.error); final resStatus = snapshot.data!.first;
return const Icon(Icons.close, color: Colors.red); walletData.identityStatus = resStatus;
walletBox.put(address, walletData);
} }
final resStatus = snapshot.data!.first; final resStatus = walletData.identityStatus;
walletData.identityStatus = resStatus;
walletBox.put(address, walletData);
if (!isOwner) { if (!isOwner) {
if (resStatus == IdtyStatus.confirmed) { if (resStatus == IdtyStatus.confirmed) {
return NameByAddress( return NameByAddress(
wallet: WalletData(address: address), wallet: walletData,
size: 18, size: 18,
color: Colors.grey[700]!, color: Colors.grey[700]!,
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
fontStyle: FontStyle.italic); fontStyle: FontStyle.italic);
} else if (resStatus == IdtyStatus.validated) { } else if (resStatus == IdtyStatus.validated) {
return NameByAddress( return NameByAddress(
wallet: WalletData(address: address), wallet: walletData,
size: 20, size: 20,
color: Colors.black, color: Colors.black,
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,

View File

@ -12,7 +12,6 @@ import 'package:gecko/providers/substrate_sdk.dart';
import 'package:gecko/providers/wallet_options.dart'; import 'package:gecko/providers/wallet_options.dart';
import 'package:gecko/providers/wallets_profiles.dart'; import 'package:gecko/providers/wallets_profiles.dart';
import 'package:gecko/screens/activity.dart'; import 'package:gecko/screens/activity.dart';
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
import 'package:gecko/screens/transaction_in_progress.dart'; import 'package:gecko/screens/transaction_in_progress.dart';
import 'package:gecko/widgets/balance.dart'; import 'package:gecko/widgets/balance.dart';
import 'package:gecko/widgets/name_by_address.dart'; import 'package:gecko/widgets/name_by_address.dart';
@ -34,17 +33,8 @@ void paymentPopup(BuildContext context, String toAddress, String? username) {
walletViewProvider.payAmount.text = ''; walletViewProvider.payAmount.text = '';
Future executeTransfert() async { Future executeTransfert() async {
if (myWalletProvider.pinCode == '') { if (!await myWalletProvider.askPinCode()) return;
await Navigator.push(
context,
MaterialPageRoute(
builder: (homeContext) {
return UnlockingWallet(wallet: defaultWallet);
},
),
);
}
if (myWalletProvider.pinCode == '') return;
// Payment workflow ! // Payment workflow !
final sub = Provider.of<SubstrateSdk>(context, listen: false); final sub = Provider.of<SubstrateSdk>(context, listen: false);
final acc = sub.getCurrentWallet(); final acc = sub.getCurrentWallet();

View File

@ -1,5 +1,4 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/globals.dart';
import 'package:gecko/models/g1_wallets_list.dart'; import 'package:gecko/models/g1_wallets_list.dart';
import 'package:gecko/models/scale_functions.dart'; import 'package:gecko/models/scale_functions.dart';
import 'package:gecko/models/wallet_data.dart'; import 'package:gecko/models/wallet_data.dart';
@ -10,6 +9,7 @@ import 'package:gecko/providers/substrate_sdk.dart';
import 'package:gecko/providers/wallets_profiles.dart'; import 'package:gecko/providers/wallets_profiles.dart';
import 'package:gecko/screens/wallet_view.dart'; import 'package:gecko/screens/wallet_view.dart';
import 'package:gecko/widgets/balance.dart'; import 'package:gecko/widgets/balance.dart';
import 'package:gecko/widgets/commons/loading.dart';
import 'package:gecko/widgets/datapod_avatar.dart'; import 'package:gecko/widgets/datapod_avatar.dart';
import 'package:gecko/widgets/name_by_address.dart'; import 'package:gecko/widgets/name_by_address.dart';
import 'package:gecko/widgets/search_identity_query.dart'; import 'package:gecko/widgets/search_identity_query.dart';
@ -47,11 +47,9 @@ class SearchResult extends StatelessWidget {
} }
} }
return const Center( return const Center(
heightFactor: 5, child: Loading(
child: CircularProgressIndicator( stroke: 3,
strokeWidth: 3, size: 30,
backgroundColor: yellowC,
color: orangeC,
), ),
); );
}, },

View File

@ -40,6 +40,7 @@ class _TransactionInProgressTuleState extends State<TransactionInProgressTule> {
txContent = sub.transactionStatus[widget.transactionId]!; txContent = sub.transactionStatus[widget.transactionId]!;
subscription = stream.listen((result) { subscription = stream.listen((result) {
if (result.data?['account_by_pk'] == null) return;
if (result.hasException) { if (result.hasException) {
log.e(result.exception); log.e(result.exception);
isVisible = true; isVisible = true;
@ -128,7 +129,7 @@ class _TransactionInProgressTuleState extends State<TransactionInProgressTule> {
statusIcon, statusIcon,
ScaledSizedBox(width: 10), ScaledSizedBox(width: 10),
ScaledSizedBox( ScaledSizedBox(
width: 160, width: 170,
child: Text( child: Text(
humanStatus, humanStatus,
style: scaledTextStyle( style: scaledTextStyle(

View File

@ -151,7 +151,7 @@ class BalanceBuilder extends StatelessWidget {
address: address, address: address,
size: 14, size: 14,
color: isDefault ? Colors.white : Colors.black, color: isDefault ? Colors.white : Colors.black,
loadingColor: isDefault ? yellowC : orangeC), ),
) )
], ],
)), )),

View File

@ -171,10 +171,10 @@ class BalanceBuilder extends StatelessWidget {
Opacity( Opacity(
opacity: 0.7, opacity: 0.7,
child: Balance( child: Balance(
address: address, address: address,
size: 15, size: 15,
color: isDefault ? Colors.white : Colors.black, color: isDefault ? Colors.white : Colors.black,
loadingColor: isDefault ? yellowC : orangeC), ),
) )
], ],
)), )),

View File

@ -5,10 +5,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: _fe_analyzer_shared name: _fe_analyzer_shared
sha256: ae92f5d747aee634b87f89d9946000c2de774be1d6ac3e58268224348cd0101a sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "61.0.0" version: "67.0.0"
accordion: accordion:
dependency: "direct main" dependency: "direct main"
description: description:
@ -21,26 +21,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: analyzer name: analyzer
sha256: ea3d8652bda62982addfd92fdc2d0214e5f82e43325104990d4f4c4a2a313562 sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "5.13.0" version: "6.4.1"
analyzer_plugin:
dependency: transitive
description:
name: analyzer_plugin
sha256: c1d5f167683de03d5ab6c3b53fc9aeefc5d59476e7810ba7bbddff50c6f4392d
url: "https://pub.dev"
source: hosted
version: "0.11.2"
ansicolor:
dependency: transitive
description:
name: ansicolor
sha256: "8bf17a8ff6ea17499e40a2d2542c2f481cd7615760c6d34065cb22bfd22e6880"
url: "https://pub.dev"
source: hosted
version: "2.0.2"
archive: archive:
dependency: transitive dependency: transitive
description: description:
@ -69,10 +53,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: barcode name: barcode
sha256: "2a8b2ee065f419c2aeda141436cc556d91ae772d220fd80679f4d431d6c2ab43" sha256: "91b143666f7bb13636f716b6d4e412e372ab15ff7969799af8c9e30a382e9385"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.2.5" version: "2.2.6"
barcode_scan2: barcode_scan2:
dependency: "direct main" dependency: "direct main"
description: description:
@ -101,10 +85,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: bip32_ed25519 name: bip32_ed25519
sha256: "8c739df5d7a05ac2d08dd355062313d84f41244d05cf6cc953c9f0bca66b1fdf" sha256: "292ef300ce24a140ce2814e593af6fc2fe20185ffded9a9bd99ce7c22abd7657"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.2.2" version: "0.5.0"
bip39: bip39:
dependency: transitive dependency: transitive
description: description:
@ -181,18 +165,18 @@ packages:
dependency: "direct dev" dependency: "direct dev"
description: description:
name: build_runner name: build_runner
sha256: "67d591d602906ef9201caf93452495ad1812bea2074f04e25dbd7c133785821b" sha256: "581bacf68f89ec8792f5e5a0b2c4decd1c948e97ce659dc783688c8a88fbec21"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.4.7" version: "2.4.8"
build_runner_core: build_runner_core:
dependency: transitive dependency: transitive
description: description:
name: build_runner_core name: build_runner_core
sha256: c9e32d21dd6626b5c163d48b037ce906bbe428bc23ab77bcd77bb21e593b6185 sha256: "4ae8ffe5ac758da294ecf1802f2aff01558d8b1b00616aa7538ea9a8a5d50799"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "7.2.11" version: "7.3.0"
built_collection: built_collection:
dependency: transitive dependency: transitive
description: description:
@ -205,10 +189,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: built_value name: built_value
sha256: c9aabae0718ec394e5bc3c7272e6bb0dc0b32201a08fe185ec1d8401d3e39309 sha256: fedde275e0a6b798c3296963c5cd224e3e1b55d0e478d5b7e65e6b540f363a0e
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "8.8.1" version: "8.9.1"
carousel_slider: carousel_slider:
dependency: "direct main" dependency: "direct main"
description: description:
@ -245,10 +229,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: code_builder name: code_builder
sha256: feee43a5c05e7b3199bb375a86430b8ada1b04104f2923d0e03cc01ca87b6d84 sha256: f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.9.0" version: "4.10.0"
collection: collection:
dependency: transitive dependency: transitive
description: description:
@ -305,38 +289,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.3" version: "3.0.3"
csslib:
dependency: transitive
description:
name: csslib
sha256: "706b5707578e0c1b4b7550f64078f0a0f19dec3f50a178ffae7006b0a9ca58fb"
url: "https://pub.dev"
source: hosted
version: "1.0.0"
dart_code_metrics:
dependency: "direct dev"
description:
name: dart_code_metrics
sha256: "3dede3f7abc077a4181ec7445448a289a9ce08e2981e6a4d49a3fb5099d47e1f"
url: "https://pub.dev"
source: hosted
version: "5.7.6"
dart_code_metrics_presets:
dependency: transitive
description:
name: dart_code_metrics_presets
sha256: b71eadf02a3787ebd5c887623f83f6fdc204d45c75a081bd636c4104b3fd8b73
url: "https://pub.dev"
source: hosted
version: "1.8.0"
dart_style: dart_style:
dependency: transitive dependency: transitive
description: description:
name: dart_style name: dart_style
sha256: "1efa911ca7086affd35f463ca2fc1799584fb6aa89883cf0af8e3664d6a02d55" sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.3.2" version: "2.3.6"
dbus: dbus:
dependency: transitive dependency: transitive
description: description:
@ -357,10 +317,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: dio name: dio
sha256: "797e1e341c3dd2f69f2dad42564a6feff3bfb87187d05abb93b9609e6f1645c3" sha256: "49af28382aefc53562459104f64d16b9dfd1e8ef68c862d5af436cc8356ce5a8"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "5.4.0" version: "5.4.1"
dots_indicator: dots_indicator:
dependency: "direct main" dependency: "direct main"
description: description:
@ -373,18 +333,18 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: durt name: durt
sha256: "97007458aa5ba95c78465af8489e1330d0f7d48c74e10699f6283ce4cf8a5410" sha256: "29e4a1adaea1dfedff4d9237580b414ca5fe621a7a131b5fa129b9824365c938"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.1.7" version: "0.1.8"
easy_localization: easy_localization:
dependency: "direct main" dependency: "direct main"
description: description:
name: easy_localization name: easy_localization
sha256: de63e3b422adfc97f256cbb3f8cf12739b6a4993d390f3cadb3f51837afaefe5 sha256: c145aeb6584aedc7c862ab8c737c3277788f47488bfdf9bae0fe112bd0a4789c
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.3" version: "3.0.5"
easy_logger: easy_logger:
dependency: transitive dependency: transitive
description: description:
@ -445,18 +405,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: ffi name: ffi
sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.0" version: "2.1.2"
file: file:
dependency: transitive dependency: transitive
description: description:
name: file name: file
sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.1.4" version: "7.0.0"
file_selector_linux: file_selector_linux:
dependency: transitive dependency: transitive
description: description:
@ -477,10 +437,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: file_selector_platform_interface name: file_selector_platform_interface
sha256: "0aa47a725c346825a2bd396343ce63ac00bda6eff2fbc43eabe99737dede8262" sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.6.1" version: "2.6.2"
file_selector_windows: file_selector_windows:
dependency: transitive dependency: transitive
description: description:
@ -548,10 +508,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: flutter_markdown name: flutter_markdown
sha256: "35108526a233cc0755664d445f8a6b4b61e6f8fe993b3658b80b4a26827fc196" sha256: cb44f7831b23a6bdd0f501718b0d2e8045cbc625a15f668af37ddb80314821db
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.6.18+2" version: "0.6.21"
flutter_plugin_android_lifecycle: flutter_plugin_android_lifecycle:
dependency: transitive dependency: transitive
description: description:
@ -727,14 +687,6 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.1" version: "2.0.1"
html:
dependency: transitive
description:
name: html
sha256: "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a"
url: "https://pub.dev"
source: hosted
version: "0.15.4"
http: http:
dependency: transitive dependency: transitive
description: description:
@ -763,18 +715,18 @@ packages:
dependency: "direct dev" dependency: "direct dev"
description: description:
name: icons_launcher name: icons_launcher
sha256: "3ed4560181f238e69ca5d55589d6946ef31e6a321c934251a26ce1d9e9867305" sha256: "9b514ffed6ed69b232fd2bf34c44878c8526be71fc74129a658f35c04c9d4a9d"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.6" version: "2.1.7"
image: image:
dependency: transitive dependency: transitive
description: description:
name: image name: image
sha256: "028f61960d56f26414eb616b48b04eb37d700cbe477b7fb09bf1d7ce57fd9271" sha256: "4c68bfd5ae83e700b5204c1e74451e7bf3cf750e6843c6e158289cf56bda018e"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.1.3" version: "4.1.7"
image_cropper: image_cropper:
dependency: "direct main" dependency: "direct main"
description: description:
@ -803,34 +755,34 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: image_picker name: image_picker
sha256: fc712337719239b0b6e41316aa133350b078fa39b6cbd706b61f3fd421b03c77 sha256: "26222b01a0c9a2c8fe02fc90b8208bd3325da5ed1f4a2acabf75939031ac0bdd"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.5" version: "1.0.7"
image_picker_android: image_picker_android:
dependency: transitive dependency: transitive
description: description:
name: image_picker_android name: image_picker_android
sha256: ecdc963d2aa67af5195e723a40580f802d4392e31457a12a562b3e2bd6a396fe sha256: "39f2bfe497e495450c81abcd44b62f56c2a36a37a175da7d137b4454977b51b1"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.8.9+1" version: "0.8.9+3"
image_picker_for_web: image_picker_for_web:
dependency: transitive dependency: transitive
description: description:
name: image_picker_for_web name: image_picker_for_web
sha256: "50bc9ae6a77eea3a8b11af5eb6c661eeb858fdd2f734c2a4fd17086922347ef7" sha256: e2423c53a68b579a7c37a1eda967b8ae536c3d98518e5db95ca1fe5719a730a3
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.1" version: "3.0.2"
image_picker_ios: image_picker_ios:
dependency: transitive dependency: transitive
description: description:
name: image_picker_ios name: image_picker_ios
sha256: eac0a62104fa12feed213596df0321f57ce5a572562f72a68c4ff81e9e4caacf sha256: fadafce49e8569257a0cad56d24438a6fa1f0cbd7ee0af9b631f7492818a4ca3
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.8.9" version: "0.8.9+1"
image_picker_linux: image_picker_linux:
dependency: transitive dependency: transitive
description: description:
@ -851,10 +803,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: image_picker_platform_interface name: image_picker_platform_interface
sha256: ed9b00e63977c93b0d2d2b343685bed9c324534ba5abafbb3dfbd6a780b1b514 sha256: "3d2c323daea9d60608f1caf30be32a938916f4975434b8352e6f73dae496da38"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.9.1" version: "2.9.4"
image_picker_windows: image_picker_windows:
dependency: transitive dependency: transitive
description: description:
@ -916,6 +868,30 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.2" version: "3.0.2"
leak_tracker:
dependency: transitive
description:
name: leak_tracker
sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa"
url: "https://pub.dev"
source: hosted
version: "10.0.0"
leak_tracker_flutter_testing:
dependency: transitive
description:
name: leak_tracker_flutter_testing
sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0
url: "https://pub.dev"
source: hosted
version: "2.0.1"
leak_tracker_testing:
dependency: transitive
description:
name: leak_tracker_testing
sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47
url: "https://pub.dev"
source: hosted
version: "2.0.1"
lints: lints:
dependency: transitive dependency: transitive
description: description:
@ -928,10 +904,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: logger name: logger
sha256: "6bbb9d6f7056729537a4309bda2e74e18e5d9f14302489cc1e93f33b3fe32cac" sha256: b3ff55aeb08d9d8901b767650285872cb1bb8f508373b3e348d60268b0c7f770
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.2+1" version: "2.1.0"
logging: logging:
dependency: transitive dependency: transitive
description: description:
@ -944,50 +920,50 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: markdown name: markdown
sha256: acf35edccc0463a9d7384e437c015a3535772e09714cf60e07eeef3a15870dcd sha256: ef2a1298144e3f985cc736b22e0ccdaf188b5b3970648f2d9dc13efd1d9df051
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "7.1.1" version: "7.2.2"
matcher: matcher:
dependency: transitive dependency: transitive
description: description:
name: matcher name: matcher
sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.12.16" version: "0.12.16+1"
material_color_utilities: material_color_utilities:
dependency: transitive dependency: transitive
description: description:
name: material_color_utilities name: material_color_utilities
sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.5.0" version: "0.8.0"
meta: meta:
dependency: transitive dependency: transitive
description: description:
name: meta name: meta
sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.10.0" version: "1.11.0"
mime: mime:
dependency: transitive dependency: transitive
description: description:
name: mime name: mime
sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.4" version: "1.0.5"
mobx: mobx:
dependency: transitive dependency: transitive
description: description:
name: mobx name: mobx
sha256: "6b467f91bfc534922ea670db69a1972d28bd9754085892decb5bce19f2c8d0d5" sha256: "74ee54012dc7c1b3276eaa960a600a7418ef5f9997565deb8fca1fd88fb36b78"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.3.0" version: "2.3.0+1"
nested: nested:
dependency: transitive dependency: transitive
description: description:
@ -1040,10 +1016,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: path name: path
sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.8.3" version: "1.9.0"
path_parsing: path_parsing:
dependency: transitive dependency: transitive
description: description:
@ -1056,10 +1032,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: path_provider name: path_provider
sha256: a1aa8aaa2542a6bc57e381f132af822420216c80d4781f7aa085ca3229208aaa sha256: b27217933eeeba8ff24845c34003b003b2b22151de3c908d0e679e8fe1aa078b
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.1" version: "2.1.2"
path_provider_android: path_provider_android:
dependency: transitive dependency: transitive
description: description:
@ -1072,10 +1048,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: path_provider_foundation name: path_provider_foundation
sha256: "19314d595120f82aca0ba62787d58dde2cc6b5df7d2f0daf72489e38d1b57f2d" sha256: "5a7999be66e000916500be4f15a3633ebceb8302719b47b9cc49ce924125350f"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.3.1" version: "2.3.2"
path_provider_linux: path_provider_linux:
dependency: transitive dependency: transitive
description: description:
@ -1088,10 +1064,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: path_provider_platform_interface name: path_provider_platform_interface
sha256: "94b1e0dd80970c1ce43d5d4e050a9918fce4f4a775e6142424c30a29a363265c" sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.1" version: "2.1.2"
path_provider_windows: path_provider_windows:
dependency: transitive dependency: transitive
description: description:
@ -1104,58 +1080,66 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: pdf name: pdf
sha256: "93cbb2c06de9bab91844550f19896b2373e7a5ce25173995e7e5ec5e1741429d" sha256: "243f05342fc0bdf140eba5b069398985cdbdd3dbb1d776cf43d5ea29cc570ba6"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.10.7" version: "3.10.8"
pdf_widget_wrapper:
dependency: transitive
description:
name: pdf_widget_wrapper
sha256: "9c3ca36e5000c9682d52bbdc486867ba7c5ee4403d1a5d6d03ed72157753377b"
url: "https://pub.dev"
source: hosted
version: "1.0.3"
permission_handler: permission_handler:
dependency: "direct main" dependency: "direct main"
description: description:
name: permission_handler name: permission_handler
sha256: "860c6b871c94c78e202dc69546d4d8fd84bd59faeb36f8fb9888668a53ff4f78" sha256: "74e962b7fad7ff75959161bb2c0ad8fe7f2568ee82621c9c2660b751146bfe44"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "11.1.0" version: "11.3.0"
permission_handler_android: permission_handler_android:
dependency: transitive dependency: transitive
description: description:
name: permission_handler_android name: permission_handler_android
sha256: "2f1bec180ee2f5665c22faada971a8f024761f632e93ddc23310487df52dcfa6" sha256: "1acac6bae58144b442f11e66621c062aead9c99841093c38f5bcdcc24c1c3474"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "12.0.1" version: "12.0.5"
permission_handler_apple: permission_handler_apple:
dependency: transitive dependency: transitive
description: description:
name: permission_handler_apple name: permission_handler_apple
sha256: "1a816084338ada8d574b1cb48390e6e8b19305d5120fe3a37c98825bacc78306" sha256: bdafc6db74253abb63907f4e357302e6bb786ab41465e8635f362ee71fd8707b
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "9.2.0" version: "9.4.0"
permission_handler_html: permission_handler_html:
dependency: transitive dependency: transitive
description: description:
name: permission_handler_html name: permission_handler_html
sha256: "11b762a8c123dced6461933a88ea1edbbe036078c3f9f41b08886e678e7864df" sha256: "54bf176b90f6eddd4ece307e2c06cf977fb3973719c35a93b85cc7093eb6070d"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.1.0+2" version: "0.1.1"
permission_handler_platform_interface: permission_handler_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: permission_handler_platform_interface name: permission_handler_platform_interface
sha256: d87349312f7eaf6ce0adaf668daf700ac5b06af84338bd8b8574dfbd93ffe1a1 sha256: "23dfba8447c076ab5be3dee9ceb66aad345c4a648f0cac292c77b1eb0e800b78"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.0.2" version: "4.2.0"
permission_handler_windows: permission_handler_windows:
dependency: transitive dependency: transitive
description: description:
name: permission_handler_windows name: permission_handler_windows
sha256: "1e8640c1e39121128da6b816d236e714d2cf17fac5a105dd6acdd3403a628004" sha256: "1a790728016f79a41216d88672dbc5df30e686e811ad4e698bfc51f76ad91f1e"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.2.0" version: "0.2.1"
petitparser: petitparser:
dependency: transitive dependency: transitive
description: description:
@ -1176,34 +1160,34 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: pinenacl name: pinenacl
sha256: e5fb0bce1717b7f136f35ee98b5c02b3e6383211f8a77ca882fa7812232a07b9 sha256: "3a5503637587d635647c93ea9a8fecf48a420cc7deebe6f1fc85c2a5637ab327"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.3.4" version: "0.5.1"
platform: platform:
dependency: transitive dependency: transitive
description: description:
name: platform name: platform
sha256: ae68c7bfcd7383af3629daafb32fb4e8681c7154428da4febcff06200585f102 sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.1.2" version: "3.1.4"
plugin_platform_interface: plugin_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: plugin_platform_interface name: plugin_platform_interface
sha256: f4f88d4a900933e7267e2b353594774fc0d07fb072b47eedcd5b54e1ea3269f8 sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.7" version: "2.1.8"
pointycastle: pointycastle:
dependency: "direct main" dependency: "direct main"
description: description:
name: pointycastle name: pointycastle
sha256: "7c1e5f0d23c9016c5bbd8b1473d0d3fb3fc851b876046039509e18e0c7485f2c" sha256: "43ac87de6e10afabc85c445745a7b799e04de84cebaa4fd7bf55a5e1e9604d29"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.7.3" version: "3.7.4"
polkawallet_sdk: polkawallet_sdk:
dependency: "direct main" dependency: "direct main"
description: description:
@ -1225,18 +1209,18 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: printing name: printing
sha256: ad39a42a5f83125952457dfd94f395c8cf0eb1f7759583dadb769be5c7f99d24 sha256: "1c99cab90ebcc1fff65831d264627d5b529359d563e53f33ab9b8117f2d280bc"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "5.11.1" version: "5.12.0"
process: process:
dependency: transitive dependency: transitive
description: description:
name: process name: process
sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" sha256: "21e54fd2faf1b5bdd5102afd25012184a6793927648ea81eea80552ac9405b32"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.2.4" version: "5.0.2"
protobuf: protobuf:
dependency: transitive dependency: transitive
description: description:
@ -1249,10 +1233,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: provider name: provider
sha256: "9a96a0a19b594dbc5bf0f1f27d2bc67d5f95957359b461cd9feb44ed6ae75096" sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.1.1" version: "6.1.2"
pub_semver: pub_semver:
dependency: transitive dependency: transitive
description: description:
@ -1261,14 +1245,6 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.4" version: "2.1.4"
pub_updater:
dependency: transitive
description:
name: pub_updater
sha256: "05ae70703e06f7fdeb05f7f02dd680b8aad810e87c756a618f33e1794635115c"
url: "https://pub.dev"
source: hosted
version: "0.3.0"
pubspec_parse: pubspec_parse:
dependency: transitive dependency: transitive
description: description:
@ -1305,10 +1281,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: responsive_framework name: responsive_framework
sha256: "23aa7be5d5136922df708f6ddccb5ec4e0eb8bc576c3f105f5093f31d6b68e50" sha256: "52367ab0c3479b3a5342dec3b74a3d47c4cc1b45bb5d38f720c2e002ebccd4ee"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.1.1" version: "1.4.0"
rxdart: rxdart:
dependency: transitive dependency: transitive
description: description:
@ -1321,50 +1297,50 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: screen_brightness name: screen_brightness
sha256: ed8da4a4511e79422fc1aa88138e920e4008cd312b72cdaa15ccb426c0faaedd sha256: a1273cbc854c39c940c17ac400c040afd973166b8808f2efe2072763b23e4d30
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.2.2+1" version: "1.0.0"
screen_brightness_android: screen_brightness_android:
dependency: transitive dependency: transitive
description: description:
name: screen_brightness_android name: screen_brightness_android
sha256: "3df10961e3a9e968a5e076fe27e7f4741fa8a1d3950bdeb48cf121ed529d0caf" sha256: "69d903bb42071aa2ad8853bf24e206ff6c39894930278e6239751447aacb9fe4"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.1.0+2" version: "1.0.0"
screen_brightness_ios: screen_brightness_ios:
dependency: transitive dependency: transitive
description: description:
name: screen_brightness_ios name: screen_brightness_ios
sha256: "99adc3ca5490b8294284aad5fcc87f061ad685050e03cf45d3d018fe398fd9a2" sha256: "265790af69e26c4840e515b9b34e31505f95c0ca8866fac47b80db3552196214"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.1.0" version: "1.0.0"
screen_brightness_macos: screen_brightness_macos:
dependency: transitive dependency: transitive
description: description:
name: screen_brightness_macos name: screen_brightness_macos
sha256: "64b34e7e3f4900d7687c8e8fb514246845a73ecec05ab53483ed025bd4a899fd" sha256: b83e7a8b7c0f1a3161b586620781517b585deb4082dfff3745a5b2779ea94996
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.1.0+1" version: "1.0.0"
screen_brightness_platform_interface: screen_brightness_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: screen_brightness_platform_interface name: screen_brightness_platform_interface
sha256: b211d07f0c96637a15fb06f6168617e18030d5d74ad03795dd8547a52717c171 sha256: e160b78f37bc093a6a66bfa118bb9266c36bfa3163bf976f94e0e5aa79977ff9
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.1.0" version: "1.0.0"
screen_brightness_windows: screen_brightness_windows:
dependency: transitive dependency: transitive
description: description:
name: screen_brightness_windows name: screen_brightness_windows
sha256: "9261bf33d0fc2707d8cf16339ce25768100a65e70af0fcabaf032fc12408ba86" sha256: "1f1f14436ec3d8fdda4dca60a8c6aa70f9ae1c04a55bd2cf40e3a4453a4bf78e"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.1.3" version: "1.0.0"
scroll_to_index: scroll_to_index:
dependency: transitive dependency: transitive
description: description:
@ -1385,18 +1361,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: sentry name: sentry
sha256: "89e426587b0879e53c46a0aae0eb312696d9d2d803ba14b252a65cc24b1416a2" sha256: a524a87d096799b775530176c8c082afe7aa1f10cc31ba078fecdd74e9afc923
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "7.14.0" version: "7.17.0"
sentry_flutter: sentry_flutter:
dependency: "direct main" dependency: "direct main"
description: description:
name: sentry_flutter name: sentry_flutter
sha256: fd089ee4e75a927be037c56815a0a54af5a519f52b803a5ffecb589bb36e2401 sha256: e0f8367f8f7c74dba9f7521f71700bce6c6ee065cf342f065d4fce411b84fc7b
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "7.14.0" version: "7.17.0"
shared_preferences: shared_preferences:
dependency: transitive dependency: transitive
description: description:
@ -1417,10 +1393,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_foundation name: shared_preferences_foundation
sha256: "7bf53a9f2d007329ee6f3df7268fd498f8373602f943c975598bbb34649b62a7" sha256: "7708d83064f38060c7b39db12aefe449cb8cdc031d6062280087bc4cdb988f5c"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.3.4" version: "2.3.5"
shared_preferences_linux: shared_preferences_linux:
dependency: transitive dependency: transitive
description: description:
@ -1433,10 +1409,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_platform_interface name: shared_preferences_platform_interface
sha256: d4ec5fc9ebb2f2e056c617112aa75dcf92fc2e4faaf2ae999caa297473f75d8a sha256: "22e2ecac9419b4246d7c22bfbbda589e3acf5c0351137d87dd2939d984d37c3b"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.3.1" version: "2.3.2"
shared_preferences_web: shared_preferences_web:
dependency: transitive dependency: transitive
description: description:
@ -1606,26 +1582,26 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: url_launcher name: url_launcher
sha256: e9aa5ea75c84cf46b3db4eea212523591211c3cf2e13099ee4ec147f54201c86 sha256: "0ecc004c62fd3ed36a2ffcbe0dd9700aee63bd7532d0b642a488b1ec310f492e"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.2.2" version: "6.2.5"
url_launcher_android: url_launcher_android:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_android name: url_launcher_android
sha256: "31222ffb0063171b526d3e569079cf1f8b294075ba323443fdc690842bfd4def" sha256: d4ed0711849dd8e33eb2dd69c25db0d0d3fdc37e0a62e629fe32f57a22db2745
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.2.0" version: "6.3.0"
url_launcher_ios: url_launcher_ios:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_ios name: url_launcher_ios
sha256: bba3373219b7abb6b5e0d071b0fe66dfbe005d07517a68e38d4fc3638f35c6d3 sha256: "9149d493b075ed740901f3ee844a38a00b33116c7c5c10d7fb27df8987fb51d5"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.2.1" version: "6.2.5"
url_launcher_linux: url_launcher_linux:
dependency: transitive dependency: transitive
description: description:
@ -1646,18 +1622,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_platform_interface name: url_launcher_platform_interface
sha256: "980e8d9af422f477be6948bdfb68df8433be71f5743a188968b0c1b887807e50" sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.2.0" version: "2.3.2"
url_launcher_web: url_launcher_web:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_web name: url_launcher_web
sha256: "7286aec002c8feecc338cc33269e96b73955ab227456e9fb2a91f7fab8a358e9" sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.2.2" version: "2.2.3"
url_launcher_windows: url_launcher_windows:
dependency: transitive dependency: transitive
description: description:
@ -1678,26 +1654,26 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: vector_graphics name: vector_graphics
sha256: "0f0c746dd2d6254a0057218ff980fc7f5670fd0fcf5e4db38a490d31eed4ad43" sha256: "4ac59808bbfca6da38c99f415ff2d3a5d7ca0a6b4809c71d9cf30fba5daf9752"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.1.9+1" version: "1.1.10+1"
vector_graphics_codec: vector_graphics_codec:
dependency: transitive dependency: transitive
description: description:
name: vector_graphics_codec name: vector_graphics_codec
sha256: "0edf6d630d1bfd5589114138ed8fada3234deacc37966bec033d3047c29248b7" sha256: f3247e7ab0ec77dc759263e68394990edc608fb2b480b80db8aa86ed09279e33
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.1.9+1" version: "1.1.10+1"
vector_graphics_compiler: vector_graphics_compiler:
dependency: transitive dependency: transitive
description: description:
name: vector_graphics_compiler name: vector_graphics_compiler
sha256: d24333727332d9bd20990f1483af4e09abdb9b1fc7c3db940b56ab5c42790c26 sha256: "18489bdd8850de3dd7ca8a34e0c446f719ec63e2bab2e7a8cc66a9028dd76c5a"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.1.9+1" version: "1.1.10+1"
vector_math: vector_math:
dependency: transitive dependency: transitive
description: description:
@ -1710,10 +1686,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: vm_service name: vm_service
sha256: c538be99af830f478718b51630ec1b6bee5e74e52c8a802d328d9e71d35d2583 sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "11.10.0" version: "13.0.0"
wallet: wallet:
dependency: transitive dependency: transitive
description: description:
@ -1734,10 +1710,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: web name: web
sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 sha256: "4188706108906f002b3a293509234588823c8c979dc83304e229ff400c996b05"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.3.0" version: "0.4.2"
web3dart: web3dart:
dependency: transitive dependency: transitive
description: description:
@ -1758,58 +1734,58 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: webdriver name: webdriver
sha256: "3c923e918918feeb90c4c9fdf1fe39220fa4c0e8e2c0fffaded174498ef86c49" sha256: "003d7da9519e1e5f329422b36c4dcdf18d7d2978d1ba099ea4e45ba490ed845e"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.2" version: "3.0.3"
webview_flutter: webview_flutter:
dependency: transitive dependency: transitive
description: description:
name: webview_flutter name: webview_flutter
sha256: "42393b4492e629aa3a88618530a4a00de8bb46e50e7b3993fedbfdc5352f0dbf" sha256: "25e1b6e839e8cbfbd708abc6f85ed09d1727e24e08e08c6b8590d7c65c9a8932"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.4.2" version: "4.7.0"
webview_flutter_android: webview_flutter_android:
dependency: transitive dependency: transitive
description: description:
name: webview_flutter_android name: webview_flutter_android
sha256: b54c89fe14a6d26a2a46e24880da0441cdd2bf1f6d01a5b3e1d39558feb1de0b sha256: "3e5f4e9d818086b0d01a66fb1ff9cc72ab0cc58c71980e3d3661c5685ea0efb0"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.13.1" version: "3.15.0"
webview_flutter_platform_interface: webview_flutter_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: webview_flutter_platform_interface name: webview_flutter_platform_interface
sha256: dbe745ee459a16b6fec296f7565a8ef430d0d681001d8ae521898b9361854943 sha256: d937581d6e558908d7ae3dc1989c4f87b786891ab47bb9df7de548a151779d8d
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.9.0" version: "2.10.0"
webview_flutter_wkwebview: webview_flutter_wkwebview:
dependency: transitive dependency: transitive
description: description:
name: webview_flutter_wkwebview name: webview_flutter_wkwebview
sha256: eebfabfa8a115b535b52031b8b26f7a4b58ceceab378bc9db8762b0fb46f7b5d sha256: "9bf168bccdf179ce90450b5f37e36fe263f591c9338828d6bf09b6f8d0f57f86"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.10.0" version: "3.12.0"
win32: win32:
dependency: transitive dependency: transitive
description: description:
name: win32 name: win32
sha256: b0f37db61ba2f2e9b7a78a1caece0052564d1bc70668156cf3a29d676fe4e574 sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "5.1.1" version: "5.2.0"
xdg_directories: xdg_directories:
dependency: transitive dependency: transitive
description: description:
name: xdg_directories name: xdg_directories
sha256: "589ada45ba9e39405c198fe34eb0f607cddb2108527e658136120892beac46d2" sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.3" version: "1.0.4"
xml: xml:
dependency: transitive dependency: transitive
description: description:
@ -1827,5 +1803,5 @@ packages:
source: hosted source: hosted
version: "3.1.2" version: "3.1.2"
sdks: sdks:
dart: ">=3.2.0 <4.0.0" dart: ">=3.3.0 <4.0.0"
flutter: ">=3.16.0" flutter: ">=3.19.0"

View File

@ -5,7 +5,7 @@ description: Pay with G1.
# pub.dev using `pub publish`. This is preferred for private packages. # pub.dev using `pub publish`. This is preferred for private packages.
publish_to: "none" # Remove this line if you wish to publish to pub.dev publish_to: "none" # Remove this line if you wish to publish to pub.dev
version: 0.1.4+68 version: 0.1.5+72
environment: environment:
sdk: ">=2.12.0 <3.0.0" sdk: ">=2.12.0 <3.0.0"
@ -51,13 +51,13 @@ dependencies:
hex: ^0.2.0 hex: ^0.2.0
accordion: ^2.6.0 accordion: ^2.6.0
flutter_svg: ^2.0.9 flutter_svg: ^2.0.9
pinenacl: ^0.3.4 pinenacl: ^0.5.1
fast_base58: ^0.2.1 fast_base58: ^0.2.1
tutorial_coach_mark: ^1.2.11 tutorial_coach_mark: ^1.2.11
confetti: ^0.7.0 confetti: ^0.7.0
url_launcher: ^6.2.2 url_launcher: ^6.2.2
crypto: ^3.0.3 crypto: ^3.0.3
screen_brightness: ^0.2.2+1 screen_brightness: ^1.0.0
uuid: ^3.0.7 uuid: ^3.0.7
fade_and_translate: ^0.1.3 fade_and_translate: ^0.1.3
@ -72,7 +72,6 @@ dev_dependencies:
sdk: flutter sdk: flutter
integration_test: integration_test:
sdk: flutter sdk: flutter
dart_code_metrics: ^5.7.6
icons_launcher: icons_launcher:
image_path: "assets/icon/gecko_flat.png" image_path: "assets/icon/gecko_flat.png"