Add a Compact View

Fixes #66
This commit is contained in:
Vishesh Handa
2020-03-05 19:24:20 +01:00
parent 9ff33f51ce
commit 2f9f8b3e73
3 changed files with 94 additions and 0 deletions

View File

@ -2,6 +2,7 @@ import 'package:fimber/fimber.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gitjournal/core/note.dart'; import 'package:gitjournal/core/note.dart';
import 'package:gitjournal/core/notes_folder.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/folder_views/journal_view.dart';
import 'package:gitjournal/screens/note_editor.dart'; import 'package:gitjournal/screens/note_editor.dart';
import 'package:gitjournal/utils.dart'; import 'package:gitjournal/utils.dart';
@ -11,6 +12,7 @@ import 'standard_view.dart';
enum FolderViewType { enum FolderViewType {
Standard, Standard,
Journal, Journal,
Compact,
} }
Widget buildFolderView( Widget buildFolderView(
@ -45,6 +47,12 @@ Widget buildFolderView(
noteSelectedFunction: noteSelectionFn, noteSelectedFunction: noteSelectionFn,
emptyText: emptyText, emptyText: emptyText,
); );
case FolderViewType.Compact:
return CompactView(
folder: folder,
noteSelectedFunction: noteSelectionFn,
emptyText: emptyText,
);
} }
assert(false, "Code path should never be executed"); assert(false, "Code path should never be executed");

View File

@ -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: <Widget>[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: <Widget>[
divider,
tile,
divider,
],
);
}
}

View File

@ -178,6 +178,12 @@ class _FolderViewState extends State<FolderView> {
groupValue: _viewType, groupValue: _viewType,
onChanged: onViewChange, onChanged: onViewChange,
), ),
RadioListTile<FolderViewType>(
title: const Text("Compact View"),
value: FolderViewType.Compact,
groupValue: _viewType,
onChanged: onViewChange,
),
]; ];
return AlertDialog( return AlertDialog(