Что ж, я понимаю, что ошибка может сбивать с толку, потому что синтаксис dart немного отличается от Java и других распространенных языков конструктора. Когда вы определяете конструктор в MyClass (т.е. MyClass(this.logic)
), вы сказали ожидать, что экземпляр класса Logic
будет передан в первой позиции.
Итак, исходя из вашего примера:
class Logic {
void myMethod(){}
// in dart, classes have an automatic zero-argument constructor
}
class MyClass extends StatefulWidget {
final Logic logic;
MyClass(this.logic);
// Random code that is unimportant to the question
}
Чтобы использовать его, вам нужно сделать что-то вроде этого:
void main() {
final logic = Logic();
final myClass = MyClass(logic);
// do whatever with myClass
}
Конструктор эквивалентен этому:
class MyClass extends StatefulWidget {
final Logic logic;
MyClass(Logic logic): logic = logic;
}
Немного фона, если вы использовали необязательный позиционный аргумент, для него не потребовалось бы logi c, а logi c по умолчанию будет иметь значение null:
class MyClass extends StatefulWidget {
final Logic logic;
MyClass([this.logic]);
}
void main() {
final myClass = MyClass();
}
И аналогично, если бы вы использовали именованный аргумент, он бы не это тоже не требуется, но если вы действительно хотите передать его, вам нужно будет указать имя:
class MyClass extends StatefulWidget {
final Logic logic;
MyClass({this.logic});
}
void main() {
final myClass = MyClass(logic: Logic());
}
Если у вас проблемы с dart-specifici c вещами, я d настоятельно рекомендую использовать java -to-dart codelab a go, поскольку он объясняет множество синтаксических c различий между традиционными языками, такими как java / c# и c ++, в некоторой степени (tbh dart позаимствовал немного у каждого).