昨天我发布了一个问题,这是尚未解决。
这是该小部件的屏幕截图
值0 / 5为
provider.numMensajesForoEsp16Vistos = 0
provider.numMensajesForoEsp16 = 5
右下角是小部件的代码
child: Row(mainAxisAlignment: MainAxisAlignment.center,
children: [
Text("${provider.numMensajesForoEsp16Vistos} / ${provider.numMensajesForoEsp16}",
style: TextStyle(fontSize: 16, color: hexStringToColor( especialidad .color_especialidad))),
Padding(
padding: const EdgeInsets.all(8.0),child: Visibility(
visible: provider.numMensajesForoEsp16 >
provider.numMensajesForoEsp16Vistos,
child: Row( mainAxisAlignment: MainAxisAlignment.end,
children: [Container(width: 15, height: 15,
decoration: BoxDecoration(
color: Colors.red, shape: BoxShape .circle), ), ], )
当点击卡,这里你有代码:
if (_esEsp) {
print("nume mensajes descargados ${provider.numMensajesForoEsp16}");
provider.cambiarNumeroMensajesForo16espVistos(provider.numMensajesForoEsp16);
}
if (!_esEsp) {provider.cambiarNumeroMensajesForo16engVistos(provider.numMensajesForoEng16);
}
该代码应将cambiarNumeroMensajesForo 16 espVistos更新为5,如打印输出中所示:
flutter: nume mensajes descargados 5
单击卡片后,应用程序将打开另一个屏幕,如果您单击返回上一个屏幕,微件将更新为新值
但只持续了几秒钟,然后它又回到了
下面是提供程序文件:
class ForoProvider extends ChangeNotifier {
//VARIABLES
int numMensajesForoEsp16 = 0;
int numMensajesForoEng16 = 0;
int numMensajesForoEsp16Vistos = 0;
int numMensajesForoEng16Vistos = 0;
void cambiarNumeroMensajesForo16esp (int s){
numMensajesForoEsp16 = s;
notifyListeners();
}
void cambiarNumeroMensajesForo16eng (int s){
numMensajesForoEng16 = s;
notifyListeners();
}
//vistos
void cambiarNumeroMensajesForo16espVistos (int s){
numMensajesForoEsp16Vistos = s;
notifyListeners();
}
void cambiarNumeroMensajesForo16engVistos(int s){
numMensajesForoEng16Vistos = s;
notifyListeners();
}
在这里,您必须选择包含消费者的顶部小部件
Expanded(
child: RefreshIndicator(
onRefresh: refresh,
child: Consumer<ForoProvider>(
builder: (context, provider, child) {
return Column(
我不知道什么是错误的或缺少的,以便永久更新的值
provider.numMensajesForoEsp16Vistos
2条答案
按热度按时间wdebmtf21#
在我看来(没有访问完整代码):
1 -值重置:你可能在生成第一张卡片的小部件中创建了你的提供者。2这样,当你返回到它的时候,值会被重置。
2 -值不更新:要使小部件在提供程序通知时更新,它必须侦听提供程序(context.watch、context.select或使用AnimatedContainer侦听)。或者,您可以在调用提供程序后使用setState。
像这样测试某事:
eufgjt7s2#
我认为当ForoProvider()示例创建或调用时,您的变量正在重新初始化。
尝试初始化类上面的变量,如。