gpt4 book ai didi

sorting - 使用我自己的比较功能对Flutter小部件列表进行排序

转载 作者:行者123 更新时间:2023-12-03 04:40:06 25 4
gpt4 key购买 nike

我正在使用Flutter构建TODO应用程序。
我需要做的是使用我自己的compare方法对存储在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对象列表进行正确排序?

最佳答案

如果您知道所有taskWidgets元素都属于TaskCard类型,则可以将taskWidgets更改为List<TaskCard>类型,以使第一个比较方法起作用。
如果要保留List<Widget>类型的列表,则需要手动检查小部件的类型是否为Taskcard,并考虑不存在的情况:

int compareTasks(Widget a, Widget b) {
if (!(a is TaskCard)) {
return -1; // if a is not of type Taskcard, make it go before b
}
if (!(b is TaskCard)) {
return 1; // if a is a TaskCard and b is not Taskcard, make b go before a
}

TaskCard taskA = a as TaskCard;
TaskCard taskB = b as TaskCard;
if (taskA.state._checked == taskB.state._checked) {
return 0;
}
if (taskA.state._checked && !taskB.state._checked) {
return 1;
}
return -1;
}

关于sorting - 使用我自己的比较功能对Flutter小部件列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63390948/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com