日历
Flutter 的日历小部件。
展示了事件的滚动日历列表。这仍然相对基础,它始终假定 getEvents 返回整个日历事件列表(基本上忽略了传递给源的值)。不过,它确实有效:) 目前,它还假定 assets/images/calendarheader.png 存在,它将使用它来显示标题,并且 assets/images/calendarbanner.jpg 存在,它将使用它来显示月份标题。
日历使用 slivers 在视图中显示小部件,并允许您向前和向后滚动事件。标题小部件会下拉并打开月份的日期,让您选择特定日期以及在月份之间来回移动。默认情况下,它显示事件列表而不是日期视图,日期视图代码目前只是一个存根。
如何使用日历小部件本身
new CalendarWidget(
initialDate: new TZDateTime.now(local),
source: _calendarState,
);
如何为日历小部件设置源。
class GameListCalendarState extends CalendarSource {
List<Game> _listToShow;
StreamSubscription<UpdateReason> _listening;
@override
Widget buildWidget(BuildContext context, CalendarEvent event) {
return new GameCard(_listToShow[event.index]);
}
@override
List<CalendarEvent> getEvents(DateTime start, DateTime end) {
if (_listToShow == null) {
_listToShow = UserDatabaseData.instance.games.values.toList();
}
if (_listToShow == null) {
return [];
}
List<CalendarEvent> events = new List<CalendarEvent>();
int pos = 0;
_listToShow.forEach((Game g) => events.add(new CalendarEvent(
instant: g.tzTime, instantEnd: g.tzEndTime, index: pos++)));
return events;
}
@override
void initState() {
_listToShow = UserDatabaseData.instance.games.values.toList();
_listening = UserDatabaseData.instance.gameStream.listen((UpdateReason r) {
_listToShow = UserDatabaseData.instance.games.values.toList();
state.updateEvents();
});
}
@override
void dispose() {
_listening.cancel();
}
Future<void> loadGames(FilterDetails details) async {
Iterable<Game> list = await UserDatabaseData.instance.getGames(details);
_setGames(list);
}
void _setGames(Iterable<Game> res) {
List<Game> games = res.toList();
games.sort((a, b) => a.time.compareTo(b.time));
_listToShow = games;
}
}
日历小部件的示例