flutter 返回屏幕时,提供程序未更新变量

toe95027  于 2023-03-19  发布在  Flutter
关注(0)|答案(1)|浏览(148)

我在屏幕A上有以下onTap函数:

onTap: () async { 
  cambiarEspecialidadIdForo(especialidad.id_especialidad);
  cambiarEspecialidadIconoForo(especialidad.icono_especialidad);
  _esEsp ? cambiarEspecialidadNombreForo(especialidad.nombre_especialidad) : cambiarEspecialidadNombreForo(especialidad.nombre_especialidad_en);
  if(_esEsp){
    Provider.of<ForoProvider>(context,listen: false).cambiarNumeroMensajesForo16espVistos(Provider.of<ForoProvider>(context,listen: false).numMensajesForoEsp16); 
  }
       
  if(!_esEsp){ 
    Provider.of<ForoProvider>(context,listen: false).cambiarNumeroMensajesForo16engVistos(Provider.of<ForoProvider>(context,listen: false).numMensajesForoEng16);
  }
                
  Navigator.push(context, MaterialPageRoute(builder: (context) => MensajesForoScreen(especialidad: especialidad)));
},

在同一屏幕上,还有一个Text小部件:

Text("${Provider.of<ForoProvider>(context).numMensajesForoEsp16Vistos} / ${Provider.of<ForoProvider>(context).numMensajesForoEsp16}",    style:
                                                                TextStyle(fontSize: 16,color: hexStringToColor(especialidad.color_especialidad))),

Provider.of<ForoProvider>(context).numMensajesForoEsp16 is 5,
Provider.of<ForoProvider>(context).numMensajesForoEsp16Visto is 0 as default, but after onTap it changes to 5

执行onTap功能时,文本小工具中Provider.of<ForoProvider>(context).numMensajesForoEsp16Vistos的值变为5(正确,新文本为5/5,最初为0/5),然后显示屏面MensajesForoScreen,但随后再次返回屏面A时,Provider.of<ForoProvider>(context).numMensajesForoEsp16Vistos的值未更新,文本再次显示0/5。

jc3wubiy

jc3wubiy1#

首先,您应该在numMensajesForoEsp16Vistos函数中使用notifyListeners();。您可以在WillPopScope中调用Provider.of<ForoProvider>(context).numMensajesForoEsp16Vistos函数来更新Text Widget。并且您可以使用Consumer代替

Text("${Provider.of<ForoProvider>(context).numMensajesForoEsp16Vistos} / ${Provider.of<ForoProvider>(context).numMensajesForoEsp16}",    style:
                                                                TextStyle(fontSize: 16,color: hexStringToColor(especialidad.color_especialidad))),

相关问题