Skip to main content

prefer-iterable-of

added in: 1.6.0
🛠
preset: recommended

Warns when List.from() factory is used instead of List.of().

The difference between List.of() and List.from() is that .of() takes an argument of the same type as what it returns and enforces it at compilation time, and that .from() allows potentially unsafe downcasting and enforces convertibility at runtime.

Additional resources:

Example

❌ Bad:

...
var intList = [1, 2, 3];

var copy = List<int>.from(intList); // LINT
var numList = List<num>.from(intList); // LINT

var unspecifiedList = List.from(intList); // LINT

final recordsSet = <(num,)>{(1,), (2,), (3,)};
final recordSet = Set<(num,)>.from(recordsSet); // LINT
final extra = Set<(int, String)>.from(recordsSet); // LINT

✅ Good:

var intList = [1, 2, 3];

var copy = List<int>.of(intList);
var numList = List<num>.of(intList);
...

var numList = <num>[1, 2, 3];

var intList = List<int>.from(numList);

final recordsSet = <(num,)>{(1,), (2,), (3,)};
final record = Set<(int,)>.from(recordsSet);