在阅读飞镖代码时,我经常看到一些仅带有下划线_参数调用的函数。它使我烦恼了一段时间,因为flutter改善了其分析消息,所以我有一些线索...但是我觉得我不太了解这个概念:-(
昨天我为测试写了以下内容:
when(mockDevice.getLocalPath()).thenAnswer(() async => fileFolder);
并获得以下分析
错误:无法将参数类型'Future Function()'分配给参数类型'Future Function(Invocation)'。
添加下划线时,效果很好。
when(mockDevice.getLocalPath()).thenAnswer((_) async => fileFolder);
我遇到的最令人恐惧的示例来自@remi rousselet编写的提供程序包
builder: (_, counter, __) => Translations(counter.value),
来自提供者示例:
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider(builder: (_) => Counter()),
ProxyProvider<Counter, Translations>(
builder: (_, counter, __) => Translations(counter.value),
),
],
child: Foo(),
);
}
class Translations {
const Translations(this._value);
final int _value;
String get title => 'You clicked $_value times';
}
答案 0 :(得分:1)
下划线通常表示您不会在块内使用该参数,这只是编写代码的好方法,例如:
pip install wrapt==1.11.0
上述代码的更好版本为
method(int usable, int notUsable) {
// say I am only going to use `usable` and `notUsable` isn't usable in this block
}
现在回答您的问题:
method(int usable, int _) {
// using _ means I don't care about using second parameter in this block
}
表示您有3个参数builder: (_, counter, __) => Translations(counter.value),
,_
和counter
,并且只有__
是您正在使用的参数,因此第1个和第3个参数用{{1 }}和counter
。这是编写代码的更简洁的方法。