尝试添加显式的“动态”或启用功能。分析选项文件中的隐式动态

尝试添加显式的“动态”或启用功能。分析选项文件中的隐式动态

我尝试过

  1. https://github.com/dart-lang/sdk/issues/31013

  2. https://github.com/dart-lang/sdk/issues/27624

  3. https://dart.dev/guides/language/sound-problems

这是Swagger生成的代码块

Iterable<QueryParam> _convertParametersForCollectionFormat(
  String collectionFormat,String name,List value) {
  var params = <QueryParam>[];

  // preconditions
  if (name == null || name.isEmpty || value == null) return params;

  if (value is! List) {
    params.add(new QueryParam(name,parameterToString(value)));
    return params;
  }

  List values = value as List;

  // get the collection format
  collectionFormat = (collectionFormat == null || collectionFormat.isEmpty)
                     ? "csv"
                     : collectionFormat; // default: csv

  if (collectionFormat == "multi") {
    return values.map((v) => new QueryParam(name,parameterToString(v)));
  }

  String delimiter = _delimiters[collectionFormat] ?? ",";

  params.add(new QueryParam(name,values.map((v) => parameterToString(v)).join(delimiter)));
  return params;
}

可以找到我做错了什么

coolio0303 回答:尝试添加显式的“动态”或启用功能。分析选项文件中的隐式动态

首先,value参数的类型为List(又名List<dynamic>),因此在函数输入时,我们确定valueListnull

然后,如果valuenull,则函数返回。

之后的检查if (value is! List) ...完全没有必要,因为此时value肯定是 一个List

我猜测value的原始类型是dynamicObject,但在某些时候已更改为List,同时保留了处理非List情况。

此处的实际问题是values.map((v) => ...)代码为dynamic参数推断v,并且您启用了“无隐式动态” lint。 作为Dart代码的代码没有什么问题,但是您正在触发一个皮棉,该皮棉不允许代码将dynamic推定为v函数参数的类型。 要解决此问题,您必须更改推断或禁用lint。

您可以: *禁用棉绒globally。 *通过在上面的行上写// ignore: no_implicit_dynamic来禁用皮棉locally。 *写一个明确的dynamicvalues.map((dynamic v) => ...).join(...)。 *根本不要写闭包:values.map(parameterToString).join(...)(样式指南也建议这样做)。

本文链接:https://www.f2er.com/3152824.html

大家都在问