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
相关产品推荐
相关产品推荐

