Flutter 颤振:如何创建一个常量/最终数组,以便使用switch语句中的值?

Flutter 颤振:如何创建一个常量/最终数组,以便使用switch语句中的值?,flutter,dart,Flutter,Dart,我有这个: final categories = ["First", "Second"]; 然后我想这样使用它: modify(String category) { switch (category): case categories[0]: ... break; case categories[1]: ... break; default: ... break } 但是大小写表达式必须是常量。 如何初始化常量数组?在Dar

我有这个:

final categories = ["First", "Second"];
然后我想这样使用它:

modify(String category) {
  switch (category):
    case categories[0]: ... break;
    case categories[1]: ... break;
    default: ... break
}
但是大小写表达式必须是常量。


如何初始化常量数组?在Dart中可能吗?

常见修复:

使表达式成为常量表达式,或将switch语句重写为if语句序列:

修改(字符串类别){
如果(类别==类别[0]){
// ...
}
}

<>代码>类别< /Cord>这里是List对象,不同于C、C++或java中的数组。方括号调用是java中
categories.get(index)
的缩写。
该函数基本上是常量,因此不可能在开关情况下使用,就像在java数组中一样。

您应该使用enum

enum Category {
  category1,
  category2,
  category3

}
void modify(Category category) {
  switch (category) {
    case Category.category1:
      break;    
    case Category.category2:
      break;    
    case Category.category3:
      break;    
  }
}


是的,很好的复制粘贴。如何使表达式成为常量表达式?将final替换为
const
keyword@p2kr正如我在对问题的评论中提到的,这不会有任何帮助。stacktrace2234所寻找的是不可能的,因为类别[0]类似于调用categories.getAt(0)这样的函数。而且,该函数在运行时评估时基本上不是常量。这是大多数开关柜的局限性languages@GrahamD这不会有帮助,因为@stacktrace2234正如上面引用的问题中所解释的,不能将
List
元素用作常量。您需要使用
if
语句。根据您的案例主体正在做什么,也许您可以使用
Map
,尽管这可能不值得麻烦。