Существует ли правило Dart Linter для принудительного возврата параметров типа и метода для полей?

#dart

#dart

Вопрос:

Я хотел бы убедиться, что этот код не может существовать в кодовой базе: final Function onPress вместо этого он должен быть final void Function() onPress

В настоящее время у меня есть следующие правила, и, похоже, я не могу найти правило для получения этого:

 analyzer:
  exclude:
      - lib/**/*.g.dart
  strong-mode:
    implicit-casts: false
    implicit-dynamic: false
    
linter:
  rules:
    always-specify-types: true
    always_declare_return_types: true
  

Комментарии:

1. Я не верю, что оно существует. Хотя лично я бы тоже отказался от этого соглашения в пользу typedefs . (У этого, в частности, есть существующий typedef в вызываемой платформе Flutter VoidCallback .)

2. Спасибо. Я считаю, что определения типов обычно просто препятствуют удобочитаемости, но мы используем существующие, когда они понятны, например, VoidCallback .

3. Я думаю, что определение переменной с помощью typedef намного более читабельно, чем, например final Future<Map<String, U>> Function<T, U>(List<List<T>>, int, int, bool) listConfigurator;

4. Я тоже, так что я, вероятно, использовал бы его в этом случае. С другой стороны, typedef для bool Function() or void Function(bool) кажется почти полностью бессмысленным и просто добавляет связывание / шаблон без всякой причины. И эти типы простых обработчиков, как правило, составляют около 95% от того, что я определяю, когда это не VoidCallback.

5. Вы используете описательный typedef по той же причине, по которой вы используете описательное имя для переменной: оно дает четкое описание того, для чего будет использоваться функция, вместо общей подписи функции. И я бы вряд ли назвал одну строку кода, которая в основном состоит из сигнатуры функции, которую вам все равно нужно вводить, чрезмерным количеством шаблонов, на самом деле я бы сказал, что более шаблонно вводить подпись вручную каждый раз. (И typedefs — это просто сопоставители для сигнатур функций, а не типы сами по себе, поэтому я бы тоже не назвал это связью.)