Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Class 如何强制Dart/Flatter重用具有相同属性的同一类_Class_Memory_Flutter_Dart_Garbage Collection - Fatal编程技术网

Class 如何强制Dart/Flatter重用具有相同属性的同一类

Class 如何强制Dart/Flatter重用具有相同属性的同一类,class,memory,flutter,dart,garbage-collection,Class,Memory,Flutter,Dart,Garbage Collection,我的问题很简单,我的飞镖课也是这样的 import 'package:equatable/equatable.dart'; import 'package:meta/meta.dart'; class Weather extends Equatable { final String cityName; final double tempCelsius; final double tempFahrneit; const Weather({ @required this.

我的问题很简单,我的飞镖课也是这样的

import 'package:equatable/equatable.dart';
import 'package:meta/meta.dart';

class Weather extends Equatable {
  final String cityName;
  final double tempCelsius;
  final double tempFahrneit;

  const Weather({
    @required this.cityName,
    @required this.tempCelsius,
    this.tempFahrneit,
  });

  @override
  List<Object> get props => [
        cityName,
        tempCelsius,
        tempFahrneit,
      ];
  @override
  String toString() {
    return [
      cityName,
      tempCelsius,
      tempFahrneit,
    ].toString();
  }
}
import'包:equalable/equalable.dart';
导入“package:meta/meta.dart”;
类天气延伸平缓{
最后一个字符串cityName;
最终双温摄氏度;
最后的双tempfahneit;
恒定天气({
@需要此.cityName,
@需要这个。摄氏度,
这个,这个,
});
@凌驾
列表获取道具=>[
城市名称,
摄氏温度,
坦普法尼特,
];
@凌驾
字符串toString(){
返回[
城市名称,
摄氏温度,
坦普法尼特,
].toString();
}
}
我使用Equatable来简化对象比较,我还在类构造函数上使用了
const
关键字(不确定这一点,我在类构造函数上使用它时听到过,如果Dart在实例化之前具有相同属性的同一类,它会使Dart首先看起来)

当我在DevTools上查找时,调用一个函数时总是会得到多个类实例,尽管它的参数总是相同的,而垃圾收集器会在我弹出/销毁视图(Flutter上下文中的Scaffold)时保持它为事件


现在,我只是用一个小类来测试它,但是如果它是一个大类,这将是一个混乱,尽管我认为在这种情况下垃圾收集器肯定会处理未使用的类,但是我想知道我是否可以用一些Dart/FLART方法来解决这个“问题”。

如果您使用
const Weather(…)
您不应该再看到多个实例

监视垃圾收集器通常不是一个好主意,您可以相信,当GC算法到达它时,它会破坏您的对象


Dart的垃圾收集器经过优化,可以创建许多小对象并将它们一起扔掉。所以你可能根本不用担心这个

当我在某处使用带有文件名的导入,在其他地方使用带有包的导入时,我有明显的重复类。甚至是两份静力学。你确定要在构造时使用const吗?比如:
var weather=const weather(…)
Yeah就是这样,要做到这一点,参数也必须是const,但在收集数据时在运行时动态传递。在我的例子中,问题是构造函数的参数在运行时动态传递,因此,我不能使用这个表达式。那么,对于类的多个实例化,必须有多个对象。如果您真的想共享对象,您可以编写一个重用对象的工厂方法:谢谢!工厂确实是解决这个问题的办法。