/* * SPDX-FileCopyrightText: 2019-2021 Vishesh Handa * * SPDX-License-Identifier: AGPL-3.0-or-later */ import 'package:flutter/material.dart'; import 'package:gitjournal/core/folder/notes_folder.dart'; import 'package:gitjournal/core/folder/virtual_notes_folder.dart'; import 'package:gitjournal/core/note.dart'; import 'package:gitjournal/folder_views/common.dart'; import 'package:gitjournal/folder_views/standard_view.dart'; import 'package:gitjournal/l10n.dart'; import 'package:provider/provider.dart'; class NoteSearchDelegate extends SearchDelegate { final List notes; final FolderViewType viewType; NoteSearchDelegate(this.notes, this.viewType); @override List buildActions(BuildContext context) { return [ IconButton( icon: const Icon(Icons.close), onPressed: () { if (query.isEmpty) { close(context, null); } else { query = ''; } }, ), ]; } @override Widget buildLeading(BuildContext context) { return IconButton( icon: const Icon(Icons.arrow_back), onPressed: () { close(context, null); }, ); } @override Widget buildResults(BuildContext context) { return buildView(context, query); } @override Widget buildSuggestions(BuildContext context) { return buildView(context, query); } Widget buildView(BuildContext context, String query) { var fv = _buildFolderView(context, query); return CustomScrollView( slivers: [fv], ); } Widget _buildFolderView(BuildContext context, String query) { // TODO: This should be made far more efficient var q = query.toLowerCase(); var filteredNotes = notes.where((note) { var title = note.title?.toLowerCase() ?? ""; if (title.contains(q)) { return true; } if (note.fileName.toLowerCase().contains(q)) { return true; } return note.body.toLowerCase().contains(q); }).toList(); var folderConfig = context.watch(); var folder = VirtualNotesFolder(filteredNotes, folderConfig); var emptyText = context.loc.widgetsFolderViewSearchFailed; return buildFolderView( viewType: viewType, folder: folder, emptyText: emptyText, header: StandardViewHeader.TitleOrFileName, showSummary: true, noteTapped: (Note note) => openNoteEditor( context, note, folder, highlightString: q, ), noteLongPressed: (Note note) {}, isNoteSelected: (n) => false, searchTerm: query, ); } }