我在屏幕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。
1条答案
按热度按时间jc3wubiy1#
首先,您应该在
numMensajesForoEsp16Vistos
函数中使用notifyListeners();
。您可以在WillPopScope中调用Provider.of<ForoProvider>(context).numMensajesForoEsp16Vistos
函数来更新Text Widget。并且您可以使用Consumer代替