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}
我可以理解在运行时将执行函数的主体。但是现在有了参数,我不知道如何将 BuildContext
和 int
提供给函数。
在 ListView
的构造函数中,您正在传递一个函数,列表视图将保留该函数,可能作为某个名为 builderFunc
的实例变量。在未来的某个时候,列表视图将被告知构建它需要构建它的子视图。它将通过调用 builderFunc
来完成此操作:
Widget jthChild = builderFunc(ctx, j);
其中 ctx
和 j
是调用者范围内的局部变量(ListView
中的方法)。 builderFunc
(您的匿名函数)将构造 return 第 j
个小部件,使用列表视图传递给它的构建上下文。列表视图将使用 j
.
的不同值多次调用您的函数
我想了解 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}
我可以理解在运行时将执行函数的主体。但是现在有了参数,我不知道如何将 BuildContext
和 int
提供给函数。
在 ListView
的构造函数中,您正在传递一个函数,列表视图将保留该函数,可能作为某个名为 builderFunc
的实例变量。在未来的某个时候,列表视图将被告知构建它需要构建它的子视图。它将通过调用 builderFunc
来完成此操作:
Widget jthChild = builderFunc(ctx, j);
其中 ctx
和 j
是调用者范围内的局部变量(ListView
中的方法)。 builderFunc
(您的匿名函数)将构造 return 第 j
个小部件,使用列表视图传递给它的构建上下文。列表视图将使用 j
.