飞镖匿名功能混乱

问题描述 投票:0回答:1

我想对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提供给函数。

function dart flutter
1个回答
0
投票

ListView的构造函数中,您传递的是一个函数,列表视图将保留该函数,可能是一个名为builderFunc的实例变量。在将来的某个时刻,列表视图将被告知要构建,它将需要构建其子项。通过这样调用builderFunc来做到这一点:

Widget jthChild = builderFunc(ctx, j);

其中ctxj是调用者范围内的局部变量(ListView中的方法)。 builderFunc(您的匿名函数)将使用列表视图传递给它的构建上下文构造并返回jth小部件。列表视图将使用不同的j值多次调用您的函数。

© www.soinside.com 2019 - 2024. All rights reserved.