当前位置: 首页 > 知识库问答 >
问题:

如何防止对象在每次调用时都被重新初始化?-飞镖/颤振

干善
2023-03-14

下面的代码片段:


class MainState extends State<Main>{

MusicMaterial musicObj = MusicMaterial();
SoundsMaterial soundObj = SoundsMaterial();

  @override
  Widget build(BuildContext context) {
    return Container(
          child: something.value == 0
              ? musicObj 
              : soundObj
        );
  }
}


class MusicMaterialState extends State<MusicMaterial>{
  @override
  Widget build(BuildContext context) {
    return Row(
          AnotherClass obj1 = AnotherClass(0, 'test'),  
          AnotherClass obj2 = AnotherClass(1, 'test'),
        );
  }
}


class AnotherClassState extends State<AnotherClass>{
import '../globals.dart' as globals;

@override
  void initState() {
    globals.globalCounter++;  // this variable is just a global variable from the globals.dart page
}

}

library my_prj.globals;

globalCounter = 0;

我尝试使用“automatickeepaliveClientMixin和@override bool get wantKeepAlive=>true”-即保持它活动,以便下次调用它时,它不会再次调用initState(),但是它没有工作。

共有1个答案

年高洁
2023-03-14

希望我能正确地理解你需要什么。似乎您希望每个类类型的计数器只增加一次。我肯定有不同的方法来完成它,但我想到了让globalcounter稍微复杂一点

class GlobalCounter {
  List<String> _keys = List<String>();
  int _counter = 0;

  int get counter => _counter;

  void increaseCounter(String key) {
    // increase only if the key passed as parameter didn't increase already
    if (!_keys.contains(key)) {
      _counter++;
      _keys.add(key);
    }
  }
}

globalCounter = GlobalCounter();

那你可以这样用

@override
void initState() {
    // pass the type of the instance trying to increase the counter
    globals.globalCounter.increaseCounter(this.runtimeType.toString()); 
}
 类似资料:
  • 我有一个关于android camerax架构的问题。我使用的是预览视图,效果非常好。问题与片段之间的事务有关。片段1具有previewView。当我切换到fragment2并返回fragment1时,我会再次绑定previewview,使它首先出现黑屏,然后预览显示在屏幕上。我不想看到黑屏。这个问题有什么解决办法吗?

  • 我现在正在尝试使用Flutter/Dart。但是当从另一个类访问时,我的静态变量不断被重新初始化。 我有一个类,在其单独的dart源文件中,保存服务器状态,声明为: 我初始化了它们 @ 由 .之后,当我尝试在应用程序的另一个页面上访问它们时,变量“”和“”都变为,就好像它们被重新初始化一样。(如果我像样声明它们,然后重新分配 在 处,它仍然会在应用程序的另一个页面上显示为 10。 我的应用程序在两

  • 问题内容: 当我运行以下代码时,两个测试用例都变为现实: 预期的行为 test1-成功 test2-失败(按预期该计数将变为3) 实际行为 test1-成功 test2-成功 为什么junit 与每个测试方法都调用。它是junit中的错误或有意提供。 问题答案: 每种测试方法的新实例 对于每种测试方法,将创建Junit的行为的 新实例。 因此,在您的情况下,这两种方法的变量都将具有value ,因

  • 我想在firebase中的post文档中引用类别文档。这是我的数据类,我还使用冻结和json_序列化程序: 当我运行build_runner时,出现以下错误: 所以尝试使用JsonConzer,但我不知道如何将json对象转换为Document参考...

  • 我一直在使用VSCode进行颤振开发,但没有问题。今天,飞镖分析器突然抱怨说,大多数类都是未定义的,或者目标不存在。 有人见过这个吗? 我已经重新启动了VSCode,重新启动了计算机,卸载了flutter/dart插件,运行flutter dr没有任何问题……我没有想法了。 VSCode问题

  • 如何让SongDetailsBottomsheetController释放并在每次打开BottomSheet时重新初始化 当按下按钮时,弹出BottomSheet,但关闭时不会打印"closing",当再次打开时,也不会重新调用OnInit()和OnReady(),每次传入的MediaItem都不同,但SongDetailsBottomsheetController中的MediaItem不变 调试