Flutter Dart中泛型列表对象的运行时类型检查

Flutter Dart中泛型列表对象的运行时类型检查,flutter,dart,Flutter,Dart,我正在尝试基于颤振类型进行流量控制,我遇到了这个问题。这正常吗 List<Widget> getDetailDisplayWidget() { var retval = List<Widget>(); List<String> test = <String>["something"]; print(test.runtimeType is List); print(test.runtimeType is List<String

我正在尝试基于颤振类型进行流量控制,我遇到了这个问题。这正常吗

List<Widget> getDetailDisplayWidget() {
  var retval = List<Widget>();

  List<String> test = <String>["something"];
  print(test.runtimeType is List);
  print(test.runtimeType is List<String>);
  print(test.runtimeType == List);

  this._databaseModel.forEach((key, value) {
    switch (value.runtimeType) {
      case String:
        retval.add(SingleValueDetail(
            question: _questionModel[key]["question"],
            label: _questionModel[key]["label"],
            variable: _questionModel[key]["variable"],
            key: key));
        break;
      case Timestamp:
        retval.add(DateValueDetail(
            question: _questionModel[key]["question"],
            variable: _questionModel[key]["variable"],
            key: key));
        break;
      case List:
        retval.add(ListValueDetail(
            question: _questionModel[key]["question"],
            label: _questionModel[key]["label"],
            variable: _questionModel[key]["variable"],
            key: key));
        break;
      default:
        retval.add(ListValueDetail(
            question: _questionModel[key]["question"],
            label: _questionModel[key]["label"],
            variable: _questionModel[key]["variable"],
            key: key));
        //retval.add(Text("Unknown widget type"));
        break;
    }
  });
  return retval;
}
省道版本:

Dart虚拟机版本:2.7.2(Mon-Mar 23 22:11:27 2020+0100)在“macos_x64”上

只需使用if语句即可检查列表的类型,如

if (test is List<String>) {
}

我喜欢第一种选择。您不知道
toString
方法实现可以随时更改。

它不是
test。runtimeType是List
,但
test是List
。关于对类型使用switch语句,请阅读:感谢您的快速回复。您还应该正确地阅读为什么您几乎不应该使用
runtimeType
中的值。从现在起,我将避免使用它,但我好奇的是,当打印runtimeType时,会将列表作为输出。并根据泛型类型检查它,结果为false。为什么属性首先存在。当您打印
runtimeType
时,它实际上会给您
toString
方法实现输出。但当您调用
runtimeType
时,它返回的
Type
对象不等于List。但是您可以使用它来检查两个对象是否具有相同的
runtimeType
Like
var hello=”“;var-world=“”;打印(hello.runtimeType==world.runtimeType)
 switch(test.runtimeType.toString()) {
      case "List<String>":
        print(true);
        break;
      default:
        print(false);
    }