mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-06-28 09:47:35 +08:00
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:
@ -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,
|
||||
|
@ -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,
|
||||
|
@ -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,
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -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,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -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,
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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(
|
||||
|
@ -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,
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -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,
|
||||
);
|
||||
},
|
||||
);
|
||||
|
@ -85,6 +85,7 @@ class NoteSearchDelegate extends SearchDelegate<Note> {
|
||||
showSummary: true,
|
||||
noteTapped: (Note note) => openNoteEditor(context, note, folder),
|
||||
noteLongPressed: (Note note) {},
|
||||
isNoteSelected: (n) => false,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user