Dart:如何在没有警告的情况下声明符合typedef的顶级函数



我知道这个问题。它不是重复的,因为它没有提到typedefs

我有这个typedef:

typedef Prefetcher = Future<void> Function(
MarkdocNode node, PrefetchContext context);

现在,我正在尝试定义符合Prefetcher签名的顶级函数。

但是当我这样做的时候:

final Prefetcher prefetchTranslatedSentences = (node, context) async {};

我收到这个警告:

info:使用函数声明将函数绑定到名称。(在[anglo_mobile]lib/components/markdown/prefetchers/translated_sentence_prefetcher.dart:3上的prefer_function_declarations_over_variables(

我知道Dart希望我不要给变量分配函数,而是像一样直接创建函数

prefetchTranslatedSentences(node, context) async {}

但上述问题是不能保证prefetchTranslatedSentences将符合typedef

如何在不收到此警告的情况下创建符合typedefs的顶级函数?

我不认为你可以直接定义一个函数,并保证它符合typedef。然而,如果您的函数实现不匹配,您可能会很快从其他地方的编译错误中发现。如果你不这样做,那么你可以调整你的代码,以确保它确实会产生这样的错误:

  • 添加一个测试,尝试将您的函数与typedef一起使用。如果typedef和您的函数是某些公共API的一部分,那么您可能无论如何都应该对它们进行测试。至少:

    void main() {
    Prefetcher _ = prefetchTranslatedSentences;
    }
    
  • 添加间接级别:

    Future<void> _prefetchTranslatedSentences(
    MarkdocNode node,
    PrefetchContext context,
    ) async {
    // ...
    }
    final Prefetcher prefetchTranslatedSentences = _prefetchTranslatedSentences;
    
  • 或者用// ignore: prefer_function_declarations_over_variables忽略皮棉。

最新更新