FolderView: Implement selecting a note

This is disabled for now, untill I expose the actions which should be
performed when selecting a note.
This commit is contained in:
Vishesh Handa
2020-09-05 15:53:26 +02:00
parent 8201e59014
commit fa075c25e0
10 changed files with 51 additions and 13 deletions

View File

@ -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,

View File

@ -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,

View File

@ -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,
);
}

View File

@ -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,
);
}
}

View File

@ -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,
);
}

View File

@ -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<FolderListView> {
_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<FolderListView> {
}
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<double> animation,
) {
var settings = Provider.of<Settings>(context);
@ -163,6 +164,16 @@ class _FolderListViewState extends State<FolderListView> {
);
}
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,

View File

@ -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(

View File

@ -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,
);
}

View File

@ -99,8 +99,7 @@ class _FolderViewState extends State<FolderView> {
}
},
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<FolderView> {
});
*/
},
isNoteSelected: (n) => n == selectedNote,
);
},
);

View File

@ -85,6 +85,7 @@ class NoteSearchDelegate extends SearchDelegate<Note> {
showSummary: true,
noteTapped: (Note note) => openNoteEditor(context, note, folder),
noteLongPressed: (Note note) {},
isNoteSelected: (n) => false,
);
}
}