#arrays #flutter #dart #maps
Вопрос:
В этот момент я кручу свои колеса, но никуда не иду, и мне бы не помешала помощь. У меня есть массив/список дней недели, которые я хочу отключить в своем календаре с помощью функции enabledPredicateDay. например [«воскресенье», «понедельник», «вторник»].
return TableCalendar( calendarBuilders: CalendarBuilders(dowBuilder: (context, day) { if (day.weekday == DateTime.sunday) { final text = DateFormat.E().format(day); return Center( child: Text( text, style: TextStyle(color: Colors.red), ), ); } }), firstDay: kFirstDay, lastDay: kLastDay, focusedDay: _focusedDay, calendarFormat: _calendarFormat, enabledDayPredicate: (date) { // this is where we disable any days that the user is not available OR is booked up var disabledDays = ""; unavailableDays.asMap().forEach((index, value) { if (index == 0) { disabledDays = disabledDays "date.weekday != DateTime.$value"; } else { disabledDays = disabledDays " amp;amp; date.weekday != DateTime.$value"; } }); date.weekday != disabledDays; // here I'm trying to get some sort of boolean back. return date.weekday != disabledDays; }
Проблема, с которой я сталкиваюсь, заключается в том, что я могу либо вернуть только один день программно, скажем, в цикле «для в», либо мне нужно жестко его закодировать. Это связано с тем, что возвращаемое значение должно быть логическим.
Я попытался объединить все в строку, а затем преобразовать ее в метод, чтобы каждый день, когда мне нужно отключить, можно было использовать оператор return следующим образом:
return date.weekday != DateTime.$value amp;amp; date.weekday != DateTime.$value amp;amp; date.weekday != DateTime.$value
Все работает нормально, если я закодирую это так:
return date.weekday != DateTime.sunday amp;amp; date.weekday != DateTime.monday amp;amp; date.weekday != DateTime.tuesday
Но я не смог добраться до этого момента, потому что я получаю строку обратно, но мне нужен bool.
Как вернуть несколько дней для этой конкретной функции?
Ответ №1:
Я понял это…кажется очень банальным, и, возможно, это можно улучшить. То, что я сделал здесь, было экземпляром переменной для каждого дня. А затем, когда я просматриваю дни недели, чтобы проверить, какой из них недоступен с помощью условных операторов, я назначаю день недели переменной тогда и только тогда, когда он недоступен.
var unavailableDay1; var unavailableDay2; var unavailableDay3; var unavailableDay4; var unavailableDay5; var unavailableDay6; var unavailableDay7; for (var day in daysOfWeek) { // print(widget.data[day]); if (widget.data[day] == null) { unavailableDays.add(day); } } for (var day in unavailableDays) { if (day == "monday") { unavailableDay1 = 1; } else if (day == "tuesday") { unavailableDay2 = 2; } else if (day == "wednesday") { unavailableDay3 = 3; } else if (day == "thursday") { unavailableDay4 = 4; } else if (day == "friday") { unavailableDay5 = 5; } else if (day == "saturday") { unavailableDay6 = 6; } else if (day == "sunday") { unavailableDay7 = 7; } }
Наконец, я проверяю, имеет ли значение каждый из 7 дней, если не возвращается значение null. Таким образом, он возвращает мне только те дни, которые включены! Я надеюсь, что это кому-то поможет! Пожалуйста, помогите мне улучшить это!
enabledDayPredicate: (date) { // this is where we disable any days that the user is not available OR is booked up return date.weekday != unavailableDay1 amp;amp; date.weekday != unavailableDay2 amp;amp; date.weekday != unavailableDay3 amp;amp; date.weekday != unavailableDay4 amp;amp; date.weekday != unavailableDay5 amp;amp; date.weekday != unavailableDay6 amp;amp; date.weekday != unavailableDay7; },