如何解决“字符串”类型不是“事件”类型的子类型
我正在将 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 举报,一经查实,本站将立刻删除。