Dart匿名函数混淆

Dart anonymous function confusion

我想了解 Dart 中的匿名函数以及如何将其作为参数传递给其他函数。

下面演示的例子来自flutter.dev的Write your first app

Widget _buildSuggestions() {
  return ListView.builder(
      padding: const EdgeInsets.all(16.0),
      itemBuilder:  (context, i) {
        if (i.isOdd) return Divider(); 

        final index = i ~/ 2; 
        if (index >= _suggestions.length) {
          _suggestions.addAll(generateWordPairs().take(10)); 
        }
        return _buildRow(_suggestions[index]);
      });
}

这里的匿名函数是itemBuilder。它的类型是 {(BuildContext, int) → Widget itemBuilder}.

如果它的类型是 {() → Widget itemBuilder} 我可以理解在运行时将执行函数的主体。但是现在有了参数,我不知道如何将 BuildContextint 提供给函数。

ListView 的构造函数中,您正在传递一个函数,列表视图将保留该函数,可能作为某个名为 builderFunc 的实例变量。在未来的某个时候,列表视图将被告知构建它需要构建它的子视图。它将通过调用 builderFunc 来完成此操作:

Widget jthChild = builderFunc(ctx, j);

其中 ctxj 是调用者范围内的局部变量(ListView 中的方法)。 builderFunc(您的匿名函数)将构造 return 第 j 个小部件,使用列表视图传递给它的构建上下文。列表视图将使用 j.

的不同值多次调用您的函数