我知道这个问题。它不是重复的,因为它没有提到
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
忽略皮棉。