【发布时间】:2020-12-03 01:17:23
【问题描述】:
我正在使用 Flutter 构建一个 TODO 应用程序。
我需要做的是使用我自己的比较方法对存储在List中的任务进行排序(完成的任务必须在底部)。
我需要排序的列表:
var taskWidgets = List<Widget>();
taskWidgets 列表的元素是TaskCard 类对象
class TaskCard extends StatefulWidget {
我的比较方法:
int compareTasks(TaskCard a, TaskCard b) {
if (a.state._checked == b.state._checked) {
return 0;
}
if (a.state._checked && !b.state._checked) {
return 1;
}
return -1;
}
这就是我对列表进行排序的方式:
taskWidgets.sort(compareTasks);
完成所有操作后,我收到以下错误:
type '(TaskCard, TaskCard) => int' is not a subtype of type '((Widget, Widget) => int)?'
我试图改变比较功能
int compareTasks(Widget a, Widget b) {
if (a.state._checked == b.state._checked) {
return 0;
}
if (a.state._checked && !b.state._checked) {
return 1;
}
return -1;
}
然后我又遇到了一个错误
lib/main.dart:98:11: Error: The getter 'state' isn't defined for the class 'Widget'.
- 'Widget' is from 'package:flutter/src/widgets/framework.dart' ('../../AppData/flutter/packages/flutter/lib/src/widgets/framework.dart').
Try correcting the name to the name of an existing getter, or defining a getter or field named 'state'.
if (a.state._checked == b.state._checked) {
总而言之,问题是: 如何使用我自己的比较函数正确排序 TaskCard 对象列表?
【问题讨论】:
-
你应该只坚持这个,但你需要将 TaskCards 作为参数传递。目前,如果您看到代码,您会这样做错误
taskWidgets.sort(compareTasks);。这是不正确的。 正确taskWidgets.sort(compareTasks(TaskCard a, TaskCard b));。如果这对你有意义 -
@Alok,这不起作用:lib/main.dart:84:48: Error: Expected ',' before this. taskWidgets.sort(compareTasks(TaskCard a, TaskCard b)); ^ lib/main.dart:84:60:错误:在此之前应为“,”。 taskWidgets.sort(compareTasks(TaskCard a, TaskCard b)); ^
-
lib/main.dart:84:48:错误:没有为类 '_MyHomePageState' 定义 getter 'a'。 - '_MyHomePageState' 来自'package:flutter_app/main.dart' ('lib/main.dart')。尝试将名称更正为现有 getter 的名称,或定义名为“a”的 getter 或字段。 taskWidgets.sort(compareTasks(TaskCard a, TaskCard b));