From fa075c25e05ead66a883e1c8a5f83bf9c5f9255c Mon Sep 17 00:00:00 2001 From: Vishesh Handa Date: Sat, 5 Sep 2020 15:53:26 +0200 Subject: [PATCH] FolderView: Implement selecting a note This is disabled for now, untill I expose the actions which should be performed when selecting a note. --- lib/core/note.dart | 3 +++ lib/folder_views/card_view.dart | 5 +++++ lib/folder_views/common.dart | 7 +++++-- lib/folder_views/grid_view.dart | 6 +++++- lib/folder_views/journal_view.dart | 5 ++++- lib/folder_views/list_view.dart | 19 +++++++++++++++---- lib/folder_views/note_tile.dart | 10 +++++++--- lib/folder_views/standard_view.dart | 4 ++++ lib/screens/folder_view.dart | 4 ++-- lib/widgets/note_search_delegate.dart | 1 + 10 files changed, 51 insertions(+), 13 deletions(-) diff --git a/lib/core/note.dart b/lib/core/note.dart index 5a4d3845..b8fe8ee2 100644 --- a/lib/core/note.dart +++ b/lib/core/note.dart @@ -19,6 +19,9 @@ import 'md_yaml_doc.dart'; import 'md_yaml_doc_codec.dart'; import 'note_serializer.dart'; +typedef void NoteSelectedFunction(Note note); +typedef bool NoteBoolPropertyFunction(Note note); + enum NoteLoadState { None, Loading, diff --git a/lib/folder_views/card_view.dart b/lib/folder_views/card_view.dart index 6f6d412f..51109888 100644 --- a/lib/folder_views/card_view.dart +++ b/lib/folder_views/card_view.dart @@ -3,12 +3,15 @@ import 'package:flutter/material.dart'; import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart'; +import 'package:gitjournal/core/note.dart'; import 'package:gitjournal/core/notes_folder.dart'; import 'package:gitjournal/folder_views/note_tile.dart'; class CardView extends StatelessWidget { final NoteSelectedFunction noteTapped; final NoteSelectedFunction noteLongPressed; + final NoteBoolPropertyFunction isNoteSelected; + final NotesFolder folder; final String emptyText; final bool fixedHeight; @@ -17,6 +20,7 @@ class CardView extends StatelessWidget { @required this.folder, @required this.noteTapped, @required this.noteLongPressed, + @required this.isNoteSelected, @required this.emptyText, this.fixedHeight = false, }); @@ -52,6 +56,7 @@ class CardView extends StatelessWidget { note: note, noteTapped: noteTapped, noteLongPressed: noteLongPressed, + selected: isNoteSelected(note), ); }, maxCrossAxisExtent: 200.0, diff --git a/lib/folder_views/common.dart b/lib/folder_views/common.dart index 23f33437..2e69a0c5 100644 --- a/lib/folder_views/common.dart +++ b/lib/folder_views/common.dart @@ -20,8 +20,6 @@ enum FolderViewType { Grid, } -typedef void NoteSelectedFunction(Note note); - Widget buildFolderView({ @required FolderViewType viewType, @required NotesFolder folder, @@ -30,6 +28,7 @@ Widget buildFolderView({ @required bool showSummary, @required NoteSelectedFunction noteTapped, @required NoteSelectedFunction noteLongPressed, + @required NoteBoolPropertyFunction isNoteSelected, }) { switch (viewType) { case FolderViewType.Standard: @@ -40,6 +39,7 @@ Widget buildFolderView({ emptyText: emptyText, headerType: header, showSummary: showSummary, + isNoteSelected: isNoteSelected, ); case FolderViewType.Journal: return JournalView( @@ -47,6 +47,7 @@ Widget buildFolderView({ noteTapped: noteTapped, noteLongPressed: noteLongPressed, emptyText: emptyText, + isNoteSelected: isNoteSelected, ); case FolderViewType.Card: return CardView( @@ -54,6 +55,7 @@ Widget buildFolderView({ noteTapped: noteTapped, noteLongPressed: noteLongPressed, emptyText: emptyText, + isNoteSelected: isNoteSelected, ); case FolderViewType.Grid: return GridFolderView( @@ -61,6 +63,7 @@ Widget buildFolderView({ noteTapped: noteTapped, noteLongPressed: noteLongPressed, emptyText: emptyText, + isNoteSelected: isNoteSelected, ); } diff --git a/lib/folder_views/grid_view.dart b/lib/folder_views/grid_view.dart index 2169406a..fa1eca59 100644 --- a/lib/folder_views/grid_view.dart +++ b/lib/folder_views/grid_view.dart @@ -1,13 +1,15 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:gitjournal/core/note.dart'; import 'package:gitjournal/core/notes_folder.dart'; import 'package:gitjournal/folder_views/card_view.dart'; -import 'package:gitjournal/folder_views/note_tile.dart'; class GridFolderView extends StatelessWidget { final NoteSelectedFunction noteTapped; final NoteSelectedFunction noteLongPressed; + final NoteBoolPropertyFunction isNoteSelected; + final NotesFolder folder; final String emptyText; @@ -15,6 +17,7 @@ class GridFolderView extends StatelessWidget { @required this.folder, @required this.noteTapped, @required this.noteLongPressed, + @required this.isNoteSelected, @required this.emptyText, }); @@ -26,6 +29,7 @@ class GridFolderView extends StatelessWidget { noteLongPressed: noteLongPressed, emptyText: emptyText, fixedHeight: true, + isNoteSelected: isNoteSelected, ); } } diff --git a/lib/folder_views/journal_view.dart b/lib/folder_views/journal_view.dart index 2fa322be..a7d349f5 100644 --- a/lib/folder_views/journal_view.dart +++ b/lib/folder_views/journal_view.dart @@ -11,6 +11,8 @@ import 'package:gitjournal/folder_views/list_view.dart'; class JournalView extends StatelessWidget { final NoteSelectedFunction noteTapped; final NoteSelectedFunction noteLongPressed; + final NoteBoolPropertyFunction isNoteSelected; + final NotesFolder folder; final String emptyText; @@ -21,16 +23,17 @@ class JournalView extends StatelessWidget { @required this.folder, @required this.noteTapped, @required this.noteLongPressed, + @required this.isNoteSelected, @required this.emptyText, }); - @override @override Widget build(BuildContext context) { return FolderListView( folder: folder, emptyText: emptyText, noteTileBuilder: _buildRow, + isNoteSelected: isNoteSelected, ); } diff --git a/lib/folder_views/list_view.dart b/lib/folder_views/list_view.dart index 2f03f4de..a1cd576f 100644 --- a/lib/folder_views/list_view.dart +++ b/lib/folder_views/list_view.dart @@ -10,11 +10,11 @@ import 'package:gitjournal/state_container.dart'; import 'package:gitjournal/utils.dart'; import 'package:gitjournal/widgets/icon_dismissable.dart'; -typedef void NoteSelectedFunction(Note note); typedef Widget NoteTileBuilder(BuildContext context, Note note); class FolderListView extends StatefulWidget { final NoteTileBuilder noteTileBuilder; + final NoteBoolPropertyFunction isNoteSelected; final NotesFolder folder; final String emptyText; @@ -22,6 +22,7 @@ class FolderListView extends StatefulWidget { @required this.folder, @required this.noteTileBuilder, @required this.emptyText, + @required this.isNoteSelected, }); @override @@ -80,7 +81,7 @@ class _FolderListViewState extends State { _listKey.currentState.removeItem(index, (context, animation) { var i = deletedViaDismissed.indexWhere((path) => path == note.filePath); if (i == -1) { - return _buildNote(context, note, animation); + return _buildNote(note, widget.isNoteSelected(note), animation); } else { deletedViaDismissed.removeAt(i); return Container(); @@ -122,12 +123,12 @@ class _FolderListViewState extends State { } var note = widget.folder.notes[i]; - return _buildNote(context, note, animation); + return _buildNote(note, widget.isNoteSelected(note), animation); } Widget _buildNote( - BuildContext context, Note note, + bool selected, Animation animation, ) { var settings = Provider.of(context); @@ -163,6 +164,16 @@ class _FolderListViewState extends State { ); } + if (selected) { + var borderColor = Theme.of(context).accentColor; + viewItem = Container( + decoration: BoxDecoration( + border: Border.all(color: borderColor, width: selected ? 2.0 : 1.0), + ), + child: viewItem, + ); + } + return SizeTransition( key: ValueKey("FolderListView_tr_" + note.filePath), axis: Axis.vertical, diff --git a/lib/folder_views/note_tile.dart b/lib/folder_views/note_tile.dart index d664b636..cb8b00ad 100644 --- a/lib/folder_views/note_tile.dart +++ b/lib/folder_views/note_tile.dart @@ -5,17 +5,17 @@ import 'package:flutter/material.dart'; import 'package:gitjournal/core/note.dart'; import 'package:gitjournal/utils/markdown.dart'; -typedef void NoteSelectedFunction(Note note); - class NoteTile extends StatelessWidget { final Note note; final NoteSelectedFunction noteTapped; final NoteSelectedFunction noteLongPressed; + final bool selected; NoteTile({ @required this.note, @required this.noteTapped, @required this.noteLongPressed, + @required this.selected, }); @override @@ -40,10 +40,14 @@ class NoteTile extends StatelessWidget { borderColor = theme.highlightColor.withAlpha(30); } + if (selected) { + borderColor = theme.accentColor; + } + var tileContent = Container( decoration: BoxDecoration( borderRadius: const BorderRadius.all(Radius.circular(8)), - border: Border.all(color: borderColor), + border: Border.all(color: borderColor, width: selected ? 2.0 : 1.0), ), padding: const EdgeInsets.all(16.0), child: Column( diff --git a/lib/folder_views/standard_view.dart b/lib/folder_views/standard_view.dart index 6a65cea5..fea53ee8 100644 --- a/lib/folder_views/standard_view.dart +++ b/lib/folder_views/standard_view.dart @@ -17,6 +17,8 @@ enum StandardViewHeader { class StandardView extends StatelessWidget { final NoteSelectedFunction noteTapped; final NoteSelectedFunction noteLongPressed; + final NoteBoolPropertyFunction isNoteSelected; + final NotesFolder folder; final String emptyText; @@ -32,6 +34,7 @@ class StandardView extends StatelessWidget { @required this.emptyText, @required this.headerType, @required this.showSummary, + @required this.isNoteSelected, }); @override @@ -41,6 +44,7 @@ class StandardView extends StatelessWidget { folder: folder, emptyText: emptyText, noteTileBuilder: _buildRow, + isNoteSelected: isNoteSelected, ); } diff --git a/lib/screens/folder_view.dart b/lib/screens/folder_view.dart index ae2cf51e..af1d7839 100644 --- a/lib/screens/folder_view.dart +++ b/lib/screens/folder_view.dart @@ -99,8 +99,7 @@ class _FolderViewState extends State { } }, noteLongPressed: (Note note) { - // Disabled for now, until I figure out how to render - // the selected note differently + // Disabled for now, until I expose actions for the note /* setState(() { inSelectionMode = true; @@ -108,6 +107,7 @@ class _FolderViewState extends State { }); */ }, + isNoteSelected: (n) => n == selectedNote, ); }, ); diff --git a/lib/widgets/note_search_delegate.dart b/lib/widgets/note_search_delegate.dart index d1a1a28a..dc3fd839 100644 --- a/lib/widgets/note_search_delegate.dart +++ b/lib/widgets/note_search_delegate.dart @@ -85,6 +85,7 @@ class NoteSearchDelegate extends SearchDelegate { showSummary: true, noteTapped: (Note note) => openNoteEditor(context, note, folder), noteLongPressed: (Note note) {}, + isNoteSelected: (n) => false, ); } }