Compare commits

..

31 Commits

Author SHA1 Message Date
pokapow 5b89f661ed Merge branch 'dev' into 'master'
Dev

See merge request clients/gecko!42
2022-12-03 00:22:00 +01:00
poka 397d795e8b identity confirmation: check if username exist before valdate 2022-12-02 21:18:28 +01:00
poka 4c7326bfaa g1v1 import: display v1 pubkey instead of v2 address 2022-12-02 19:45:46 +01:00
poka 826dcf7c7c fix: double is not int; remove useless typed 2022-12-02 10:23:21 +01:00
poka f19a441af3 add itdy name to appbar; add link in wallet options 2022-12-02 06:58:18 +01:00
poka 7e98a1d063 bump 0.0.12+36 2022-12-02 06:28:46 +01:00
poka 68fe7925ac hotfix: bad parent data 2022-12-02 06:28:19 +01:00
pokapow bafd853884 Merge branch 'certsScreen' into 'master'
add certs screen

See merge request clients/gecko!41
2022-12-02 06:04:13 +01:00
poka 6b1df55ede fix: flutter format 2022-12-02 06:02:30 +01:00
poka 0241efc223 certifications screen is ok 2022-12-02 05:57:24 +01:00
poka 7a93ff4d78 received certs widget is working 2022-12-02 03:22:53 +01:00
poka 9a9bc6788c fuck git. start to implement certs screen 2022-12-02 02:11:22 +01:00
poka 413c3c708e fix: flutter format 2022-12-01 05:23:42 +01:00
poka cf6571e9da add certs screen 2022-12-01 05:23:42 +01:00
poka da0e9ba2df fix: unused imports 2022-12-01 05:21:48 +01:00
poka 80416f5753 change all providers reference to final 2022-12-01 05:21:36 +01:00
poka 96854fddb9 apply point 7 of volune rapport: remove setPreferredOrientations everywhere on app, replace by global boot instruction 2022-12-01 05:21:23 +01:00
Kapis 6c34dd2425 Update assets/onBoarding/gecko_also_can_forget_es.png 2022-12-01 05:18:49 +01:00
Kapis e65915a333 Update assets/onBoarding/forgot_password_es.png
Deleted assets/onBoarding/gecko_also_can_forget_es.png
2022-12-01 05:18:49 +01:00
Kapis b48be00149 Fixed errors and improved translations 2022-12-01 05:18:49 +01:00
Millicent Billette 1481352f6c Update .gitlab-ci.yml file 2022-12-01 03:22:54 +01:00
pokapow bae16d3a5f Merge branch 'finalProvidersReferences' into 'master'
Final providers references

See merge request clients/gecko!39
2022-11-30 06:22:38 +01:00
poka b7311970e2 fix: unused imports 2022-11-30 06:14:27 +01:00
poka 965ce0f977 fix: flutter format 2022-11-30 05:53:46 +01:00
poka 3a5674ae41 change all providers reference to final 2022-11-30 05:51:56 +01:00
pokapow 38c8b9a995 Merge branch 'voluneRapport7' into 'master'
apply point 7 of volune rapport: remove setPreferredOrientations everywhere on...

See merge request clients/gecko!38
2022-11-30 05:27:39 +01:00
poka 8169e1e840 apply point 7 of volune rapport: remove setPreferredOrientations everywhere on app, replace by global boot instruction 2022-11-30 05:22:37 +01:00
pokapow e88cf3b2f7 Merge branch 'scanlegentil-master-patch-45604' into 'master'
Update assets/translations/es.json

See merge request clients/gecko!37
2022-11-28 11:21:07 +01:00
Scan le Gentil cc36e2652d Update assets/translations/es.json, assets/translations/fr.json 2022-11-28 11:17:11 +01:00
poka 6ea827faf9 fix: homeContext randomly reset after pushNamedAndRemoveUntil 2022-11-28 07:11:39 +01:00
poka 44993557c6 add gdev.p2p.legal endpoint 2022-11-27 03:30:49 +01:00
63 changed files with 1093 additions and 610 deletions

View File

@ -7,7 +7,7 @@ stages:
.env: .env:
image: axiomteam/gecko-ci:v0.0.11 image: axiomteam/gecko-ci:v0.0.11
tags: tags:
- redshift - docker
format: format:
extends: .env extends: .env
@ -28,8 +28,6 @@ build_and_test:
- if: $CI_COMMIT_TAG || $CI_MERGE_REQUEST_ID - if: $CI_COMMIT_TAG || $CI_MERGE_REQUEST_ID
- when: manual - when: manual
stage: build_and_test stage: build_and_test
tags:
- redshift
script: script:
- flutter analyze - flutter analyze

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 166 KiB

After

Width:  |  Height:  |  Size: 192 KiB

View File

@ -1,90 +1,90 @@
{ {
"searchWallet": "Buscar\nbilletera", "searchWallet": "Buscar\nmonedero",
"manageWallets": "Gestionar\nbilleteras", "manageWallets": "Gestionar\nmonederos",
"scanQRCode": "Escanear un\ncódigo QR", "scanQRCode": "Escanear un\ncódigo QR",
"wellConnectedToNode": "Estas bien conectada al nodo\n{}", "wellConnectedToNode": "Estás bien conectado al nodo\n{}",
"networkLost": "Se ha perdido la red...", "networkLost": "Se ha perdido la red...",
"noDuniterEndointAvailable": "No hay servidor disponible...", "noDuniterEndointAvailable": "No hay servidor disponible...",
"connectionPending": "Conexión pendiente...", "connectionPending": "Conexión pendiente...",
"noLizard": "no hay lagarto ;-)", "noLizard": "no hay lagarto ;-)",
"loading": "Cargando...", "loading": "Cargando...",
"forgot_password.png": "forgot_password_en.png", "forgot_password.png": "forgot_password_es.png",
"warningForgotPassword": "In a blockchain, there is no email recovery procedure. Only your recovery phrase can allow you to recover your Ğ1 at any time.", "warningForgotPassword": "En una cadena de bloques o blockchain, no hay procedimiento de recuperación mediante correo electrónico. Sólo tu frase de recuperación puede permitirte recuperar tus Ğ1 en cualquier momento.",
"fastAppDescription": "La aplicación de pago {}\nmás rápida que un reptil de Vietnam", "fastAppDescription": "La aplicación de pago {}\nmás rápida que un reptil de Vietnam",
"createWallet": "Crear una billetera", "createWallet": "Crear un monedero",
"restoreWallet": "Restaurar mis billeteras", "restoreWallet": "Restaurar mis monederos",
"parameters": "Parámetros", "parameters": "Parámetros",
"chooseAnotherMnemonic": "Choose an other\nmnemonic sentence", "chooseAnotherMnemonic": "Elige otra frase de restauración",
"iNotedMyMnemonic": "He escrito mi frase", "iNotedMyMnemonic": "He anotado mi frase de restauración",
"printMyMnemonic": "Print my mnemonic sentence", "printMyMnemonic": "Imprimir mi frase de restauración",
"manageChest": "Configure this chest", "manageChest": "Configurar este cofre",
"changeChest": "Change chest", "changeChest": "Cambiar de cofre",
"geckoChest": "Ğecko chest", "GeckoChest": "Cofre de Ğecko",
"toUnlockEnterPassword": "To unlock your safe, enter your secret code, away from prying lizards:", "toUnlockEnterPassword": "Para desbloquear tu cofre, introduce tu contraseña, lejos de lagartijas curiosas:",
"rememberPassword": "Keep this code in memory for 15 minutes", "rememberPassword": "Mantener en memoria mi contraseña durante 15 minutos",
"myRootWallet": "Mi billetera principal", "myRootWallet": "Mi monedero principal",
"currentWallet": "My current chest", "currentWallet": "Mi cofre actual",
"wallet": "Billetera", "wallet": "monedero",
"displayMnemonic": "Display my mnemonic sentence", "displayMnemonic": "Mostrar mi frase de restauración",
"changePassword": "Cambiar mi contraseña", "changePassword": "Cambiar mi contraseña",
"createDerivation": "Create a new derivation", "createDerivation": "Crear una nueva derivación",
"createCustomDerivation": "Create a new custom derivation", "createCustomDerivation": "Crear una nueva derivación personalizada",
"deleteChest": "Delete this chest", "deleteChest": "Borrar este cofre",
"openThisChest": "Open this chest", "openThisChest": "Abrir este cofre",
"createChest": "Create a new chest", "createChest": "Crear un nuevo cofre",
"importChest": "Import a chest", "importChest": "Importar un cofre",
"selectMyChest": "Select my chest", "selectMyChest": "Seleccionar mi cofre",
"accessMyChest": "Access my chest", "accessMyChest": "Acceder a mi cofre",
"manageMembership": "Manage my membership", "manageMembership": "Administrar mi afiliación",
"chooseThisWallet": "Elegir esta billetera", "chooseThisWallet": "Elegir este monedero",
"thisWalletIsDefault": "This wallet is the default one", "thisWalletIsDefault": "Monedero definido por defecto",
"defineWalletAsDefault": "Define this as the default one", "defineWalletAsDefault": "Definir este monedero como por defecto",
"displayActivity": "Display activity", "displayActivity": "Visualizar actividad",
"displayNActivity": "Display\nactivity", "displayNActivity": "Visualizar\nactividad",
"memberValidated": "Miembro validado!", "memberValidated": "Miembro validado!",
"copyAddress": "Copiar\ndirección", "copyAddress": "Copiar\nla dirección",
"copy": "Copiar", "copy": "Copiar",
"thisAddressHasBeenCopiedToClipboard": "Esta dirección se ha copiado al cortapapeles", "thisAddressHasBeenCopiedToClipboard": "Esta dirección se ha copiado al portapapeles",
"chooseWalletName": "Choose a new name\nfor your wallet:", "chooseWalletName": "Elige un nuevo nombre\npara tu monedero:",
"choosePassword": "Choose a random password:", "choosePassword": "Elige una contraseña aleatoria:",
"chooseDerivation": "Choose a derivation:", "chooseDerivation": "Elige una derivación:",
"validate": "Validar", "validate": "Validar",
"confirm": "Confirmar", "confirm": "Confirmar",
"confirmPayment": "Confirmar pago", "confirmPayment": "Confirmar pago",
"geckoGenerateYourWalletFromMnemonic": "Ğecko builds your wallet from a **restoration sentence**. It is a bit like the blueprint that builds your wallet.", "GeckoGenerateYourWalletFromMnemonic": "Ğecko construye tu monedero a partir de una **frase de restauración**. Es como unos planos que permiten restaurar tu monedero.",
"keepThisMnemonicSecure": "Keep this sentence carefully, because without it Ğecko will not be able to rebuild your wallets the day you change your phone.", "keepThisMnemonicSecure": "Guarda esta frase con cuidado, porque sin ella Ğecko no podrá restaurar tus monederos el día que cambies de dispositivo.",
"geckoGeneratedYourMnemonicKeepItSecret": "Ğecko generated your mnemonic successfully! Keep it secret, because anyone who knows it can access all your wallets.", "GeckoGeneratedYourMnemonicKeepItSecret": "¡Ğecko generó tu frase de restauración con éxito! Mantenla en secreto, porque cualquiera que la sepa puede acceder a todos tus monederos.",
"newWallet": "New Wallet", "newWallet": "Nuevo monedero",
"itsTimeToUseAPenAndPaper": "It's time to take a **pen and paper** in order to write down your mnemonic.", "itsTimeToUseAPenAndPaper": "Es el momento de coger un **papel y un bolígrafo** para anotar tu frase de restauración.",
"yourMnemonic": "Your mnemonic", "yourMnemonic": "tu frase de restauración",
"gecko_also_can_forget.png": "gecko_also_can_forget_en.png", "gecko_also_can_forget.png": "gecko_also_can_forget_es.png",
"didYouNoteMnemonicToBeSureTypeWord": "Did you write down your menmonic?\n\n To be sure, please type the **{}th word** of your restoration phrase in the field below:", "didYouNoteMnemonicToBeSureTypeWord": "¿Anotaste bien tu frase de restauración? Para asegurarnos, escriba la **palabra #{}** de tu frase de restauración en el cuadro de abajo:",
"geckoWillGenerateAPassword": "Gecko will now generate for you a short password that will allow you to quickly access your wallets, without having to type your recovery sentence every time.", "GeckoWillGenerateAPassword": "Ahora Ğecko te generará una contraseña corta que te permitirá acceder rápidamente a tus monederos, sin tener que escribir cada vez tu frase de recuperación.",
"myPassword": "My password", "myPassword": "Mi contraseña",
"thisPasswordProtectsYourWalletsInASecureChest": "This secret code protects your wallets in a safe **which only you have the code for**, so that your wallets cannot be used by others.", "thisPasswordProtectsYourWalletsInASecureChest": "Esta contraseña protege tus monederos en un cofre **del que sólo tú tienes acceso**, para que tus monederos no puedan ser utilizados por otros.",
"hereIsThePasswordKeepIt": "And here is your password!\n\nMemorize it or write it down, because you will be asked **every time** you want to make a payment on this device.", "hereIsThePasswordKeepIt": "¡Y aquí está tu contraseña!\n\nMemorízala o anótala, porque Ğecko te la pedirá **cada vez** que quieras hacer un pago en este dispositivo.",
"chooseAnotherPassword": "Elige otra contraseña", "chooseAnotherPassword": "Elige otra contraseña",
"iNotedMyPassword": "I noted my password", "iNotedMyPassword": "He anotado mi contraseña",
"geckoWillCheckPassword": "Gecko will check with you if you have remembered your secret code.\n\n Type your secret code in the field below to check that you have written it down correctly.", "GeckoWillCheckPassword": "Ğecko comprobará contigo si has recordado tu contraseña. Escribe tu contraseña en el cuadro de abajo para comprobar que lo has apuntado correctamente.",
"yourChestAndWalletWereCreatedSuccessfully": "Super!\n\nYour chest and your first portfolio have been created with great success.\n\nCongratulations!", "yourChestAndWalletWereCreatedSuccessfully": "¡Genial!\n\nTu cofre y tu primer monedero han sido creados con éxito.\n\n¡Felicidades!",
"allGood": "That's all good!", "allGood": "¡Todo bien!",
"areYouSureToDeleteWallet": "Are you sure you want to delete the chest \"{}\"?", "areYouSureToDeleteWallet": "¿Seguro de que quieres eliminar el cofre \"{}\"?",
"areYouSureForgetAllChests": "Are you sure you want to forget all your chests?", "areYouSureForgetAllChests": "¿Seguro de que quieres olvidar todos tus cofres?",
"areYouSureToForgetWallet": "Are you sure you wan to forget the wallet \"{}\"?", "areYouSureToForgetWallet": "¿Seguro de que quieres olvidar el monedero \"{}\"?",
"areYouSureYouWantToCertify": "Are you sure you want to certify the address:\n\n{}", "areYouSureYouWantToCertify": "¿Seguro de que quiere certificar a la dirección\n\n{}?",
"yes": "Si", "yes": "Sí",
"no": "No", "no": "No",
"keepYourMnemonicSecret": "Try to keep this phrase a secret, as it allows anyone who knows it to access all your wallets.", "keepYourMnemonicSecret": "Intenta mantener esta frase de restauración en secreto, ya que permite a cualquiera que la conozca acceder a todas tus monederos.",
"iGeneratedYourMnemonicKeepItSecret": "I've generated your restoration phrase!\n Try to keep it a secret, as it allows anyone who knows it to access all your portfolios.", "iGeneratedYourMnemonicKeepItSecret": "¡He generado tu frase de restauración!\nIntenta mantenerla en secreto, ya que permite a cualquiera que la conozca acceder a todos tus monederos.",
"myMnemonic": "My mnemonic", "myMnemonic": "Mi frase de restauración",
"close": "Close", "close": "Cerrar",
"toRestoreEnterMnemonic": "To restore your Gecko wallets, enter in the fields below the 12 words that constitute your restoration phrase:", "toRestoreEnterMnemonic": "Para restaurar tus monederos Ğecko, introduce las 12 palabras que componen tu frase de restauración en los cuadros de abajo:",
"pasteFromClipboard": "Paste from\nclipboard", "pasteFromClipboard": "Pegar del\nportapapeles",
"restoreAChest": "Restore a chest", "restoreAChest": "Restaurar un cofre",
"restoreThisChest": "Restore this chest", "restoreThisChest": "Restaurar este cofre",
"continue": "Continuar", "continue": "Continuar",
"itsTheGoodWord": "It's the good word!", "itsTheGoodWord": "¡Es la palabra correcta!",
"nthMnemonicWord": "word of your mnemonic", "nthMnemonicWord": "palabra de tu mnemotecnia",
"1th": "Primera", "1th": "Primera",
"2th": "Segunda", "2th": "Segunda",
"3th": "Tercera", "3th": "Tercera",
@ -98,17 +98,17 @@
"11th": "Undécima", "11th": "Undécima",
"12th": "Duodécima", "12th": "Duodécima",
"yourPasswordLengthIsX": "La longitud de tu contraseña es {}", "yourPasswordLengthIsX": "La longitud de tu contraseña es {}",
"noIdentity": "No identity", "noIdentity": "Ninguna identidad",
"identityCreated": "Identidad creada", "identityCreated": "Identidad creada",
"identityConfirmed": "Identidad confirmada", "identityConfirmed": "Identidad confirmada",
"identityExpired": "Identitdad caducada", "identityExpired": "Identidad caducada",
"confirmYourIdentity": "Confirma tu identidad", "confirmYourIdentity": "Confirma tu identidad",
"noDuniterNodeAvailableTryLater": "No Duniter node available, please try again later", "noDuniterNodeAvailableTryLater": "No hay ningún nodo Duniter disponible, por favor, inténtalo más tarde",
"youAreConnectedToNode": "You are connected to node", "youAreConnectedToNode": "Estás conectado al nodo",
"accountActivity": "Actividad de la cuenta", "accountActivity": "Actividad de la cuenta",
"noNetworkNoHistory": "Network state does not allow\nto display account history", "noNetworkNoHistory": "El estado de la red no permite\nmostrar el historial de la cuenta",
"noDataToDisplay": "No data to be displayed.", "noDataToDisplay": "No hay datos que mostrar.",
"noTransactionToDisplay": "No transaction to display", "noTransactionToDisplay": "No hay transacciónes a mostrar",
"month1": "Enero", "month1": "Enero",
"month2": "Febrero", "month2": "Febrero",
"month3": "Marzo", "month3": "Marzo",
@ -124,76 +124,76 @@
"today": "Hoy", "today": "Hoy",
"yesterday": "Ayer", "yesterday": "Ayer",
"thisWeek": "Esta semana", "thisWeek": "Esta semana",
"chestNotCompatibleMustReinstallGecko": "The version of your safes is no longer compatible with this version of Ğecko.\nAll your safes will be forgotten, you must import them again.", "chestNotCompatibleMustReinstallGecko": "La versión de tus cofres no es compatible con esta versión de Ğecko.\nTodos tus cofres serán olvidados, debes importarlos de nuevo.",
"notConnectedToInternet": "No estas conectado a internet", "notConnectedToInternet": "No estás conectado a Internet",
"researchResults": "Results of your research", "researchResults": "Resultados de tu búsqueda",
"resultsFor": "Results for ", "resultsFor": "Resultados para ",
"forgetAllMyChests": "Forget all my chests", "forgetAllMyChests": "Olvida todos mis cofres",
"transaction": "Transaccion", "transaction": "Transacción",
"certification": "Certificacion", "certification": "Certificación",
"identityConfirm": "Identity confirmation", "identityConfirm": "Confirmación de la identidad",
"revokeAdhesion": "Adhesion revocation", "revokeAdhesion": "Revocación de adhesión",
"strangeTransaction": "Strange transaction", "strangeTransaction": "Transacción extraña",
"sending": "Enviando...", "sending": "Enviando...",
"propagating": "Propagando...", "propagating": "Propagando...",
"validating": "Validando...", "validating": "Validando...",
"anErrorOccurred": "Ocurrió un error", "anErrorOccured": "Ocurrió un error",
"24hbetweenCerts": "You have to wait 24h between certs", "24hbetweenCerts": "Hay que esperar 24 horas entre certificaciones",
"canNotCertifySelf": "You can not certify yourself", "canNotCertifySelf": "No puedes certificarte a ti mismo",
"nameAlreadyExist": "This name is already taken", "nameAlreadyExist": "Este nombre ya está ocupado",
"2GDtoKeepAlive": "You have to keep at least 2ĞD to keep your account alive", "2GDtoKeepAlive": "Tienes que mantener al menos 2ĞD para mantener tu cuenta viva",
"youHaveToFeedThisAccountBeforeUsing": "You have to feed this account\nbefore using it.", "youHaveToFeedThisAccountBeforeUsing": "Tienes que nutrir el balance\nde esta cuenta antes de usarla.",
"execTimeoutOver": "Execution timeout is over", "execTimeoutOver": "Se ha agotado el tiempo de ejecución",
"seeAWallet": "Ver una billetera", "seeAWallet": "Ver un monedero",
"mustWaitXBeforeCertify": "Tienes que esperar\n{} antes de\nvolver a certificar", "mustWaitXBeforeCertify": "Tienes que esperar\n{} antes de\nvolver a certificar",
"mustConfirmHisIdentity": "This person must confirm\nhis identity before can be\ncertified", "mustConfirmHisIdentity": "Esta persona debe confirmar\nsu identidad antes de poder ser certificada",
"canRenewCertInX": "You can renew\nthis certification\nin {}", "canRenewCertInX": "Podrás renovar\nla certificación\nen {}",
"executeATransfer": "Execute a transfer", "executeATransfer": "Ejecutar una transacción",
"executeTheTransfer": "Execute the transfer", "executeTheTransfer": "Ejecutar la transacción",
"doATransfer" : "Execute a\ntransfer", "doATransfer" : "Hacer una\ntransacción",
"seconds": "{} segundos", "seconds": "{} segundos",
"minutes": "{} minutos", "minutes": "{} minutos",
"hours": "{} horas {}", "hours": "{} horas {}",
"days": "{} dias", "days": "{} dias",
"months": "{} meses", "months": "{} meses",
"certify": "Certify", "certify": "Certificar",
"from": "De:", "from": "De:",
"to": "A:", "to": "A:",
"amount": "Importe:", "amount": "Importe:",
"choiceOfSourceWallet": "Choose a source wallet", "choiceOfSourceWallet": "Elige un monedero de origen",
"extrinsicInProgress": "{} en progreso", "extrinsicInProgress": "{} en progreso",
"extrinsicValidated": "{} validado !", "extrinsicValidated": "¡ {} validado !",
"fromMinus": "de", "fromMinus": "de",
"toMinus": "a", "toMinus": "a",
"deleteThisWallet": "Delete this wallet", "deleteThisWallet": "Borrar este monedero",
"cancel": "Cancelar", "cancel": "Cancelar",
"inBlockchainResult": "In {} blockchain", "inBlockchainResult": "En la blockchain {}",
"search": "Buscar", "search": "Buscar",
"currencyNode": "{} nodo :", "currencyNode": "Nodo {} :",
"contactsManagementWithNbr": "Mis contactos ({})", "contactsManagementWithNbr": "Mis contactos ({})",
"contactsManagement": "Mis contactos", "contactsManagement": "Mis contactos",
"noContacts": "You don't have any contact", "noContacts": "No tienes ningún contacto",
"addContact": "Add\nto contacts", "addContact": "Añadir\na contactos",
"removeContact": "Remove\nthis contact", "removeContact": "Eliminar\neste contacto",
"derivationsScanProgress": "Scan address {}/{}", "derivationsScanProgress": "Escaneado de la dirección {}/{}",
"youAreOffline": "You are offline...", "youAreOffline": "Estás desconectado...",
"importG1v1": "Import old G1v1 account", "importG1v1": "Importar la cuenta antigua de G1v1",
"selectDestWallet": "Select a target wallet:", "selectDestWallet": "Selecciona un monedero destino:",
"youMustWaitBeforeCashoutThisAccount": "You have to wait a few moment before migrate this account", "youMustWaitBeforeCashoutThisAccount": "Tienes que esperar unos minutos antes de migrar esta cuenta",
"thisAccountIsEmpty": "This account is empty", "thisAccountIsEmpty": "Esta cuenta está vacía",
"youCannotMigrateIdentityToExistingIdentity": "You cannot migrate an identity\nto an account that already has an identity", "youCannotMigrateIdentityToExistingIdentity": "No se puede migrar una identidad\na una cuenta que ya tiene una identidad",
"importOldAccount": "Import your old account", "importOldAccount": "Importar antigua cuenta",
"enterCesiumId": "Ingrese su ID de Cesium", "enterCesiumId": "Ingresa tu frase secreta de Cesium",
"enterCesiumPassword": "Ingrese su contraseña de Cesium", "enterCesiumPassword": "Ingresa tu contraseña de Cesium",
"migrateAccount": "Migrate account", "migrateAccount": "Migrar cuenta",
"migrateIdentity": "Migrate identity", "migrateIdentity": "Migrar identidad",
"identityMigration": "Identity migration", "identityMigration": "Migración de la identidad",
"areYouSureMigrateIdentity": "Are you sure you want to permanently migrate identity **{}** with balance of **{}** ?", "areYouSureMigrateIdentity": "¿Estás seguro de que quieres migrar permanentemente la identidad **{}** con saldo de **{}**?",
"someoneCreatedYourIdentity": "Someone created your {} identity !", "someoneCreatedYourIdentity": "¡ Alguien ha creado tu {} identidad !",
"confirmMyIdentity": "Confirmar mi identidad", "confirmMyIdentity": "Confirmar mi identidad",
"revokeMyIdentity": "Revocar mi identidad", "revokeMyIdentity": "Revocar mi identidad",
"youCannotRevokeThisIdentity": "You cannot revoke this identity while\nit is member of the blacksmiths web", "youCannotRevokeThisIdentity": "No puedes revocar esta identidad mientras\nseas miembro de la red de forjadores",
"showUdAmounts": "Show amounts in UD", "showUdAmounts": "Mostrar importes en DU",
"ud": "{}UD", "ud": "{}DU",
"chooseATargetWallet": "Elija una billetera de destino" "chooseATargetWallet": "Elige un monedero de destino"
} }

View File

@ -197,4 +197,4 @@
"showUdAmounts": "Afficher les montants en DU", "showUdAmounts": "Afficher les montants en DU",
"ud": "{}DU", "ud": "{}DU",
"chooseATargetWallet": "Choisissez un portefeuille cible" "chooseATargetWallet": "Choisissez un portefeuille cible"
} }

View File

@ -1,5 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
@ -135,7 +136,7 @@ Future<void> waitFor(String text,
Finder finder = exactMatch ? find.text(text) : find.textContaining(text); Finder finder = exactMatch ? find.text(text) : find.textContaining(text);
log.d('INTEGRATION TEST: Wait for: $text'); log.d('INTEGRATION TEST: Wait for: $text');
final String searchType = reverse ? 'reversed text' : 'text'; final searchType = reverse ? 'reversed text' : 'text';
do { do {
if (DateTime.now().isAfter(end)) { if (DateTime.now().isAfter(end)) {

View File

@ -15,6 +15,7 @@
import 'dart:async'; import 'dart:async';
import 'dart:io'; import 'dart:io';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
@ -98,31 +99,35 @@ Future<void> main() async {
// // ]); // // ]);
// Catcher(rootWidget: Gecko(endPointGVA, _store), debugConfig: debugOptions); // Catcher(rootWidget: Gecko(endPointGVA, _store), debugConfig: debugOptions);
await SentryFlutter.init( await SentryFlutter.init((options) {
(options) { options.dsn =
options.dsn = 'https://c09587b46eaa42e8b9fda28d838ed180@o496840.ingest.sentry.io/5572110';
'https://c09587b46eaa42e8b9fda28d838ed180@o496840.ingest.sentry.io/5572110'; },
}, appRunner: () => SystemChrome.setPreferredOrientations(
appRunner: () => runApp( [DeviceOrientation.portraitUp]).then((_) {
EasyLocalization( runApp(EasyLocalization(
supportedLocales: const [Locale('en'), Locale('fr'), Locale('es')], supportedLocales: const [
path: 'assets/translations', Locale('en'),
fallbackLocale: const Locale('en'), Locale('fr'),
child: const Gecko(), Locale('es')
), ],
), path: 'assets/translations',
); fallbackLocale: const Locale('en'),
child: const Gecko(),
));
}));
} else { } else {
log.i('Debug mode enabled: No sentry alerte'); log.i('Debug mode enabled: No sentry alerte');
runApp( SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp])
EasyLocalization( .then((_) {
runApp(EasyLocalization(
supportedLocales: const [Locale('en'), Locale('fr'), Locale('es')], supportedLocales: const [Locale('en'), Locale('fr'), Locale('es')],
path: 'assets/translations', path: 'assets/translations',
fallbackLocale: const Locale('en'), fallbackLocale: const Locale('en'),
child: const Gecko(), child: const Gecko(),
), ));
); });
} }
} }
@ -131,8 +136,6 @@ class Gecko extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
// To configure multi_endpoints GraphQLProvider: https://stackoverflow.com/q/70656513/8301867 // To configure multi_endpoints GraphQLProvider: https://stackoverflow.com/q/70656513/8301867
return MultiProvider( return MultiProvider(

View File

@ -1,7 +1,5 @@
import 'dart:io'; import 'dart:io';
import 'package:hive_flutter/hive_flutter.dart'; import 'package:hive_flutter/hive_flutter.dart';
part 'chest_data.g.dart'; part 'chest_data.g.dart';
@HiveType(typeId: 1) @HiveType(typeId: 1)

View File

@ -56,5 +56,34 @@ query ($address: String!, $number: Int!, $cursor: String) {
} }
'''; ''';
// To parse indexer date format const String getCertsReceived = r'''
// log.d(DateTime.parse("2022-06-13T16:51:24.001+00:00").toString()); query ($address: String!) {
certification(where: {receiver: {pubkey: {_eq: $address}}}) {
issuer {
pubkey
name
}
created_at
}
}
''';
const String getCertsSent = r'''
query ($address: String!) {
certification(where: {issuer: {pubkey: {_eq: $address}}}) {
receiver {
pubkey
name
}
created_at
}
}
''';
const String isIdtyExistQ = r'''
query ($name: String!) {
identity(where: {name: {_eq: $name}}) {
name
}
}
''';

View File

@ -61,6 +61,9 @@ const keyCloseTransactionScreen = Key('keyCloseTransactionScreen');
const keyListTransactions = Key('keyListTransactions'); const keyListTransactions = Key('keyListTransactions');
const keyActivityScreen = Key('keyActivityScreen'); const keyActivityScreen = Key('keyActivityScreen');
// Certification view
const keyCertsReceived = Key('keyCertsReceived');
// Unlock wallet // Unlock wallet
const keyUnlockWallet = Key('keyUnlockWallet'); const keyUnlockWallet = Key('keyUnlockWallet');
const keyPinForm = Key('keyPinForm'); const keyPinForm = Key('keyPinForm');

View File

@ -8,8 +8,6 @@ import 'package:path_provider/path_provider.dart';
class CesiumPlusProvider with ChangeNotifier { class CesiumPlusProvider with ChangeNotifier {
TextEditingController cesiumName = TextEditingController(); TextEditingController cesiumName = TextEditingController();
Image defaultAvatar(double size) =>
Image.asset(('assets/icon_user.png'), height: size);
CancelToken avatarCancelToken = CancelToken(); CancelToken avatarCancelToken = CancelToken();
@ -156,3 +154,6 @@ class CesiumPlusProvider with ChangeNotifier {
return finalAvatar; return finalAvatar;
} }
} }
Image defaultAvatar(double size) =>
Image.asset(('assets/icon_user.png'), height: size);

View File

@ -16,11 +16,11 @@ class ChestProvider with ChangeNotifier {
Future deleteChest(context, ChestData chest) async { Future deleteChest(context, ChestData chest) async {
final bool? answer = await (_confirmDeletingChest(context, chest.name)); final bool? answer = await (_confirmDeletingChest(context, chest.name));
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false); final sub = Provider.of<SubstrateSdk>(context, listen: false);
if (answer ?? false) { if (answer ?? false) {
await sub.deleteAccounts(getChestWallets(chest)); await sub.deleteAccounts(getChestWallets(chest));
await chestBox.delete(chest.key); await chestBox.delete(chest.key);
MyWalletsProvider myWalletProvider = final myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false); Provider.of<MyWalletsProvider>(context, listen: false);
myWalletProvider.pinCode = ''; myWalletProvider.pinCode = '';

View File

@ -162,7 +162,7 @@ class DuniterIndexer with ChangeNotifier {
Color color = Colors.black, Color color = Colors.black,
FontWeight fontWeight = FontWeight.w400, FontWeight fontWeight = FontWeight.w400,
FontStyle fontStyle = FontStyle.italic]) { FontStyle fontStyle = FontStyle.italic]) {
WalletOptionsProvider walletOptions = final walletOptions =
Provider.of<WalletOptionsProvider>(context, listen: false); Provider.of<WalletOptionsProvider>(context, listen: false);
if (indexerEndpoint == '') { if (indexerEndpoint == '') {
if (wallet == null) { if (wallet == null) {
@ -247,8 +247,6 @@ class DuniterIndexer with ChangeNotifier {
Widget searchIdentity(BuildContext context, String name) { Widget searchIdentity(BuildContext context, String name) {
// WalletOptionsProvider _walletOptions = // WalletOptionsProvider _walletOptions =
// Provider.of<WalletOptionsProvider>(context, listen: false); // Provider.of<WalletOptionsProvider>(context, listen: false);
CesiumPlusProvider cesiumPlusProvider =
Provider.of<CesiumPlusProvider>(context, listen: false);
WalletsProfilesProvider walletsProfiles = WalletsProfilesProvider walletsProfiles =
Provider.of<WalletsProfilesProvider>(context, listen: false); Provider.of<WalletsProfilesProvider>(context, listen: false);
if (indexerEndpoint == '') { if (indexerEndpoint == '') {
@ -304,7 +302,7 @@ class DuniterIndexer with ChangeNotifier {
key: keySearchResult(profile['pubkey']), key: keySearchResult(profile['pubkey']),
horizontalTitleGap: 40, horizontalTitleGap: 40,
contentPadding: const EdgeInsets.all(5), contentPadding: const EdgeInsets.all(5),
leading: cesiumPlusProvider.defaultAvatar(avatarSize), leading: defaultAvatar(avatarSize),
title: Row(children: <Widget>[ title: Row(children: <Widget>[
Text(getShortPubkey(profile['pubkey']), Text(getShortPubkey(profile['pubkey']),
style: const TextStyle( style: const TextStyle(
@ -369,8 +367,8 @@ class DuniterIndexer with ChangeNotifier {
transBC.add(i); transBC.add(i);
transBC[i] = []; transBC[i] = [];
transBC[i].add(DateTime.parse(transaction['created_at'])); transBC[i].add(DateTime.parse(transaction['created_at']));
final int amountBrut = transaction['amount']; final amountBrut = transaction['amount'];
final double amount = removeDecimalZero(amountBrut / 100); final amount = removeDecimalZero(amountBrut / 100);
if (direction == "RECEIVED") { if (direction == "RECEIVED") {
transBC[i].add(transaction['issuer_pubkey']); transBC[i].add(transaction['issuer_pubkey']);
transBC[i].add(transaction['issuer']['identity']?['name'] ?? ''); transBC[i].add(transaction['issuer']['identity']?['name'] ?? '');
@ -447,3 +445,25 @@ class DuniterIndexer with ChangeNotifier {
// checkHistoryResult( // checkHistoryResult(
// QueryResult<Object?> result, FetchMoreOptions options, String address) {} // QueryResult<Object?> result, FetchMoreOptions options, String address) {}
} }
Future<bool> isIdtyExist(String name) async {
final httpLink = HttpLink(
'$indexerEndpoint/v1/graphql',
);
final GraphQLClient client = GraphQLClient(
cache: GraphQLCache(),
link: httpLink,
);
final QueryOptions options = QueryOptions(
document: gql(isIdtyExistQ),
variables: <String, dynamic>{
'name': name,
},
);
final QueryResult result = await client.query(options);
return result.data!['identity']?.isEmpty ?? false ? false : true;
}

View File

@ -249,7 +249,7 @@ class GenerateWalletsProvider with ChangeNotifier {
} }
Future<List<String>> generateWordList(BuildContext context) async { Future<List<String>> generateWordList(BuildContext context) async {
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false); final sub = Provider.of<SubstrateSdk>(context, listen: false);
generatedMnemonic = await sub.generateMnemonic(lang: appLang); generatedMnemonic = await sub.generateMnemonic(lang: appLang);
List<String> wordsList = []; List<String> wordsList = [];
@ -369,7 +369,7 @@ class GenerateWalletsProvider with ChangeNotifier {
} }
Future<bool> scanDerivations(BuildContext context) async { Future<bool> scanDerivations(BuildContext context) async {
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false); final sub = Provider.of<SubstrateSdk>(context, listen: false);
final currentChestNumber = configBox.get('currentChest'); final currentChestNumber = configBox.get('currentChest');
bool isAlive = false; bool isAlive = false;
scanedValidWalletNumber = 0; scanedValidWalletNumber = 0;
@ -445,6 +445,8 @@ class GenerateWalletsProvider with ChangeNotifier {
onTimeout: () => {}, onTimeout: () => {},
); );
log.d(balance);
log.d( log.d(
"${addressData.address!}: ${balance['transferableBalance']} $currencyName"); "${addressData.address!}: ${balance['transferableBalance']} $currencyName");
if (balance['transferableBalance'] != 0) { if (balance['transferableBalance'] != 0) {

View File

@ -8,6 +8,7 @@ import 'dart:math';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'dart:async'; import 'dart:async';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:gecko/models/wallet_data.dart'; import 'package:gecko/models/wallet_data.dart';
@ -133,7 +134,7 @@ class HomeProvider with ChangeNotifier {
// } // }
Widget bottomAppBar(BuildContext context) { Widget bottomAppBar(BuildContext context) {
MyWalletsProvider myWalletProvider = final myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false); Provider.of<MyWalletsProvider>(context, listen: false);
WalletsProfilesProvider historyProvider = WalletsProfilesProvider historyProvider =
Provider.of<WalletsProfilesProvider>(context, listen: false); Provider.of<WalletsProfilesProvider>(context, listen: false);

View File

@ -86,8 +86,8 @@ class MyWalletsProvider with ChangeNotifier {
} }
Future<int> deleteAllWallet(context) async { Future<int> deleteAllWallet(context) async {
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false); final sub = Provider.of<SubstrateSdk>(context, listen: false);
MyWalletsProvider myWalletProvider = final myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false); Provider.of<MyWalletsProvider>(context, listen: false);
try { try {
log.w('DELETE ALL WALLETS ?'); log.w('DELETE ALL WALLETS ?');
@ -124,7 +124,7 @@ class MyWalletsProvider with ChangeNotifier {
int? chest = getCurrentChest(); int? chest = getCurrentChest();
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false); final sub = Provider.of<SubstrateSdk>(context, listen: false);
WalletData defaultWallet = getDefaultWallet(); WalletData defaultWallet = getDefaultWallet();
@ -147,7 +147,7 @@ class MyWalletsProvider with ChangeNotifier {
} }
Future<void> generateRootWallet(context, String name) async { Future<void> generateRootWallet(context, String name) async {
MyWalletsProvider myWalletProvider = final myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false); Provider.of<MyWalletsProvider>(context, listen: false);
isNewDerivationLoading = true; isNewDerivationLoading = true;
@ -162,7 +162,7 @@ class MyWalletsProvider with ChangeNotifier {
} else { } else {
newWalletNbr = walletConfig.last.number! + 1; newWalletNbr = walletConfig.last.number! + 1;
} }
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false); final sub = Provider.of<SubstrateSdk>(context, listen: false);
WalletData defaultWallet = myWalletProvider.getDefaultWallet(); WalletData defaultWallet = myWalletProvider.getDefaultWallet();

View File

@ -68,8 +68,7 @@ class SearchProvider with ChangeNotifier {
// } // }
Future<List<G1WalletsList>> searchAddress() async { Future<List<G1WalletsList>> searchAddress() async {
final WalletsProfilesProvider walletProfiles = final walletProfiles = WalletsProfilesProvider('pubkey');
WalletsProfilesProvider('pubkey');
if (walletProfiles.isAddress(searchController.text)) { if (walletProfiles.isAddress(searchController.text)) {
G1WalletsList wallet = G1WalletsList(address: searchController.text); G1WalletsList wallet = G1WalletsList(address: searchController.text);

View File

@ -1,6 +1,7 @@
// ignore_for_file: use_build_context_synchronously // ignore_for_file: use_build_context_synchronously
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:fast_base58/fast_base58.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
@ -10,6 +11,7 @@ import 'package:gecko/providers/home.dart';
import 'package:gecko/providers/my_wallets.dart'; import 'package:gecko/providers/my_wallets.dart';
import 'package:gecko/providers/wallet_options.dart'; import 'package:gecko/providers/wallet_options.dart';
import 'package:gecko/providers/wallets_profiles.dart'; import 'package:gecko/providers/wallets_profiles.dart';
import 'package:pinenacl/ed25519.dart';
import 'package:polkawallet_sdk/api/apiKeyring.dart'; import 'package:polkawallet_sdk/api/apiKeyring.dart';
import 'package:polkawallet_sdk/api/types/networkParams.dart'; import 'package:polkawallet_sdk/api/types/networkParams.dart';
import 'package:polkawallet_sdk/api/types/txInfoData.dart'; import 'package:polkawallet_sdk/api/types/txInfoData.dart';
@ -39,6 +41,7 @@ class SubstrateSdk with ChangeNotifier {
TextEditingController csSalt = TextEditingController(); TextEditingController csSalt = TextEditingController();
TextEditingController csPassword = TextEditingController(); TextEditingController csPassword = TextEditingController();
String g1V1NewAddress = ''; String g1V1NewAddress = '';
String g1V1OldPubkey = '';
bool isCesiumIDVisible = false; bool isCesiumIDVisible = false;
bool isCesiumAddresLoading = false; bool isCesiumAddresLoading = false;
late int udValue; late int udValue;
@ -295,7 +298,7 @@ class SubstrateSdk with ChangeNotifier {
} }
Future<String> idtyStatus(String address) async { Future<String> idtyStatus(String address) async {
// WalletOptionsProvider walletOptions = // final walletOptions =
// Provider.of<WalletOptionsProvider>(homeContext, listen: false); // Provider.of<WalletOptionsProvider>(homeContext, listen: false);
var idtyIndex = await _getIdentityIndexOf(address); var idtyIndex = await _getIdentityIndexOf(address);
@ -401,8 +404,7 @@ class SubstrateSdk with ChangeNotifier {
Future<void> connectNode(BuildContext ctx) async { Future<void> connectNode(BuildContext ctx) async {
HomeProvider homeProvider = Provider.of<HomeProvider>(ctx, listen: false); HomeProvider homeProvider = Provider.of<HomeProvider>(ctx, listen: false);
MyWalletsProvider myWalletProvider = final myWalletProvider = Provider.of<MyWalletsProvider>(ctx, listen: false);
Provider.of<MyWalletsProvider>(ctx, listen: false);
homeProvider.changeMessage("connectionPending".tr(), 0); homeProvider.changeMessage("connectionPending".tr(), 0);
@ -568,7 +570,7 @@ class SubstrateSdk with ChangeNotifier {
Future<KeyPairData?> changePassword(BuildContext context, String address, Future<KeyPairData?> changePassword(BuildContext context, String address,
String passOld, String passNew) async { String passOld, String passNew) async {
final account = getKeypair(address); final account = getKeypair(address);
MyWalletsProvider myWalletProvider = final myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false); Provider.of<MyWalletsProvider>(context, listen: false);
keyring.setCurrent(account); keyring.setCurrent(account);
myWalletProvider.resetPinCode(); myWalletProvider.resetPinCode();
@ -680,6 +682,9 @@ class SubstrateSdk with ChangeNotifier {
cryptoType: CryptoType.ed25519, cryptoType: CryptoType.ed25519,
rawSeed: rawSeedHex); rawSeed: rawSeedHex);
SigningKey rootKey = SigningKey(seed: rawSeed);
g1V1OldPubkey = Base58Encode(rootKey.publicKey);
g1V1NewAddress = newAddress.address!; g1V1NewAddress = newAddress.address!;
notifyListeners(); notifyListeners();
return g1V1NewAddress; return g1V1NewAddress;
@ -1007,7 +1012,7 @@ void snackNode(BuildContext context, bool isConnected) {
if (!isConnected) { if (!isConnected) {
message = "noDuniterNodeAvailableTryLater".tr(); message = "noDuniterNodeAvailableTryLater".tr();
} else { } else {
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false); final sub = Provider.of<SubstrateSdk>(context, listen: false);
message = message =
"${"youAreConnectedToNode".tr()}\n${sub.getConnectedEndpoint()!.split('//')[1]}"; "${"youAreConnectedToNode".tr()}\n${sub.getConnectedEndpoint()!.split('//')[1]}";

View File

@ -4,6 +4,7 @@ import 'dart:io';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'dart:async'; import 'dart:async';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/models/widgets_keys.dart';
@ -51,7 +52,7 @@ class WalletOptionsProvider with ChangeNotifier {
} }
Future<int> deleteWallet(context, WalletData wallet) async { Future<int> deleteWallet(context, WalletData wallet) async {
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false); final sub = Provider.of<SubstrateSdk>(context, listen: false);
final bool? answer = await (confirmPopup( final bool? answer = await (confirmPopup(
context, 'areYouSureToForgetWallet'.tr(args: [wallet.name!]))); context, 'areYouSureToForgetWallet'.tr(args: [wallet.name!])));
@ -59,7 +60,7 @@ class WalletOptionsProvider with ChangeNotifier {
//Check if balance is null //Check if balance is null
final balance = await sub.getBalance(wallet.address!); final balance = await sub.getBalance(wallet.address!);
if (balance != {}) { if (balance != {}) {
MyWalletsProvider myWalletProvider = final myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false); Provider.of<MyWalletsProvider>(context, listen: false);
final defaultWallet = myWalletProvider.getDefaultWallet(); final defaultWallet = myWalletProvider.getDefaultWallet();
log.d(defaultWallet.address); log.d(defaultWallet.address);
@ -134,12 +135,11 @@ class WalletOptionsProvider with ChangeNotifier {
Widget idtyStatus(BuildContext context, String address, Widget idtyStatus(BuildContext context, String address,
{bool isOwner = false, Color color = Colors.black}) { {bool isOwner = false, Color color = Colors.black}) {
DuniterIndexer duniterIndexer = final duniterIndexer = Provider.of<DuniterIndexer>(context, listen: false);
Provider.of<DuniterIndexer>(context, listen: false);
showText(String text, showText(String text,
[double size = 18, bool bold = false, bool smooth = true]) { [double size = 18, bool bold = false, bool smooth = true]) {
log.d('$address $text'); // log.d('$address $text');
return AnimatedFadeOutIn<String>( return AnimatedFadeOutIn<String>(
data: text, data: text,
duration: Duration(milliseconds: smooth ? 200 : 0), duration: Duration(milliseconds: smooth ? 200 : 0),
@ -212,18 +212,21 @@ class WalletOptionsProvider with ChangeNotifier {
} }
Future<bool> isMember(BuildContext context, String address) async { Future<bool> isMember(BuildContext context, String address) async {
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false); final sub = Provider.of<SubstrateSdk>(context, listen: false);
return await sub.idtyStatus(address) == 'Validated'; return await sub.idtyStatus(address) == 'Validated';
} }
Future<String?> confirmIdentityPopup(BuildContext context) async { Future<String?> confirmIdentityPopup(BuildContext context) async {
TextEditingController idtyName = TextEditingController(); TextEditingController idtyName = TextEditingController();
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false); final sub = Provider.of<SubstrateSdk>(context, listen: false);
WalletOptionsProvider walletOptions = final walletOptions =
Provider.of<WalletOptionsProvider>(context, listen: false); Provider.of<WalletOptionsProvider>(context, listen: false);
MyWalletsProvider myWalletProvider = final myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false); Provider.of<MyWalletsProvider>(context, listen: false);
bool canValidate = false;
bool idtyExist = false;
return showDialog<String>( return showDialog<String>(
context: context, context: context,
barrierDismissible: true, // user must tap button! barrierDismissible: true, // user must tap button!
@ -240,7 +243,16 @@ class WalletOptionsProvider with ChangeNotifier {
const SizedBox(height: 20), const SizedBox(height: 20),
TextField( TextField(
key: keyEnterIdentityUsername, key: keyEnterIdentityUsername,
onChanged: (_) => notifyListeners(), onChanged: (_) async {
idtyExist = await isIdtyExist(idtyName.text);
canValidate = !idtyExist &&
!await isIdtyExist(idtyName.text) &&
idtyName.text.length >= 2 &&
idtyName.text.length <= 32;
log.d('aaaaaaaaaa: $canValidate');
notifyListeners();
},
inputFormatters: <TextInputFormatter>[ inputFormatters: <TextInputFormatter>[
// FilteringTextInputFormatter.allow(RegExp("[0-9a-zA-Z]")), // FilteringTextInputFormatter.allow(RegExp("[0-9a-zA-Z]")),
FilteringTextInputFormatter.deny(RegExp(r'^ ')), FilteringTextInputFormatter.deny(RegExp(r'^ ')),
@ -250,7 +262,12 @@ class WalletOptionsProvider with ChangeNotifier {
autofocus: true, autofocus: true,
controller: idtyName, controller: idtyName,
style: const TextStyle(fontSize: 19), style: const TextStyle(fontSize: 19),
) ),
const SizedBox(height: 10),
Consumer<WalletOptionsProvider>(builder: (context, wOptions, _) {
return Text(idtyExist ? 'Cette identité existe déjà' : '',
style: TextStyle(color: Colors.red[500]));
})
]), ]),
), ),
actions: <Widget>[ actions: <Widget>[
@ -261,61 +278,66 @@ class WalletOptionsProvider with ChangeNotifier {
builder: (context, wOptions, _) { builder: (context, wOptions, _) {
return TextButton( return TextButton(
key: keyConfirm, key: keyConfirm,
onPressed: canValidate
? () async {
idtyName.text =
idtyName.text.trim().replaceAll(' ', '');
if (idtyName.text.length.clamp(3, 32) ==
idtyName.text.length) {
WalletData? defaultWallet =
myWalletProvider.getDefaultWallet();
String? pin;
if (myWalletProvider.pinCode == '') {
pin = await Navigator.push(
context,
MaterialPageRoute(
builder: (homeContext) {
return UnlockingWallet(
wallet: defaultWallet);
},
),
);
}
if (pin != null ||
myWalletProvider.pinCode != '') {
final wallet = myWalletProvider
.getWalletDataByAddress(address.text);
await sub.setCurrentWallet(wallet!);
sub.confirmIdentity(walletOptions.address.text,
idtyName.text, myWalletProvider.pinCode);
Navigator.pop(context);
Navigator.push(
context,
MaterialPageRoute(builder: (context) {
return TransactionInProgress(
transType: 'comfirmIdty',
fromAddress:
getShortPubkey(wallet.address!),
toAddress:
getShortPubkey(wallet.address!),
);
}),
);
}
}
}
: null,
child: Text( child: Text(
"validate".tr(), "validate".tr(),
style: TextStyle( style: TextStyle(
fontSize: 21, fontSize: 21,
color: idtyName.text.length.clamp(3, 64) == color: canValidate
idtyName.text.length ? const Color(0xffD80000)
? const Color(0xffD80000) : Colors.grey[500]),
: Colors.grey,
),
), ),
onPressed: () async {
idtyName.text = idtyName.text.trim().replaceAll(' ', '');
if (idtyName.text.length.clamp(3, 64) ==
idtyName.text.length) {
WalletData? defaultWallet =
myWalletProvider.getDefaultWallet();
String? pin;
if (myWalletProvider.pinCode == '') {
pin = await Navigator.push(
context,
MaterialPageRoute(
builder: (homeContext) {
return UnlockingWallet(wallet: defaultWallet);
},
),
);
}
if (pin != null || myWalletProvider.pinCode != '') {
final wallet = myWalletProvider
.getWalletDataByAddress(address.text);
await sub.setCurrentWallet(wallet!);
sub.confirmIdentity(walletOptions.address.text,
idtyName.text, myWalletProvider.pinCode);
Navigator.pop(context);
Navigator.push(
context,
MaterialPageRoute(builder: (context) {
return TransactionInProgress(
transType: 'comfirmIdty',
fromAddress: getShortPubkey(wallet.address!),
toAddress: getShortPubkey(wallet.address!),
);
}),
);
}
}
},
); );
}) })
], ],
), ),
const SizedBox(height: 20) const SizedBox(height: 5)
], ],
); );
}, },
@ -405,7 +427,7 @@ class WalletOptionsProvider with ChangeNotifier {
} }
bool canValidateName(BuildContext context, TextEditingController walletName) { bool canValidateName(BuildContext context, TextEditingController walletName) {
MyWalletsProvider myWalletProvider = final myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false); Provider.of<MyWalletsProvider>(context, listen: false);
bool isNameValid = walletName.text.length >= 2 && bool isNameValid = walletName.text.length >= 2 &&

View File

@ -1,20 +1,13 @@
import 'dart:io'; import 'dart:io';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:gecko/models/g1_wallets_list.dart'; import 'package:gecko/models/g1_wallets_list.dart';
import 'package:gecko/models/widgets_keys.dart';
import 'package:gecko/providers/cesium_plus.dart';
import 'package:gecko/providers/substrate_sdk.dart';
import 'package:gecko/providers/wallet_options.dart';
import 'package:gecko/screens/common_elements.dart';
import 'package:gecko/screens/wallet_view.dart'; import 'package:gecko/screens/wallet_view.dart';
import 'package:jdenticon_dart/jdenticon_dart.dart'; import 'package:jdenticon_dart/jdenticon_dart.dart';
import 'package:permission_handler/permission_handler.dart'; import 'package:permission_handler/permission_handler.dart';
// import 'package:qrscan/qrscan.dart' as scanner; // import 'package:qrscan/qrscan.dart' as scanner;
import 'package:barcode_scan2/barcode_scan2.dart'; import 'package:barcode_scan2/barcode_scan2.dart';
import 'package:provider/provider.dart';
class WalletsProfilesProvider with ChangeNotifier { class WalletsProfilesProvider with ChangeNotifier {
WalletsProfilesProvider(this.address); WalletsProfilesProvider(this.address);
@ -129,102 +122,6 @@ class WalletsProfilesProvider with ChangeNotifier {
return _balance; return _balance;
} }
Widget headerProfileView(
BuildContext context, String address, String? username) {
const double avatarSize = 140;
WalletOptionsProvider walletOptions =
Provider.of<WalletOptionsProvider>(context, listen: false);
CesiumPlusProvider cesiumPlusProvider =
Provider.of<CesiumPlusProvider>(context, listen: false);
// SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
return Stack(children: <Widget>[
Consumer<SubstrateSdk>(builder: (context, sub, _) {
bool isAccountExist = balanceCache[address] != 0;
return Container(
height: 180,
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [
isAccountExist ? yellowC : Colors.grey[400]!,
isAccountExist ? const Color(0xFFE7811A) : Colors.grey[600]!,
],
),
));
}),
Padding(
padding: const EdgeInsets.only(left: 30, right: 40),
child: Row(children: <Widget>[
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Container(
height: 10,
color: yellowC, // Colors.grey[400],
),
Row(children: [
GestureDetector(
key: keyCopyAddress,
onTap: () {
Clipboard.setData(ClipboardData(text: address));
snackCopyKey(context);
},
child: Text(
getShortPubkey(address),
style: const TextStyle(
fontSize: 30,
fontWeight: FontWeight.w800,
),
),
),
]),
const SizedBox(height: 25),
balance(context, address, 22),
const SizedBox(height: 10),
walletOptions.idtyStatus(context, address,
isOwner: false, color: Colors.black),
getCerts(context, address, 14),
// if (username == null &&
// g1WalletsBox.get(address)?.username != null)
// SizedBox(
// width: 230,
// child: Text(
// g1WalletsBox.get(address)?.username ?? '',
// style: const TextStyle(
// fontSize: 27,
// color: Color(0xff814C00),
// ),
// ),
// ),
// if (username != null)
// SizedBox(
// width: 230,
// child: Text(
// username,
// style: const TextStyle(
// fontSize: 27,
// color: Color(0xff814C00),
// ),
// ),
// ),
const SizedBox(height: 55),
]),
const Spacer(),
Column(children: <Widget>[
ClipOval(
child: cesiumPlusProvider.defaultAvatar(avatarSize),
),
const SizedBox(height: 25),
]),
]),
),
CommonElements().offlineInfo(context),
]);
}
bool isContact(String address) { bool isContact(String address) {
return contactsBox.containsKey(address); return contactsBox.containsKey(address);
} }

View File

@ -1,7 +1,7 @@
// ignore_for_file: must_be_immutable // ignore_for_file: must_be_immutable
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/services.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:gecko/models/queries_indexer.dart'; import 'package:gecko/models/queries_indexer.dart';
import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/models/widgets_keys.dart';
@ -9,9 +9,9 @@ import 'package:gecko/providers/cesium_plus.dart';
import 'package:gecko/providers/duniter_indexer.dart'; import 'package:gecko/providers/duniter_indexer.dart';
import 'package:gecko/providers/home.dart'; import 'package:gecko/providers/home.dart';
import 'package:gecko/providers/substrate_sdk.dart'; import 'package:gecko/providers/substrate_sdk.dart';
import 'package:gecko/providers/wallets_profiles.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/screens/wallet_view.dart'; import 'package:gecko/screens/wallet_view.dart';
import 'package:gecko/widgets/header_profile.dart';
import 'package:graphql_flutter/graphql_flutter.dart'; import 'package:graphql_flutter/graphql_flutter.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -31,9 +31,6 @@ class ActivityScreen extends StatelessWidget with ChangeNotifier {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
WalletsProfilesProvider walletProfile =
Provider.of<WalletsProfilesProvider>(context, listen: false);
HomeProvider homeProvider = HomeProvider homeProvider =
Provider.of<HomeProvider>(context, listen: false); Provider.of<HomeProvider>(context, listen: false);
@ -49,14 +46,13 @@ class ActivityScreen extends StatelessWidget with ChangeNotifier {
), ),
bottomNavigationBar: homeProvider.bottomAppBar(context), bottomNavigationBar: homeProvider.bottomAppBar(context),
body: Column(children: <Widget>[ body: Column(children: <Widget>[
walletProfile.headerProfileView(context, address, username), HeaderProfile(address: address, username: username),
historyQuery(context), historyQuery(context),
])); ]));
} }
Widget historyQuery(context) { Widget historyQuery(context) {
DuniterIndexer duniterIndexer = final duniterIndexer = Provider.of<DuniterIndexer>(context, listen: false);
Provider.of<DuniterIndexer>(context, listen: false);
if (indexerEndpoint == '') { if (indexerEndpoint == '') {
Column(children: <Widget>[ Column(children: <Widget>[
@ -158,8 +154,7 @@ class ActivityScreen extends StatelessWidget with ChangeNotifier {
} }
Widget historyView(context, result) { Widget historyView(context, result) {
DuniterIndexer duniterIndexer = final duniterIndexer = Provider.of<DuniterIndexer>(context, listen: false);
Provider.of<DuniterIndexer>(context, listen: false);
return duniterIndexer.transBC == null return duniterIndexer.transBC == null
? Column(children: <Widget>[ ? Column(children: <Widget>[
@ -193,9 +188,6 @@ class ActivityScreen extends StatelessWidget with ChangeNotifier {
Widget getTransactionTile( Widget getTransactionTile(
BuildContext context, DuniterIndexer duniterIndexer) { BuildContext context, DuniterIndexer duniterIndexer) {
CesiumPlusProvider cesiumPlusProvider =
Provider.of<CesiumPlusProvider>(context, listen: false);
int keyID = 0; int keyID = 0;
String? dateDelimiter; String? dateDelimiter;
String? lastDateDelimiter; String? lastDateDelimiter;
@ -305,7 +297,7 @@ class ActivityScreen extends StatelessWidget with ChangeNotifier {
contentPadding: const EdgeInsets.only( contentPadding: const EdgeInsets.only(
left: 20, right: 30, top: 15, bottom: 15), left: 20, right: 30, top: 15, bottom: 15),
leading: ClipOval( leading: ClipOval(
child: cesiumPlusProvider.defaultAvatar(avatarSize), child: defaultAvatar(avatarSize),
), ),
title: Padding( title: Padding(
padding: const EdgeInsets.only(bottom: 5), padding: const EdgeInsets.only(bottom: 5),

View File

@ -0,0 +1,64 @@
import 'package:accordion/controllers.dart';
import 'package:gecko/globals.dart';
import 'package:flutter/material.dart';
import 'package:gecko/widgets/certs_received.dart';
import 'package:gecko/widgets/certs_sent.dart';
import 'package:accordion/accordion.dart';
class CertificationsScreen extends StatelessWidget {
const CertificationsScreen(
{Key? key, required this.address, required this.username})
: super(key: key);
final String address;
final String username;
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: backgroundColor,
appBar: AppBar(
elevation: 0,
toolbarHeight: 60 * ratio,
title: SizedBox(
height: 22,
child: Text('Certifications de $username'),
)),
body: SafeArea(
child: Accordion(
maxOpenSections: 1,
headerBackgroundColorOpened: orangeC,
scaleWhenAnimating: true,
openAndCloseAnimation: true,
headerPadding:
const EdgeInsets.symmetric(vertical: 7, horizontal: 15),
sectionOpeningHapticFeedback: SectionHapticFeedback.heavy,
sectionClosingHapticFeedback: SectionHapticFeedback.light,
children: [
AccordionSection(
isOpen: true,
leftIcon:
const Icon(Icons.insights_rounded, color: Colors.black),
headerBackgroundColor: yellowC,
headerBackgroundColorOpened: orangeC,
header: const Text('Reçus'),
content: CertsReceived(address: address),
contentHorizontalPadding: 0,
contentBorderWidth: 1,
),
AccordionSection(
isOpen: false,
leftIcon:
const Icon(Icons.insights_rounded, color: Colors.black),
headerBackgroundColor: yellowC,
headerBackgroundColorOpened: orangeC,
header: const Text('Envoyés'),
content: CertsSent(address: address),
contentHorizontalPadding: 20,
contentBorderWidth: 1,
// onOpenSection: () => print('onOpenSection ...'),
// onCloseSection: () => print('onCloseSection ...'),
),
]),
));
}
}

View File

@ -160,7 +160,7 @@ class CommonElements {
} }
Widget offlineInfo(BuildContext context) { Widget offlineInfo(BuildContext context) {
final double screenWidth = MediaQuery.of(homeContext).size.width; final screenWidth = MediaQuery.of(homeContext).size.width;
return Consumer<SubstrateSdk>(builder: (context, sub, _) { return Consumer<SubstrateSdk>(builder: (context, sub, _) {
return Visibility( return Visibility(
visible: !sub.nodeConnected, visible: !sub.nodeConnected,

View File

@ -22,7 +22,7 @@ import 'package:gecko/screens/myWallets/wallets_home.dart';
import 'package:gecko/screens/onBoarding/1.dart'; import 'package:gecko/screens/onBoarding/1.dart';
import 'package:gecko/screens/search.dart'; import 'package:gecko/screens/search.dart';
import 'package:gecko/screens/settings.dart'; import 'package:gecko/screens/settings.dart';
import 'package:flutter/services.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:gecko/screens/my_contacts.dart'; import 'package:gecko/screens/my_contacts.dart';
@ -32,11 +32,10 @@ class HomeScreen extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
homeContext = context; homeContext = context;
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
MyWalletsProvider myWalletProvider = final myWalletProvider = Provider.of<MyWalletsProvider>(context);
Provider.of<MyWalletsProvider>(context);
Provider.of<ChestProvider>(context); Provider.of<ChestProvider>(context);
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false); final sub = Provider.of<SubstrateSdk>(context, listen: false);
final bool isWalletsExists = myWalletProvider.checkIfWalletExist(); final bool isWalletsExists = myWalletProvider.checkIfWalletExist();
@ -104,7 +103,7 @@ class HomeScreen extends StatelessWidget {
builder: (ctx) => StatefulWrapper( builder: (ctx) => StatefulWrapper(
onInit: () { onInit: () {
WidgetsBinding.instance.addPostFrameCallback((_) async { WidgetsBinding.instance.addPostFrameCallback((_) async {
DuniterIndexer duniterIndexer = final duniterIndexer =
Provider.of<DuniterIndexer>(ctx, listen: false); Provider.of<DuniterIndexer>(ctx, listen: false);
duniterIndexer.getValidIndexerEndpoint(); duniterIndexer.getValidIndexerEndpoint();
@ -183,12 +182,12 @@ class HomeScreen extends StatelessWidget {
} }
Widget geckHome(context) { Widget geckHome(context) {
MyWalletsProvider myWalletProvider = Provider.of<MyWalletsProvider>(context); final myWalletProvider = Provider.of<MyWalletsProvider>(context);
Provider.of<ChestProvider>(context); Provider.of<ChestProvider>(context);
WalletsProfilesProvider historyProvider = WalletsProfilesProvider historyProvider =
Provider.of<WalletsProfilesProvider>(context); Provider.of<WalletsProfilesProvider>(context);
final double statusBarHeight = MediaQuery.of(context).padding.top; final statusBarHeight = MediaQuery.of(context).padding.top;
return Container( return Container(
decoration: const BoxDecoration( decoration: const BoxDecoration(
image: DecorationImage( image: DecorationImage(
@ -434,7 +433,7 @@ Widget geckHome(context) {
} }
Widget welcomeHome(context) { Widget welcomeHome(context) {
final double statusBarHeight = MediaQuery.of(context).padding.top; final statusBarHeight = MediaQuery.of(context).padding.top;
return Container( return Container(
decoration: const BoxDecoration( decoration: const BoxDecoration(

View File

@ -3,7 +3,7 @@
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:durt/durt.dart'; import 'package:durt/durt.dart';
import 'package:flutter/services.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:gecko/models/stateful_wrapper.dart'; import 'package:gecko/models/stateful_wrapper.dart';
import 'package:gecko/models/wallet_data.dart'; import 'package:gecko/models/wallet_data.dart';
@ -26,9 +26,8 @@ class ChangePinScreen extends StatelessWidget with ChangeNotifier {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); final sub = Provider.of<SubstrateSdk>(context, listen: false);
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false); final myWalletProvider =
MyWalletsProvider myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false); Provider.of<MyWalletsProvider>(context, listen: false);
return WillPopScope( return WillPopScope(

View File

@ -4,7 +4,7 @@ import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:gecko/models/chest_data.dart'; import 'package:gecko/models/chest_data.dart';
import 'package:flutter/services.dart';
import 'package:gecko/models/wallet_data.dart'; import 'package:gecko/models/wallet_data.dart';
import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/models/widgets_keys.dart';
import 'package:gecko/providers/chest_provider.dart'; import 'package:gecko/providers/chest_provider.dart';
@ -25,9 +25,7 @@ class ChestOptions extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); final chestProvider = Provider.of<ChestProvider>(context, listen: false);
ChestProvider chestProvider =
Provider.of<ChestProvider>(context, listen: false);
HomeProvider homeProvider = HomeProvider homeProvider =
Provider.of<HomeProvider>(context, listen: false); Provider.of<HomeProvider>(context, listen: false);
@ -61,7 +59,7 @@ class ChestOptions extends StatelessWidget {
InkWell( InkWell(
key: keyShowSeed, key: keyShowSeed,
onTap: () async { onTap: () async {
MyWalletsProvider myWalletProvider = final myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false); Provider.of<MyWalletsProvider>(context, listen: false);
WalletData? defaultWallet = WalletData? defaultWallet =
myWalletProvider.getDefaultWallet(); myWalletProvider.getDefaultWallet();

View File

@ -1,7 +1,7 @@
// ignore_for_file: use_build_context_synchronously // ignore_for_file: use_build_context_synchronously
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/services.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/models/widgets_keys.dart';
import 'package:gecko/providers/my_wallets.dart'; import 'package:gecko/providers/my_wallets.dart';
@ -30,9 +30,7 @@ class _ChooseChestState extends State<ChooseChest> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); final myWalletProvider = Provider.of<MyWalletsProvider>(context);
MyWalletsProvider myWalletProvider =
Provider.of<MyWalletsProvider>(context);
return Scaffold( return Scaffold(
backgroundColor: backgroundColor, backgroundColor: backgroundColor,

View File

@ -3,7 +3,7 @@
import 'dart:io'; import 'dart:io';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/services.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/models/wallet_data.dart'; import 'package:gecko/models/wallet_data.dart';
@ -23,8 +23,7 @@ class ChooseWalletScreen extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); final sub = Provider.of<SubstrateSdk>(context, listen: false);
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false);
final int chest = configBox.get('currentChest'); final int chest = configBox.get('currentChest');
return Scaffold( return Scaffold(
@ -73,9 +72,7 @@ class ChooseWalletScreen extends StatelessWidget {
} }
Widget myWalletsTiles(BuildContext context, int currentChest) { Widget myWalletsTiles(BuildContext context, int currentChest) {
MyWalletsProvider myWalletProvider = final myWalletProvider = Provider.of<MyWalletsProvider>(context);
Provider.of<MyWalletsProvider>(context);
// SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
final bool isWalletsExists = myWalletProvider.checkIfWalletExist(); final bool isWalletsExists = myWalletProvider.checkIfWalletExist();
WalletData? defaultWallet = myWalletProvider.getDefaultWallet(); WalletData? defaultWallet = myWalletProvider.getDefaultWallet();
@ -98,7 +95,7 @@ class ChooseWalletScreen extends StatelessWidget {
} }
List listWallets = myWalletProvider.listWallets; List listWallets = myWalletProvider.listWallets;
final double screenWidth = MediaQuery.of(context).size.width; final screenWidth = MediaQuery.of(context).size.width;
int nTule = 2; int nTule = 2;
if (screenWidth >= 900) { if (screenWidth >= 900) {

View File

@ -1,7 +1,7 @@
// ignore_for_file: use_build_context_synchronously // ignore_for_file: use_build_context_synchronously
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/services.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/models/wallet_data.dart'; import 'package:gecko/models/wallet_data.dart';
@ -27,8 +27,7 @@ class _CustomDerivationState extends State<CustomDerivation> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); final myWalletProvider =
MyWalletsProvider myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false); Provider.of<MyWalletsProvider>(context, listen: false);
final derivationList = <String>[ final derivationList = <String>[

View File

@ -4,6 +4,7 @@ import 'dart:async';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/models/wallet_data.dart'; import 'package:gecko/models/wallet_data.dart';
@ -21,10 +22,9 @@ class ImportG1v1 extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); final walletOptions =
WalletOptionsProvider walletOptions =
Provider.of<WalletOptionsProvider>(context, listen: false); Provider.of<WalletOptionsProvider>(context, listen: false);
MyWalletsProvider myWalletProvider = final myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false); Provider.of<MyWalletsProvider>(context, listen: false);
Timer? debounce; Timer? debounce;
@ -185,13 +185,13 @@ class ImportG1v1 extends StatelessWidget {
key: keyCopyAddress, key: keyCopyAddress,
onTap: () { onTap: () {
Clipboard.setData( Clipboard.setData(
ClipboardData(text: sub.g1V1NewAddress)); ClipboardData(text: sub.g1V1OldPubkey));
snackCopyKey(context); snackCopyKey(context);
}, },
child: Text( child: Text(
getShortPubkey(sub.g1V1NewAddress), sub.g1V1OldPubkey,
style: const TextStyle( style: const TextStyle(
fontSize: 20, fontSize: 16,
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
), ),
), ),
@ -308,7 +308,7 @@ class ImportG1v1 extends StatelessWidget {
} }
void resetScreen(BuildContext context) { void resetScreen(BuildContext context) {
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false); final sub = Provider.of<SubstrateSdk>(context, listen: false);
sub.csSalt.text = ''; sub.csSalt.text = '';
sub.csPassword.text = ''; sub.csPassword.text = '';

View File

@ -1,7 +1,7 @@
// ignore_for_file: use_build_context_synchronously // ignore_for_file: use_build_context_synchronously
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/services.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/models/wallet_data.dart'; import 'package:gecko/models/wallet_data.dart';
@ -27,7 +27,6 @@ class ManageMembership extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
final sub = Provider.of<SubstrateSdk>(context); final sub = Provider.of<SubstrateSdk>(context);
return Scaffold( return Scaffold(
@ -116,9 +115,9 @@ class ManageMembership extends StatelessWidget {
false; false;
if (answer) { if (answer) {
MyWalletsProvider myWalletProvider = final myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false); Provider.of<MyWalletsProvider>(context, listen: false);
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false); final sub = Provider.of<SubstrateSdk>(context, listen: false);
// MyWalletsProvider mw = MyWalletsProvider(); // MyWalletsProvider mw = MyWalletsProvider();
// final wallet = mw.getWalletDataByAddress(address); // final wallet = mw.getWalletDataByAddress(address);

View File

@ -1,7 +1,7 @@
// ignore_for_file: use_build_context_synchronously // ignore_for_file: use_build_context_synchronously
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/services.dart';
import 'package:flutter_markdown/flutter_markdown.dart'; import 'package:flutter_markdown/flutter_markdown.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -20,14 +20,12 @@ class MigrateIdentityScreen extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); // final _homeProvider = Provider.of<HomeProvider>(context);
// HomeProvider _homeProvider = Provider.of<HomeProvider>(context); final walletOptions =
WalletOptionsProvider walletOptions =
Provider.of<WalletOptionsProvider>(context, listen: false); Provider.of<WalletOptionsProvider>(context, listen: false);
MyWalletsProvider myWalletProvider = final myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false); Provider.of<MyWalletsProvider>(context, listen: false);
DuniterIndexer duniterIndexer = final duniterIndexer = Provider.of<DuniterIndexer>(context, listen: false);
Provider.of<DuniterIndexer>(context, listen: false);
final fromAddress = walletOptions.address.text; final fromAddress = walletOptions.address.text;
final defaultWallet = myWalletProvider.getDefaultWallet(); final defaultWallet = myWalletProvider.getDefaultWallet();

View File

@ -1,6 +1,6 @@
import 'package:bubble/bubble.dart'; import 'package:bubble/bubble.dart';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/services.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/models/widgets_keys.dart';
@ -19,10 +19,8 @@ class RestoreChest extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); final genW = Provider.of<GenerateWalletsProvider>(context, listen: false);
GenerateWalletsProvider genW = final sub = Provider.of<SubstrateSdk>(context, listen: false);
Provider.of<GenerateWalletsProvider>(context, listen: false);
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false);
genW.actualWallet = null; genW.actualWallet = null;
if (genW.isSentenceComplete(context)) { if (genW.isSentenceComplete(context)) {
@ -183,7 +181,7 @@ class RestoreChest extends StatelessWidget {
} }
Widget arrayCell(BuildContext context, TextEditingController cellCtl) { Widget arrayCell(BuildContext context, TextEditingController cellCtl) {
GenerateWalletsProvider generateWalletProvider = final generateWalletProvider =
Provider.of<GenerateWalletsProvider>(context); Provider.of<GenerateWalletsProvider>(context);
return Container( return Container(

View File

@ -1,5 +1,6 @@
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/models/wallet_data.dart'; import 'package:gecko/models/wallet_data.dart';
@ -23,12 +24,11 @@ class ShowSeed extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); final myWalletProvider =
MyWalletsProvider myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false); Provider.of<MyWalletsProvider>(context, listen: false);
CommonElements common = CommonElements(); CommonElements common = CommonElements();
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false); final sub = Provider.of<SubstrateSdk>(context, listen: false);
WalletData defaultWallet = myWalletProvider.getDefaultWallet(); WalletData defaultWallet = myWalletProvider.getDefaultWallet();

View File

@ -3,7 +3,7 @@
import 'dart:async'; import 'dart:async';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart';
import 'package:gecko/models/chest_data.dart'; import 'package:gecko/models/chest_data.dart';
import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/models/widgets_keys.dart';
import 'package:gecko/providers/substrate_sdk.dart'; import 'package:gecko/providers/substrate_sdk.dart';
@ -30,9 +30,7 @@ class UnlockingWallet extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); final walletOptions = Provider.of<WalletOptionsProvider>(context);
WalletOptionsProvider walletOptions =
Provider.of<WalletOptionsProvider>(context);
// final double statusBarHeight = MediaQuery.of(context).padding.top; // final double statusBarHeight = MediaQuery.of(context).padding.top;
currentChestNumber = configBox.get('currentChest'); currentChestNumber = configBox.get('currentChest');
@ -163,11 +161,9 @@ class UnlockingWallet extends StatelessWidget {
StreamController<ErrorAnimationType> errorController = StreamController<ErrorAnimationType> errorController =
StreamController<ErrorAnimationType>(); StreamController<ErrorAnimationType>();
TextEditingController enterPin = TextEditingController(); TextEditingController enterPin = TextEditingController();
WalletOptionsProvider walletOptions = final walletOptions = Provider.of<WalletOptionsProvider>(context);
Provider.of<WalletOptionsProvider>(context); final myWalletProvider = Provider.of<MyWalletsProvider>(context);
MyWalletsProvider myWalletProvider = final sub = Provider.of<SubstrateSdk>(context, listen: false);
Provider.of<MyWalletsProvider>(context);
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false);
FocusNode pinFocus = FocusNode(); FocusNode pinFocus = FocusNode();
WalletData defaultWallet = myWalletProvider.getDefaultWallet(); WalletData defaultWallet = myWalletProvider.getDefaultWallet();

View File

@ -2,6 +2,7 @@ import 'dart:async';
import 'dart:io'; import 'dart:io';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/models/widgets_keys.dart';
import 'package:gecko/providers/duniter_indexer.dart'; import 'package:gecko/providers/duniter_indexer.dart';
@ -11,12 +12,14 @@ import 'package:gecko/models/wallet_data.dart';
import 'package:gecko/providers/substrate_sdk.dart'; import 'package:gecko/providers/substrate_sdk.dart';
import 'package:gecko/providers/wallet_options.dart'; import 'package:gecko/providers/wallet_options.dart';
import 'package:gecko/providers/wallets_profiles.dart'; import 'package:gecko/providers/wallets_profiles.dart';
import 'package:gecko/screens/certifications.dart';
import 'package:gecko/screens/common_elements.dart'; import 'package:gecko/screens/common_elements.dart';
import 'package:gecko/screens/activity.dart'; import 'package:gecko/screens/activity.dart';
import 'package:gecko/screens/myWallets/manage_membership.dart'; import 'package:gecko/screens/myWallets/manage_membership.dart';
import 'package:gecko/screens/qrcode_fullscreen.dart'; import 'package:gecko/screens/qrcode_fullscreen.dart';
import 'package:gecko/widgets/page_route_no_transition.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:flutter/services.dart';
import 'package:qr_flutter/qr_flutter.dart'; import 'package:qr_flutter/qr_flutter.dart';
class WalletOptions extends StatelessWidget { class WalletOptions extends StatelessWidget {
@ -26,25 +29,23 @@ class WalletOptions extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); final walletOptions =
WalletOptionsProvider walletOptions =
Provider.of<WalletOptionsProvider>(context, listen: false); Provider.of<WalletOptionsProvider>(context, listen: false);
WalletsProfilesProvider historyProvider = WalletsProfilesProvider historyProvider =
Provider.of<WalletsProfilesProvider>(context, listen: false); Provider.of<WalletsProfilesProvider>(context, listen: false);
MyWalletsProvider myWalletProvider = final myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false); Provider.of<MyWalletsProvider>(context, listen: false);
HomeProvider homeProvider = HomeProvider homeProvider =
Provider.of<HomeProvider>(context, listen: false); Provider.of<HomeProvider>(context, listen: false);
DuniterIndexer duniterIndexer = final duniterIndexer = Provider.of<DuniterIndexer>(context, listen: false);
Provider.of<DuniterIndexer>(context, listen: false);
// SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false); // final sub = Provider.of<SubstrateSdk>(context, listen: false);
// sub.spawnBlock(); // sub.spawnBlock();
// sub.spawnBlock(0, 20); // sub.spawnBlock(0, 20);
log.d(walletOptions.address.text); log.d(walletOptions.address.text);
final int currentChest = myWalletProvider.getCurrentChest(); final currentChest = myWalletProvider.getCurrentChest();
// final currentWallet = _myWalletProvider.getDefaultWallet(); // final currentWallet = _myWalletProvider.getDefaultWallet();
// log.d(_walletOptions.getAddress(_currentChest, 3)); // log.d(_walletOptions.getAddress(_currentChest, 3));
@ -144,16 +145,38 @@ class WalletOptions extends StatelessWidget {
balance( balance(
context, walletProvider.address.text, 21), context, walletProvider.address.text, 21),
const SizedBox(width: 30), const SizedBox(width: 30),
Column(
crossAxisAlignment: InkWell(
CrossAxisAlignment.center, onTap: () => duniterIndexer.walletNameIndexer[
children: [ walletProvider.address.text] !=
walletOptions.idtyStatus( null
context, walletOptions.address.text, ? {
isOwner: true, color: orangeC), Navigator.push(
getCerts(context, context,
walletProvider.address.text, 15), PageNoTransit(builder: (context) {
]), return CertificationsScreen(
address: walletProvider
.address.text,
username: duniterIndexer
.walletNameIndexer[
walletProvider
.address.text]!);
}),
),
}
: null,
child: Column(
crossAxisAlignment:
CrossAxisAlignment.center,
children: [
walletOptions.idtyStatus(
context, walletOptions.address.text,
isOwner: true, color: orangeC),
getCerts(context,
walletProvider.address.text, 15),
]),
),
SizedBox(height: 10 * ratio), SizedBox(height: 10 * ratio),
]), ]),
const Spacer(flex: 2), const Spacer(flex: 2),
@ -302,7 +325,7 @@ class WalletOptions extends StatelessWidget {
foregroundColor: Colors.white, elevation: 4, foregroundColor: Colors.white, elevation: 4,
backgroundColor: orangeC, // foreground backgroundColor: orangeC, // foreground
), ),
onPressed: () { onPressed: () async {
walletProvider.confirmIdentityPopup(context); walletProvider.confirmIdentityPopup(context);
// Navigator.push( // Navigator.push(
// context, // context,
@ -337,7 +360,7 @@ class WalletOptions extends StatelessWidget {
} }
Widget pubkeyWidget(WalletOptionsProvider walletProvider, BuildContext ctx) { Widget pubkeyWidget(WalletOptionsProvider walletProvider, BuildContext ctx) {
final String shortPubkey = getShortPubkey(walletProvider.address.text); final shortPubkey = getShortPubkey(walletProvider.address.text);
return GestureDetector( return GestureDetector(
key: keyCopyAddress, key: keyCopyAddress,
onTap: () { onTap: () {
@ -437,7 +460,7 @@ class WalletOptions extends StatelessWidget {
} }
Widget manageMembership(BuildContext context) { Widget manageMembership(BuildContext context) {
WalletOptionsProvider walletOptions = final walletOptions =
Provider.of<WalletOptionsProvider>(context, listen: false); Provider.of<WalletOptionsProvider>(context, listen: false);
return InkWell( return InkWell(
key: keyManageMembership, key: keyManageMembership,
@ -469,8 +492,8 @@ class WalletOptions extends StatelessWidget {
Widget setDefaultWalletWidget( Widget setDefaultWalletWidget(
BuildContext context, BuildContext context,
WalletOptionsProvider walletProvider, WalletOptionsProvider walletProvider,
MyWalletsProvider myWalletProvider, final myWalletProvider,
WalletOptionsProvider walletOptions, final walletOptions,
int currentChest) { int currentChest) {
return Consumer<MyWalletsProvider>(builder: (context, myWalletProvider, _) { return Consumer<MyWalletsProvider>(builder: (context, myWalletProvider, _) {
WalletData defaultWallet = myWalletProvider.getDefaultWallet(); WalletData defaultWallet = myWalletProvider.getDefaultWallet();
@ -511,10 +534,10 @@ class WalletOptions extends StatelessWidget {
} }
Future setDefaultWallet(BuildContext context, int currentChest) async { Future setDefaultWallet(BuildContext context, int currentChest) async {
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false); final sub = Provider.of<SubstrateSdk>(context, listen: false);
MyWalletsProvider myWalletProvider = final myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false); Provider.of<MyWalletsProvider>(context, listen: false);
WalletOptionsProvider walletOptions = final walletOptions =
Provider.of<WalletOptionsProvider>(context, listen: false); Provider.of<WalletOptionsProvider>(context, listen: false);
// WalletData defaultWallet = _myWalletProvider.getDefaultWallet()!; // WalletData defaultWallet = _myWalletProvider.getDefaultWallet()!;
@ -527,8 +550,8 @@ class WalletOptions extends StatelessWidget {
Widget deleteWallet(BuildContext context, Widget deleteWallet(BuildContext context,
WalletOptionsProvider walletProvider, int currentChest) { WalletOptionsProvider walletProvider, int currentChest) {
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false); final sub = Provider.of<SubstrateSdk>(context, listen: false);
MyWalletsProvider myWalletProvider = final myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false); Provider.of<MyWalletsProvider>(context, listen: false);
final defaultWallet = myWalletProvider.getDefaultWallet(); final defaultWallet = myWalletProvider.getDefaultWallet();

View File

@ -3,7 +3,7 @@
import 'dart:io'; import 'dart:io';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/services.dart';
import 'package:flutter_markdown/flutter_markdown.dart'; import 'package:flutter_markdown/flutter_markdown.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:gecko/models/chest_data.dart'; import 'package:gecko/models/chest_data.dart';
@ -23,19 +23,18 @@ import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
import 'package:gecko/screens/myWallets/wallet_options.dart'; import 'package:gecko/screens/myWallets/wallet_options.dart';
import 'package:gecko/screens/wallet_view.dart'; import 'package:gecko/screens/wallet_view.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:flutter_svg/flutter_svg.dart';
class WalletsHome extends StatelessWidget { class WalletsHome extends StatelessWidget {
const WalletsHome({Key? key}) : super(key: key); const WalletsHome({Key? key}) : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); final myWalletProvider = Provider.of<MyWalletsProvider>(context);
MyWalletsProvider myWalletProvider =
Provider.of<MyWalletsProvider>(context);
HomeProvider homeProvider = HomeProvider homeProvider =
Provider.of<HomeProvider>(context, listen: false); Provider.of<HomeProvider>(context, listen: false);
final int currentChestNumber = myWalletProvider.getCurrentChest(); final currentChestNumber = myWalletProvider.getCurrentChest();
final ChestData currentChest = chestBox.get(currentChestNumber)!; final ChestData currentChest = chestBox.get(currentChestNumber)!;
myWalletProvider.listWallets = myWalletProvider.listWallets =
myWalletProvider.readAllWallets(currentChestNumber); myWalletProvider.readAllWallets(currentChestNumber);
@ -90,7 +89,7 @@ class WalletsHome extends StatelessWidget {
final bool isSameAddress = final bool isSameAddress =
myWalletProvider.dragAddress == myWalletProvider.lastFlyBy; myWalletProvider.dragAddress == myWalletProvider.lastFlyBy;
final double screenWidth = MediaQuery.of(homeContext).size.width; final screenWidth = MediaQuery.of(homeContext).size.width;
return Container( return Container(
color: yellowC, color: yellowC,
width: screenWidth, width: screenWidth,
@ -109,8 +108,7 @@ class WalletsHome extends StatelessWidget {
); );
} }
Widget chestOptions( Widget chestOptions(BuildContext context, final myWalletProvider) {
BuildContext context, MyWalletsProvider myWalletProvider) {
return Column(children: [ return Column(children: [
const SizedBox(height: 50), const SizedBox(height: 50),
SizedBox( SizedBox(
@ -141,28 +139,39 @@ class WalletsHome extends StatelessWidget {
), ),
)), )),
const SizedBox(height: 30), const SizedBox(height: 30),
InkWell( Row(
key: keyImportG1v1, mainAxisAlignment: MainAxisAlignment.center,
onTap: () { children: [
Navigator.push( SvgPicture.asset(
context, 'assets/cesium_bw2.svg',
MaterialPageRoute(builder: (context) { semanticsLabel: 'CS',
return const ImportG1v1(); height: 50,
}), ),
); const SizedBox(width: 5),
}, InkWell(
child: SizedBox( key: keyImportG1v1,
width: 400, onTap: () {
height: 60, Navigator.push(
child: Center( context,
child: Text('importG1v1'.tr(), MaterialPageRoute(builder: (context) {
style: TextStyle( return const ImportG1v1();
fontSize: 22, }),
color: Colors.blue[900], );
fontWeight: FontWeight.w500))), },
), child: SizedBox(
width: 350,
height: 60,
child: Center(
child: Text('importG1v1'.tr(),
style: TextStyle(
fontSize: 22,
color: Colors.blue[900],
fontWeight: FontWeight.w500))),
),
),
],
), ),
const SizedBox(height: 5), const SizedBox(height: 20),
InkWell( InkWell(
key: keyChangeChest, key: keyChangeChest,
onTap: () { onTap: () {
@ -189,12 +198,11 @@ class WalletsHome extends StatelessWidget {
} }
Widget myWalletsTiles(BuildContext context, int currentChestNumber) { Widget myWalletsTiles(BuildContext context, int currentChestNumber) {
MyWalletsProvider myWalletProvider = final myWalletProvider = Provider.of<MyWalletsProvider>(context);
Provider.of<MyWalletsProvider>(context); final walletOptions =
WalletOptionsProvider walletOptions =
Provider.of<WalletOptionsProvider>(context, listen: false); Provider.of<WalletOptionsProvider>(context, listen: false);
final bool isWalletsExists = myWalletProvider.checkIfWalletExist(); final bool isWalletsExists = myWalletProvider.checkIfWalletExist();
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false); final sub = Provider.of<SubstrateSdk>(context, listen: false);
if (!isWalletsExists) { if (!isWalletsExists) {
return const Text(''); return const Text('');
@ -213,7 +221,7 @@ class WalletsHome extends StatelessWidget {
List listWallets = myWalletProvider.listWallets; List listWallets = myWalletProvider.listWallets;
WalletData? defaultWallet = myWalletProvider.getDefaultWallet(); WalletData? defaultWallet = myWalletProvider.getDefaultWallet();
final double screenWidth = MediaQuery.of(context).size.width; final screenWidth = MediaQuery.of(context).size.width;
int nTule = 2; int nTule = 2;
if (screenWidth >= 900) { if (screenWidth >= 900) {
@ -397,10 +405,9 @@ class WalletsHome extends StatelessWidget {
Widget nameBuilder(BuildContext context, WalletData repository, Widget nameBuilder(BuildContext context, WalletData repository,
WalletData defaultWallet, int currentChestNumber) { WalletData defaultWallet, int currentChestNumber) {
WalletOptionsProvider walletOptions = final walletOptions =
Provider.of<WalletOptionsProvider>(context, listen: false); Provider.of<WalletOptionsProvider>(context, listen: false);
DuniterIndexer duniterIndexer = final duniterIndexer = Provider.of<DuniterIndexer>(context, listen: false);
Provider.of<DuniterIndexer>(context, listen: false);
return ListTile( return ListTile(
shape: const RoundedRectangleBorder( shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(bottom: Radius.circular(12))), borderRadius: BorderRadius.vertical(bottom: Radius.circular(12))),
@ -436,8 +443,7 @@ class WalletsHome extends StatelessWidget {
} }
Widget addNewDerivation(context) { Widget addNewDerivation(context) {
MyWalletsProvider myWalletProvider = final myWalletProvider = Provider.of<MyWalletsProvider>(context);
Provider.of<MyWalletsProvider>(context);
String newDerivationName = String newDerivationName =
'${'wallet'.tr()} ${myWalletProvider.listWallets.last.number! + 2}'; '${'wallet'.tr()} ${myWalletProvider.listWallets.last.number! + 2}';

View File

@ -1,5 +1,5 @@
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/services.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/models/widgets_keys.dart';
@ -19,15 +19,11 @@ class ContactsScreen extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
CesiumPlusProvider cesiumPlusProvider =
Provider.of<CesiumPlusProvider>(context, listen: false);
WalletsProfilesProvider walletsProfilesClass = WalletsProfilesProvider walletsProfilesClass =
Provider.of<WalletsProfilesProvider>(context, listen: true); Provider.of<WalletsProfilesProvider>(context, listen: true);
HomeProvider homeProvider = HomeProvider homeProvider =
Provider.of<HomeProvider>(context, listen: false); Provider.of<HomeProvider>(context, listen: false);
DuniterIndexer duniterIndexer = final duniterIndexer = Provider.of<DuniterIndexer>(context, listen: false);
Provider.of<DuniterIndexer>(context, listen: false);
double avatarSize = 55; double avatarSize = 55;
@ -74,8 +70,7 @@ class ContactsScreen extends StatelessWidget {
key: keySearchResult('keyID++'), key: keySearchResult('keyID++'),
horizontalTitleGap: 40, horizontalTitleGap: 40,
contentPadding: const EdgeInsets.all(5), contentPadding: const EdgeInsets.all(5),
leading: cesiumPlusProvider leading: defaultAvatar(avatarSize),
.defaultAvatar(avatarSize),
title: Row(children: <Widget>[ title: Row(children: <Widget>[
Text(getShortPubkey(g1Wallet.address), Text(getShortPubkey(g1Wallet.address),
style: const TextStyle( style: const TextStyle(

View File

@ -1,6 +1,6 @@
// ignore_for_file: file_names // ignore_for_file: file_names
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/services.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:gecko/screens/common_elements.dart'; import 'package:gecko/screens/common_elements.dart';
@ -11,7 +11,6 @@ class OnboardingStepOne extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
CommonElements common = CommonElements(); CommonElements common = CommonElements();
return Scaffold( return Scaffold(
backgroundColor: backgroundColor, backgroundColor: backgroundColor,

View File

@ -4,7 +4,7 @@
import 'dart:async'; import 'dart:async';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:gecko/models/wallet_data.dart'; import 'package:gecko/models/wallet_data.dart';
@ -29,13 +29,11 @@ class OnboardingStepTen extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); final generateWalletProvider =
GenerateWalletsProvider generateWalletProvider =
Provider.of<GenerateWalletsProvider>(context); Provider.of<GenerateWalletsProvider>(context);
WalletOptionsProvider walletOptions = final walletOptions = Provider.of<WalletOptionsProvider>(context);
Provider.of<WalletOptionsProvider>(context);
CommonElements common = CommonElements(); CommonElements common = CommonElements();
final int pinLenght = generateWalletProvider.pin.text.length; final pinLenght = generateWalletProvider.pin.text.length;
return Scaffold( return Scaffold(
backgroundColor: backgroundColor, backgroundColor: backgroundColor,
@ -132,20 +130,19 @@ class OnboardingStepTen extends StatelessWidget {
)); ));
} }
Widget pinForm(context, WalletOptionsProvider walletOptions, pinLenght, Widget pinForm(
int walletNbr, int derivation) { context, final walletOptions, pinLenght, int walletNbr, int derivation) {
// var _walletPin = ''; // var _walletPin = '';
// ignore: close_sinks // ignore: close_sinks
StreamController<ErrorAnimationType> errorController = StreamController<ErrorAnimationType> errorController =
StreamController<ErrorAnimationType>(); StreamController<ErrorAnimationType>();
TextEditingController enterPin = TextEditingController(); TextEditingController enterPin = TextEditingController();
MyWalletsProvider myWalletProvider = final myWalletProvider = Provider.of<MyWalletsProvider>(context);
Provider.of<MyWalletsProvider>(context); final generateWalletProvider =
GenerateWalletsProvider generateWalletProvider =
Provider.of<GenerateWalletsProvider>(context); Provider.of<GenerateWalletsProvider>(context);
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false); final sub = Provider.of<SubstrateSdk>(context, listen: false);
final int currentChest = myWalletProvider.getCurrentChest(); final currentChest = myWalletProvider.getCurrentChest();
return Form( return Form(
key: formKey, key: formKey,

View File

@ -1,7 +1,7 @@
// ignore_for_file: file_names // ignore_for_file: file_names
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/services.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/models/widgets_keys.dart';
@ -12,7 +12,6 @@ class OnboardingStepEleven extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
CommonElements common = CommonElements(); CommonElements common = CommonElements();
return Scaffold( return Scaffold(
@ -70,11 +69,13 @@ Widget finishButton(BuildContext context) {
// Navigator.pushNamed(homeContext, '/mywallets'); // Navigator.pushNamed(homeContext, '/mywallets');
Navigator.pushNamedAndRemoveUntil( // final tmpConext = homeContext;
context, '/mywallets', (route) => route.isFirst);
// Navigator.pushNamedAndRemoveUntil( // Navigator.pushNamedAndRemoveUntil(
// homeContext, '/mywallets', ModalRoute.withName('/')); // context, '/mywallets', (route) => route.isFirst);
// .then((value) => homeContext = tmpConext);
Navigator.pushNamedAndRemoveUntil(
homeContext, '/mywallets', ModalRoute.withName('/'));
}, },
child: Text("accessMyChest".tr(), child: Text("accessMyChest".tr(),
style: style:

View File

@ -1,7 +1,7 @@
// ignore_for_file: file_names // ignore_for_file: file_names
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/services.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:gecko/screens/common_elements.dart'; import 'package:gecko/screens/common_elements.dart';
@ -12,7 +12,6 @@ class OnboardingStepTwo extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
CommonElements common = CommonElements(); CommonElements common = CommonElements();
return Scaffold( return Scaffold(

View File

@ -1,7 +1,7 @@
// ignore_for_file: file_names // ignore_for_file: file_names
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/services.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:gecko/screens/common_elements.dart'; import 'package:gecko/screens/common_elements.dart';
@ -12,7 +12,6 @@ class OnboardingStepThree extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
CommonElements common = CommonElements(); CommonElements common = CommonElements();
return Scaffold( return Scaffold(

View File

@ -1,7 +1,7 @@
// ignore_for_file: file_names // ignore_for_file: file_names
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/services.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:gecko/screens/common_elements.dart'; import 'package:gecko/screens/common_elements.dart';
@ -12,7 +12,6 @@ class OnboardingStepFor extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
CommonElements common = CommonElements(); CommonElements common = CommonElements();
return Scaffold( return Scaffold(

View File

@ -1,7 +1,7 @@
// ignore_for_file: file_names // ignore_for_file: file_names
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/services.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/models/widgets_keys.dart';
@ -29,8 +29,7 @@ class OnboardingStepFive extends StatefulWidget {
class _ChooseChestState extends State<OnboardingStepFive> { class _ChooseChestState extends State<OnboardingStepFive> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); final generateWalletProvider =
GenerateWalletsProvider generateWalletProvider =
Provider.of<GenerateWalletsProvider>(context, listen: false); Provider.of<GenerateWalletsProvider>(context, listen: false);
final CommonElements common = CommonElements(); final CommonElements common = CommonElements();
@ -112,7 +111,7 @@ class _ChooseChestState extends State<OnboardingStepFive> {
} }
Widget sentanceArray(BuildContext context) { Widget sentanceArray(BuildContext context) {
GenerateWalletsProvider generateWalletProvider = final generateWalletProvider =
Provider.of<GenerateWalletsProvider>(context, listen: false); Provider.of<GenerateWalletsProvider>(context, listen: false);
return Padding( return Padding(
@ -189,7 +188,7 @@ class PrintWallet extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
GenerateWalletsProvider generateWalletProvider = final generateWalletProvider =
Provider.of<GenerateWalletsProvider>(context, listen: false); Provider.of<GenerateWalletsProvider>(context, listen: false);
return MaterialApp( return MaterialApp(
home: Scaffold( home: Scaffold(
@ -222,9 +221,9 @@ class PrintWallet extends StatelessWidget {
Widget nextButton( Widget nextButton(
BuildContext context, String text, bool isFast, bool skipIntro) { BuildContext context, String text, bool isFast, bool skipIntro) {
GenerateWalletsProvider generateWalletProvider = final generateWalletProvider =
Provider.of<GenerateWalletsProvider>(context, listen: false); Provider.of<GenerateWalletsProvider>(context, listen: false);
MyWalletsProvider myWalletProvider = final myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false); Provider.of<MyWalletsProvider>(context, listen: false);
return SizedBox( return SizedBox(
width: 380 * ratio, width: 380 * ratio,

View File

@ -2,7 +2,7 @@
// ignore_for_file: must_be_immutable // ignore_for_file: must_be_immutable
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/services.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/models/widgets_keys.dart';
@ -24,8 +24,7 @@ class OnboardingStepSix extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); final generateWalletProvider =
GenerateWalletsProvider generateWalletProvider =
Provider.of<GenerateWalletsProvider>(context, listen: true); Provider.of<GenerateWalletsProvider>(context, listen: true);
CommonElements common = CommonElements(); CommonElements common = CommonElements();
@ -145,7 +144,7 @@ class OnboardingStepSix extends StatelessWidget {
} }
Widget nextButton(BuildContext context, String text, nextScreen, bool isFast) { Widget nextButton(BuildContext context, String text, nextScreen, bool isFast) {
GenerateWalletsProvider generateWalletProvider = final generateWalletProvider =
Provider.of<GenerateWalletsProvider>(context, listen: false); Provider.of<GenerateWalletsProvider>(context, listen: false);
generateWalletProvider.isAskedWordValid = false; generateWalletProvider.isAskedWordValid = false;

View File

@ -1,6 +1,6 @@
// ignore_for_file: file_names // ignore_for_file: file_names
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/services.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:gecko/screens/common_elements.dart'; import 'package:gecko/screens/common_elements.dart';
@ -13,7 +13,6 @@ class OnboardingStepSeven extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
CommonElements common = CommonElements(); CommonElements common = CommonElements();
return Scaffold( return Scaffold(
backgroundColor: backgroundColor, backgroundColor: backgroundColor,

View File

@ -1,6 +1,6 @@
// ignore_for_file: file_names // ignore_for_file: file_names
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/services.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:gecko/screens/common_elements.dart'; import 'package:gecko/screens/common_elements.dart';
@ -13,7 +13,6 @@ class OnboardingStepEight extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
CommonElements common = CommonElements(); CommonElements common = CommonElements();
return Scaffold( return Scaffold(
backgroundColor: backgroundColor, backgroundColor: backgroundColor,

View File

@ -1,6 +1,6 @@
// ignore_for_file: file_names // ignore_for_file: file_names
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/services.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/models/widgets_keys.dart';
@ -16,10 +16,9 @@ class OnboardingStepNine extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); final generateWalletProvider =
GenerateWalletsProvider generateWalletProvider =
Provider.of<GenerateWalletsProvider>(context); Provider.of<GenerateWalletsProvider>(context);
// MyWalletsProvider myWalletProvider = // final myWalletProvider =
// Provider.of<MyWalletsProvider>(context); // Provider.of<MyWalletsProvider>(context);
CommonElements common = CommonElements(); CommonElements common = CommonElements();

View File

@ -1,6 +1,5 @@
// ignore_for_file: must_be_immutable // ignore_for_file: must_be_immutable
import 'package:flutter/services.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/providers/substrate_sdk.dart'; import 'package:gecko/providers/substrate_sdk.dart';
@ -17,7 +16,6 @@ class QrCodeFullscreen extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
elevation: 0, elevation: 0,

View File

@ -1,5 +1,5 @@
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/services.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/models/widgets_keys.dart';
@ -16,10 +16,9 @@ class SearchScreen extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); final searchProvider = Provider.of<SearchProvider>(context);
SearchProvider searchProvider = Provider.of<SearchProvider>(context); final screenHeight = MediaQuery.of(context).size.height;
final double screenHeight = MediaQuery.of(context).size.height; // final _homeProvider =
// HomeProvider _homeProvider =
// Provider.of<HomeProvider>(context, listen: false); // Provider.of<HomeProvider>(context, listen: false);
return WillPopScope( return WillPopScope(

View File

@ -1,5 +1,5 @@
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/services.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/models/widgets_keys.dart';
@ -20,17 +20,12 @@ class SearchResultScreen extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); final searchProvider = Provider.of<SearchProvider>(context, listen: false);
SearchProvider searchProvider =
Provider.of<SearchProvider>(context, listen: false);
CesiumPlusProvider cesiumPlusProvider =
Provider.of<CesiumPlusProvider>(context, listen: false);
WalletsProfilesProvider walletsProfilesClass = WalletsProfilesProvider walletsProfilesClass =
Provider.of<WalletsProfilesProvider>(context, listen: false); Provider.of<WalletsProfilesProvider>(context, listen: false);
HomeProvider homeProvider = HomeProvider homeProvider =
Provider.of<HomeProvider>(context, listen: false); Provider.of<HomeProvider>(context, listen: false);
DuniterIndexer duniterIndexer = final duniterIndexer = Provider.of<DuniterIndexer>(context, listen: false);
Provider.of<DuniterIndexer>(context, listen: false);
double avatarSize = 55; double avatarSize = 55;
@ -97,8 +92,7 @@ class SearchResultScreen extends StatelessWidget {
key: keySearchResult(g1Wallet.address), key: keySearchResult(g1Wallet.address),
horizontalTitleGap: 40, horizontalTitleGap: 40,
contentPadding: const EdgeInsets.all(5), contentPadding: const EdgeInsets.all(5),
leading: cesiumPlusProvider leading: defaultAvatar(avatarSize),
.defaultAvatar(avatarSize),
title: Row(children: <Widget>[ title: Row(children: <Widget>[
Text(getShortPubkey(g1Wallet.address), Text(getShortPubkey(g1Wallet.address),
style: const TextStyle( style: const TextStyle(

View File

@ -1,6 +1,6 @@
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/models/widgets_keys.dart';
import 'package:gecko/providers/duniter_indexer.dart'; import 'package:gecko/providers/duniter_indexer.dart';
import 'package:gecko/providers/home.dart'; import 'package:gecko/providers/home.dart';
@ -18,8 +18,6 @@ class SettingsScreen extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
const double buttonHigh = 50; const double buttonHigh = 50;
const double buttonWidth = 240; const double buttonWidth = 240;
const double fontSize = 16; const double fontSize = 16;
@ -110,7 +108,7 @@ class SettingsScreen extends StatelessWidget {
} }
Widget duniterEndpointSelection(BuildContext context) { Widget duniterEndpointSelection(BuildContext context) {
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false); final sub = Provider.of<SubstrateSdk>(context, listen: false);
String? selectedDuniterEndpoint; String? selectedDuniterEndpoint;
// List of items in our dropdown menu // List of items in our dropdown menu
@ -271,8 +269,7 @@ class SettingsScreen extends StatelessWidget {
} }
Widget indexerEndpointSelection(BuildContext context) { Widget indexerEndpointSelection(BuildContext context) {
DuniterIndexer indexer = final duniterIndexer = Provider.of<DuniterIndexer>(context, listen: false);
Provider.of<DuniterIndexer>(context, listen: false);
String? selectedIndexerEndpoint; String? selectedIndexerEndpoint;
if (configBox.containsKey('customIndexer')) { if (configBox.containsKey('customIndexer')) {
@ -282,7 +279,7 @@ class SettingsScreen extends StatelessWidget {
} }
if (selectedIndexerEndpoint == '') { if (selectedIndexerEndpoint == '') {
selectedIndexerEndpoint = indexer.listIndexerEndpoints[0]; selectedIndexerEndpoint = duniterIndexer.listIndexerEndpoints[0];
} }
TextEditingController indexerEndpointController = TextEditingController( TextEditingController indexerEndpointController = TextEditingController(

View File

@ -1,4 +1,3 @@
import 'package:flutter/services.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -7,8 +6,7 @@ class TemplateScreen extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); // final _homeProvider = Provider.of<HomeProvider>(context);
// HomeProvider _homeProvider = Provider.of<HomeProvider>(context);
return Scaffold( return Scaffold(
backgroundColor: backgroundColor, backgroundColor: backgroundColor,

View File

@ -1,5 +1,5 @@
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/services.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/models/widgets_keys.dart';
@ -20,11 +20,10 @@ class TransactionInProgress extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); final sub = Provider.of<SubstrateSdk>(context, listen: true);
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: true); final walletProfiles =
WalletsProfilesProvider walletViewProvider =
Provider.of<WalletsProfilesProvider>(context, listen: false); Provider.of<WalletsProfilesProvider>(context, listen: false);
MyWalletsProvider myWalletProvider = final myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false); Provider.of<MyWalletsProvider>(context, listen: false);
bool isValid = false; bool isValid = false;
@ -35,11 +34,11 @@ class TransactionInProgress extends StatelessWidget {
// sub.spawnBlock(); // sub.spawnBlock();
log.d(walletViewProvider.address); log.d(walletProfiles.address);
final from = fromAddress ?? myWalletProvider.getDefaultWallet().name!; final from = fromAddress ?? myWalletProvider.getDefaultWallet().name!;
final to = toAddress ?? getShortPubkey(walletViewProvider.address); final to = toAddress ?? getShortPubkey(walletProfiles.address);
final amount = walletViewProvider.payAmount.text; final amount = walletProfiles.payAmount.text;
String actionName = ''; String actionName = '';
final bool isUdUnit = configBox.get('isUdUnit') ?? false; final bool isUdUnit = configBox.get('isUdUnit') ?? false;

View File

@ -2,6 +2,7 @@
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/models/g1_wallets_list.dart'; import 'package:gecko/models/g1_wallets_list.dart';
@ -19,6 +20,8 @@ import 'package:gecko/screens/myWallets/choose_wallet.dart';
import 'package:gecko/screens/myWallets/unlocking_wallet.dart'; import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
import 'package:gecko/screens/qrcode_fullscreen.dart'; import 'package:gecko/screens/qrcode_fullscreen.dart';
import 'package:gecko/screens/transaction_in_progress.dart'; import 'package:gecko/screens/transaction_in_progress.dart';
import 'package:gecko/widgets/header_profile.dart';
import 'package:gecko/widgets/page_route_no_transition.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:qr_flutter/qr_flutter.dart'; import 'package:qr_flutter/qr_flutter.dart';
@ -34,16 +37,13 @@ class WalletViewScreen extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
WalletsProfilesProvider walletProfile = WalletsProfilesProvider walletProfile =
Provider.of<WalletsProfilesProvider>(context, listen: false); Provider.of<WalletsProfilesProvider>(context, listen: false);
CesiumPlusProvider cesiumPlusProvider =
Provider.of<CesiumPlusProvider>(context, listen: false);
walletProfile.address = address; walletProfile.address = address;
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false); final sub = Provider.of<SubstrateSdk>(context, listen: false);
HomeProvider homeProvider = HomeProvider homeProvider =
Provider.of<HomeProvider>(context, listen: false); Provider.of<HomeProvider>(context, listen: false);
MyWalletsProvider myWalletProvider = final myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false); Provider.of<MyWalletsProvider>(context, listen: false);
WalletData? defaultWallet = myWalletProvider.getDefaultWallet(); WalletData? defaultWallet = myWalletProvider.getDefaultWallet();
@ -107,7 +107,7 @@ class WalletViewScreen extends StatelessWidget {
bottomNavigationBar: homeProvider.bottomAppBar(context), bottomNavigationBar: homeProvider.bottomAppBar(context),
body: SafeArea( body: SafeArea(
child: Column(children: <Widget>[ child: Column(children: <Widget>[
walletProfile.headerProfileView(context, address, username), HeaderProfile(address: address, username: username),
SizedBox(height: isTall ? 10 : 0), SizedBox(height: isTall ? 10 : 0),
Row(mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ Row(mainAxisAlignment: MainAxisAlignment.spaceAround, children: [
Column(children: <Widget>[ Column(children: <Widget>[
@ -128,11 +128,10 @@ class WalletViewScreen extends StatelessWidget {
onTap: () { onTap: () {
Navigator.push( Navigator.push(
context, context,
MaterialPageRoute(builder: (context) { PageNoTransit(builder: (context) {
return ActivityScreen( return ActivityScreen(
address: address, address: address,
avatar: avatar: defaultAvatar(50));
cesiumPlusProvider.defaultAvatar(50));
}), }),
); );
}), }),
@ -162,8 +161,8 @@ class WalletViewScreen extends StatelessWidget {
final Duration durationSeconds = Duration( final Duration durationSeconds = Duration(
seconds: snapshot.data!['certDelay'] ?? seconds: snapshot.data!['certDelay'] ??
snapshot.data!['certRenewable']!); snapshot.data!['certRenewable']!);
final int seconds = durationSeconds.inSeconds; final seconds = durationSeconds.inSeconds;
final int minutes = durationSeconds.inMinutes; final minutes = durationSeconds.inMinutes;
if (seconds <= 0) { if (seconds <= 0) {
duration = 'seconds'.tr(args: ['0']); duration = 'seconds'.tr(args: ['0']);
@ -172,8 +171,8 @@ class WalletViewScreen extends StatelessWidget {
} else if (seconds <= 3600) { } else if (seconds <= 3600) {
duration = 'minutes'.tr(args: [minutes.toString()]); duration = 'minutes'.tr(args: [minutes.toString()]);
} else if (seconds <= 86400) { } else if (seconds <= 86400) {
final int hours = durationSeconds.inHours; final hours = durationSeconds.inHours;
final int minutesLeft = minutes - hours * 60; final minutesLeft = minutes - hours * 60;
String showMinutes = ''; String showMinutes = '';
if (minutesLeft < 60) {} if (minutesLeft < 60) {}
showMinutes = showMinutes =
@ -181,11 +180,10 @@ class WalletViewScreen extends StatelessWidget {
duration = duration =
'hours'.tr(args: [hours.toString(), showMinutes]); 'hours'.tr(args: [hours.toString(), showMinutes]);
} else if (seconds <= 2592000) { } else if (seconds <= 2592000) {
final int days = durationSeconds.inDays; final days = durationSeconds.inDays;
duration = 'days'.tr(args: [days.toString()]); duration = 'days'.tr(args: [days.toString()]);
} else { } else {
final int months = final months = (durationSeconds.inDays / 30).round();
(durationSeconds.inDays / 30).round();
duration = 'months'.tr(args: [months.toString()]); duration = 'months'.tr(args: [months.toString()]);
} }
} }
@ -422,9 +420,7 @@ void paymentPopup(BuildContext context, String toAddress) {
log.d(pin); log.d(pin);
if (pin != null || myWalletProvider.pinCode != '') { if (pin != null || myWalletProvider.pinCode != '') {
// Payment workflow ! // Payment workflow !
WalletsProfilesProvider walletViewProvider = final sub = Provider.of<SubstrateSdk>(context, listen: false);
Provider.of<WalletsProfilesProvider>(context, listen: false);
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false);
final acc = sub.getCurrentWallet(); final acc = sub.getCurrentWallet();
log.d( log.d(
"fromAddress: ${acc.address!},destAddress: $toAddress, amount: ${double.parse(walletViewProvider.payAmount.text)}, password: $pin"); "fromAddress: ${acc.address!},destAddress: $toAddress, amount: ${double.parse(walletViewProvider.payAmount.text)}, password: $pin");

View File

@ -0,0 +1,84 @@
import 'package:flutter/material.dart';
import 'package:gecko/globals.dart';
import 'package:gecko/models/widgets_keys.dart';
import 'package:gecko/providers/cesium_plus.dart';
import 'package:gecko/providers/substrate_sdk.dart';
import 'package:gecko/screens/wallet_view.dart';
class CertTile extends StatelessWidget {
const CertTile({
Key? key,
required this.listCerts,
}) : super(key: key);
final List listCerts;
@override
Widget build(BuildContext context) {
int keyID = 0;
const double avatarSize = 200;
return Column(
children: listCerts.map((repository) {
// log.d('bbbbbbbbbbbbbbbbbbbbbb: ' + repository.toString());
return Column(children: <Widget>[
Padding(
padding: const EdgeInsets.only(right: 0),
child:
// Row(children: [Column(children: [],)],)
ListTile(
key: keyTransaction(keyID++),
contentPadding: const EdgeInsets.only(
left: 20, right: 30, top: 15, bottom: 15),
leading: ClipOval(
child: defaultAvatar(avatarSize),
),
title: Padding(
padding: const EdgeInsets.only(bottom: 5),
child: Text(repository['name'],
style: const TextStyle(fontSize: 20)),
),
subtitle: RichText(
text: TextSpan(
style: TextStyle(
fontSize: 16,
color: Colors.grey[700],
),
children: <TextSpan>[
TextSpan(
text: repository['date'],
),
if (repository[2] != '')
TextSpan(
text: ' · ',
style: TextStyle(
fontSize: 20,
color: Colors.grey[550],
),
),
TextSpan(
text: getShortPubkey(repository['address']),
style: TextStyle(
fontStyle: FontStyle.italic,
color: Colors.grey[600],
),
),
],
),
),
dense: false,
isThreeLine: false,
onTap: () {
Navigator.push(
homeContext,
MaterialPageRoute(builder: (context) {
return WalletViewScreen(address: repository['address']);
}),
);
}),
),
]);
}).toList());
}
}

View File

@ -0,0 +1,104 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:gecko/globals.dart';
import 'package:gecko/models/queries_indexer.dart';
import 'package:gecko/models/widgets_keys.dart';
import 'package:gecko/widgets/cert_tile.dart';
import 'package:graphql_flutter/graphql_flutter.dart';
class CertsReceived extends StatelessWidget {
const CertsReceived({Key? key, required this.address}) : super(key: key);
final String address;
@override
Widget build(BuildContext context) {
final screenHeight = MediaQuery.of(context).size.height;
final appBarHeight = AppBar().preferredSize.height;
log.d(appBarHeight);
final windowHeight = screenHeight - appBarHeight - 200;
final httpLink = HttpLink(
'$indexerEndpoint/v1/graphql',
);
final client = ValueNotifier(
GraphQLClient(
cache: GraphQLCache(store: HiveStore()),
link: httpLink,
),
);
return GraphQLProvider(
client: client,
child: Query(
options: QueryOptions(
document: gql(getCertsReceived),
variables: <String, dynamic>{
'address': address,
},
),
builder: (QueryResult result, {fetchMore, refetch}) {
if (result.isLoading && result.data == null) {
return const Center(
child: CircularProgressIndicator(),
);
}
if (result.hasException || result.data == null) {
log.e('Error Indexer: ${result.exception}');
return Column(children: <Widget>[
const SizedBox(height: 50),
Text(
"noNetworkNoHistory".tr(),
textAlign: TextAlign.center,
style: const TextStyle(fontSize: 18),
)
]);
} else if (result.data?['certification']?.isEmpty) {
return Column(children: <Widget>[
const SizedBox(height: 50),
Text(
"noDataToDisplay".tr(),
style: const TextStyle(fontSize: 18),
)
]);
}
// Build history list
return SizedBox(
height: windowHeight,
child: ListView(
key: keyListTransactions,
children: <Widget>[certsView(result)],
),
);
},
),
);
}
Widget certsView(QueryResult result) {
List listCerts = [];
final List certsData = result.data!['certification'];
for (final cert in certsData) {
final String issuerAddress = cert['issuer']['pubkey'];
final String issuerName = cert['issuer']['name'];
final date = DateTime.parse(cert['created_at']);
final dp = DateTime(date.year, date.month, date.day);
final dateForm = '${dp.day}-${dp.month}-${dp.year}';
listCerts.add(
{'address': issuerAddress, 'name': issuerName, 'date': dateForm});
}
return result.data == null
? Column(children: <Widget>[
const SizedBox(height: 50),
Text(
"noTransactionToDisplay".tr(),
style: const TextStyle(fontSize: 18),
)
])
: Column(children: <Widget>[
CertTile(listCerts: listCerts),
]);
}
}

105
lib/widgets/certs_sent.dart Normal file
View File

@ -0,0 +1,105 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:gecko/globals.dart';
import 'package:gecko/models/queries_indexer.dart';
import 'package:gecko/models/widgets_keys.dart';
import 'package:gecko/widgets/cert_tile.dart';
import 'package:graphql_flutter/graphql_flutter.dart';
class CertsSent extends StatelessWidget {
const CertsSent({Key? key, required this.address}) : super(key: key);
final String address;
@override
Widget build(BuildContext context) {
final screenHeight = MediaQuery.of(context).size.height;
final appBarHeight = AppBar().preferredSize.height;
log.d(appBarHeight);
final windowHeight = screenHeight - appBarHeight - 200;
final httpLink = HttpLink(
'$indexerEndpoint/v1/graphql',
);
final client = ValueNotifier(
GraphQLClient(
cache: GraphQLCache(store: HiveStore()),
link: httpLink,
),
);
return GraphQLProvider(
client: client,
child: Query(
options: QueryOptions(
document: gql(getCertsSent),
variables: <String, dynamic>{
'address': address,
},
),
builder: (QueryResult result, {fetchMore, refetch}) {
if (result.isLoading && result.data == null) {
return const Center(
child: CircularProgressIndicator(),
);
}
if (result.hasException || result.data == null) {
log.e('Error Indexer: ${result.exception}');
return Column(children: <Widget>[
const SizedBox(height: 50),
Text(
"noNetworkNoHistory".tr(),
textAlign: TextAlign.center,
style: const TextStyle(fontSize: 18),
)
]);
} else if (result.data?['certification']?.isEmpty) {
return Column(children: <Widget>[
const SizedBox(height: 50),
Text(
"noDataToDisplay".tr(),
style: const TextStyle(fontSize: 18),
)
]);
}
// Build history list
return SizedBox(
height: windowHeight,
child: ListView(
key: keyListTransactions,
children: <Widget>[certsView(result)],
),
);
},
),
);
}
Widget certsView(QueryResult result) {
List listCerts = [];
final List certsData = result.data!['certification'];
for (final cert in certsData) {
final String issuerAddress = cert['receiver']['pubkey'];
final String issuerName = cert['receiver']['name'];
final date = DateTime.parse(cert['created_at']);
final dp = DateTime(date.year, date.month, date.day);
final dateForm = '${dp.day}-${dp.month}-${dp.year}';
listCerts.add(
{'address': issuerAddress, 'name': issuerName, 'date': dateForm});
}
return result.data == null
? Column(children: <Widget>[
const SizedBox(height: 50),
Text(
"noTransactionToDisplay".tr(),
style: const TextStyle(fontSize: 18),
)
])
: Column(children: <Widget>[
CertTile(listCerts: listCerts),
]);
}
}

View File

@ -0,0 +1,139 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:gecko/globals.dart';
import 'package:gecko/models/widgets_keys.dart';
import 'package:gecko/providers/cesium_plus.dart';
import 'package:gecko/providers/duniter_indexer.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/certifications.dart';
import 'package:gecko/screens/common_elements.dart';
import 'package:gecko/widgets/page_route_no_transition.dart';
import 'package:provider/provider.dart';
class HeaderProfile extends StatelessWidget {
const HeaderProfile({
Key? key,
required this.address,
required this.username,
}) : super(key: key);
final String address;
final String? username;
@override
Widget build(BuildContext context) {
const double avatarSize = 140;
final walletOptions =
Provider.of<WalletOptionsProvider>(context, listen: false);
final duniterIndexer = Provider.of<DuniterIndexer>(context, listen: false);
return Stack(children: <Widget>[
Consumer<SubstrateSdk>(builder: (context, sub, _) {
bool isAccountExist = balanceCache[address] != 0;
return Container(
height: 180,
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [
isAccountExist ? yellowC : Colors.grey[400]!,
isAccountExist ? const Color(0xFFE7811A) : Colors.grey[600]!,
],
),
));
}),
Padding(
padding: const EdgeInsets.only(left: 30, right: 40),
child: Row(children: <Widget>[
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Container(
height: 10,
color: yellowC, // Colors.grey[400],
),
Row(children: [
GestureDetector(
key: keyCopyAddress,
onTap: () {
Clipboard.setData(ClipboardData(text: address));
snackCopyKey(context);
},
child: Text(
getShortPubkey(address),
style: const TextStyle(
fontSize: 30,
fontWeight: FontWeight.w800,
),
),
),
]),
const SizedBox(height: 25),
balance(context, address, 22),
const SizedBox(height: 10),
InkWell(
onTap: () => duniterIndexer.walletNameIndexer[address] != null
? {
Navigator.push(
context,
PageNoTransit(builder: (context) {
return CertificationsScreen(
address: address,
username: duniterIndexer
.walletNameIndexer[address]!);
}),
),
}
: null,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
walletOptions.idtyStatus(context, address,
isOwner: false, color: Colors.black),
getCerts(context, address, 14)
],
),
),
// if (username == null &&
// g1WalletsBox.get(address)?.username != null)
// SizedBox(
// width: 230,
// child: Text(
// g1WalletsBox.get(address)?.username ?? '',
// style: const TextStyle(
// fontSize: 27,
// color: Color(0xff814C00),
// ),
// ),
// ),
// if (username != null)
// SizedBox(
// width: 230,
// child: Text(
// username,
// style: const TextStyle(
// fontSize: 27,
// color: Color(0xff814C00),
// ),
// ),
// ),
const SizedBox(height: 55),
]),
const Spacer(),
Column(children: <Widget>[
ClipOval(
child: defaultAvatar(avatarSize),
),
const SizedBox(height: 25),
]),
]),
),
CommonElements().offlineInfo(context),
]);
}
}

View File

@ -0,0 +1,8 @@
import 'package:flutter/material.dart';
class PageNoTransit extends MaterialPageRoute {
PageNoTransit({builder}) : super(builder: builder);
@override
Duration get transitionDuration => const Duration(milliseconds: 0);
}

View File

@ -8,6 +8,13 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "50.0.0" version: "50.0.0"
accordion:
dependency: "direct main"
description:
name: accordion
url: "https://pub.dartlang.org"
source: hosted
version: "2.5.1"
analyzer: analyzer:
dependency: transitive dependency: transitive
description: description:
@ -273,7 +280,7 @@ packages:
name: dart_code_metrics name: dart_code_metrics
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "5.0.1" version: "5.1.0"
dart_style: dart_style:
dependency: transitive dependency: transitive
description: description:
@ -331,7 +338,7 @@ packages:
source: hosted source: hosted
version: "1.3.1" version: "1.3.1"
fast_base58: fast_base58:
dependency: transitive dependency: "direct main"
description: description:
name: fast_base58 name: fast_base58
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
@ -422,6 +429,13 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.7" version: "2.0.7"
flutter_svg:
dependency: "direct main"
description:
name: flutter_svg
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.6"
flutter_test: flutter_test:
dependency: "direct dev" dependency: "direct dev"
description: flutter description: flutter
@ -515,7 +529,7 @@ packages:
source: hosted source: hosted
version: "0.2.2+1" version: "0.2.2+1"
graphql: graphql:
dependency: transitive dependency: "direct main"
description: description:
name: graphql name: graphql
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
@ -777,7 +791,7 @@ packages:
name: mime name: mime
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.2" version: "1.0.3"
mobx: mobx:
dependency: transitive dependency: transitive
description: description:
@ -834,6 +848,13 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.8.2" version: "1.8.2"
path_drawing:
dependency: transitive
description:
name: path_drawing
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.1"
path_parsing: path_parsing:
dependency: transitive dependency: transitive
description: description:
@ -954,7 +975,7 @@ packages:
source: hosted source: hosted
version: "7.4.0" version: "7.4.0"
pinenacl: pinenacl:
dependency: transitive dependency: "direct main"
description: description:
name: pinenacl name: pinenacl
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
@ -1076,20 +1097,27 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.27.7" version: "0.27.7"
scroll_to_index:
dependency: transitive
description:
name: scroll_to_index
url: "https://pub.dartlang.org"
source: hosted
version: "3.0.1"
sentry: sentry:
dependency: transitive dependency: transitive
description: description:
name: sentry name: sentry
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "6.16.1" version: "6.17.0"
sentry_flutter: sentry_flutter:
dependency: "direct main" dependency: "direct main"
description: description:
name: sentry_flutter name: sentry_flutter
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "6.16.1" version: "6.17.0"
shared_preferences: shared_preferences:
dependency: "direct main" dependency: "direct main"
description: description:

View File

@ -5,7 +5,7 @@ description: Pay with G1.
# pub.dev using `pub publish`. This is preferred for private packages. # pub.dev using `pub publish`. This is preferred for private packages.
publish_to: 'none' # Remove this line if you wish to publish to pub.dev publish_to: 'none' # Remove this line if you wish to publish to pub.dev
version: 0.0.12+33 version: 0.0.12+37
environment: environment:
sdk: '>=2.12.0 <3.0.0' sdk: '>=2.12.0 <3.0.0'
@ -18,7 +18,7 @@ dependencies:
bubble: ^1.2.1 bubble: ^1.2.1
carousel_slider: ^4.0.0 carousel_slider: ^4.0.0
flutter_lints: ^2.0.1 flutter_lints: ^2.0.1
graphql_flutter: ^5.1.1-beta.3 graphql_flutter: ^5.1.1-beta.4
hive_flutter: ^1.1.0 hive_flutter: ^1.1.0
image_picker: ^0.8.4 image_picker: ^0.8.4
jdenticon_dart: ^2.0.0 jdenticon_dart: ^2.0.0
@ -57,6 +57,11 @@ dependencies:
pointycastle: ^3.6.1 pointycastle: ^3.6.1
hex: ^0.2.0 hex: ^0.2.0
flutter_dotenv: ^5.0.2 flutter_dotenv: ^5.0.2
accordion: ^2.5.1
flutter_svg: ^1.1.6
pinenacl: ^0.3.3
fast_base58: ^0.2.1
graphql: ^5.1.1
dev_dependencies: dev_dependencies:
# flutter_launcher_icons: ^0.9.2 # flutter_launcher_icons: ^0.9.2