You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart中无法向函数列表添加函数,报构造器名称不匹配错误

问题原因及解决方案

你遇到的错误根本原因是把filters.add(_myFunction)直接写在了类的成员定义区域——Dart的类结构里,大括号内只能放成员变量声明、构造函数、方法定义这类内容,不能直接执行代码语句。当你在这里写filters.add(...)时,Dart会错误地把它当成一个构造器的定义,自然就会抛出“构造器名称必须匹配所属类的名称”的错误。

下面给你几种可行的解决方式:

1. 在构造函数体中添加函数

把add调用放在类的构造函数内部,创建类实例时会自动执行添加逻辑:

typedef FilterFunction = bool Function(Trip);

class TripListFilter {
  List<FilterFunction> filters = [];

  TripListFilter() {
    filters.add(_myFilter);
  }

  bool _myFilter(Trip trip) {
    // 你的过滤逻辑
    return trip.distance > 10;
  }
}

2. 直接初始化列表时包含函数

如果函数是静态方法,或者你希望列表在初始化时就包含这个函数,可以直接在列表定义里初始化:

typedef FilterFunction = bool Function(Trip);

class TripListFilter {
  List<FilterFunction> filters = [_myFilter];

  // 注意:实例方法无法在初始化列表中访问,需改为静态方法
  static bool _myFilter(Trip trip) {
    return trip.duration > 30;
  }
}

3. 在初始化方法中添加(适用于Flutter State类)

如果这是Flutter的State子类,可以在initState方法中添加函数:

typedef FilterFunction = bool Function(Trip);

class TripListFilterState extends State<TripListFilter> {
  List<FilterFunction> filters = [];

  @override
  void initState() {
    super.initState();
    filters.add(_myFilter);
  }

  bool _myFilter(Trip trip) {
    return trip.isCompleted;
  }
}

4. 手动调用初始化方法

如果需要更灵活的时机,可以定义专门的初始化方法,创建实例后手动调用:

typedef FilterFunction = bool Function(Trip);

class TripListFilter {
  List<FilterFunction> filters = [];

  void initFilters() {
    filters.add(_myFilter);
  }

  bool _myFilter(Trip trip) {
    return trip.isFavorite;
  }
}

// 使用示例
final filter = TripListFilter();
filter.initFilters();

内容的提问来源于stack exchange,提问作者ahaaje

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 15:00:02