一尘不染

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

flutter

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

阅读 2292

收藏
2020-08-13

共1个答案

一尘不染

下划线通常表示您将不在块内使用该参数,这只是编写代码的好方法,例如:

method(int useful, int useless) {
  // say I am only going to use 'useful' in this block 
}

上面的代码也可以写成:

method(int useful, int _) {
  // using '_' means I'm not going to use 2nd parameter in the block
}

现在回答您的问题:

builder: (_, counter, __) => Translations(counter.value),

意味着你有3个参数_counter并且__,只有counter是你使用的是什么,所以第一和第三参数,标注___。这是编写代码的更简洁的方法。

2020-08-13