tasksListSearchProvider top-level property
final
Implementation
final tasksListSearchProvider = FutureProvider.autoDispose
.family<List<String>, TasksListSearchParams>((ref, params) async {
final tasksList = await ref.watch(taskListProvider(params.spaceId).future);
//Return all task list if search text is empty
if (params.searchText.isEmpty) return tasksList;
//Return all task list filter if search text is given
List<String> filteredTaskList = [];
for (final taskListId in tasksList) {
//Check search param in task list
final taskListItem =
await ref.watch(taskListItemProvider(taskListId).future);
if (taskListItem
.name()
.toLowerCase()
.contains(params.searchText.toLowerCase())) {
filteredTaskList.add(taskListId);
continue;
}
//Check search param in task list items data
final tasks = await ref.watch(taskItemsListProvider(taskListItem).future);
for (final openTaskItemId in tasks.openTasks) {
final openTaskItem = await ref.watch(
taskItemProvider((taskListId: taskListId, taskId: openTaskItemId))
.future,
);
if (openTaskItem
.title()
.toLowerCase()
.contains(params.searchText.toLowerCase())) {
filteredTaskList.add(taskListId);
break;
}
}
}
return filteredTaskList;
});