Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振:从类型或字符串创建对象_Flutter_Dart - Fatal编程技术网

Flutter 颤振:从类型或字符串创建对象

Flutter 颤振:从类型或字符串创建对象,flutter,dart,Flutter,Dart,我想从类型中定义的对象类型或从字符串中定义的对象名称创建对象。以下示例使用字符串保存对象类型。但我认为这并不是那么优雅-即使使用类型,对于许多对象类型,该if块也会显著增加 我还没有找到更好的解决办法。如何从指定的对象类型动态创建该对象 if(模型=='Event'){ 数据=事件.fromMap(结果); } else if(模型=‘内容’){ 数据=Content.fromMap(结果); } 否则如果(…){ // ... } 这是另一种方法 类事件{ Event.fromMap(_-ma

我想从类型中定义的对象类型或从字符串中定义的对象名称创建对象。以下示例使用字符串保存对象类型。但我认为这并不是那么优雅-即使使用类型,对于许多对象类型,该if块也会显著增加

我还没有找到更好的解决办法。如何从指定的对象类型动态创建该对象

if(模型=='Event'){
数据=事件.fromMap(结果);
}
else if(模型=‘内容’){
数据=Content.fromMap(结果);
}
否则如果(…){
// ...
}

这是另一种方法

类事件{
Event.fromMap(_-map){
打印(“这是一个事件”);
打印(地图);
}
}
课堂内容{
Content.fromMap(_map){
打印(“这是一个内容”);
打印(地图);
}
}
地图类型={
'Event':(_-map)=>Event.fromMap(_-map),
'Content':(_-map)=>Content.fromMap(_-map),
};
void main(){
var a=types['Event']({'test':'success_Event'});
打印(a.runtimeType);
var b=类型['Content']({'test':'success_Content'});
打印(b.运行时类型);
}
它的可伸缩性更强一些(因为只依赖于将类构造函数添加到映射中)

解释如下:

类事件{
Event.fromMap(_-map){
打印(“这是一个事件”);
打印(地图);
}
}
课堂内容{
Content.fromMap(_map){
打印(“这是一个内容”);
打印(地图);
}
}
这里我们创建测试类。没什么重要的

映射类型={
'Event':(_-map)=>Event.fromMap(_-map),
'Content':(_-map)=>Content.fromMap(_-map),
};
这里我们定义了一个
映射
。为什么?因为它允许我们在恒定的时间内通过某个键访问某个值。在本例中,键是字符串“Event”、“Content”,但也可以是您想要的类型。为了简单起见,让它们成为字符串。这些值是
函数
,在本例中仅作为参数a
\u map
(因为本例中的类构造函数需要一个参数
\u map
)。因此,如果需要更多类型,只需添加类型和封装该类型构造函数的函数

void main(){
var a=types['Event']({'test':'success_Event'});
打印(a.runtimeType);
var b=类型['Content']({'test':'success_Content'});
打印(b.运行时类型);
}
最后,您可以轻松地实例化这些类。仅使用类型字符串并将所需的值传递给函数(在本例中为带有键“test”的映射)

在您的示例中,类似于:

data=类型[模型](结果);

您不能,但可以在函数中使用switch语句压缩代码。每个
案例
只包含一个
返回值
。好的,谢谢您的回答。这并不理想,但至少对我上面的代码进行了一点优化…谢谢你的回答。这可能是一个我可以接受的解决方案。