LCOV - code coverage report
Current view: top level - src - week_picker.dart (source / functions) Hit Total Coverage
Test: lcov.info Lines: 0 33 0.0 %
Date: 2022-02-12 14:49:12 Functions: 0 0 -

          Line data    Source code
       1             : import 'package:flutter/material.dart';
       2             : import 'package:flutter/rendering.dart';
       3             : 
       4             : import 'date_period.dart';
       5             : import 'date_picker_keys.dart';
       6             : import 'day_based_changable_picker.dart';
       7             : import 'day_picker_selection.dart';
       8             : import 'day_type.dart';
       9             : import 'i_selectable_picker.dart';
      10             : import 'styles/date_picker_styles.dart';
      11             : import 'styles/event_decoration.dart';
      12             : import 'styles/layout_settings.dart';
      13             : import 'typedefs.dart';
      14             : import 'utils.dart';
      15             : 
      16             : /// Date picker for selection a week.
      17             : class WeekPicker extends StatelessWidget {
      18             :   /// Creates a month picker.
      19           0 :   WeekPicker({
      20             :     Key? key,
      21             :     required DateTime selectedDate,
      22             :     required DateTime firstDate,
      23             :     required DateTime lastDate,
      24             :     required this.onChanged,
      25             :     DateTime? initiallyShowDate,
      26             :     this.datePickerLayoutSettings = const DatePickerLayoutSettings(),
      27             :     this.datePickerStyles,
      28             :     this.datePickerKeys,
      29             :     this.selectableDayPredicate,
      30             :     this.onSelectionError,
      31             :     this.eventDecorationBuilder,
      32             :     this.onMonthChanged,
      33           0 :   })  : firstDate = DatePickerUtils.startOfTheDay(firstDate),
      34           0 :         lastDate = DatePickerUtils.endOfTheDay(lastDate),
      35           0 :         selectedDate = DatePickerUtils.startOfTheDay(selectedDate),
      36             :         initiallyShowDate = initiallyShowDate == null
      37             :             ? null
      38           0 :             : DatePickerUtils.startOfTheDay(initiallyShowDate),
      39           0 :         super(key: key) {
      40           0 :     assert(!this.firstDate.isAfter(this.lastDate));
      41           0 :     assert(!this.lastDate.isBefore(this.firstDate));
      42           0 :     assert(!this.selectedDate.isBefore(this.firstDate));
      43           0 :     assert(!this.selectedDate.isAfter(this.lastDate));
      44           0 :     assert(this.initiallyShowDate == null ||
      45           0 :         !this.initiallyShowDate!.isAfter(this.lastDate));
      46           0 :     assert(this.initiallyShowDate == null ||
      47           0 :         !this.initiallyShowDate!.isBefore(this.firstDate));
      48             :   }
      49             : 
      50             :   /// The currently selected date.
      51             :   ///
      52             :   /// This date is highlighted in the picker.
      53             :   final DateTime selectedDate;
      54             : 
      55             :   /// Called when the user picks a week.
      56             :   final ValueChanged<DatePeriod> onChanged;
      57             : 
      58             :   /// Called when the error was thrown after user selection.
      59             :   /// (e.g. when user selected a week with one or more days
      60             :   /// what can't be selected)
      61             :   final OnSelectionError? onSelectionError;
      62             : 
      63             :   /// The earliest date the user is permitted to pick.
      64             :   final DateTime firstDate;
      65             : 
      66             :   /// The latest date the user is permitted to pick.
      67             :   final DateTime lastDate;
      68             : 
      69             :   /// Date for defining what month should be shown initially.
      70             :   ///
      71             :   /// In case of null month with earliest date of the selected week
      72             :   /// will be shown.
      73             :   final DateTime? initiallyShowDate;
      74             : 
      75             :   /// Layout settings what can be customized by user
      76             :   final DatePickerLayoutSettings datePickerLayoutSettings;
      77             : 
      78             :   /// Some keys useful for integration tests
      79             :   final DatePickerKeys? datePickerKeys;
      80             : 
      81             :   /// Styles what can be customized by user
      82             :   final DatePickerRangeStyles? datePickerStyles;
      83             : 
      84             :   /// Function returns if day can be selected or not.
      85             :   final SelectableDayPredicate? selectableDayPredicate;
      86             : 
      87             :   /// Builder to get event decoration for each date.
      88             :   ///
      89             :   /// All event styles are overriden by selected styles
      90             :   /// except days with dayType is [DayType.notSelected].
      91             :   final EventDecorationBuilder? eventDecorationBuilder;
      92             : 
      93             :   /// Called when the user changes the month.
      94             :   /// New DateTime object represents first day of new month and 00:00 time.
      95             :   final ValueChanged<DateTime>? onMonthChanged;
      96             : 
      97           0 :   @override
      98             :   Widget build(BuildContext context) {
      99           0 :     MaterialLocalizations localizations = MaterialLocalizations.of(context);
     100             : 
     101           0 :     int firstDayOfWeekIndex = datePickerStyles?.firstDayOfeWeekIndex ??
     102           0 :         localizations.firstDayOfWeekIndex;
     103             : 
     104           0 :     ISelectablePicker<DatePeriod> weekSelectablePicker = WeekSelectable(
     105           0 :         selectedDate, firstDayOfWeekIndex, firstDate, lastDate,
     106           0 :         selectableDayPredicate: selectableDayPredicate);
     107             : 
     108           0 :     return DayBasedChangeablePicker<DatePeriod>(
     109             :       selectablePicker: weekSelectablePicker,
     110             :       // todo: maybe create selection for week
     111             :       // todo: and change logic here to work with it
     112           0 :       selection: DayPickerSingleSelection(selectedDate),
     113           0 :       firstDate: firstDate,
     114           0 :       lastDate: lastDate,
     115           0 :       initiallyShownDate: initiallyShowDate,
     116           0 :       onChanged: onChanged,
     117           0 :       onSelectionError: onSelectionError,
     118           0 :       datePickerLayoutSettings: datePickerLayoutSettings,
     119           0 :       datePickerStyles: datePickerStyles ?? DatePickerRangeStyles(),
     120           0 :       datePickerKeys: datePickerKeys,
     121           0 :       eventDecorationBuilder: eventDecorationBuilder,
     122           0 :       onMonthChanged: onMonthChanged,
     123             :     );
     124             :   }
     125             : }

Generated by: LCOV version 1.15