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
Likevar hello=”“;var-world=“”;打印(hello.runtimeType==world.runtimeType)代码>
switch(test.runtimeType.toString()) {
case "List<String>":
print(true);
break;
default:
print(false);
}