Merge branch 'dev'
This commit is contained in:
commit
694c682aba
|
@ -1,3 +1,9 @@
|
|||
plugins {
|
||||
id 'com.android.application'
|
||||
id 'kotlin-android'
|
||||
id "dev.flutter.flutter-gradle-plugin"
|
||||
}
|
||||
|
||||
def localProperties = new Properties()
|
||||
def localPropertiesFile = rootProject.file('local.properties')
|
||||
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')
|
||||
if (flutterVersionCode == null) {
|
||||
flutterVersionCode = '1'
|
||||
|
@ -21,10 +22,6 @@ if (flutterVersionName == null) {
|
|||
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 keystorePropertiesFile = rootProject.file('key.properties')
|
||||
if (keystorePropertiesFile.exists()) {
|
||||
|
@ -32,21 +29,30 @@ if (keystorePropertiesFile.exists()) {
|
|||
}
|
||||
|
||||
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 {
|
||||
main.java.srcDirs += 'src/main/kotlin'
|
||||
}
|
||||
|
||||
lintOptions {
|
||||
disable 'InvalidPackage'
|
||||
}
|
||||
|
||||
defaultConfig {
|
||||
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
|
||||
applicationId "gecko.axiomteam.fr"
|
||||
minSdkVersion 19
|
||||
targetSdkVersion 33
|
||||
// You can update the following values to match your application needs.
|
||||
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
|
||||
minSdkVersion flutter.minSdkVersion
|
||||
targetSdkVersion flutter.targetSdkVersion
|
||||
versionCode flutterVersionCode.toInteger()
|
||||
versionName flutterVersionName
|
||||
multiDexEnabled true
|
||||
|
@ -65,7 +71,7 @@ android {
|
|||
release {
|
||||
// TODO: Add your own signing config for the release build.
|
||||
// Signing with the debug keys for now, so `flutter run --release` works.
|
||||
signingConfig signingConfigs.release //poka: comment this to build unsigned release, or set to signingConfigs.debug to sign with debug keys
|
||||
signingConfig signingConfigs.release
|
||||
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
|
@ -76,11 +82,9 @@ android {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
flutter {
|
||||
source '../..'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
||||
implementation 'androidx.work:work-runtime-ktx:2.7.0'
|
||||
}
|
||||
dependencies {}
|
||||
|
|
|
@ -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 {
|
||||
repositories {
|
||||
google()
|
||||
jcenter()
|
||||
mavenCentral()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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")
|
||||
def properties = new Properties()
|
||||
includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle")
|
||||
|
||||
assert localPropertiesFile.exists()
|
||||
localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
gradlePluginPortal()
|
||||
}
|
||||
}
|
||||
|
||||
def flutterSdkPath = properties.getProperty("flutter.sdk")
|
||||
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
|
||||
apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"
|
||||
plugins {
|
||||
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
|
||||
id "com.android.application" version "7.3.0" apply false
|
||||
id "org.jetbrains.kotlin.android" version "1.7.10" apply false
|
||||
}
|
||||
|
||||
include ":app"
|
||||
|
|
|
@ -1,7 +1,15 @@
|
|||
{
|
||||
"ud": 1000,
|
||||
"first_ud": 6000,
|
||||
"first_ud_reeval": 600000,
|
||||
"first_ud": null,
|
||||
"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": {
|
||||
"babe_epoch_duration": 30,
|
||||
"cert_period": 15,
|
||||
|
@ -11,6 +19,7 @@
|
|||
"idty_confirm_period": 40,
|
||||
"idty_creation_period": 50,
|
||||
"membership_period": 1000,
|
||||
"membership_renewal_period": 1000,
|
||||
"pending_membership_period": 500,
|
||||
"ud_creation_period": 10,
|
||||
"ud_reeval_period": 50,
|
||||
|
@ -19,6 +28,7 @@
|
|||
"smith_cert_min_received_cert_to_issue_cert": 2,
|
||||
"smith_cert_validity_period": 1000,
|
||||
"smith_membership_period": 1000,
|
||||
"smith_inactivity_max_duration": 1000,
|
||||
"smith_pending_membership_period": 500,
|
||||
"smith_wot_first_cert_issuable_on": 4,
|
||||
"smith_wot_min_cert_for_membership": 3,
|
||||
|
@ -30,7 +40,8 @@
|
|||
{ "name": "test1" },
|
||||
{ "name": "test2" },
|
||||
{ "name": "test3" },
|
||||
{ "name": "test4" }
|
||||
{ "name": "test4" },
|
||||
{ "name": "Alice" }
|
||||
],
|
||||
"sudo_key": "5FeggKqw2AbnGZF9Y9WPM2QTgzENS3Hit94Ewgmzdg5a3LNa",
|
||||
"treasury_funder_address": "5FeggKqw2AbnGZF9Y9WPM2QTgzENS3Hit94Ewgmzdg5a3LNa",
|
||||
|
|
|
@ -1,77 +1,126 @@
|
|||
{
|
||||
"initial_monetary_mass": 60100,
|
||||
"initial_monetary_mass": 90100,
|
||||
"current_block": {
|
||||
"number": 0,
|
||||
"medianTime": 1700000000
|
||||
},
|
||||
"identities": {
|
||||
"test1": {
|
||||
"index": 0,
|
||||
"index": 7,
|
||||
"balance": 10000,
|
||||
"membership_expire_on": 1705509948,
|
||||
"next_cert_issuable_on": 1668347505,
|
||||
"revoked": false,
|
||||
"membership_expire_on": 2700000000,
|
||||
"membership_revokes_on": 2700000001,
|
||||
"next_cert_issuable_on": 0,
|
||||
"certs_received": {
|
||||
"test2": 1727758466,
|
||||
"test3": 1727758466,
|
||||
"test4": 1727758466
|
||||
"test2": 2700000000,
|
||||
"test3": 2700000000,
|
||||
"test4": 2700000000
|
||||
},
|
||||
"owner_pubkey": "BgC76sdA6zxPSAMW6sZ1e3NEntLrkLT8DY3z2MEmJJgK"
|
||||
},
|
||||
"test2": {
|
||||
"index": 1,
|
||||
"balance": 10000,
|
||||
"membership_expire_on": 1705509948,
|
||||
"next_cert_issuable_on": 1668347505,
|
||||
"revoked": false,
|
||||
"membership_expire_on": 2700000000,
|
||||
"membership_revokes_on": 2700000001,
|
||||
"next_cert_issuable_on": 0,
|
||||
"certs_received": {
|
||||
"test1": 1727758466,
|
||||
"test3": 1727758466,
|
||||
"test4": 1727758466
|
||||
"test1": 2700000000,
|
||||
"test3": 2700000000,
|
||||
"test4": 2700000000
|
||||
},
|
||||
"owner_pubkey": "6xNFhRFHKyx9iZ3ucc3AFf5cjsWw5jH3p6EnFXw3D8T6"
|
||||
},
|
||||
"test3": {
|
||||
"index": 2,
|
||||
"balance": 10000,
|
||||
"membership_expire_on": 1705509948,
|
||||
"next_cert_issuable_on": 1668347505,
|
||||
"revoked": false,
|
||||
"membership_expire_on": 2700000000,
|
||||
"membership_revokes_on": 2700000001,
|
||||
"next_cert_issuable_on": 0,
|
||||
"certs_received": {
|
||||
"test1": 1727758466,
|
||||
"test2": 1727758466,
|
||||
"test4": 1727758466
|
||||
"test1": 2700000000,
|
||||
"test2": 2700000000,
|
||||
"test4": 2700000000
|
||||
},
|
||||
"owner_pubkey": "BpSSPEVE1yze9wrfjkU4wfnFa7WgKNysHxe3H9iT9fvx"
|
||||
},
|
||||
"test4": {
|
||||
"index": 3,
|
||||
"balance": 10000,
|
||||
"membership_expire_on": 1705509948,
|
||||
"next_cert_issuable_on": 1668347505,
|
||||
"revoked": false,
|
||||
"membership_expire_on": 2700000000,
|
||||
"membership_revokes_on": 2700000001,
|
||||
"next_cert_issuable_on": 0,
|
||||
"certs_received": {
|
||||
"test1": 1727758466,
|
||||
"test2": 1727758466,
|
||||
"test3": 1727758466
|
||||
"test1": 2700000000,
|
||||
"test2": 2700000000,
|
||||
"test3": 2700000000
|
||||
},
|
||||
"owner_pubkey": "5LqbvutJtRTHvnforyndwPbkC4Kf5cJtdRQaDcHoMi8S"
|
||||
},
|
||||
"test5": {
|
||||
"index": 4,
|
||||
"balance": 10000,
|
||||
"membership_expire_on": 1705509948,
|
||||
"next_cert_issuable_on": 1668347505,
|
||||
"revoked": false,
|
||||
"membership_expire_on": 2700000000,
|
||||
"membership_revokes_on": 2700000001,
|
||||
"next_cert_issuable_on": 0,
|
||||
"certs_received": {
|
||||
"test1": 1727758466,
|
||||
"test2": 1727758466,
|
||||
"test3": 1727758466
|
||||
"test1": 2700000000,
|
||||
"test2": 2700000000,
|
||||
"test3": 2700000000
|
||||
},
|
||||
"owner_pubkey": "6FgzG8NwatTWHo7rM7sPP6P4Q95R2ZQNqYiHCs38RT21"
|
||||
},
|
||||
"testCesium1": {
|
||||
"test6": {
|
||||
"index": 5,
|
||||
"balance": 10000,
|
||||
"membership_expire_on": 1705509948,
|
||||
"next_cert_issuable_on": 1668347505,
|
||||
"revoked": false,
|
||||
"membership_expire_on": 2700000000,
|
||||
"membership_revokes_on": 2700000001,
|
||||
"next_cert_issuable_on": 0,
|
||||
"certs_received": {
|
||||
"test1": 1727758466,
|
||||
"test2": 1727758466,
|
||||
"test3": 1727758466
|
||||
"test1": 2700000000
|
||||
},
|
||||
"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"
|
||||
},
|
||||
"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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,7 +30,7 @@ const cesiumPod = "https://g1.data.le-sou.org";
|
|||
// String cesiumPod = "https://g1.data.e-is.pro";
|
||||
|
||||
const datapodEndpoint = 'gdev-datapod.p2p.legal';
|
||||
// const v2sDatapod = 'http://10.0.2.2:8080';
|
||||
// const datapodEndpoint = '10.0.2.2:8080';
|
||||
|
||||
// Contexts
|
||||
late BuildContext homeContext;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
const String updateProfileQ = r'''
|
||||
mutation ($address: String!, $hash: String!, $signature: String!, $title: String, $description: String, $avatar: 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) {
|
||||
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: $avatarBase64, geoloc: $geoloc, city: $city, socials: $socials) {
|
||||
message
|
||||
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'''
|
||||
query ($address: String!) {
|
||||
profiles_by_pk(address: $address) {
|
||||
|
|
|
@ -203,7 +203,7 @@ class DuniterIndexer with ChangeNotifier {
|
|||
'name': name,
|
||||
};
|
||||
final result = await _execQuery(isIdtyExistQ, variables);
|
||||
return result.data!['identity']?.isNotEmpty ?? false;
|
||||
return result.data?['identity']?.isNotEmpty ?? false;
|
||||
}
|
||||
|
||||
Future<DateTime> getBlockStart() async {
|
||||
|
|
|
@ -6,6 +6,7 @@ import 'dart:async';
|
|||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/wallet_data.dart';
|
||||
import 'package:gecko/providers/substrate_sdk.dart';
|
||||
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
|
||||
import 'package:gecko/widgets/commons/common_elements.dart';
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
@ -76,6 +77,20 @@ class MyWalletsProvider with ChangeNotifier {
|
|||
return targetedWallet;
|
||||
}
|
||||
|
||||
Future<bool> askPinCode() async {
|
||||
final defaultWallet = getDefaultWallet();
|
||||
|
||||
if (pinCode.isEmpty) {
|
||||
await Navigator.push(
|
||||
homeContext,
|
||||
MaterialPageRoute(
|
||||
builder: (homeContext) => UnlockingWallet(wallet: defaultWallet),
|
||||
),
|
||||
);
|
||||
}
|
||||
return pinCode.isNotEmpty;
|
||||
}
|
||||
|
||||
WalletData? getWalletDataByAddress(String address) {
|
||||
WalletData? targetedWallet;
|
||||
|
||||
|
|
|
@ -183,12 +183,12 @@ class SubstrateSdk with ChangeNotifier {
|
|||
}
|
||||
|
||||
Future<String> signDatapod(String document, String address) async {
|
||||
final myWallets =
|
||||
final myWalletProvider =
|
||||
Provider.of<MyWalletsProvider>(homeContext, listen: false);
|
||||
final messageToSign = Uint8List.fromList(document.codeUnits);
|
||||
|
||||
final signatureString =
|
||||
await _signMessage(messageToSign, address, myWallets.pinCode);
|
||||
await _signMessage(messageToSign, address, myWalletProvider.pinCode);
|
||||
final signatureInt = HEX.decode(signatureString.substring(2));
|
||||
final signature64 = base64Encode(signatureInt);
|
||||
|
||||
|
@ -209,26 +209,27 @@ class SubstrateSdk with ChangeNotifier {
|
|||
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);
|
||||
if (idtyIndex == null) {
|
||||
return null;
|
||||
return [];
|
||||
}
|
||||
final certsReceiver =
|
||||
await _getStorage('cert.storageIdtyCertMeta($idtyIndex)') ?? [];
|
||||
|
||||
if (certsCounterCache[address] == null) {
|
||||
certsCounterCache.putIfAbsent(address, () => []);
|
||||
}
|
||||
try {
|
||||
certsCounterCache.update(
|
||||
address,
|
||||
(value) => [
|
||||
certsReceiver['receivedCount'] as int,
|
||||
certsReceiver['issuedCount'] as int
|
||||
],
|
||||
ifAbsent: () => [
|
||||
certsReceiver['receivedCount'] as int,
|
||||
certsReceiver['issuedCount'] as int
|
||||
]);
|
||||
} catch (e) {
|
||||
// catching String to int error .. network error?
|
||||
log.e(e);
|
||||
}
|
||||
return certsCounterCache[address]!;
|
||||
}
|
||||
|
@ -1059,7 +1060,7 @@ class SubstrateSdk with ChangeNotifier {
|
|||
final toCerts = await getCertsCounter(destAddress);
|
||||
|
||||
log.d(
|
||||
"debug toCert: ${toCerts?[0]} --- ${currencyParameters['minCertForMembership']!} --- $toIdtyStatus");
|
||||
"debug toCert: ${toCerts[0]} --- ${currencyParameters['minCertForMembership']!} --- $toIdtyStatus");
|
||||
|
||||
if (toIdtyStatus == IdtyStatus.none) {
|
||||
txInfo = TxInfoData(
|
||||
|
@ -1070,7 +1071,7 @@ class SubstrateSdk with ChangeNotifier {
|
|||
txOptions = [destAddress];
|
||||
} else if (toIdtyStatus == IdtyStatus.validated ||
|
||||
toIdtyStatus == IdtyStatus.confirmed) {
|
||||
if (toCerts![0] >= currencyParameters['minCertForMembership']! - 1 &&
|
||||
if (toCerts[0] >= currencyParameters['minCertForMembership']! - 1 &&
|
||||
toIdtyStatus != IdtyStatus.validated) {
|
||||
log.d('Batch cert and membership validation');
|
||||
txInfo = TxInfoData(
|
||||
|
|
|
@ -5,6 +5,7 @@ import 'package:flutter/material.dart';
|
|||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/queries_datapod.dart';
|
||||
import 'package:gecko/models/scale_functions.dart';
|
||||
import 'package:gecko/providers/my_wallets.dart';
|
||||
import 'package:gecko/providers/substrate_sdk.dart';
|
||||
import 'package:graphql_flutter/graphql_flutter.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
@ -13,6 +14,24 @@ import 'package:uuid/uuid.dart';
|
|||
class V2sDatapodProvider with ChangeNotifier {
|
||||
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(
|
||||
String query, Map<String, dynamic> variables) async {
|
||||
final QueryOptions options =
|
||||
|
@ -29,9 +48,7 @@ class V2sDatapodProvider with ChangeNotifier {
|
|||
String? city,
|
||||
List<Map<String, String>>? socials,
|
||||
Map<String, double>? geoloc}) async {
|
||||
final sub = Provider.of<SubstrateSdk>(homeContext, listen: false);
|
||||
|
||||
final messageToSign = jsonEncode({
|
||||
final messageToSign = {
|
||||
'address': address,
|
||||
'description': description,
|
||||
'avatarBase64': avatar,
|
||||
|
@ -39,22 +56,10 @@ class V2sDatapodProvider with ChangeNotifier {
|
|||
'title': title,
|
||||
'city': city,
|
||||
'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);
|
||||
if (result.hasException) {
|
||||
log.e(result.exception.toString());
|
||||
|
@ -65,18 +70,10 @@ class V2sDatapodProvider with ChangeNotifier {
|
|||
}
|
||||
|
||||
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);
|
||||
if (result.hasException) {
|
||||
log.e(result.exception.toString());
|
||||
|
@ -88,20 +85,10 @@ class V2sDatapodProvider with ChangeNotifier {
|
|||
|
||||
Future<bool> migrateProfile(
|
||||
{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);
|
||||
if (result.hasException) {
|
||||
log.e(result.exception.toString());
|
||||
|
@ -111,6 +98,28 @@ class V2sDatapodProvider with ChangeNotifier {
|
|||
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 {
|
||||
final avatarBytes = await File(avatarPath).readAsBytes();
|
||||
final avatarString = base64Encode(avatarBytes);
|
||||
|
|
|
@ -13,7 +13,6 @@ import 'package:gecko/models/wallet_data.dart';
|
|||
import 'package:gecko/providers/substrate_sdk.dart';
|
||||
import 'package:gecko/providers/v2s_datapod.dart';
|
||||
import 'package:gecko/widgets/commons/common_elements.dart';
|
||||
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
|
||||
import 'package:gecko/screens/transaction_in_progress.dart';
|
||||
import 'package:image_picker/image_picker.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
@ -67,11 +66,14 @@ class WalletOptionsProvider with ChangeNotifier {
|
|||
password: myWalletProvider.pinCode);
|
||||
}
|
||||
|
||||
await walletBox.delete(wallet.key);
|
||||
await walletBox.delete(wallet.address);
|
||||
if (wallet.imageCustomPath != null) {
|
||||
final avatarFile = File(wallet.imageCustomPath!);
|
||||
await avatarFile.delete();
|
||||
if (await avatarFile.exists()) {
|
||||
await avatarFile.delete();
|
||||
}
|
||||
}
|
||||
|
||||
datapod.deleteProfile(address: wallet.address);
|
||||
await sub.deleteAccounts([wallet.address]);
|
||||
|
||||
|
@ -221,21 +223,7 @@ class WalletOptionsProvider with ChangeNotifier {
|
|||
return;
|
||||
}
|
||||
|
||||
WalletData? defaultWallet =
|
||||
myWalletProvider.getDefaultWallet();
|
||||
|
||||
if (myWalletProvider.pinCode == '') {
|
||||
await Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (homeContext) {
|
||||
return UnlockingWallet(
|
||||
wallet: defaultWallet);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
if (myWalletProvider.pinCode == '') return;
|
||||
if (!await myWalletProvider.askPinCode()) return;
|
||||
|
||||
final wallet = myWalletProvider
|
||||
.getWalletDataByAddress(address.text);
|
||||
|
|
|
@ -82,8 +82,10 @@ class _HomeScreenState extends State<HomeScreen> {
|
|||
'wss://$validIndexerEndpoint/v1/graphql',
|
||||
);
|
||||
|
||||
const headerWebsocket =
|
||||
datapodEndpoint == '10.0.2.2:8080' ? 'ws' : 'wss';
|
||||
final wsLinkDatapod = WebSocketLink(
|
||||
'wss://$datapodEndpoint/v1/graphql',
|
||||
'$headerWebsocket://$datapodEndpoint/v1/graphql',
|
||||
);
|
||||
|
||||
duniterIndexer.indexerClient = GraphQLClient(
|
||||
|
|
|
@ -4,10 +4,8 @@ import 'package:easy_localization/easy_localization.dart';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:durt/durt.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/wallet_data.dart';
|
||||
import 'package:gecko/providers/my_wallets.dart';
|
||||
import 'package:gecko/providers/substrate_sdk.dart';
|
||||
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
|
||||
import 'package:gecko/widgets/commons/top_appbar.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
|
@ -92,20 +90,9 @@ class _ChangePinScreenState extends State<ChangePinScreen> {
|
|||
backgroundColor: Colors.green[400],
|
||||
),
|
||||
onPressed: () async {
|
||||
WalletData defaultWallet =
|
||||
myWalletProvider.getDefaultWallet();
|
||||
final defaultWallet = myWalletProvider.getDefaultWallet();
|
||||
|
||||
if (myWalletProvider.pinCode == '') {
|
||||
await Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (homeContext) {
|
||||
return UnlockingWallet(wallet: defaultWallet);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
if (myWalletProvider.pinCode == '') return;
|
||||
if (!await myWalletProvider.askPinCode()) return;
|
||||
|
||||
await sub.changePassword(context, defaultWallet.address,
|
||||
widget.walletProvider.pinCode, newPin.text);
|
||||
|
|
|
@ -5,14 +5,12 @@ import 'package:flutter/material.dart';
|
|||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/chest_data.dart';
|
||||
import 'package:gecko/models/scale_functions.dart';
|
||||
import 'package:gecko/models/wallet_data.dart';
|
||||
import 'package:gecko/models/widgets_keys.dart';
|
||||
import 'package:gecko/providers/chest_provider.dart';
|
||||
import 'package:gecko/providers/my_wallets.dart';
|
||||
import 'package:gecko/providers/substrate_sdk.dart';
|
||||
import 'package:gecko/screens/myWallets/custom_derivations.dart';
|
||||
import 'package:gecko/screens/myWallets/show_seed.dart';
|
||||
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
|
||||
import 'package:gecko/widgets/bottom_app_bar.dart';
|
||||
import 'package:gecko/widgets/commons/offline_info.dart';
|
||||
import 'package:gecko/widgets/commons/top_appbar.dart';
|
||||
|
@ -44,18 +42,8 @@ class ChestOptions extends StatelessWidget {
|
|||
onTap: () async {
|
||||
final myWalletProvider =
|
||||
Provider.of<MyWalletsProvider>(context, listen: false);
|
||||
WalletData? defaultWallet =
|
||||
myWalletProvider.getDefaultWallet();
|
||||
final String? pin = await Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (homeContext) {
|
||||
return UnlockingWallet(wallet: defaultWallet);
|
||||
},
|
||||
),
|
||||
);
|
||||
if (!await myWalletProvider.askPinCode()) return;
|
||||
|
||||
if (pin == null) return;
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(builder: (context) {
|
||||
|
|
|
@ -5,10 +5,8 @@ import 'package:gecko/globals.dart';
|
|||
import 'package:gecko/models/scale_functions.dart';
|
||||
import 'package:gecko/models/widgets_keys.dart';
|
||||
import 'package:gecko/providers/my_wallets.dart';
|
||||
import 'package:gecko/models/wallet_data.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/screens/myWallets/restore_chest.dart';
|
||||
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
|
||||
import 'package:carousel_slider/carousel_slider.dart';
|
||||
import 'package:gecko/screens/onBoarding/5.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
@ -110,25 +108,13 @@ class _ChooseChestState extends State<ChooseChest> {
|
|||
onPressed: () async {
|
||||
await configBox.put('currentChest', currentChest);
|
||||
myWalletProvider.pinCode = '';
|
||||
WalletData? defaultWallet =
|
||||
myWalletProvider.getDefaultWallet();
|
||||
myWalletProvider.reload();
|
||||
if (!await myWalletProvider.askPinCode()) return;
|
||||
|
||||
await Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (homeContext) {
|
||||
return UnlockingWallet(wallet: defaultWallet);
|
||||
},
|
||||
),
|
||||
);
|
||||
Navigator.popUntil(
|
||||
context,
|
||||
ModalRoute.withName('/'),
|
||||
);
|
||||
if (myWalletProvider.pinCode != '') {
|
||||
Navigator.pushNamed(context, '/mywallets');
|
||||
}
|
||||
Navigator.pushNamed(context, '/mywallets');
|
||||
},
|
||||
child: Text(
|
||||
'openThisChest'.tr(),
|
||||
|
|
|
@ -6,7 +6,6 @@ import 'package:flutter/material.dart';
|
|||
import 'package:gecko/models/scale_functions.dart';
|
||||
import 'package:gecko/models/wallet_data.dart';
|
||||
import 'package:gecko/providers/my_wallets.dart';
|
||||
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
|
||||
import 'package:gecko/widgets/commons/top_appbar.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
|
@ -109,20 +108,7 @@ class _CustomDerivationState extends State<CustomDerivation> {
|
|||
backgroundColor: orangeC,
|
||||
),
|
||||
onPressed: () async {
|
||||
WalletData? defaultWallet =
|
||||
myWalletProvider.getDefaultWallet();
|
||||
if (myWalletProvider.pinCode == '') {
|
||||
await Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (homeContext) {
|
||||
return UnlockingWallet(wallet: defaultWallet);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
if (myWalletProvider.pinCode != '') return;
|
||||
if (!await myWalletProvider.askPinCode()) return;
|
||||
String newDerivationName =
|
||||
'${'wallet'.tr()} ${myWalletProvider.listWallets.last.number! + 2}';
|
||||
if (dropdownValue == 'root') {
|
||||
|
|
|
@ -4,13 +4,11 @@ import 'package:easy_localization/easy_localization.dart';
|
|||
import 'package:gecko/globals.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/models/scale_functions.dart';
|
||||
import 'package:gecko/models/wallet_data.dart';
|
||||
import 'package:gecko/models/widgets_keys.dart';
|
||||
import 'package:gecko/providers/my_wallets.dart';
|
||||
import 'package:gecko/providers/substrate_sdk.dart';
|
||||
import 'package:gecko/widgets/commons/common_elements.dart';
|
||||
import 'package:gecko/screens/myWallets/migrate_identity.dart';
|
||||
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
|
||||
import 'package:gecko/screens/transaction_in_progress.dart';
|
||||
import 'package:gecko/widgets/commons/top_appbar.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
@ -113,20 +111,7 @@ class ManageMembership extends StatelessWidget {
|
|||
Provider.of<MyWalletsProvider>(context, listen: false);
|
||||
final sub = Provider.of<SubstrateSdk>(context, listen: false);
|
||||
|
||||
WalletData? defaultWallet = myWalletProvider.getDefaultWallet();
|
||||
String? pin;
|
||||
if (myWalletProvider.pinCode == '') {
|
||||
pin = await Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (homeContext) {
|
||||
return UnlockingWallet(wallet: defaultWallet);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
if (pin == null || myWalletProvider.pinCode == '') return;
|
||||
if (!await myWalletProvider.askPinCode()) return;
|
||||
|
||||
final transactionId =
|
||||
await sub.revokeIdentity(address, myWalletProvider.pinCode);
|
||||
|
|
|
@ -6,7 +6,6 @@ import 'package:gecko/globals.dart';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/models/migrate_wallet_checks.dart';
|
||||
import 'package:gecko/models/scale_functions.dart';
|
||||
import 'package:gecko/models/wallet_data.dart';
|
||||
import 'package:gecko/models/widgets_keys.dart';
|
||||
import 'package:gecko/providers/duniter_indexer.dart';
|
||||
import 'package:gecko/providers/generate_wallets.dart';
|
||||
|
@ -14,7 +13,6 @@ import 'package:gecko/providers/my_wallets.dart';
|
|||
import 'package:gecko/providers/substrate_sdk.dart';
|
||||
import 'package:gecko/providers/wallet_options.dart';
|
||||
import 'package:gecko/providers/wallets_profiles.dart';
|
||||
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
|
||||
import 'package:gecko/screens/transaction_in_progress.dart';
|
||||
import 'package:gecko/widgets/commons/top_appbar.dart';
|
||||
import 'package:polkawallet_sdk/api/apiKeyring.dart';
|
||||
|
@ -189,21 +187,7 @@ class MigrateIdentityScreen extends StatelessWidget {
|
|||
),
|
||||
onPressed: statusData.canValidate && mnemonicIsValid
|
||||
? () async {
|
||||
WalletData? defaultWallet =
|
||||
myWalletProvider.getDefaultWallet();
|
||||
|
||||
String? pin;
|
||||
if (myWalletProvider.pinCode == '') {
|
||||
pin = await Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (homeContext) {
|
||||
return UnlockingWallet(wallet: defaultWallet);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
if (myWalletProvider.pinCode == '') return;
|
||||
if (!await myWalletProvider.askPinCode()) return;
|
||||
|
||||
await sub.importAccount(
|
||||
mnemonic: newMnemonicSentence.text,
|
||||
|
@ -215,7 +199,7 @@ class MigrateIdentityScreen extends StatelessWidget {
|
|||
final transactionId = await sub.migrateIdentity(
|
||||
fromAddress: fromAddress,
|
||||
destAddress: newWalletAddress.text,
|
||||
fromPassword: pin ?? myWalletProvider.pinCode,
|
||||
fromPassword: myWalletProvider.pinCode,
|
||||
destPassword: 'password',
|
||||
withBalance: true,
|
||||
fromBalance: statusData.balance);
|
||||
|
|
|
@ -327,6 +327,9 @@ class WalletOptions extends StatelessWidget {
|
|||
initialData: const [IdtyStatus.unknown],
|
||||
builder:
|
||||
(BuildContext context, AsyncSnapshot<List<IdtyStatus>> snapshot) {
|
||||
if (!snapshot.hasData || snapshot.hasError) {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
if (snapshot.data!.first == IdtyStatus.created) {
|
||||
return Column(children: [
|
||||
ScaledSizedBox(
|
||||
|
@ -526,7 +529,8 @@ class WalletOptions extends StatelessWidget {
|
|||
future: sub.hasAccountConsumers(wallet.address),
|
||||
builder: (BuildContext context, AsyncSnapshot<bool> hasConsumers) {
|
||||
if (hasConsumers.connectionState != ConnectionState.done ||
|
||||
hasConsumers.hasError) {
|
||||
hasConsumers.hasError ||
|
||||
!hasConsumers.hasData) {
|
||||
return const Text('');
|
||||
}
|
||||
final double balance =
|
||||
|
|
|
@ -18,8 +18,6 @@ import 'package:gecko/widgets/commons/offline_info.dart';
|
|||
import 'package:gecko/widgets/commons/top_appbar.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
AsyncSnapshot<List>? mnemoList;
|
||||
|
||||
class OnboardingStepFive extends StatefulWidget {
|
||||
const OnboardingStepFive({Key? key, this.skipIntro = false})
|
||||
: super(key: key);
|
||||
|
@ -155,35 +153,35 @@ Widget sentanceArray(BuildContext context) {
|
|||
padding: EdgeInsets.all(scaleSize(11)),
|
||||
child: FutureBuilder(
|
||||
future: generateWalletProvider.generateWordList(context),
|
||||
builder: (BuildContext context, AsyncSnapshot<List> data) {
|
||||
if (!data.hasData) {
|
||||
builder: (BuildContext context, AsyncSnapshot<List> mnemoListData) {
|
||||
if (!mnemoListData.hasData) {
|
||||
return const Text('');
|
||||
} else {
|
||||
mnemoList = data;
|
||||
final mnemoList = mnemoListData.data!;
|
||||
return Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
Row(children: <Widget>[
|
||||
arrayCell(data.data![0]),
|
||||
arrayCell(data.data![1]),
|
||||
arrayCell(data.data![2]),
|
||||
arrayCell(data.data![3]),
|
||||
arrayCell(mnemoList[0]),
|
||||
arrayCell(mnemoList[1]),
|
||||
arrayCell(mnemoList[2]),
|
||||
arrayCell(mnemoList[3]),
|
||||
]),
|
||||
ScaledSizedBox(height: 12),
|
||||
Row(children: <Widget>[
|
||||
arrayCell(data.data![4]),
|
||||
arrayCell(data.data![5]),
|
||||
arrayCell(data.data![6]),
|
||||
arrayCell(data.data![7]),
|
||||
arrayCell(mnemoList[4]),
|
||||
arrayCell(mnemoList[5]),
|
||||
arrayCell(mnemoList[6]),
|
||||
arrayCell(mnemoList[7]),
|
||||
]),
|
||||
ScaledSizedBox(height: 12),
|
||||
Row(children: <Widget>[
|
||||
arrayCell(data.data![8]),
|
||||
arrayCell(data.data![9]),
|
||||
arrayCell(data.data![10]),
|
||||
arrayCell(data.data![11]),
|
||||
arrayCell(mnemoList[8]),
|
||||
arrayCell(mnemoList[9]),
|
||||
arrayCell(mnemoList[10]),
|
||||
arrayCell(mnemoList[11]),
|
||||
]),
|
||||
]);
|
||||
}
|
||||
|
|
|
@ -34,7 +34,7 @@ class _SearchScreenState extends State<SearchScreen> {
|
|||
|
||||
// Function to check clipboard and update if necessary
|
||||
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) {
|
||||
pastedAddress = clipboardData.text ?? '';
|
||||
canPasteAddress = await isAddress(pastedAddress);
|
||||
|
|
|
@ -6,6 +6,7 @@ import 'package:gecko/models/widgets_keys.dart';
|
|||
import 'package:gecko/providers/my_wallets.dart';
|
||||
import 'package:gecko/providers/substrate_sdk.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_icon.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
@ -36,7 +37,7 @@ class _TransactionInProgressState extends State<TransactionInProgress> {
|
|||
late String toUsernameFormat;
|
||||
late String amount;
|
||||
late bool isUdUnit;
|
||||
late TransactionContent txContent;
|
||||
TransactionContent? txContent;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
|
@ -59,33 +60,49 @@ class _TransactionInProgressState extends State<TransactionInProgress> {
|
|||
|
||||
amount = walletProfiles.payAmount.text;
|
||||
isUdUnit = configBox.get('isUdUnit') ?? false;
|
||||
waitForTransactionStatus();
|
||||
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
|
||||
Widget build(BuildContext context) {
|
||||
final sub = Provider.of<SubstrateSdk>(context, listen: true);
|
||||
|
||||
if (txContent == null) {
|
||||
return const Center(child: Loading());
|
||||
}
|
||||
|
||||
if (sub.transactionStatus.containsKey(widget.transactionId)) {
|
||||
txContent = sub.transactionStatus[widget.transactionId]!;
|
||||
}
|
||||
|
||||
if (txContent.status == TransactionStatus.success) {
|
||||
if (txContent!.status == TransactionStatus.success) {
|
||||
resultText = 'extrinsicValidated'
|
||||
.tr(args: [actionMap[widget.transType] ?? 'strangeTransaction'.tr()]);
|
||||
} else if (txContent.status == TransactionStatus.failed) {
|
||||
resultText = errorTransactionMap[txContent.error] ?? txContent.error!;
|
||||
} else if (txContent!.status == TransactionStatus.failed) {
|
||||
resultText = errorTransactionMap[txContent!.error] ?? txContent!.error!;
|
||||
} else {
|
||||
resultText = statusStatusMap[txContent.status] ??
|
||||
'Unknown status: ${txContent.status}';
|
||||
resultText = statusStatusMap[txContent!.status] ??
|
||||
'Unknown status: ${txContent!.status}';
|
||||
}
|
||||
|
||||
Widget buildTransactionStatus() {
|
||||
return Column(
|
||||
children: [
|
||||
TransactionStatusIcon(txContent.status),
|
||||
TransactionStatusIcon(txContent!.status),
|
||||
ScaledSizedBox(height: 7),
|
||||
if (txContent.status != TransactionStatus.none)
|
||||
if (txContent!.status != TransactionStatus.none)
|
||||
Text(
|
||||
resultText,
|
||||
textAlign: TextAlign.center,
|
||||
|
|
|
@ -152,13 +152,14 @@ class WalletViewScreen extends StatelessWidget {
|
|||
future: sub.certState(defaultWallet.address, address),
|
||||
builder: (context, AsyncSnapshot<Map<String, int>> snapshot) {
|
||||
if (snapshot.data == null) return const SizedBox.shrink();
|
||||
final certStateData = snapshot.data!;
|
||||
String duration = '';
|
||||
|
||||
if (snapshot.data!['certDelay'] != null ||
|
||||
snapshot.data!['certRenewable'] != null) {
|
||||
if (certStateData['certDelay'] != null ||
|
||||
certStateData['certRenewable'] != null) {
|
||||
final Duration durationSeconds = Duration(
|
||||
seconds: snapshot.data!['certDelay'] ??
|
||||
snapshot.data!['certRenewable']!);
|
||||
seconds: certStateData['certDelay'] ??
|
||||
certStateData['certRenewable']!);
|
||||
final seconds = durationSeconds.inSeconds;
|
||||
final minutes = durationSeconds.inMinutes;
|
||||
|
||||
|
@ -186,12 +187,12 @@ class WalletViewScreen extends StatelessWidget {
|
|||
}
|
||||
}
|
||||
|
||||
final toStatus = snapshot.data!['toStatus'];
|
||||
final toStatus = certStateData['toStatus'];
|
||||
|
||||
return Visibility(
|
||||
visible: (snapshot.data != {}),
|
||||
child: Column(children: <Widget>[
|
||||
if (snapshot.data!['canCert'] != null ||
|
||||
if (certStateData['canCert'] != null ||
|
||||
duration == 'seconds'.tr(args: ['0']))
|
||||
Column(children: <Widget>[
|
||||
ScaledSizedBox(
|
||||
|
@ -273,10 +274,10 @@ class WalletViewScreen extends StatelessWidget {
|
|||
])
|
||||
else if (toStatus == 1)
|
||||
waitToCert('mustConfirmHisIdentity', duration)
|
||||
else if (snapshot.data!['certRenewable'] != null &&
|
||||
else if (certStateData['certRenewable'] != null &&
|
||||
duration != 'seconds'.tr(args: ['0']))
|
||||
waitToCert('canRenewCertInX', duration)
|
||||
else if (snapshot.data!['certDelay'] != null)
|
||||
else if (certStateData['certDelay'] != null)
|
||||
waitToCert('mustWaitXBeforeCertify', duration)
|
||||
]),
|
||||
);
|
||||
|
|
|
@ -10,62 +10,57 @@ class Balance extends StatelessWidget {
|
|||
{Key? key,
|
||||
required this.address,
|
||||
required this.size,
|
||||
this.color = Colors.black,
|
||||
this.loadingColor = const Color(0xffd07316)})
|
||||
this.color = Colors.black})
|
||||
: super(key: key);
|
||||
final String address;
|
||||
final double size;
|
||||
final Color color;
|
||||
final Color loadingColor;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final walletOptions =
|
||||
Provider.of<WalletOptionsProvider>(context, listen: false);
|
||||
return Consumer<SubstrateSdk>(builder: (context, sdk, _) {
|
||||
return FutureBuilder(
|
||||
future: sdk.getBalance(address),
|
||||
builder: (BuildContext context,
|
||||
AsyncSnapshot<Map<String, double>> globalBalance) {
|
||||
if (globalBalance.connectionState != ConnectionState.done ||
|
||||
globalBalance.hasError) {
|
||||
if (walletOptions.balanceCache[address] != null &&
|
||||
walletOptions.balanceCache[address] != -1) {
|
||||
return ScaledSizedBox(
|
||||
height: size * 1.4,
|
||||
child: FutureBuilder(
|
||||
future: sdk.getBalance(address),
|
||||
builder: (BuildContext context,
|
||||
AsyncSnapshot<Map<String, double>> globalBalance) {
|
||||
if (globalBalance.connectionState != ConnectionState.done ||
|
||||
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: [
|
||||
Text(walletOptions.balanceCache[address]!.toString(),
|
||||
style: scaledTextStyle(fontSize: size, color: color)),
|
||||
Text(
|
||||
walletOptions.balanceCache[address]!.toString(),
|
||||
style: scaledTextStyle(
|
||||
fontSize: size,
|
||||
color: color,
|
||||
),
|
||||
),
|
||||
ScaledSizedBox(width: 5),
|
||||
UdUnitDisplay(size: scaleSize(size), color: color),
|
||||
]);
|
||||
} else {
|
||||
return ScaledSizedBox(
|
||||
height: 15,
|
||||
width: 15,
|
||||
child: CircularProgressIndicator(
|
||||
color: loadingColor,
|
||||
strokeWidth: 2,
|
||||
),
|
||||
);
|
||||
return const Text('');
|
||||
}
|
||||
}
|
||||
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('');
|
||||
}
|
||||
});
|
||||
}),
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,12 +4,10 @@ import 'dart:io';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/scale_functions.dart';
|
||||
import 'package:gecko/models/wallet_data.dart';
|
||||
import 'package:gecko/models/widgets_keys.dart';
|
||||
import 'package:gecko/providers/my_wallets.dart';
|
||||
import 'package:gecko/providers/search.dart';
|
||||
import 'package:gecko/providers/wallets_profiles.dart';
|
||||
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class GeckoBottomAppBar extends StatelessWidget {
|
||||
|
@ -93,20 +91,8 @@ class GeckoBottomAppBar extends StatelessWidget {
|
|||
onPressed: lockAction
|
||||
? null
|
||||
: () async {
|
||||
WalletData? defaultWallet =
|
||||
myWalletProvider.getDefaultWallet();
|
||||
if (myWalletProvider.pinCode == '') {
|
||||
await Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (homeContext) {
|
||||
return UnlockingWallet(wallet: defaultWallet);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
if (!await myWalletProvider.askPinCode()) return;
|
||||
|
||||
if (myWalletProvider.pinCode == '') return;
|
||||
Navigator.popUntil(context, ModalRoute.withName('/'));
|
||||
//FIXME: Should not have to wait 300 milliseconds when /mywallets exist in navigator...
|
||||
sleep(const Duration(milliseconds: 300));
|
||||
|
|
|
@ -4,10 +4,8 @@ import 'package:easy_localization/easy_localization.dart';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/scale_functions.dart';
|
||||
import 'package:gecko/models/wallet_data.dart';
|
||||
import 'package:gecko/models/widgets_keys.dart';
|
||||
import 'package:gecko/providers/my_wallets.dart';
|
||||
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class AddNewDerivationButton extends StatelessWidget {
|
||||
|
@ -31,19 +29,8 @@ class AddNewDerivationButton extends StatelessWidget {
|
|||
key: keyAddDerivation,
|
||||
onTap: () async {
|
||||
if (!myWalletProvider.isNewDerivationLoading) {
|
||||
WalletData? defaultWallet =
|
||||
myWalletProvider.getDefaultWallet();
|
||||
if (myWalletProvider.pinCode == '') {
|
||||
await Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (homeContext) {
|
||||
return UnlockingWallet(wallet: defaultWallet);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
if (myWalletProvider.pinCode == '') return;
|
||||
if (!await myWalletProvider.askPinCode()) return;
|
||||
|
||||
await myWalletProvider.generateNewDerivation(
|
||||
context, newDerivationName);
|
||||
}
|
||||
|
|
|
@ -16,31 +16,35 @@ class Certifications extends StatelessWidget {
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final sub = Provider.of<SubstrateSdk>(context);
|
||||
|
||||
return Column(children: <Widget>[
|
||||
Consumer<SubstrateSdk>(builder: (context, sdk, _) {
|
||||
return FutureBuilder(
|
||||
future: sdk.getCertsCounter(address),
|
||||
builder: (BuildContext context, AsyncSnapshot<List<int>?> certs) {
|
||||
return certs.data != null
|
||||
? Row(
|
||||
children: [
|
||||
Image.asset('assets/medal.png',
|
||||
color: color, height: scaleSize(18)),
|
||||
ScaledSizedBox(width: 1),
|
||||
Text(certs.data?[0].toString() ?? '0',
|
||||
style:
|
||||
scaledTextStyle(fontSize: size, color: color)),
|
||||
ScaledSizedBox(width: 5),
|
||||
Text(
|
||||
"(${certs.data?[1].toString() ?? '0'})",
|
||||
style: scaledTextStyle(
|
||||
fontSize: size * 0.7, color: color),
|
||||
)
|
||||
],
|
||||
)
|
||||
: const SizedBox();
|
||||
});
|
||||
}),
|
||||
FutureBuilder(
|
||||
future: sub.getCertsCounter(address),
|
||||
builder: (BuildContext context, AsyncSnapshot<List<int>?> certs) {
|
||||
if ((certs.data != null && certs.data!.isEmpty) ||
|
||||
sub.certsCounterCache[address] == null) {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
|
||||
final receivedCount = sub.certsCounterCache[address]![0];
|
||||
final sentCount = sub.certsCounterCache[address]![1];
|
||||
|
||||
return Row(
|
||||
children: [
|
||||
Image.asset('assets/medal.png',
|
||||
color: color, height: scaleSize(18)),
|
||||
ScaledSizedBox(width: 1),
|
||||
Text(receivedCount.toString(),
|
||||
style: scaledTextStyle(fontSize: size, color: color)),
|
||||
ScaledSizedBox(width: 5),
|
||||
Text(
|
||||
"($sentCount)",
|
||||
style: scaledTextStyle(fontSize: size * 0.7, color: color),
|
||||
)
|
||||
],
|
||||
);
|
||||
}),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -44,9 +44,9 @@ class DragTuleAction extends StatelessWidget {
|
|||
),
|
||||
),
|
||||
child: DragTarget<String>(
|
||||
onAccept: (senderAddress) async {
|
||||
onAcceptWithDetails: (senderAddress) async {
|
||||
final walletData =
|
||||
myWalletProvider.getWalletDataByAddress(senderAddress);
|
||||
myWalletProvider.getWalletDataByAddress(senderAddress.data);
|
||||
await sub.setCurrentWallet(walletData!);
|
||||
sub.reload();
|
||||
paymentPopup(context, wallet.address,
|
||||
|
@ -58,7 +58,8 @@ class DragTuleAction extends StatelessWidget {
|
|||
myWalletProvider.reload();
|
||||
}
|
||||
},
|
||||
onWillAccept: (senderAddress) => senderAddress != wallet.address,
|
||||
onWillAcceptWithDetails: (senderAddress) =>
|
||||
senderAddress.data != wallet.address,
|
||||
builder: (
|
||||
BuildContext context,
|
||||
List<dynamic> accepted,
|
||||
|
|
|
@ -63,22 +63,45 @@ class HistoryQuery extends StatelessWidget {
|
|||
}
|
||||
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) {
|
||||
log.e('Error Indexer: ${result.exception}');
|
||||
return Column(children: <Widget>[
|
||||
ScaledSizedBox(height: 50),
|
||||
Text(
|
||||
"noNetworkNoHistory".tr(),
|
||||
textAlign: TextAlign.center,
|
||||
style: scaledTextStyle(fontSize: 18),
|
||||
Column(
|
||||
children: [
|
||||
if (transactionId != null)
|
||||
TransactionInProgressTule(
|
||||
address: address, transactionId: transactionId),
|
||||
ScaledSizedBox(height: 50),
|
||||
Text(
|
||||
"noNetworkNoHistory".tr(),
|
||||
textAlign: TextAlign.center,
|
||||
style: scaledTextStyle(fontSize: 18),
|
||||
),
|
||||
],
|
||||
)
|
||||
]);
|
||||
} else if (transactions.isEmpty) {
|
||||
return Column(children: <Widget>[
|
||||
ScaledSizedBox(height: 50),
|
||||
Text(
|
||||
"noDataToDisplay".tr(),
|
||||
style: scaledTextStyle(fontSize: 18),
|
||||
Column(
|
||||
children: [
|
||||
if (transactionId != null)
|
||||
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,
|
||||
);
|
||||
|
||||
// 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
|
||||
return NotificationListener(
|
||||
child: Builder(
|
||||
|
|
|
@ -28,26 +28,25 @@ class IdentityStatus extends StatelessWidget {
|
|||
future: sub.idtyStatus([address]),
|
||||
initialData: [walletData.identityStatus],
|
||||
builder: (context, AsyncSnapshot<List<IdtyStatus>> snapshot) {
|
||||
if (snapshot.hasError || snapshot.data == null) {
|
||||
log.e(snapshot.error);
|
||||
return const Icon(Icons.close, color: Colors.red);
|
||||
if (snapshot.data != null && !snapshot.hasError) {
|
||||
final resStatus = snapshot.data!.first;
|
||||
walletData.identityStatus = resStatus;
|
||||
walletBox.put(address, walletData);
|
||||
}
|
||||
|
||||
final resStatus = snapshot.data!.first;
|
||||
walletData.identityStatus = resStatus;
|
||||
walletBox.put(address, walletData);
|
||||
final resStatus = walletData.identityStatus;
|
||||
|
||||
if (!isOwner) {
|
||||
if (resStatus == IdtyStatus.confirmed) {
|
||||
return NameByAddress(
|
||||
wallet: WalletData(address: address),
|
||||
wallet: walletData,
|
||||
size: 18,
|
||||
color: Colors.grey[700]!,
|
||||
fontWeight: FontWeight.w500,
|
||||
fontStyle: FontStyle.italic);
|
||||
} else if (resStatus == IdtyStatus.validated) {
|
||||
return NameByAddress(
|
||||
wallet: WalletData(address: address),
|
||||
wallet: walletData,
|
||||
size: 20,
|
||||
color: Colors.black,
|
||||
fontWeight: FontWeight.w600,
|
||||
|
|
|
@ -12,7 +12,6 @@ import 'package:gecko/providers/substrate_sdk.dart';
|
|||
import 'package:gecko/providers/wallet_options.dart';
|
||||
import 'package:gecko/providers/wallets_profiles.dart';
|
||||
import 'package:gecko/screens/activity.dart';
|
||||
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
|
||||
import 'package:gecko/screens/transaction_in_progress.dart';
|
||||
import 'package:gecko/widgets/balance.dart';
|
||||
import 'package:gecko/widgets/name_by_address.dart';
|
||||
|
@ -34,17 +33,8 @@ void paymentPopup(BuildContext context, String toAddress, String? username) {
|
|||
walletViewProvider.payAmount.text = '';
|
||||
|
||||
Future executeTransfert() async {
|
||||
if (myWalletProvider.pinCode == '') {
|
||||
await Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (homeContext) {
|
||||
return UnlockingWallet(wallet: defaultWallet);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
if (myWalletProvider.pinCode == '') return;
|
||||
if (!await myWalletProvider.askPinCode()) return;
|
||||
|
||||
// Payment workflow !
|
||||
final sub = Provider.of<SubstrateSdk>(context, listen: false);
|
||||
final acc = sub.getCurrentWallet();
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/g1_wallets_list.dart';
|
||||
import 'package:gecko/models/scale_functions.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/screens/wallet_view.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/name_by_address.dart';
|
||||
import 'package:gecko/widgets/search_identity_query.dart';
|
||||
|
@ -47,11 +47,9 @@ class SearchResult extends StatelessWidget {
|
|||
}
|
||||
}
|
||||
return const Center(
|
||||
heightFactor: 5,
|
||||
child: CircularProgressIndicator(
|
||||
strokeWidth: 3,
|
||||
backgroundColor: yellowC,
|
||||
color: orangeC,
|
||||
child: Loading(
|
||||
stroke: 3,
|
||||
size: 30,
|
||||
),
|
||||
);
|
||||
},
|
||||
|
|
|
@ -40,6 +40,7 @@ class _TransactionInProgressTuleState extends State<TransactionInProgressTule> {
|
|||
txContent = sub.transactionStatus[widget.transactionId]!;
|
||||
|
||||
subscription = stream.listen((result) {
|
||||
if (result.data?['account_by_pk'] == null) return;
|
||||
if (result.hasException) {
|
||||
log.e(result.exception);
|
||||
isVisible = true;
|
||||
|
@ -128,7 +129,7 @@ class _TransactionInProgressTuleState extends State<TransactionInProgressTule> {
|
|||
statusIcon,
|
||||
ScaledSizedBox(width: 10),
|
||||
ScaledSizedBox(
|
||||
width: 160,
|
||||
width: 170,
|
||||
child: Text(
|
||||
humanStatus,
|
||||
style: scaledTextStyle(
|
||||
|
|
|
@ -151,7 +151,7 @@ class BalanceBuilder extends StatelessWidget {
|
|||
address: address,
|
||||
size: 14,
|
||||
color: isDefault ? Colors.white : Colors.black,
|
||||
loadingColor: isDefault ? yellowC : orangeC),
|
||||
),
|
||||
)
|
||||
],
|
||||
)),
|
||||
|
|
|
@ -171,10 +171,10 @@ class BalanceBuilder extends StatelessWidget {
|
|||
Opacity(
|
||||
opacity: 0.7,
|
||||
child: Balance(
|
||||
address: address,
|
||||
size: 15,
|
||||
color: isDefault ? Colors.white : Colors.black,
|
||||
loadingColor: isDefault ? yellowC : orangeC),
|
||||
address: address,
|
||||
size: 15,
|
||||
color: isDefault ? Colors.white : Colors.black,
|
||||
),
|
||||
)
|
||||
],
|
||||
)),
|
||||
|
|
396
pubspec.lock
396
pubspec.lock
|
@ -5,10 +5,10 @@ packages:
|
|||
dependency: transitive
|
||||
description:
|
||||
name: _fe_analyzer_shared
|
||||
sha256: ae92f5d747aee634b87f89d9946000c2de774be1d6ac3e58268224348cd0101a
|
||||
sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "61.0.0"
|
||||
version: "67.0.0"
|
||||
accordion:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
@ -21,26 +21,10 @@ packages:
|
|||
dependency: transitive
|
||||
description:
|
||||
name: analyzer
|
||||
sha256: ea3d8652bda62982addfd92fdc2d0214e5f82e43325104990d4f4c4a2a313562
|
||||
sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "5.13.0"
|
||||
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"
|
||||
version: "6.4.1"
|
||||
archive:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -69,10 +53,10 @@ packages:
|
|||
dependency: transitive
|
||||
description:
|
||||
name: barcode
|
||||
sha256: "2a8b2ee065f419c2aeda141436cc556d91ae772d220fd80679f4d431d6c2ab43"
|
||||
sha256: "91b143666f7bb13636f716b6d4e412e372ab15ff7969799af8c9e30a382e9385"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.2.5"
|
||||
version: "2.2.6"
|
||||
barcode_scan2:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
@ -101,10 +85,10 @@ packages:
|
|||
dependency: transitive
|
||||
description:
|
||||
name: bip32_ed25519
|
||||
sha256: "8c739df5d7a05ac2d08dd355062313d84f41244d05cf6cc953c9f0bca66b1fdf"
|
||||
sha256: "292ef300ce24a140ce2814e593af6fc2fe20185ffded9a9bd99ce7c22abd7657"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.2.2"
|
||||
version: "0.5.0"
|
||||
bip39:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -181,18 +165,18 @@ packages:
|
|||
dependency: "direct dev"
|
||||
description:
|
||||
name: build_runner
|
||||
sha256: "67d591d602906ef9201caf93452495ad1812bea2074f04e25dbd7c133785821b"
|
||||
sha256: "581bacf68f89ec8792f5e5a0b2c4decd1c948e97ce659dc783688c8a88fbec21"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.4.7"
|
||||
version: "2.4.8"
|
||||
build_runner_core:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: build_runner_core
|
||||
sha256: c9e32d21dd6626b5c163d48b037ce906bbe428bc23ab77bcd77bb21e593b6185
|
||||
sha256: "4ae8ffe5ac758da294ecf1802f2aff01558d8b1b00616aa7538ea9a8a5d50799"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "7.2.11"
|
||||
version: "7.3.0"
|
||||
built_collection:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -205,10 +189,10 @@ packages:
|
|||
dependency: transitive
|
||||
description:
|
||||
name: built_value
|
||||
sha256: c9aabae0718ec394e5bc3c7272e6bb0dc0b32201a08fe185ec1d8401d3e39309
|
||||
sha256: fedde275e0a6b798c3296963c5cd224e3e1b55d0e478d5b7e65e6b540f363a0e
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "8.8.1"
|
||||
version: "8.9.1"
|
||||
carousel_slider:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
@ -245,10 +229,10 @@ packages:
|
|||
dependency: transitive
|
||||
description:
|
||||
name: code_builder
|
||||
sha256: feee43a5c05e7b3199bb375a86430b8ada1b04104f2923d0e03cc01ca87b6d84
|
||||
sha256: f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.9.0"
|
||||
version: "4.10.0"
|
||||
collection:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -305,38 +289,14 @@ packages:
|
|||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
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:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: dart_style
|
||||
sha256: "1efa911ca7086affd35f463ca2fc1799584fb6aa89883cf0af8e3664d6a02d55"
|
||||
sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.3.2"
|
||||
version: "2.3.6"
|
||||
dbus:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -357,10 +317,10 @@ packages:
|
|||
dependency: "direct main"
|
||||
description:
|
||||
name: dio
|
||||
sha256: "797e1e341c3dd2f69f2dad42564a6feff3bfb87187d05abb93b9609e6f1645c3"
|
||||
sha256: "49af28382aefc53562459104f64d16b9dfd1e8ef68c862d5af436cc8356ce5a8"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "5.4.0"
|
||||
version: "5.4.1"
|
||||
dots_indicator:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
@ -373,18 +333,18 @@ packages:
|
|||
dependency: "direct main"
|
||||
description:
|
||||
name: durt
|
||||
sha256: "97007458aa5ba95c78465af8489e1330d0f7d48c74e10699f6283ce4cf8a5410"
|
||||
sha256: "29e4a1adaea1dfedff4d9237580b414ca5fe621a7a131b5fa129b9824365c938"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.1.7"
|
||||
version: "0.1.8"
|
||||
easy_localization:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: easy_localization
|
||||
sha256: de63e3b422adfc97f256cbb3f8cf12739b6a4993d390f3cadb3f51837afaefe5
|
||||
sha256: c145aeb6584aedc7c862ab8c737c3277788f47488bfdf9bae0fe112bd0a4789c
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.0.3"
|
||||
version: "3.0.5"
|
||||
easy_logger:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -445,18 +405,18 @@ packages:
|
|||
dependency: transitive
|
||||
description:
|
||||
name: ffi
|
||||
sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878"
|
||||
sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.0"
|
||||
version: "2.1.2"
|
||||
file:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: file
|
||||
sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d"
|
||||
sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.1.4"
|
||||
version: "7.0.0"
|
||||
file_selector_linux:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -477,10 +437,10 @@ packages:
|
|||
dependency: transitive
|
||||
description:
|
||||
name: file_selector_platform_interface
|
||||
sha256: "0aa47a725c346825a2bd396343ce63ac00bda6eff2fbc43eabe99737dede8262"
|
||||
sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.6.1"
|
||||
version: "2.6.2"
|
||||
file_selector_windows:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -548,10 +508,10 @@ packages:
|
|||
dependency: "direct main"
|
||||
description:
|
||||
name: flutter_markdown
|
||||
sha256: "35108526a233cc0755664d445f8a6b4b61e6f8fe993b3658b80b4a26827fc196"
|
||||
sha256: cb44f7831b23a6bdd0f501718b0d2e8045cbc625a15f668af37ddb80314821db
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.6.18+2"
|
||||
version: "0.6.21"
|
||||
flutter_plugin_android_lifecycle:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -727,14 +687,6 @@ packages:
|
|||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.1"
|
||||
html:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: html
|
||||
sha256: "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.15.4"
|
||||
http:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -763,18 +715,18 @@ packages:
|
|||
dependency: "direct dev"
|
||||
description:
|
||||
name: icons_launcher
|
||||
sha256: "3ed4560181f238e69ca5d55589d6946ef31e6a321c934251a26ce1d9e9867305"
|
||||
sha256: "9b514ffed6ed69b232fd2bf34c44878c8526be71fc74129a658f35c04c9d4a9d"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.6"
|
||||
version: "2.1.7"
|
||||
image:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: image
|
||||
sha256: "028f61960d56f26414eb616b48b04eb37d700cbe477b7fb09bf1d7ce57fd9271"
|
||||
sha256: "4c68bfd5ae83e700b5204c1e74451e7bf3cf750e6843c6e158289cf56bda018e"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.1.3"
|
||||
version: "4.1.7"
|
||||
image_cropper:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
@ -803,34 +755,34 @@ packages:
|
|||
dependency: "direct main"
|
||||
description:
|
||||
name: image_picker
|
||||
sha256: fc712337719239b0b6e41316aa133350b078fa39b6cbd706b61f3fd421b03c77
|
||||
sha256: "26222b01a0c9a2c8fe02fc90b8208bd3325da5ed1f4a2acabf75939031ac0bdd"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.0.5"
|
||||
version: "1.0.7"
|
||||
image_picker_android:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: image_picker_android
|
||||
sha256: ecdc963d2aa67af5195e723a40580f802d4392e31457a12a562b3e2bd6a396fe
|
||||
sha256: "39f2bfe497e495450c81abcd44b62f56c2a36a37a175da7d137b4454977b51b1"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.8.9+1"
|
||||
version: "0.8.9+3"
|
||||
image_picker_for_web:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: image_picker_for_web
|
||||
sha256: "50bc9ae6a77eea3a8b11af5eb6c661eeb858fdd2f734c2a4fd17086922347ef7"
|
||||
sha256: e2423c53a68b579a7c37a1eda967b8ae536c3d98518e5db95ca1fe5719a730a3
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.0.1"
|
||||
version: "3.0.2"
|
||||
image_picker_ios:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: image_picker_ios
|
||||
sha256: eac0a62104fa12feed213596df0321f57ce5a572562f72a68c4ff81e9e4caacf
|
||||
sha256: fadafce49e8569257a0cad56d24438a6fa1f0cbd7ee0af9b631f7492818a4ca3
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.8.9"
|
||||
version: "0.8.9+1"
|
||||
image_picker_linux:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -851,10 +803,10 @@ packages:
|
|||
dependency: transitive
|
||||
description:
|
||||
name: image_picker_platform_interface
|
||||
sha256: ed9b00e63977c93b0d2d2b343685bed9c324534ba5abafbb3dfbd6a780b1b514
|
||||
sha256: "3d2c323daea9d60608f1caf30be32a938916f4975434b8352e6f73dae496da38"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.9.1"
|
||||
version: "2.9.4"
|
||||
image_picker_windows:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -916,6 +868,30 @@ packages:
|
|||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
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:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -928,10 +904,10 @@ packages:
|
|||
dependency: "direct main"
|
||||
description:
|
||||
name: logger
|
||||
sha256: "6bbb9d6f7056729537a4309bda2e74e18e5d9f14302489cc1e93f33b3fe32cac"
|
||||
sha256: b3ff55aeb08d9d8901b767650285872cb1bb8f508373b3e348d60268b0c7f770
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.2+1"
|
||||
version: "2.1.0"
|
||||
logging:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -944,50 +920,50 @@ packages:
|
|||
dependency: transitive
|
||||
description:
|
||||
name: markdown
|
||||
sha256: acf35edccc0463a9d7384e437c015a3535772e09714cf60e07eeef3a15870dcd
|
||||
sha256: ef2a1298144e3f985cc736b22e0ccdaf188b5b3970648f2d9dc13efd1d9df051
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "7.1.1"
|
||||
version: "7.2.2"
|
||||
matcher:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: matcher
|
||||
sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e"
|
||||
sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.12.16"
|
||||
version: "0.12.16+1"
|
||||
material_color_utilities:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: material_color_utilities
|
||||
sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41"
|
||||
sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.5.0"
|
||||
version: "0.8.0"
|
||||
meta:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: meta
|
||||
sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e
|
||||
sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.10.0"
|
||||
version: "1.11.0"
|
||||
mime:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: mime
|
||||
sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e
|
||||
sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.0.4"
|
||||
version: "1.0.5"
|
||||
mobx:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: mobx
|
||||
sha256: "6b467f91bfc534922ea670db69a1972d28bd9754085892decb5bce19f2c8d0d5"
|
||||
sha256: "74ee54012dc7c1b3276eaa960a600a7418ef5f9997565deb8fca1fd88fb36b78"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.3.0"
|
||||
version: "2.3.0+1"
|
||||
nested:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -1040,10 +1016,10 @@ packages:
|
|||
dependency: transitive
|
||||
description:
|
||||
name: path
|
||||
sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917"
|
||||
sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.8.3"
|
||||
version: "1.9.0"
|
||||
path_parsing:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -1056,10 +1032,10 @@ packages:
|
|||
dependency: "direct main"
|
||||
description:
|
||||
name: path_provider
|
||||
sha256: a1aa8aaa2542a6bc57e381f132af822420216c80d4781f7aa085ca3229208aaa
|
||||
sha256: b27217933eeeba8ff24845c34003b003b2b22151de3c908d0e679e8fe1aa078b
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.1"
|
||||
version: "2.1.2"
|
||||
path_provider_android:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -1072,10 +1048,10 @@ packages:
|
|||
dependency: transitive
|
||||
description:
|
||||
name: path_provider_foundation
|
||||
sha256: "19314d595120f82aca0ba62787d58dde2cc6b5df7d2f0daf72489e38d1b57f2d"
|
||||
sha256: "5a7999be66e000916500be4f15a3633ebceb8302719b47b9cc49ce924125350f"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.3.1"
|
||||
version: "2.3.2"
|
||||
path_provider_linux:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -1088,10 +1064,10 @@ packages:
|
|||
dependency: transitive
|
||||
description:
|
||||
name: path_provider_platform_interface
|
||||
sha256: "94b1e0dd80970c1ce43d5d4e050a9918fce4f4a775e6142424c30a29a363265c"
|
||||
sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.1"
|
||||
version: "2.1.2"
|
||||
path_provider_windows:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -1104,58 +1080,66 @@ packages:
|
|||
dependency: "direct main"
|
||||
description:
|
||||
name: pdf
|
||||
sha256: "93cbb2c06de9bab91844550f19896b2373e7a5ce25173995e7e5ec5e1741429d"
|
||||
sha256: "243f05342fc0bdf140eba5b069398985cdbdd3dbb1d776cf43d5ea29cc570ba6"
|
||||
url: "https://pub.dev"
|
||||
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:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: permission_handler
|
||||
sha256: "860c6b871c94c78e202dc69546d4d8fd84bd59faeb36f8fb9888668a53ff4f78"
|
||||
sha256: "74e962b7fad7ff75959161bb2c0ad8fe7f2568ee82621c9c2660b751146bfe44"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "11.1.0"
|
||||
version: "11.3.0"
|
||||
permission_handler_android:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: permission_handler_android
|
||||
sha256: "2f1bec180ee2f5665c22faada971a8f024761f632e93ddc23310487df52dcfa6"
|
||||
sha256: "1acac6bae58144b442f11e66621c062aead9c99841093c38f5bcdcc24c1c3474"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "12.0.1"
|
||||
version: "12.0.5"
|
||||
permission_handler_apple:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: permission_handler_apple
|
||||
sha256: "1a816084338ada8d574b1cb48390e6e8b19305d5120fe3a37c98825bacc78306"
|
||||
sha256: bdafc6db74253abb63907f4e357302e6bb786ab41465e8635f362ee71fd8707b
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "9.2.0"
|
||||
version: "9.4.0"
|
||||
permission_handler_html:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: permission_handler_html
|
||||
sha256: "11b762a8c123dced6461933a88ea1edbbe036078c3f9f41b08886e678e7864df"
|
||||
sha256: "54bf176b90f6eddd4ece307e2c06cf977fb3973719c35a93b85cc7093eb6070d"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.1.0+2"
|
||||
version: "0.1.1"
|
||||
permission_handler_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: permission_handler_platform_interface
|
||||
sha256: d87349312f7eaf6ce0adaf668daf700ac5b06af84338bd8b8574dfbd93ffe1a1
|
||||
sha256: "23dfba8447c076ab5be3dee9ceb66aad345c4a648f0cac292c77b1eb0e800b78"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.0.2"
|
||||
version: "4.2.0"
|
||||
permission_handler_windows:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: permission_handler_windows
|
||||
sha256: "1e8640c1e39121128da6b816d236e714d2cf17fac5a105dd6acdd3403a628004"
|
||||
sha256: "1a790728016f79a41216d88672dbc5df30e686e811ad4e698bfc51f76ad91f1e"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.2.0"
|
||||
version: "0.2.1"
|
||||
petitparser:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -1176,34 +1160,34 @@ packages:
|
|||
dependency: "direct main"
|
||||
description:
|
||||
name: pinenacl
|
||||
sha256: e5fb0bce1717b7f136f35ee98b5c02b3e6383211f8a77ca882fa7812232a07b9
|
||||
sha256: "3a5503637587d635647c93ea9a8fecf48a420cc7deebe6f1fc85c2a5637ab327"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.3.4"
|
||||
version: "0.5.1"
|
||||
platform:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: platform
|
||||
sha256: ae68c7bfcd7383af3629daafb32fb4e8681c7154428da4febcff06200585f102
|
||||
sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.1.2"
|
||||
version: "3.1.4"
|
||||
plugin_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: plugin_platform_interface
|
||||
sha256: f4f88d4a900933e7267e2b353594774fc0d07fb072b47eedcd5b54e1ea3269f8
|
||||
sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.7"
|
||||
version: "2.1.8"
|
||||
pointycastle:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: pointycastle
|
||||
sha256: "7c1e5f0d23c9016c5bbd8b1473d0d3fb3fc851b876046039509e18e0c7485f2c"
|
||||
sha256: "43ac87de6e10afabc85c445745a7b799e04de84cebaa4fd7bf55a5e1e9604d29"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.7.3"
|
||||
version: "3.7.4"
|
||||
polkawallet_sdk:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
@ -1225,18 +1209,18 @@ packages:
|
|||
dependency: "direct main"
|
||||
description:
|
||||
name: printing
|
||||
sha256: ad39a42a5f83125952457dfd94f395c8cf0eb1f7759583dadb769be5c7f99d24
|
||||
sha256: "1c99cab90ebcc1fff65831d264627d5b529359d563e53f33ab9b8117f2d280bc"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "5.11.1"
|
||||
version: "5.12.0"
|
||||
process:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: process
|
||||
sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09"
|
||||
sha256: "21e54fd2faf1b5bdd5102afd25012184a6793927648ea81eea80552ac9405b32"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.2.4"
|
||||
version: "5.0.2"
|
||||
protobuf:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -1249,10 +1233,10 @@ packages:
|
|||
dependency: "direct main"
|
||||
description:
|
||||
name: provider
|
||||
sha256: "9a96a0a19b594dbc5bf0f1f27d2bc67d5f95957359b461cd9feb44ed6ae75096"
|
||||
sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.1.1"
|
||||
version: "6.1.2"
|
||||
pub_semver:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -1261,14 +1245,6 @@ packages:
|
|||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
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:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -1305,10 +1281,10 @@ packages:
|
|||
dependency: "direct main"
|
||||
description:
|
||||
name: responsive_framework
|
||||
sha256: "23aa7be5d5136922df708f6ddccb5ec4e0eb8bc576c3f105f5093f31d6b68e50"
|
||||
sha256: "52367ab0c3479b3a5342dec3b74a3d47c4cc1b45bb5d38f720c2e002ebccd4ee"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.1.1"
|
||||
version: "1.4.0"
|
||||
rxdart:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -1321,50 +1297,50 @@ packages:
|
|||
dependency: "direct main"
|
||||
description:
|
||||
name: screen_brightness
|
||||
sha256: ed8da4a4511e79422fc1aa88138e920e4008cd312b72cdaa15ccb426c0faaedd
|
||||
sha256: a1273cbc854c39c940c17ac400c040afd973166b8808f2efe2072763b23e4d30
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.2.2+1"
|
||||
version: "1.0.0"
|
||||
screen_brightness_android:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: screen_brightness_android
|
||||
sha256: "3df10961e3a9e968a5e076fe27e7f4741fa8a1d3950bdeb48cf121ed529d0caf"
|
||||
sha256: "69d903bb42071aa2ad8853bf24e206ff6c39894930278e6239751447aacb9fe4"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.1.0+2"
|
||||
version: "1.0.0"
|
||||
screen_brightness_ios:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: screen_brightness_ios
|
||||
sha256: "99adc3ca5490b8294284aad5fcc87f061ad685050e03cf45d3d018fe398fd9a2"
|
||||
sha256: "265790af69e26c4840e515b9b34e31505f95c0ca8866fac47b80db3552196214"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.1.0"
|
||||
version: "1.0.0"
|
||||
screen_brightness_macos:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: screen_brightness_macos
|
||||
sha256: "64b34e7e3f4900d7687c8e8fb514246845a73ecec05ab53483ed025bd4a899fd"
|
||||
sha256: b83e7a8b7c0f1a3161b586620781517b585deb4082dfff3745a5b2779ea94996
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.1.0+1"
|
||||
version: "1.0.0"
|
||||
screen_brightness_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: screen_brightness_platform_interface
|
||||
sha256: b211d07f0c96637a15fb06f6168617e18030d5d74ad03795dd8547a52717c171
|
||||
sha256: e160b78f37bc093a6a66bfa118bb9266c36bfa3163bf976f94e0e5aa79977ff9
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.1.0"
|
||||
version: "1.0.0"
|
||||
screen_brightness_windows:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: screen_brightness_windows
|
||||
sha256: "9261bf33d0fc2707d8cf16339ce25768100a65e70af0fcabaf032fc12408ba86"
|
||||
sha256: "1f1f14436ec3d8fdda4dca60a8c6aa70f9ae1c04a55bd2cf40e3a4453a4bf78e"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.1.3"
|
||||
version: "1.0.0"
|
||||
scroll_to_index:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -1385,18 +1361,18 @@ packages:
|
|||
dependency: transitive
|
||||
description:
|
||||
name: sentry
|
||||
sha256: "89e426587b0879e53c46a0aae0eb312696d9d2d803ba14b252a65cc24b1416a2"
|
||||
sha256: a524a87d096799b775530176c8c082afe7aa1f10cc31ba078fecdd74e9afc923
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "7.14.0"
|
||||
version: "7.17.0"
|
||||
sentry_flutter:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: sentry_flutter
|
||||
sha256: fd089ee4e75a927be037c56815a0a54af5a519f52b803a5ffecb589bb36e2401
|
||||
sha256: e0f8367f8f7c74dba9f7521f71700bce6c6ee065cf342f065d4fce411b84fc7b
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "7.14.0"
|
||||
version: "7.17.0"
|
||||
shared_preferences:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -1417,10 +1393,10 @@ packages:
|
|||
dependency: transitive
|
||||
description:
|
||||
name: shared_preferences_foundation
|
||||
sha256: "7bf53a9f2d007329ee6f3df7268fd498f8373602f943c975598bbb34649b62a7"
|
||||
sha256: "7708d83064f38060c7b39db12aefe449cb8cdc031d6062280087bc4cdb988f5c"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.3.4"
|
||||
version: "2.3.5"
|
||||
shared_preferences_linux:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -1433,10 +1409,10 @@ packages:
|
|||
dependency: transitive
|
||||
description:
|
||||
name: shared_preferences_platform_interface
|
||||
sha256: d4ec5fc9ebb2f2e056c617112aa75dcf92fc2e4faaf2ae999caa297473f75d8a
|
||||
sha256: "22e2ecac9419b4246d7c22bfbbda589e3acf5c0351137d87dd2939d984d37c3b"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.3.1"
|
||||
version: "2.3.2"
|
||||
shared_preferences_web:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -1606,26 +1582,26 @@ packages:
|
|||
dependency: "direct main"
|
||||
description:
|
||||
name: url_launcher
|
||||
sha256: e9aa5ea75c84cf46b3db4eea212523591211c3cf2e13099ee4ec147f54201c86
|
||||
sha256: "0ecc004c62fd3ed36a2ffcbe0dd9700aee63bd7532d0b642a488b1ec310f492e"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.2.2"
|
||||
version: "6.2.5"
|
||||
url_launcher_android:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: url_launcher_android
|
||||
sha256: "31222ffb0063171b526d3e569079cf1f8b294075ba323443fdc690842bfd4def"
|
||||
sha256: d4ed0711849dd8e33eb2dd69c25db0d0d3fdc37e0a62e629fe32f57a22db2745
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.2.0"
|
||||
version: "6.3.0"
|
||||
url_launcher_ios:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: url_launcher_ios
|
||||
sha256: bba3373219b7abb6b5e0d071b0fe66dfbe005d07517a68e38d4fc3638f35c6d3
|
||||
sha256: "9149d493b075ed740901f3ee844a38a00b33116c7c5c10d7fb27df8987fb51d5"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.2.1"
|
||||
version: "6.2.5"
|
||||
url_launcher_linux:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -1646,18 +1622,18 @@ packages:
|
|||
dependency: transitive
|
||||
description:
|
||||
name: url_launcher_platform_interface
|
||||
sha256: "980e8d9af422f477be6948bdfb68df8433be71f5743a188968b0c1b887807e50"
|
||||
sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.2.0"
|
||||
version: "2.3.2"
|
||||
url_launcher_web:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: url_launcher_web
|
||||
sha256: "7286aec002c8feecc338cc33269e96b73955ab227456e9fb2a91f7fab8a358e9"
|
||||
sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.2.2"
|
||||
version: "2.2.3"
|
||||
url_launcher_windows:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -1678,26 +1654,26 @@ packages:
|
|||
dependency: transitive
|
||||
description:
|
||||
name: vector_graphics
|
||||
sha256: "0f0c746dd2d6254a0057218ff980fc7f5670fd0fcf5e4db38a490d31eed4ad43"
|
||||
sha256: "4ac59808bbfca6da38c99f415ff2d3a5d7ca0a6b4809c71d9cf30fba5daf9752"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.1.9+1"
|
||||
version: "1.1.10+1"
|
||||
vector_graphics_codec:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: vector_graphics_codec
|
||||
sha256: "0edf6d630d1bfd5589114138ed8fada3234deacc37966bec033d3047c29248b7"
|
||||
sha256: f3247e7ab0ec77dc759263e68394990edc608fb2b480b80db8aa86ed09279e33
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.1.9+1"
|
||||
version: "1.1.10+1"
|
||||
vector_graphics_compiler:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: vector_graphics_compiler
|
||||
sha256: d24333727332d9bd20990f1483af4e09abdb9b1fc7c3db940b56ab5c42790c26
|
||||
sha256: "18489bdd8850de3dd7ca8a34e0c446f719ec63e2bab2e7a8cc66a9028dd76c5a"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.1.9+1"
|
||||
version: "1.1.10+1"
|
||||
vector_math:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -1710,10 +1686,10 @@ packages:
|
|||
dependency: transitive
|
||||
description:
|
||||
name: vm_service
|
||||
sha256: c538be99af830f478718b51630ec1b6bee5e74e52c8a802d328d9e71d35d2583
|
||||
sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "11.10.0"
|
||||
version: "13.0.0"
|
||||
wallet:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -1734,10 +1710,10 @@ packages:
|
|||
dependency: transitive
|
||||
description:
|
||||
name: web
|
||||
sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152
|
||||
sha256: "4188706108906f002b3a293509234588823c8c979dc83304e229ff400c996b05"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.3.0"
|
||||
version: "0.4.2"
|
||||
web3dart:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -1758,58 +1734,58 @@ packages:
|
|||
dependency: transitive
|
||||
description:
|
||||
name: webdriver
|
||||
sha256: "3c923e918918feeb90c4c9fdf1fe39220fa4c0e8e2c0fffaded174498ef86c49"
|
||||
sha256: "003d7da9519e1e5f329422b36c4dcdf18d7d2978d1ba099ea4e45ba490ed845e"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.0.2"
|
||||
version: "3.0.3"
|
||||
webview_flutter:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: webview_flutter
|
||||
sha256: "42393b4492e629aa3a88618530a4a00de8bb46e50e7b3993fedbfdc5352f0dbf"
|
||||
sha256: "25e1b6e839e8cbfbd708abc6f85ed09d1727e24e08e08c6b8590d7c65c9a8932"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.4.2"
|
||||
version: "4.7.0"
|
||||
webview_flutter_android:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: webview_flutter_android
|
||||
sha256: b54c89fe14a6d26a2a46e24880da0441cdd2bf1f6d01a5b3e1d39558feb1de0b
|
||||
sha256: "3e5f4e9d818086b0d01a66fb1ff9cc72ab0cc58c71980e3d3661c5685ea0efb0"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.13.1"
|
||||
version: "3.15.0"
|
||||
webview_flutter_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: webview_flutter_platform_interface
|
||||
sha256: dbe745ee459a16b6fec296f7565a8ef430d0d681001d8ae521898b9361854943
|
||||
sha256: d937581d6e558908d7ae3dc1989c4f87b786891ab47bb9df7de548a151779d8d
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.9.0"
|
||||
version: "2.10.0"
|
||||
webview_flutter_wkwebview:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: webview_flutter_wkwebview
|
||||
sha256: eebfabfa8a115b535b52031b8b26f7a4b58ceceab378bc9db8762b0fb46f7b5d
|
||||
sha256: "9bf168bccdf179ce90450b5f37e36fe263f591c9338828d6bf09b6f8d0f57f86"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.10.0"
|
||||
version: "3.12.0"
|
||||
win32:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: win32
|
||||
sha256: b0f37db61ba2f2e9b7a78a1caece0052564d1bc70668156cf3a29d676fe4e574
|
||||
sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "5.1.1"
|
||||
version: "5.2.0"
|
||||
xdg_directories:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: xdg_directories
|
||||
sha256: "589ada45ba9e39405c198fe34eb0f607cddb2108527e658136120892beac46d2"
|
||||
sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.0.3"
|
||||
version: "1.0.4"
|
||||
xml:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -1827,5 +1803,5 @@ packages:
|
|||
source: hosted
|
||||
version: "3.1.2"
|
||||
sdks:
|
||||
dart: ">=3.2.0 <4.0.0"
|
||||
flutter: ">=3.16.0"
|
||||
dart: ">=3.3.0 <4.0.0"
|
||||
flutter: ">=3.19.0"
|
||||
|
|
|
@ -5,7 +5,7 @@ description: Pay with G1.
|
|||
# pub.dev using `pub publish`. This is preferred for private packages.
|
||||
publish_to: "none" # Remove this line if you wish to publish to pub.dev
|
||||
|
||||
version: 0.1.4+68
|
||||
version: 0.1.5+72
|
||||
|
||||
environment:
|
||||
sdk: ">=2.12.0 <3.0.0"
|
||||
|
@ -51,13 +51,13 @@ dependencies:
|
|||
hex: ^0.2.0
|
||||
accordion: ^2.6.0
|
||||
flutter_svg: ^2.0.9
|
||||
pinenacl: ^0.3.4
|
||||
pinenacl: ^0.5.1
|
||||
fast_base58: ^0.2.1
|
||||
tutorial_coach_mark: ^1.2.11
|
||||
confetti: ^0.7.0
|
||||
url_launcher: ^6.2.2
|
||||
crypto: ^3.0.3
|
||||
screen_brightness: ^0.2.2+1
|
||||
screen_brightness: ^1.0.0
|
||||
uuid: ^3.0.7
|
||||
fade_and_translate: ^0.1.3
|
||||
|
||||
|
@ -72,7 +72,6 @@ dev_dependencies:
|
|||
sdk: flutter
|
||||
integration_test:
|
||||
sdk: flutter
|
||||
dart_code_metrics: ^5.7.6
|
||||
|
||||
icons_launcher:
|
||||
image_path: "assets/icon/gecko_flat.png"
|
||||
|
|
Loading…
Reference in New Issue