我正在 Flutter 应用程序中使用 calendar_view (https://pub.dev/packages/calendar_view) 包中的 DayView 小部件来显示选定日期的事件。每当从日历中选择新日期时,我想动态更新 DayView 的initialDay。然而,改变initialDay值似乎并没有更新DayView。
这是我的代码的简化版本:
import 'package:flutter/material.dart';
import 'package:calendar_view/calendar_view.dart';
import 'package:intl/intl.dart';
class HourlyView extends StatelessWidget {
final List<EventModel> events;
final DateTime initialDate;
HourlyView({required this.events, required this.initialDate});
@override
Widget build(BuildContext context) {
EventController eventController = EventController();
// Map EventModel to CalendarEventData and add to controller
events.forEach((event) {
eventController.add(
CalendarEventData(
date: event.start,
startTime: event.start,
endTime: event.end,
title: event.summary,
),
);
});
return Container(
color: Colors.black, // Set the background color to black
child: DayView(
controller: eventController,
initialDay: initialDate,
// Other properties...
),
);
}
}
即使初始日期已更新,DayView 也不会刷新以显示新日期。如何确保当initialDay改变时DayView正确更新?
嗨,我有同样的问题,具体的实现略有不同:
环境:
根据您的实现,我还尝试了以下代码。
我能够通过这个解决它
class CustomDayView<T extends Object?> extends DayView<T> {
CustomDayView({
super.key,
super.controller,
super.initialDay,
});
@override
GlobalKey<DayViewState<T>> key = GlobalKey<DayViewState<T>>();
}
class HourlyView extends StatelessWidget {
//... your code
//... your code
//... your code
@override
Widget build(BuildContext context) {
//... your code
//... your code
//... your code
return Container(
color: Colors.black, // Set the background color to black
child: CustomDayView(
controller: eventController,
initialDay: initialDate,
// Other properties...
),
);
}
}
我创建了一个自定义类 CustomDayView ,它扩展了 DayView Widget
具体让它发挥作用的是这个
@override
GlobalKey<DayViewState<T>> key = GlobalKey<DayViewState<T>>();
我实际上不知道为什么它最终会起作用,我尝试阅读有关覆盖 GlobalKey 时它会做什么的内容,但我只是不明白,抱歉。
在想出上面的代码之前我尝试过做什么(注意:我已经尝试这样做但无法使其工作):
我不确定是否有更好的方法来处理这个问题,但现在我只会做我认为有效的事情。
抱歉,如果我的英语不好或者有任何拼写错误或语法错误,我实际上不知道,只是想分享我的想法。