Home > other >  How to select certain range from Map in dart?
How to select certain range from Map in dart?

Time:11-18

To begin with, i have an event Map like this:

final Map<DateTime, List<CleanCalendarEvent>>? events;

It mapped all my event based on event Date. I want to select some events in certain range of date. I know how to select all the events in one selected date, and put it in a List.

_selectedEventsList = widget.events?[DateTime(_selectedDate.year, _selectedDate.month, _selectedDate.day)] ??[];

I want to select the all events in a week. How to do this with just Map? Can i just specify it in []?

CodePudding user response:

you can get all events within a week range with the following, with the following method:

List eventsWithWekkRange = [];
  for(int index = 0; index< events.entries.length; index  =1) {
    DateTime currentDate = events.keys.toList()[index];
    if(currentDate.isAfter(dateOfFirstDayOfWeek) && currentDate.isBefore(dateOfFirstDayOfWeek.add(Duration(days: 7)))) {
      eventsWithWekkRange.addAll(events.values.toList()[index]);
    }}

 return eventsWithWekkRange;
   }
  

CodePudding user response:

You have to use from package:collection method firstWhereOrNull and provide a predicate function to search required dates.

For doing this you have take date with recent Sunday and next Sunday:

import 'package:collection/collection.dart'; // You have to add this manually, for some reason it cannot be added automatically

// somewhere...
final recentSunday = DateTime(_selectedDate.year, _selectedDate.month, _selectedDate.day - _selectedDate.weekday % 7);
final nextSunday = DateTime(recentSunday.year, recentSunday.month, recentSunday.day   7);

_selectedEventsList = widget.events?.firstWhereOrNull((date) => date >= recentSunday && date <= nextSunday)??[];
  • Related