На практике существует небольшая разница между конструктором factory и методом c stati.
Для класса generi c он изменяется там, где вы можете (и должны) напишите параметр типа:
class Box<T> {
T value;
Box._(this.value);
factory Box.withValue(this.value) => Box<T>._(value);
static Box<T> fromValue<T>(T value) => Box<T>._(value);
}
...
var box1 = Box<int>.withValue(1);
var box2 = Box.fromValue<int>(2);
Итак, для общих классов c конструкторы фабрики часто являются тем, что вам нужно. У них самый приятный синтаксис.
Для классов, не являющихся общими c, разница очень небольшая, поэтому в основном речь идет о намерении сигнализации. И решая, в какую категорию входит имя в DartDo c.
Если основная цель функции - создать новый объект, сделайте его конструктором.
Если основная цель заключается в том, чтобы выполнить некоторые вычисления и в конечном итоге вернуть объект (даже если это новый объект), сделать его функцией stati c. Вот почему методы parse
обычно являются статическими c функциями.
Короче говоря, делайте то, что кажется правильным для вашего API.