如何在我的 onPressed 中按顺序运行这些方法?

问题描述 投票:0回答:1

Hola soy principiante en Flutter es mi primera vez preguntando algo aqui.....Tengo un problema mi metodo existeregistro(); esta dentro de un onPressed y este se esta ejecutando despues de un print....

este es mi codigo

Lo unico que quiero es que se ejecute existeregistro(); termine y ya despues se ejecute el if(existe==true)...

onPressed:()异步{ 存在寄存器();

                   if(existe==true){
                   print(idexistente.toString()+"ya en update");// ESTE PRINT SE EJECUTA PRIMERO
                    await SQLHelper.updateItemPlantasEstimacion(
                        idexistente,
                        selecPar1,
                        plantas,
                        estado1,
                        altaint,
                        mediaint,
                        bajaint,
                        ramasint,
                        vari,
                        estimacion);
    
                    ScaffoldMessenger.of(context).showSnackBar(SnackBar(
                      backgroundColor: Colors.green,
                      duration: Duration(milliseconds: 2000),
                      content: Text(
                        "Planta " '$plantas ' +
                            "'" +
                            estado1 +
                            "'" " Actualizada",
                        style: TextStyle(fontSize: 18),
                      ),
                    ));}else{}
                }

void existeregistro() 异步{
final data2 = await SQLHelper.getExisteEstimacion(selecPar1,plantas,estimacion); print(selecPar1.toString()+" "+plantas.toString()+" "+estimacion.toString());// ESTE PRINT SE EJECUTA EN SEGUNDO

  _journals2 = data2;  
  if(_journals2.length==0){
    existe=false;
    listaInformacion =[];
    print("existefalse");    
  }else{
    existe=true;
    print("existetrue"); //SE EJECUTA EN TERCERO
    
    listaInformacion = data2.map((e) => e.toString()).toList();
    for (int i = 0; i < listaInformacion.length; i++) {
      listaInformacion[i] = listaInformacion[i].replaceAll(RegExp(r'id'), '');
      listaInformacion[i] = listaInformacion[i].replaceAll("{", "");
      listaInformacion[i] = listaInformacion[i].replaceAll("}", "");
      listaInformacion[i] = listaInformacion[i].replaceAll(": ", "");
    }
    idexistente= int.parse(listaInformacion[0]); 
    listaInformacion=[];      
  }

}

intente poner waits y muchas cosas y nada nose como solcionarlo porfavor ayudanme :c

flutter dart flutter-dependencies flutter-animation flutter-debug
1个回答
0
投票

只需在“existeregistro();”之前加上“await”在“onPressed()”方法中。

由于existeregistro()是异步的,所以需要时间给出输出。但是由于您没有在

await
中使用
onPressed
来“等待”,因此下一行将在它之后立即执行。

你已经正确地使用了

await
await SQLHelper.updateItemPlantasEstimacion( ... 
, 同样的事情。

ScaffoldMessenger.of(context).showSnackBar( ...
会等到
SQLHelper.updateItemPlantasEstimacion( ... 
被执行。

© www.soinside.com 2019 - 2024. All rights reserved.