簡體   English   中英

我可以在 flutter_bloc 構建器中聲明一個 function 嗎?

[英]Can I declare a function inside a flutter_bloc builder?

我正在使用table_calendar flutter package 添加帶有事件的日歷。 我需要聲明一個 function,它使用來自 bloc 的 state。 他的做法有什么問題嗎? 現在它正在工作,但我覺得有一個我想不到的更好的解決方案。

class TableView extends StatelessWidget {
  const TableView({super.key});

  @override
  Widget build(BuildContext context) {
    return BlocBuilder<CalendarBloc, CalendarState>(
      builder: (context, state) {
        List<Schedule> _getEventsForDay(DateTime day) {
          final calendar = state.days.firstWhereOrNull(
            (calendar) => day.isOnCalendar(calendar),
          );

          return calendar == null ? [] : calendar.schedules ?? [];
        }

        return TableCalendar<Schedule>(
          focusedDay: state.focusedDay ?? DateTime.now(),
          firstDay: kFirstDay,
          lastDay: kLastDay,
          selectedDayPredicate: (day) => isSameDay(state.selectedDay, day),
          onDaySelected: (selectedDay, focusedDay) {
            context.read<CalendarBloc>().add(
                  DaySelected(
                    selectedDay: selectedDay,
                    focusedDay: focusedDay,
                  ),
                );
          },
          eventLoader: _getEventsForDay,
          // calendarFormat: CalendarFormat.month,
        );
      },
    );
  }
}

_getEventsForDay function 移動到CalendarBloc是一個好主意,因為它會使代碼更易於測試和維護。 function可以是CalendarBloc class內部的私有方法。這樣可以隔離測試業務邏輯,使測試更可靠,更容易編寫。

此外,這也使代碼更加模塊化,並將表示邏輯(UI)與業務邏輯(bloc)分開。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM