Flutter枚举,无法设置其他文件上的静态变量

gmol1639  于 2023-05-29  发布在  Flutter
关注(0)|答案(3)|浏览(137)

这里有两个文件:(简化a.dart和B.dart,A类和B类)
a.dart:

enum CalorieDensity { veryLow, low, medium, high, none }

class A extends StatefulWidget {
  const A({
    Key? key,
  }) : super(key: key);

  @override
  State<A> createState() => _AState();
}

class _AState extends State<A> {    
    
    static CalorieDensity calorieDensity = CalorieDensity.veryLow;
}

b.dart:

enum CalorieDensity { veryLow, low, medium, high, none }
    
class B extends StatefulWidget {
  const B({
    Key? key,
  }) : super(key: key);

  @override
  State<B> createState() => _BState();
}

class _BState extends State<B> {

   void aSimpleFunction(){

       A.calorieDensity = CalorieDensity.veryLow;
    
    }
}

我得到这个错误:

  • “CalorieDensity”类型的值(其中CalorieDensity在/Users/macbook/Projects/cookedcalories/lib/b.dart中定义)不能分配给“CalorieDensity”类型的变量(其中CalorieDensity在/Users/macbook/Projects/cookedcalories/lib/a.dart中定义)。尝试更改变量的类型,或将右侧类型强制转换为'CalorieDensity(其中CalorieDensity在/Users/macbook/Projects/cookedcalories/lib/a.dart中定义)'*

我没有任何其他静态变量的这种类型的问题。

t30tvxxf

t30tvxxf1#

我认为这是因为你定义了两次枚举CalorieDensity一次在a.dart文件中一次在b.dart文件中。

enum CalorieDensity { veryLow, low, medium, high, none }

如果你需要在其他地方使用CalorieDensity而不是创建一个新的,只需要写一次上面的行并导入该文件。

zzoitvuj

zzoitvuj2#

问题:

发生此错误的原因是您试图将一个文件中定义的枚举分配给另一个文件中定义的枚举类型的变量。
这两个枚举是不同的,即使它们具有相同的值。
所有枚举都会自动扩展Enum类,这意味着在定义Enum时会创建一个新的Enum对象。
您可以通过在两个文件中定义CalorieDensity枚举并比较它们是否相等来演示这一点。结果将是假的。
见下文:

// calorie_density_1.dart

enum CalorieDensity { veryLow, low, medium, high, none }
// calorie_density_2.dart

enum CalorieDensity { veryLow, low, medium, high, none }
// main.dart

import 'enum_1.dart' as calorieDensity1;
import 'enum_2.dart' as calorieDensity2;

void main() {
  print(calorieDensity1.CalorieDensity == calorieDensity2.CalorieDensity); // Returns false
}

解决方案:

解决方案是在一个文件中定义枚举,并将其导入到您想要使用它的任何地方。
这可确保您在应用的操作中使用相同的对象。

  • 我建议您在不同于屏幕文件的文件中定义它,因为您在多个屏幕中使用它。*
wqlqzqxt

wqlqzqxt3#

感谢Imtiaz Ayon(部分)解决。
从B文件中删除枚举是不够的(但这是方法)。我还需要将枚举重命名为CalorieDensityEnum。
我想是因为使用calorieDensity作为每个CalorieDensity枚举的变量时出错了(奇怪,Dart是一种区分大小写的语言)。

相关问题