Class 如何在Dart中注册零件工厂

Class 如何在Dart中注册零件工厂,class,dart,Class,Dart,我有很多图书馆的部分。但所有类型都相同(扩展部分) 第1部分:省道 part of cars; class Bmw extends Car { Bmw.Car() { } } part of cars; class Audi extends Car { Audi.Car() { } } 部分零件; 类Part1扩展了部分{/*…*/} add((varOfSomeClass){返回新的Part1(varOfSomeClass+1);}); 第2部分:省道 part

我有很多图书馆的部分。但所有类型都相同(扩展部分)

第1部分:省道

part of cars;

class Bmw extends Car {
  Bmw.Car() {

  }
}
part of cars;

class Audi extends Car {
  Audi.Car() {

  }
}
部分零件;
类Part1扩展了部分{/*…*/}
add((varOfSomeClass){返回新的Part1(varOfSomeClass+1);});
第2部分:省道

part of cars;

class Bmw extends Car {
  Bmw.Car() {

  }
}
part of cars;

class Audi extends Car {
  Audi.Car() {

  }
}
部分零件;
类Part2扩展了部分{/*…*/}
add((varOfSomeClass){返回新的Part2(varOfSomeClass-1);});
零件。省道

part of cars;

class Bmw extends Car {
  Bmw.Car() {

  }
}
part of cars;

class Audi extends Car {
  Audi.Car() {

  }
}
库部件;
第1部分:省道;
第二部分“第二部分飞镖”;
列出零件=新列表();
类部件{
getPart(int索引){
if(部件包含(索引)){
返回零件[索引](SomevarOfThis类);
}
}
}
输出:错误:意外标记“部件”

如何在不创建所有零件类的情况下获取所有包含的工厂

例如,我们需要做:

宝马飞镖

part of cars;

class Bmw extends Car {
  Bmw.Car() {

  }
}
part of cars;

class Audi extends Car {
  Audi.Car() {

  }
}
自动编程的一部分;
宝马级{
字符串颜色;
宝马(这个颜色);
}
列表。添加((颜色){
返回新宝马(颜色);
});
Lada.dart

part of cars;

class Bmw extends Car {
  Bmw.Car() {

  }
}
part of cars;

class Audi extends Car {
  Audi.Car() {

  }
}
自动编程的一部分;
拉达级{
列表颜色;
}
列表。添加((颜色){
var auto=新的Lada();
auto.color=hex2rgb(颜色);
自动返回;
});
自动省道

part of cars;

class Bmw extends Car {
  Bmw.Car() {

  }
}
part of cars;

class Audi extends Car {
  Audi.Car() {

  }
}
库自动;
汽车类{
getByIndex(int索引){
if(列表包含(索引)){
返回列表[索引](颜色);
}
返回null;
}
}

看起来您的问题在于您的代码在类或函数定义之外。如果我猜你想正确地做什么,你想让BMW.dart看起来像

自动编程的一部分;
宝马级{
字符串颜色;
宝马(这个颜色);
}
然后在
main()
方法中有如下代码

main(){
列表=[];
列表.添加((颜色)=>新宝马(颜色));
}

这将使上面的代码运行。不过,这可能不是构建程序的最佳方式。您可能需要更多地阅读Dart工厂构造函数。这是一个很好的起点。

我不知道您需要它做什么,但使用镜像如何:

main.dart 图书车

import 'dart:mirrors';

part 'bmw.dart';
part 'audi.dart';

abstract class Car {

}

void main() {
  List<Car> cars = new List<Car>();

  Map libraries = currentMirrorSystem().libraries;
  LibraryMirror mirror = libraries[libraries.keys.last];
  mirror.declarations.forEach((Symbol s, DeclarationMirror mirror) {
    if(mirror is ClassMirror) {
      if(!mirror.isAbstract && mirror.isAssignableTo(reflectType(Car))) {
        // new Symbol(mirror.reflectedType.toString()))
        cars.add(mirror.newInstance(#Car, []).reflectee);
      }
    }
  });

  print(cars);
}
奥迪飞镖

part of cars;

class Bmw extends Car {
  Bmw.Car() {

  }
}
part of cars;

class Audi extends Car {
  Audi.Car() {

  }
}

为了我的口味,你的代码中有很多“部分”。很难看出你真正想要完成什么。什么代码行产生错误?“list.add((color){”我需要一个代码结构,在其中我将能够创建一辆新车,而不更改main.dart和Auto.dart文件。只能添加新文件并将其作为“newCar.dart”的一部分包含在Auto.dart中?