我正在尝试根据 Flutter 中的类型进行流量控制,我遇到了这个。这正常吗?
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;
}
输出:
Performing hot restart...
Syncing files to device iPhone SE...
Restarted application in 1,710ms.
flutter: false
flutter: false
flutter: false
Dart 版本:
Dart VM version: 2.7.2 (Mon Mar 23 22:11:27 2020 +0100) on "macos_x64"
最佳答案
您可以通过简单地使用 if 语句(如
)来检查列表的类型if (test is List<String>) {
}
如果您打印 print(test.runtimeType)
它会给你 List<String>
。您可以像这样使用runtimeType 的一种方法。
switch(test.runtimeType.toString()) {
case "List<String>":
print(true);
break;
default:
print(false);
}
我更喜欢第一个选项。你不知道toString
方法实现可以随时更改。
关于flutter - Dart 中通用 List 对象的运行时类型检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61146446/