Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import 'package:flutter/material.dart';
- import 'package:habit_tracker/services/extensions/day.dart';
- import 'package:habit_tracker/services/utils/calendar_util.dart';
- import 'package:table_calendar/table_calendar.dart';
- class MyTableCalendar extends StatefulWidget {
- final DateTime myFirstDay;
- const MyTableCalendar({
- super.key,
- required this.myFirstDay,
- });
- @override
- State<MyTableCalendar> createState() => _MyTableCalendarState();
- }
- class _MyTableCalendarState extends State<MyTableCalendar> {
- var _focusedDay = DateTime.now();
- DateTime? _selectedDay;
- var formOverride = false;
- var calendarFormat = CalendarFormat.month;
- void _onDaySelected(DateTime selectedDay, DateTime focusedDay) {
- if (!isSameDay(_selectedDay, selectedDay)) {
- setState(() {
- _selectedDay = selectedDay;
- //_focusedDay = focusedDay;
- debugPrint(
- "IS SAME DAY CHECK: ${isSameDay(_selectedDay, _focusedDay)}");
- debugPrint(
- "IS SAME DAY CHECK: Selected day is - ${_selectedDay!.withoutTime()} ; Focused day is - ${_focusedDay.withoutTime()}");
- });
- }
- }
- void _onFormatChanged(CalendarFormat format) {
- if (calendarFormat != format) {
- setState(() {
- calendarFormat = format;
- });
- }
- }
- @override
- Widget build(BuildContext context) {
- final colorScheme = Theme.of(context).colorScheme;
- // ignore: unused_local_variable
- final textTheme = Theme.of(context).textTheme;
- final smallMobile = MediaQuery.sizeOf(context).height < 700;
- if (smallMobile && !formOverride) {
- calendarFormat = CalendarFormat.twoWeeks;
- formOverride = true;
- }
- return Container(
- padding: const EdgeInsets.all(4),
- decoration: BoxDecoration(
- border: Border.all(
- color: colorScheme.outline,
- ),
- borderRadius: BorderRadius.circular(16),
- color: colorScheme.primaryContainer,
- ),
- child: TableCalendar(
- rowHeight: 44,
- focusedDay: _focusedDay,
- firstDay: widget.myFirstDay,
- lastDay: DateTime.utc(2030, 12, 16),
- currentDay: Day.now(),
- startingDayOfWeek: StartingDayOfWeek.monday,
- selectedDayPredicate: (day) {
- return isSameDay(_selectedDay, day);
- },
- onDaySelected: _onDaySelected,
- calendarFormat: calendarFormat,
- onFormatChanged: _onFormatChanged,
- calendarStyle: CalendarStyle(
- tablePadding: const EdgeInsets.all(8),
- outsideDecoration: BoxDecoration(
- shape: BoxShape.rectangle,
- borderRadius: BorderRadius.circular(12),
- ),
- ),
- headerStyle: const HeaderStyle(
- formatButtonShowsNext: false,
- leftChevronIcon: Icon(Icons.chevron_left_rounded),
- rightChevronIcon: Icon(Icons.chevron_right_rounded),
- ),
- calendarBuilders: CalendarBuilders<Widget>(
- defaultBuilder: (context, day, focusedDay) {
- if (day.weekday == DateTime.saturday ||
- day.weekday == DateTime.sunday) {
- return WeekEndTileBuilder(day: day);
- } else {
- return DefaultTileBuilder(day: day);
- }
- },
- todayBuilder: (context, day, focusedDay) {
- return TodayTileBuilder(day: day);
- },
- selectedBuilder: (context, day, focusedDay) {
- return SelectedTileBuilder(
- selectedDay: _selectedDay,
- focusedDay: _focusedDay,
- day: day,
- );
- },
- ),
- ),
- );
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement