微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

“字符串”类型不是“事件”类型的子类型

如何解决“字符串”类型不是“事件”类型的子类型

我正在将 table_calendar 添加到我的 Flutter 应用程序中。这是一个非常缓慢的过程,但我从中学到了很多。我在为事件创建标记时遇到另一个错误

这是错误类型“字符串”不是类型“事件”的子类型 我对这个问题做了一些阅读,我知道存在类型不匹配。我不知道如何解决这个问题,也不知道为什么会这样。

Event 类的结构如下:

private void InputBoxX_TextChanged(object sender,EventArgs e) => CoordinatesX = InputBoxX.Text; 
private void InputBoxY_TextChanged(object sender,EventArgs e) => CoordinatesY = InputBoxY.Text;
private void InputBoxZ_TextChanged(object sender,EventArgs e) => CoordinatesZ = InputBoxZ.Text;
private void InputBoxX2_TextChanged(object sender,EventArgs e) => CoordinatesX2 = InputBoxX2.Text;
private void InputBoxY2_TextChanged(object sender,EventArgs e) => CoordinatesY2 = InputBoxY2.Text;
private void InputBoxZ2_TextChanged(object sender,EventArgs e) => CoordinatesZ2 = InputBoxZ2.Text;

这是我将事件数据加载到 List 变量的地方。

final String? eventName;
  final DateTime? eventStartTime;
  final String? eventDuration;
  final DateTime? eventDate;
  final String? eventDescription;
  final String? agentId;
  final String? agencyId;

列表 eventList.add(eventDoc[i] 首先获取数据的元素是引发错误的元素。所以,我知道这些元素与 API 的某处不匹配。

这是来自 API 的代码(我认为这是正确的代码)以及指向 API 的链接https://github.com/aleksanderwozniak/table_calendar/blob/master/lib/src/customization/calendar_builders.dart

List<Event> _getEventsForDay(DateTime day,[List<Event>? events]) {
    // kEvents is a linkedHashMap
    for (int i = 0; i < eventDoc.length; i++ ) {
      DateTime eventDate = eventDoc[i].eventDate;
      DateTime eventDateUTC = eventDate.toUtc();
      if (day.year == eventDate.year && day.day == eventDate.day && day.month == eventDate.month) {
        List<Event> eventList = [];
        //eventList.add(eventDoc[i].agencyId);
        //eventList.add(eventDoc[i].agentId);
        //eventList.add(eventDoc[i].eventDate);
        //eventList.add(eventDoc[i].eventDescription);
        //eventList.add(eventDoc[i].eventDuration);
        eventList.add(eventDoc[i].eventName);
        //eventList.add(eventDoc[i].eventStartTime);
        //print('kEvents: $kEvents');
        return (kEvents.putIfAbsent(eventDateUTC,() => eventList))??[];

      }
    }
    return [];
  }

这是 _getEventsForDay 被调用的地方:

// Signature for a function that creates a single event marker for a given `day`.
/// Contains a single `event` associated with that `day`.
typedef SingleMarkerBuilder<T> = Widget? Function(
    BuildContext context,DateTime day,T event);

/// Signature for a function that creates an event marker for a given `day`.
/// Contains a list of `events` associated with that `day`.
typedef MarkerBuilder<T> = Widget? Function(
    BuildContext context,List<T> events);

这是我从 Firestore 获取和传递事件数据的地方:

Widget _buildTableCalendar(List<Event>? events) {
    return TableCalendar(
      firstDay: kFirstDay,lastDay: kLastDay,focusedDay: _focusedDay,selectedDayPredicate: (day) => isSameDay(_selectedDay,day),locale: 'en_US',eventLoader: (day) {
        return _getEventsForDay(day,events);
      },

类型不匹配在哪里?我该如何解决这个问题?

解决方法

EventDoc[i] 是一个事件,可以添加到列表中,但 EventDoc[i].agencyId 是一个字符串,不能添加到列表中,就像其他属性一样。要将事件添加到列表中,只需执行以下操作:

eventList.add(eventDoc[i]);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。