List<T> vectorOf<T>(int length, T createObject()) =>
[for (var i = 0; i < length; i++) createObject()];
Если вы хотите создать объект, вы должны сказать, как его создать.
Типа недостаточно. может быть достаточно с dart:mirrors
, но только если тип действительно имеет конструктор. И это вообще тип класса, а не, скажем, тип функции или FutureOr<void>
или что-то еще, что вообще не может иметь конструктор.
Примером может быть:
var listOfStringLists = vectorOf(12, () => <String>[]);
Это создает список длиной 12, где каждый элемент является новым пустым списком строк.
Если вам нужно параметризовать фабричную функцию с помощью дополнительного параметра, то вам просто нужно передать его вручную:
List<T> vectorOf<T, O>(int length, O owner, T createObject(O owner)) =>
[for (var i = 0; i < length; i++) createObject(owner)];
Это передаст объект owner
в качестве параметра factory
каждый раз, когда он вызывается. Другой вариант:
List<T> vectorOf<T, O>(int length, O owner, T createObject(O owner)) =>
List<T>.generate(length, (_) => createObject(owner));
, где вы используете конструктор List.generate
, но игнорируете индекс, который он передает своей фабричной функции.