flutter 提供程序未永久更新值

ltskdhd1  于 2023-03-19  发布在  Flutter
关注(0)|答案(2)|浏览(174)

昨天我发布了一个问题,这是尚未解决。
这是该小部件的屏幕截图

值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
wdebmtf2

wdebmtf21#

在我看来(没有访问完整代码):
1 -值重置:你可能在生成第一张卡片的小部件中创建了你的提供者。2这样,当你返回到它的时候,值会被重置。
2 -值不更新:要使小部件在提供程序通知时更新,它必须侦听提供程序(context.watch、context.select或使用AnimatedContainer侦听)。或者,您可以在调用提供程序后使用setState。
像这样测试某事:

// main_app.dart (or up in your widget tree):

@override
Widget build(BuildContext context) {
  return ChangeNotifierProvider<ForoProvider>(
      create: (_) => ForoProvider(),
      child: const AppHome(),
    );

// app_home.dart
@override
Widget build(BuildContext context) {
  // Watch can be used either in stateless or statefull widgets
  // This lane will make sure to rebuild the widget every time a 
  // notifyListeners is sent.
  final foroProvider = context.watch<ForoProvider>();
eufgjt7s

eufgjt7s2#

我认为当ForoProvider()示例创建或调用时,您的变量正在重新初始化

class ForoProvider extends ChangeNotifier {

//VARIABLES  
int numMensajesForoEsp16 = 0;
int numMensajesForoEng16 = 0; 
int numMensajesForoEsp16Vistos = 0;
int numMensajesForoEng16Vistos = 0;

void cambiarNumeroMensajesForo16esp (int s){
  numMensajesForoEsp16 = s;
  notifyListeners();
}
. 
.
.
.
.
}

尝试初始化类上面的变量,如。

//VARIABLES  
int numMensajesForoEsp16 = 0;
int numMensajesForoEng16 = 0; 
int numMensajesForoEsp16Vistos = 0;
int numMensajesForoEng16Vistos = 0;

class ForoProvider extends ChangeNotifier {
...
}

相关问题