在dart / flutter中调用函数时传递下划线_“ _”(_)是什么意思?

时间:2019-10-09 07:56:33

标签: flutter dart

在阅读飞镖代码时,我经常看到一些仅带有下划线_参数调用的函数。它使我烦恼了一段时间,因为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';
}

1 个答案:

答案 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。这是编写代码的更简洁的方法。