Flutter 如何在泛型Dart方法中对泛型类型T实施约束? 我想要达到的目标

Flutter 如何在泛型Dart方法中对泛型类型T实施约束? 我想要达到的目标,flutter,generics,dart,Flutter,Generics,Dart,我试图创建一个泛型Dart方法,该方法采用泛型类型T,其中T必须实现类IModel。但是, 问题 似乎我无法在类型t上设置实现约束,只有扩展了。例如{}; 伊莫代尔克隆(){ 返回IModel(); } } WorkControlPlanModel.dart,一个实现IModel的示例: import 'dart:core'; import 'package:knowe_personnelledger_mobile/helpers/DateTimeHelper.dart'; import 'p

我试图创建一个泛型Dart方法,该方法采用泛型类型T,其中T必须实现类IModel。但是,

问题 似乎我无法在类型t上设置
实现
约束,只有
扩展了
。例如
{};
伊莫代尔克隆(){
返回IModel();
}
}
WorkControlPlanModel.dart,一个实现IModel的示例:

import 'dart:core';
import 'package:knowe_personnelledger_mobile/helpers/DateTimeHelper.dart';
import 'package:knowe_personnelledger_mobile/helpers/StringHelper.dart';
import 'package:knowe_personnelledger_mobile/models/IModel.dart';

class WorkControlPlanModel implements IModel {
  String id;
  String name;
  String companyId;
  String projectId;
  String description;
  DateTime created;
  DateTime updated;

  WorkControlPlanModel({this.id, this.name, this.description, this.created, this.updated, this.companyId, this.projectId});

  factory WorkControlPlanModel.fromJson(Map<String, dynamic> json) {
    return WorkControlPlanModel(id: json["id"], name: json["name"], created: DateTime.parse(json["created"]), updated: DateTime.parse(json["updated"]), description: json["description"], companyId: json["companyId"], projectId: json["projectId"]);
  }

  Map<String, dynamic> toJson() => {
        "Id": id,
        "Name": name,
        "Description": description,
        "CompanyId": companyId,
        "ProjectId": projectId,
        "Created": created.toIso8601String(),
        "Updated": updated.toIso8601String()
      };

  WorkControlPlanModel clone() {
    return new WorkControlPlanModel(id: StringHelper.clone(id), companyId: StringHelper.clone(companyId), created: DateTimeHelper.clone(created), updated: DateTimeHelper.clone(updated), name: StringHelper.clone(name), projectId: StringHelper.clone(projectId), description: StringHelper.clone(description));
  }
}

导入“dart:core”;
导入“包:knowe_personelledger_mobile/helpers/DateTimeHelper.dart”;
导入“package:knowe_PersonnelEdge_mobile/helpers/StringHelper.dart”;
导入“包:knowe_personneledger_mobile/models/IModel.dart”;
类WorkControlPlanModel实现IModel{
字符串id;
字符串名;
字符串公司ID;
弦投影;
字符串描述;
创建日期时间;
更新日期时间;
WorkControlPlanModel({this.id,this.name,this.description,this.created,this.updated,this.companyId,this.projectId});
factory WorkControlPlanModel.fromJson(映射json){
返回WorkControlPlanModel(id:json[“id”]、name:json[“name”]、created:DateTime.parse(json[“created”]、updated:DateTime.parse(json[“updated”]、description:json[“description”]、companyId:json[“companyId”]、projectId:json[“projectId”]);
}
映射到JSON()=>{
“Id”:Id,
“姓名”:姓名,
“描述”:描述,
“公司ID”:公司ID,
“projectd”:projectd,
“已创建”:已创建.toiso8601字符串(),
“更新”:Updated.toiso8601字符串()
};
WorkControlPlanModel克隆(){
返回新的WorkControlPlanModel(id:StringHelper.clone(id),companyId:StringHelper.clone(companyId),created:DateTimeHelper.clone(created),Update:DateTimeHelper.clone(Update),name:StringHelper.clone(name),projectId:StringHelper.clone(projectId),description:StringHelper.clone(description));
}
}
ModelHelper.dart与泛型方法:

import 'dart:convert';

import 'package:knowe_personnelledger_mobile/models/IModel.dart';

// 'T implements IModel' not working, but 'T extends IModel' does as constraint.
abstract class ModelHelper {
  static List<T> listFromJson<T implements IModel>(String json) {
    List l = jsonDecode(json)["data"];
    var models = l.map((m) => T.fromJson(m)).toList();
    return models;
  }
}

导入'dart:convert';
导入“包:knowe_personneledger_mobile/models/IModel.dart”;
//“T实现IModel”不起作用,但“T扩展IModel”作为约束起作用。
抽象类ModelHelper{
静态列表listFromJson(字符串json){
列表l=jsonDecode(json)[“数据”];
var models=l.map((m)=>T.fromJson(m)).toList();
收益模型;
}
}
补充问题/结论 Dart中是否不支持
实施
约束?所有T类都必须扩展IModel吗

问题 似乎我不能在类型t上设置implements约束,只有一个扩展。例如 问题 似乎我不能在类型t上设置implements约束,只有一个扩展。例如
import 'dart:convert';

import 'package:knowe_personnelledger_mobile/models/IModel.dart';

// 'T implements IModel' not working, but 'T extends IModel' does as constraint.
abstract class ModelHelper {
  static List<T> listFromJson<T implements IModel>(String json) {
    List l = jsonDecode(json)["data"];
    var models = l.map((m) => T.fromJson(m)).toList();
    return models;
  }
}