无法将函数添加到 Dart 中的函数列表中

问题描述 投票:0回答:1

我尝试在 Dart 中创建函数列表,但无法使用 List add 方法来实现此目的。这是代码,它们都在同一个文件中。

// bin/filter.dart
import 'package:filter/filter.dart';
import 'package:filter/LogEntry.dart';

void main(List<String> arguments) {
  LogEntry log = new LogEntry();
  TripListFilter filter = new TripListFilter(true);

  for (FilterFunction f in filter.filters) {
      print('Filter: ${f(log)}');
  }
}

// lib/LogEntry.dart
class LogEntry {
    bool trailer = false;
}

// lib/filter.dart
import 'package:filter/LogEntry.dart';

typedef FilterFunction = bool Function(LogEntry a);

class TripListFilter {
      TripListFilter(this.trailer);

    bool? trailer;

      bool _myFunction(LogEntry trip) {
    if (trailer == true && trip.trailer) return true;
    return false;
  }


  List<FilterFunction> filters = [];
  filters.add(_myFunction);
}

运行这个给我错误

Building package executable... 
Failed to build filter:filter:
lib/filter.dart:17:3: Error: The name of a constructor must match the name of the enclosing class.
  filters.add(_myFunction);

在带有 Flutter 和 Dart 插件的 Android Studio 中,我在最后一行的

filters
变量上看到一条红线。将鼠标悬停在其上方,我看到一条消息“构造函数的名称必须与封闭类的名称匹配。”

据我所知,“过滤器”列表的定义与 _myFunction 的签名匹配。

为什么功能无法添加到列表中?

flutter dart
1个回答
0
投票

问题是这条线

filters.add(_myFunction);

位于函数或构造函数的主体之外,这使其成为声明。您可以将其添加到构造函数中,例如如下所示:

class TripListFilter {
  TripListFilter(this.trailer){
    filters.add(_myFunction);
  }

  bool? trailer;

  bool _myFunction(LogEntry trip) {
    if (trailer == true && trip.trailer) return true;
    return false;
  }

  List<FilterFunction> filters = [];
}
© www.soinside.com 2019 - 2024. All rights reserved.