AnswerBun.com

¿Como almacenar un Future en una variable? Dart

Stack Overflow en español Asked by xelo candia on December 12, 2020

Tengo una consulta sobre algo que no puedo solucionar.
Tengo un método que me genera una ID de producto, luego de hacer una query en firestore (el método lo muestro a continuación)

_obtenerCodProd(tipo) async {

    final QuerySnapshot snapshot = await Firestore.instance
        .collection('productos')
        .where("tipo", isEqualTo: tipo.toString())
        .getDocuments();

    String idLetra;

    if (tipo == "Snack") {
      idLetra = "SNK";
    }
    if (tipo == "Fruta") {
      idLetra = "FRU";
    }
    if (tipo == "Lácteo") {
      idLetra = "LAC";
    }
    if (tipo == "Líquido") {
      idLetra = "LIQ";
    }
    if (tipo == "Café") {
      idLetra = "CAF";
    }

    var cantidad_tipo = int.parse(snapshot.documents.length.toString());
    String idnumerico;
    int sumaID;
    sumaID = cantidad_tipo + 1;
    if (sumaID < 10) {
      idnumerico = "00$sumaID";
    }
    if (sumaID >= 10) {
      idnumerico = "0$sumaID";
    }
    if (sumaID >= 100) {
      idnumerico = "$sumaID";
    }
    print("cantidad_tipo: $cantidad_tipo");
    print("idnumerico: $idnumerico");

    return "Codigo de producto: $idLetra$idnumerico";
  }

Lo que me retorna ese metodo es un codigo de prducto.

Aquí se muestra con "Codigo de producto" lo que retorna el metodo

Pero cuando trato de almacenar ese return en una variable, y le hago un print, me dice que es un Future

// ALMACENAR ID PRODUCTO //
            var resultado = _obtenerCodProd(tipoSeleccionado);
            print(resultado);

Este es el future

Necesito almacenar ese Future que seria la id del producto, pero cuando lo almaceno y le hago un print me aparece que es un Future y no el valor que yo necesito en realidad.
Si hago un print directamente al metodo, tambien me muestra en pantalla que es un Future.
Pero aun así logre hacer que el print directamente al metodo me mostrara el varlo que quiero, pero no logro almacenarlo.
Por favor si pudieran ayudarme con eso, estaría muy agradecido
Muchas gracias de antemano

Gracias de antemano

2 Answers

El "snapshot" esta bien resuelto, porque retorna un Future y lo estás resolviendo en la misma variable anteponiendo "await". Ahora el problema puede estar en la variable "cantidad_tipo", al llamar "snapshot.documents", "documents" puede ser otro Future y no lo estás resolviendo. Finalmente cuando vayas a llamar a "_obtenerCodProd", que es un Future por "async", deberas resolverlo de la misma manera, si vas a implementar en la ui:

FutureBuilder<String>(
    future: _obtenerCodProd("Fruta"),
    builder: (context, snapshot) {
        // Logica...
    }
)

Answered by Feloo on December 12, 2020

Lo que te está retornando es un Future porque es una petición asíncrona, lo que debes hacer es esperar por el resultado usando await.

Es decir, lo que implícitamente te está retornando _obtenerCodProd ese método es :

Future<String> _obtenerCodProd.

Cómo obtienes el String? Usando async/await así :

tuMetodo() async {

var resultado = await _obtenerCodProd(tipoSeleccionado);
            print(resultado);

}

Ahora resultado será un String. Te recomiendo que revises FutureBuilder , StatefulWidget, StreamBuilder, son widgets que te podrían servir.

Answered by diegoveloper on December 12, 2020

Add your own answers!

Related Questions

problemas al mandar un arreglo del frontend al backen utilizando Jquery.Ajax

0  Asked on December 2, 2020 by johnatan-de-leon

     

¿como guardar en local storage de select?

1  Asked on December 1, 2020 by gabriel-lenzina

   

Creacion y division de datasets

1  Asked on November 30, 2020 by brigido

     

HTML – Imagen rota en navegador chrome

0  Asked on November 29, 2020 by javier-maldonado

     

RegEx con misma vocal al inico y al final de string

1  Asked on November 29, 2020 by g-4

   

Necesito subir una API Rest a un servidor web

3  Asked on November 29, 2020 by subte

     

Enviar email desde python

0  Asked on November 29, 2020 by martn

     

CENTRAR SPAN DENTRO DE SECTION

1  Asked on November 28, 2020 by minor

   

Cambiar idioma de frontend a español en Magento 2

1  Asked on November 28, 2020 by noty

     

Problemas con checkbox

1  Asked on November 27, 2020 by e-diaz

   

Ask a Question

Get help from others!

© 2022 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, MenuIva, UKBizDB, Menu Kuliner, Sharing RPP