diff --git a/lib/folder_views/common.dart b/lib/folder_views/common.dart index 26ca1abe..a59acb18 100644 --- a/lib/folder_views/common.dart +++ b/lib/folder_views/common.dart @@ -2,6 +2,7 @@ import 'package:fimber/fimber.dart'; import 'package:flutter/material.dart'; import 'package:gitjournal/core/note.dart'; import 'package:gitjournal/core/notes_folder.dart'; +import 'package:gitjournal/folder_views/compact_view.dart'; import 'package:gitjournal/folder_views/journal_view.dart'; import 'package:gitjournal/screens/note_editor.dart'; import 'package:gitjournal/utils.dart'; @@ -11,6 +12,7 @@ import 'standard_view.dart'; enum FolderViewType { Standard, Journal, + Compact, } Widget buildFolderView( @@ -45,6 +47,12 @@ Widget buildFolderView( noteSelectedFunction: noteSelectionFn, emptyText: emptyText, ); + case FolderViewType.Compact: + return CompactView( + folder: folder, + noteSelectedFunction: noteSelectionFn, + emptyText: emptyText, + ); } assert(false, "Code path should never be executed"); diff --git a/lib/folder_views/compact_view.dart b/lib/folder_views/compact_view.dart new file mode 100644 index 00000000..03adc408 --- /dev/null +++ b/lib/folder_views/compact_view.dart @@ -0,0 +1,80 @@ +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:gitjournal/folder_views/list_view.dart'; + +import 'package:intl/intl.dart'; + +import 'package:gitjournal/core/note.dart'; +import 'package:gitjournal/core/notes_folder.dart'; + +class CompactView extends StatelessWidget { + final NoteSelectedFunction noteSelectedFunction; + final NotesFolderReadOnly folder; + final String emptyText; + + CompactView({ + @required this.folder, + @required this.noteSelectedFunction, + @required this.emptyText, + }); + + @override + @override + Widget build(BuildContext context) { + return FolderListView( + folder: folder, + noteSelectedFunction: noteSelectedFunction, + emptyText: emptyText, + noteTileBuilder: _buildRow, + ); + } + + Widget _buildRow(BuildContext context, Note note) { + var textTheme = Theme.of(context).textTheme; + + var title = note.title; + if (title == null || title.isEmpty) { + title = note.summary; + } + var titleTheme = textTheme.title; + Widget titleWidget = Text( + title, + style: titleTheme, + overflow: TextOverflow.ellipsis, + ); + Widget trailing; + + var date = note.modified ?? note.created; + if (date != null) { + var formatter = DateFormat('dd MMM, yyyy'); + var dateStr = formatter.format(date); + trailing = Text(dateStr, style: textTheme.caption); + } + + var titleRow = Row( + children: [Expanded(child: titleWidget), trailing], + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.baseline, + textBaseline: TextBaseline.alphabetic, + ); + + var tile = ListTile( + title: titleRow, + onTap: () => noteSelectedFunction(note), + ); + + var dc = Theme.of(context).dividerColor; + var divider = Container( + height: 1.0, + child: Divider(color: dc.withOpacity(dc.opacity / 3)), + ); + + return Column( + children: [ + divider, + tile, + divider, + ], + ); + } +} diff --git a/lib/screens/folder_view.dart b/lib/screens/folder_view.dart index 5cf9cb24..366ea442 100644 --- a/lib/screens/folder_view.dart +++ b/lib/screens/folder_view.dart @@ -178,6 +178,12 @@ class _FolderViewState extends State { groupValue: _viewType, onChanged: onViewChange, ), + RadioListTile( + title: const Text("Compact View"), + value: FolderViewType.Compact, + groupValue: _viewType, + onChanged: onViewChange, + ), ]; return AlertDialog(