Dart - круговая зависимость при инициализации статического поля

Я новичок в дротике и только что столкнулся с проблемой, которую еще не понимаю. Я написал этот класс:

class Currency {
    final String symbol;
    final String name;

    // constants for all available Currencies
    static const Currency EURO = const Currency._euro();
    static const Currency POUND = const Currency._pound();
    static const Currency DOLLAR = const Currency._dollar();

    // All available currencies as a list
    static const List<Currency> CURRENCIES = const [
        EURO,
        POUND,
        DOLLAR,
    ];

    // Default constructor
    Currency(this.symbol, this.name);

    // Named constructors
    const Currency._euro() : this('€', 'Euro');

    const Currency._pound() : this('£', 'British Pound');

    const Currency._dollar() : this('\$', 'US Dollar');

    // toString()
    @override
    String toString() => '$symbol ($name)';
}

При использовании этого класса, например, с оператором ниже, я получаю ошибку «Круговая зависимость при инициализации статического поля».

Currency currency = Currency.EURO;

Может ли кто-нибудь объяснить мне, что происходит?


person Kenneth Saey    schedule 28.02.2018    source источник
comment
Какую версию Dart вы используете? Это в DDC, dart2js, консольном приложении, Flutter?   -  person Günter Zöchbauer    schedule 28.02.2018
comment
Я использую Flutter (версия 0.1.5) с Dart (версия 2.0.0-dev.28.0.flutter-0b4f01f759).   -  person Kenneth Saey    schedule 28.02.2018


Ответы (1)


Я не могу воспроизвести вашу ошибку, но const отсутствовал перед конструктором, на который вы перенаправляете других

const Currency(this.symbol, this.name);
person Günter Zöchbauer    schedule 28.02.2018
comment
Это действительно решило проблему. Не могли бы вы объяснить мне, почему это так? - person Kenneth Saey; 28.02.2018
comment
const Currency._euro(); требует const, и это работает только с const конструкторами. Если вы перейдете к другому конструктору, который также должен быть const. Не уверен, что это то, о чем вы просили. - person Günter Zöchbauer; 28.02.2018
comment
Полагаю, я спрашиваю, почему пропуск этого const приведет к циклической зависимости. Может ли это быть связано с ленивой инициализацией констант? - person Kenneth Saey; 28.02.2018
comment
Может, не уверен, но мне не удалось воспроизвести вашу ошибку. Вероятно, потому что я использую более новую версию Dart (2.0.0-dev.24.0) - person Günter Zöchbauer; 28.02.2018