我正在try 在Ffltter应用程序中的TABLE_CALENLER小部件上填充事件,但在使用TABLE_CALLER小部件的Events和eventsLoader:属性时遇到了问题.

我已经计算出,如果我使用2 for循环,我可以填充类型事件的列表,List,并将其传递回eventsLoader,但我收到了一个我不理解的错误.

以下是我使用的代码:

      eventLoader: (day) {
        return _getEventsForDay(day, events);  <<< ERROR HERE
      },

  List<Events>? _getEventsForDay(DateTime day, [List<Events>? events]) {
    final int today = day.day;
    final int nbrEvents = events!.length;

    for (Events allEvent in events) {
      if (day.year == allEvent.eventDate!.year &&
          day.month == allEvent.eventDate!.month &&
          day.day == allEvent.eventDate!.day) {
        // fill this list with all the events associated
        //with the given day and pass the list back
        late final List<Events> listDayEvents = [];
        for (Events dayEvents in events) {
          if (day.year == allEvent.eventDate!.year &&
              day.month == allEvent.eventDate!.month &&
              day.day == allEvent.eventDate!.day) {
            listDayEvents.add(allEvent);
          }
        }
        return listDayEvents;
      }
      List<Events> emptyList = [];
      return emptyList;
    }
  }

我在EventsLoader:属性上收到的错误如下:

The return type 'List<Events>?' isn't a 'List<_>', as required by the closure's context.dartreturn_of_invalid_type_from_closure
List<Events>? _getEventsForDay(DateTime day, [List<Events>? events])
Type: List<Events>? Function(DateTime, [List<Events>?])

package:deal_diligence/screens/appointment_calendar.dart

我不理解这个错误消息,因为我返回的是List类型.

这是Events类.我从Firebase集合中获取事件,并且每个事件都有Events类中的数据元素,那么我传递的数据类型是否错误?

class Events {
  String? id;
  String? eventName;
  DateTime? eventStartTime;
  String? eventDuration;
  DateTime? eventDate;
  String? eventDescription;
  String? userId;
  String? companyId;

这里是table_calendar widget的文档链接

我做错了什么?请帮帮忙. 谢谢

推荐答案

1.这个问题可能是由于返回类型和你处理函数_getEventsForDay的方式.

2.该错误明确指向闭包的上下文,声明返回类型不是闭包所期望的正确类型_.

Let's address the issues:

Null Safety:正确处理空安全非常重要,尤其是在处理可能包含可为空的值的Firebase数据时.

Function Return Type:确保函数_getEventsForDay根据eventsLoader的预期签名返回正确的类型.

试着像这样更新,

List<Events> _getEventsForDay(DateTime day, List<Events>? events) {
  List<Events> listDayEvents = [];

  if (events == null) {
    return listDayEvents; // Return an empty list if events is null
  }

  for (Events event in events) {
    if (event.eventDate != null &&
        day.year == event.eventDate!.year &&
        day.month == event.eventDate!.month &&
        day.day == event.eventDate!.day) {
      listDayEvents.add(event);
    }
  }

  return listDayEvents;
}

3.确保您向该函数提供了Events个事件的列表,它将返回与给定日期对应的事件列表.确保适当地处理空事件.

在您的eventLoader属性中,使用如下修改后的函数,

eventLoader: (day) {
  return _getEventsForDay(day, events ?? []); // Pass an empty list if events is null
},

4.这确保您将一个列表传递给_getEventsForDay,并处理事件可能为空的情况.此外,请确保在Events类中处理eventDate属性中的null值,因为我假设根据您的类定义它可能是可以为空的.

Flutter相关问答推荐

在Flutter中,CachedNetworks Image不工作(不从CachedData加载)

无效字符(位于字符68处)flutter—update—... europe-west1.firebasedatabase.app/

flutter -当使用SingleChildScrollView包装我的列小部件时,它不会填充整个高度

为什么当我使用Riverpod更新状态时,列表会被刷新?

确保通过在CheckIfFavoriteMovieEvent((event,emit){...})上注册处理程序误差

Flutter :URI的目标不存在

dotenv:未处理的异常:FileNotFoundError的实例

如何手动将 FirebaseAuth 用户邮箱验证状态设置为 true

在带有 flutter 的 Native Android 中,EventChannel.EventSink 始终为 null

Flutter底部面板局部显示

在我使用 flutter_riverpod stateprovider 重新保存代码之前,UI 主题状态不会更新

Riverpod中stateNotiferProvider和notifierProvider的区别

忽略异步函数上的 context.mounted 访问 linting 错误是否安全?

Flutter - 展开图标无法正常工作

如何在 flutter 中创建渐变按钮

在 Flutter 中更改高架按钮 OnPressed 的背景 colored颜色

在 Android 12+ 中,REST API 调用在 flutter 中非常慢,在 WiFi 中需要 10 秒,而在移动数据中不到一秒

如何在dart中编写多个条件?

Flutter NavigationBar 忽略我的背景 colored颜色

如何将所有行项目平等地放在一行中?Flutter