Describe the bug
In cases where the firstDay can change from initial value (for example when fetching the calendar range over the network, and initial range is given as [today, today]), the focusedDay will be overlooked and the focused moved to the period where the new firstDay is.
The following code snippet will showcase the behaviour:
class Data {
Data({
required this.focusedDay,
required this.firstDay,
required this.lastDay,
});
final DateTime focusedDay;
final DateTime firstDay;
final DateTime lastDay;
}
class WidgetTest extends StatelessWidget {
const WidgetTest({super.key});
@override
Widget build(BuildContext context) {
return FutureBuilder<Data>(
initialData: Data(
focusedDay: DateTime.now(),
firstDay: DateTime.now(),
lastDay: DateTime.now()
),
future: Future.delayed(
const Duration(seconds: 5),
() => Data(
focusedDay: DateTime.now(),
firstDay: DateTime(2024, 1, 1),
lastDay: DateTime(2024, 12, 31),
),
),
builder: (c, s) {
if (s.hasData) {
final data = s.requireData;
return TableCalendar(
headerVisible: true,
firstDay: data.firstDay,
lastDay: data.lastDay,
focusedDay: data.focusedDay,
selectedDayPredicate: (day) => day.sameDate(data.focusedDay),
calendarFormat: CalendarFormat.week,
);
}
return SizedBox();
});
}
}
extension DateTimeExtension on DateTime {
bool sameDate(DateTime other) =>
year == other.year && month == other.month && day == other.day;
}
This will display a TableCalendar with today's date focused, until after 5 seconds when the future delivers values with different start and end dates (but the same focused date). At that point the calendar jumps to the starting date rather than using the focused date.
Expected behavior
The set focusedDay should always be the controlling factor for where the focus is at, no matter what values are given by firstDay or lastDay.
Describe the bug In cases where the
firstDay
can change from initial value (for example when fetching the calendar range over the network, and initial range is given as [today, today]), thefocusedDay
will be overlooked and the focused moved to the period where the newfirstDay
is.The following code snippet will showcase the behaviour:
This will display a
TableCalendar
with today's date focused, until after 5 seconds when the future delivers values with different start and end dates (but the same focused date). At that point the calendar jumps to the starting date rather than using the focused date.Expected behavior The set
focusedDay
should always be the controlling factor for where the focus is at, no matter what values are given byfirstDay
orlastDay
.System
Flutter: 3.19.5 (stable) table_calendar: 3.1.1