如何将默认参数分配给 dart 中 map 参数旁边的函数

How to assign a default parameter to a function aside of map parameter in dart

知道如何将默认参数分配给 dart 中除 Map 参数之外的函数吗?

static Future functionName(
  bool isDone,
  [
    Map<String, String> params,
  ]
) async {
    ....
}

请注意,如果我输入 functionName([...],{bool isDone = false}),在我删除 [...],

之前它不会起作用

一个朋友帮我解决了这个问题,发现函数参数可以采用默认值,必须在 [] 或 {} 中给出,所以我们是这样传递它的:

static Future functionName(
  [
    Map<String, String> params,
    bool isDone = false,
  ]
) async {
    ....
}

并这样称呼它:

functionName(
  {
    'key1': value1,
    'key2': value2,
    ...
  },
  true,
);

如果您希望 isDone 具有默认值,这意味着它需要成为一个 可选 参数。您的函数有一个现有的可选 positional 参数 (params) 和 Dart currently does not allow mixing optional positional parameters with optional named parameters。因此 isDone 是可选的,它也必须是位置的。为了避免破坏现有的调用者,它应该保留第一个参数:

static Future functionName([
  bool isDone = false,
  Map<String, String>? params, // Remove the `?` if you don't enable null-safety.
]) async {
    ....
}

然后您可以像以前那样调用它:

functionName(
  true,
  {
    'key1': value1,
    'key2': value2,
    ...
  },
);

此代码与现有代码之间的唯一区别在于,您现在可以直接调用函数 functionName()。如果您希望调用者能够使用 params 而不是 使用 isDone 调用您的函数,那么这将是一个重大更改(您需要更新所有调用者),并且需要重新排序参数或将参数更改为可选的 named 参数。