Advertisement
harmonyV

After first half

Jul 26th, 2024
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Dart 3.64 KB | None | 0 0
  1. import 'package:flutter/material.dart';
  2. import 'package:habit_tracker/services/extensions/day.dart';
  3. import 'package:habit_tracker/services/utils/calendar_util.dart';
  4. import 'package:table_calendar/table_calendar.dart';
  5.  
  6. class MyTableCalendar extends StatefulWidget {
  7.   final DateTime myFirstDay;
  8.  
  9.   const MyTableCalendar({
  10.     super.key,
  11.     required this.myFirstDay,
  12.   });
  13.  
  14.   @override
  15.   State<MyTableCalendar> createState() => _MyTableCalendarState();
  16. }
  17.  
  18. class _MyTableCalendarState extends State<MyTableCalendar> {
  19.   var _focusedDay = DateTime.now();
  20.   DateTime? _selectedDay;
  21.  
  22.   var formOverride = false;
  23.   var calendarFormat = CalendarFormat.month;
  24.  
  25.   void _onDaySelected(DateTime selectedDay, DateTime focusedDay) {
  26.     if (!isSameDay(_selectedDay, selectedDay)) {
  27.       setState(() {
  28.         _selectedDay = selectedDay;
  29.         //_focusedDay = focusedDay;
  30.         debugPrint(
  31.             "IS SAME DAY CHECK: ${isSameDay(_selectedDay, _focusedDay)}");
  32.         debugPrint(
  33.             "IS SAME DAY CHECK: Selected day is - ${_selectedDay!.withoutTime()} ; Focused day is - ${_focusedDay.withoutTime()}");
  34.       });
  35.     }
  36.   }
  37.  
  38.   void _onFormatChanged(CalendarFormat format) {
  39.     if (calendarFormat != format) {
  40.       setState(() {
  41.         calendarFormat = format;
  42.       });
  43.     }
  44.   }
  45.  
  46.   @override
  47.   Widget build(BuildContext context) {
  48.     final colorScheme = Theme.of(context).colorScheme;
  49.     // ignore: unused_local_variable
  50.     final textTheme = Theme.of(context).textTheme;
  51.  
  52.     final smallMobile = MediaQuery.sizeOf(context).height < 700;
  53.  
  54.     if (smallMobile && !formOverride) {
  55.       calendarFormat = CalendarFormat.twoWeeks;
  56.       formOverride = true;
  57.     }
  58.  
  59.     return Container(
  60.       padding: const EdgeInsets.all(4),
  61.       decoration: BoxDecoration(
  62.         border: Border.all(
  63.           color: colorScheme.outline,
  64.         ),
  65.         borderRadius: BorderRadius.circular(16),
  66.         color: colorScheme.primaryContainer,
  67.       ),
  68.       child: TableCalendar(
  69.         rowHeight: 44,
  70.         focusedDay: _focusedDay,
  71.         firstDay: widget.myFirstDay,
  72.         lastDay: DateTime.utc(2030, 12, 16),
  73.         currentDay: Day.now(),
  74.         startingDayOfWeek: StartingDayOfWeek.monday,
  75.         selectedDayPredicate: (day) {
  76.           return isSameDay(_selectedDay, day);
  77.         },
  78.         onDaySelected: _onDaySelected,
  79.         calendarFormat: calendarFormat,
  80.         onFormatChanged: _onFormatChanged,
  81.         calendarStyle: CalendarStyle(
  82.           tablePadding: const EdgeInsets.all(8),
  83.           outsideDecoration: BoxDecoration(
  84.             shape: BoxShape.rectangle,
  85.             borderRadius: BorderRadius.circular(12),
  86.           ),
  87.         ),
  88.         headerStyle: const HeaderStyle(
  89.           formatButtonShowsNext: false,
  90.           leftChevronIcon: Icon(Icons.chevron_left_rounded),
  91.           rightChevronIcon: Icon(Icons.chevron_right_rounded),
  92.         ),
  93.         calendarBuilders: CalendarBuilders<Widget>(
  94.           defaultBuilder: (context, day, focusedDay) {
  95.             if (day.weekday == DateTime.saturday ||
  96.                 day.weekday == DateTime.sunday) {
  97.               return WeekEndTileBuilder(day: day);
  98.             } else {
  99.               return DefaultTileBuilder(day: day);
  100.             }
  101.           },
  102.           todayBuilder: (context, day, focusedDay) {
  103.             return TodayTileBuilder(day: day);
  104.           },
  105.           selectedBuilder: (context, day, focusedDay) {
  106.             return SelectedTileBuilder(
  107.               selectedDay: _selectedDay,
  108.               focusedDay: _focusedDay,
  109.               day: day,
  110.             );
  111.           },
  112.         ),
  113.       ),
  114.     );
  115.   }
  116. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement