From db0c5337ed3c6c2aec51247ba1d8506bac507a1b Mon Sep 17 00:00:00 2001 From: m3mo Date: Tue, 3 Feb 2026 18:27:43 +0100 Subject: [PATCH] Optimize calendar loading with parallel API calls - Replace sequential API calls with Future.wait() for parallel execution - Reduces calendar load time from ~31 sequential requests to 1 parallel batch --- .../presentation/pages/calendar_page.dart | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/lib/features/tasks/presentation/pages/calendar_page.dart b/lib/features/tasks/presentation/pages/calendar_page.dart index 8b9cf33..f0782f2 100644 --- a/lib/features/tasks/presentation/pages/calendar_page.dart +++ b/lib/features/tasks/presentation/pages/calendar_page.dart @@ -36,11 +36,21 @@ class _CalendarPageState extends State { final lastDay = DateTime(_focusedMonth.year, _focusedMonth.month + 1, 0); - for (int day = 1; day <= lastDay.day; day++) { - final date = DateTime(_focusedMonth.year, _focusedMonth.month, day); - final dateStr = DateFormat('yyyy-MM-dd').format(date); - final result = await repository.getTasksByDate(date); - result.when( + // Create all date requests + final dates = List.generate( + lastDay.day, + (index) => DateTime(_focusedMonth.year, _focusedMonth.month, index + 1), + ); + + // Execute all API calls in parallel + final results = await Future.wait( + dates.map((date) => repository.getTasksByDate(date)), + ); + + // Process results + for (int i = 0; i < dates.length; i++) { + final dateStr = DateFormat('yyyy-MM-dd').format(dates[i]); + results[i].when( success: (data) { if (data.isNotEmpty) { tasks[dateStr] = data;