Add experimental card view

This notes are displayed as cards. This is meant to emulate a more
google keep style.
This commit is contained in:
Vishesh Handa
2020-03-12 14:23:15 +01:00
parent 48f4d52c40
commit f4dd4fd148
4 changed files with 35 additions and 12 deletions

View File

@ -2,23 +2,24 @@ import 'package:flutter/foundation.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:flutter_staggered_grid_view/flutter_staggered_grid_view.dart'; import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
import 'package:gitjournal/core/notes_folder.dart';
typedef void NoteSelectedFunction(int noteIndex); typedef void NoteSelectedFunction(Note note);
class NotesList extends StatelessWidget { class CardView extends StatelessWidget {
final NoteSelectedFunction noteSelectedFunction; final NoteSelectedFunction noteSelectedFunction;
final List<Note> notes; final NotesFolderReadOnly folder;
final String emptyText; final String emptyText;
NotesList({ CardView({
@required this.notes, @required this.folder,
@required this.noteSelectedFunction, @required this.noteSelectedFunction,
@required this.emptyText, @required this.emptyText,
}); });
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
if (notes.isEmpty) { if (folder.isEmpty) {
return Center( return Center(
child: Text( child: Text(
emptyText, emptyText,
@ -34,10 +35,10 @@ class NotesList extends StatelessWidget {
var gridView = StaggeredGridView.countBuilder( var gridView = StaggeredGridView.countBuilder(
crossAxisCount: 4, crossAxisCount: 4,
itemCount: notes.length, itemCount: folder.notes.length,
itemBuilder: (BuildContext context, int index) { itemBuilder: (BuildContext context, int index) {
var note = notes[index]; var note = folder.notes[index];
return _buildNoteCard(context, note, index); return _buildNoteCard(context, note);
}, },
staggeredTileBuilder: (int i) => const StaggeredTile.fit(2), staggeredTileBuilder: (int i) => const StaggeredTile.fit(2),
mainAxisSpacing: 8.0, mainAxisSpacing: 8.0,
@ -50,8 +51,8 @@ class NotesList extends StatelessWidget {
); );
} }
Widget _buildNoteCard(BuildContext context, Note journal, int noteIndex) { Widget _buildNoteCard(BuildContext context, Note note) {
var body = journal.summary; var body = note.body;
var textTheme = Theme.of(context).textTheme; var textTheme = Theme.of(context).textTheme;
var tileContent = Padding( var tileContent = Padding(
@ -82,7 +83,7 @@ class NotesList extends StatelessWidget {
return InkWell( return InkWell(
child: tile, child: tile,
borderRadius: borderRadius, borderRadius: borderRadius,
//onTap: () => noteSelectedFunction(noteIndex), onTap: () => noteSelectedFunction(note),
); );
} }
} }

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/card_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,
Card,
} }
Widget buildFolderView( Widget buildFolderView(
@ -49,6 +51,12 @@ Widget buildFolderView(
noteSelectedFunction: noteSelectionFn, noteSelectedFunction: noteSelectionFn,
emptyText: emptyText, emptyText: emptyText,
); );
case FolderViewType.Card:
return CardView(
folder: folder,
noteSelectedFunction: noteSelectionFn,
emptyText: emptyText,
);
} }
assert(false, "Code path should never be executed"); assert(false, "Code path should never be executed");

View File

@ -53,6 +53,9 @@ class _FolderViewState extends State<FolderView> {
case SettingsFolderViewType.Journal: case SettingsFolderViewType.Journal:
_viewType = FolderViewType.Journal; _viewType = FolderViewType.Journal;
break; break;
case SettingsFolderViewType.Card:
_viewType = FolderViewType.Card;
break;
} }
_showSummary = Settings.instance.showNoteSummary; _showSummary = Settings.instance.showNoteSummary;
@ -327,6 +330,12 @@ class _FolderViewState extends State<FolderView> {
groupValue: _viewType, groupValue: _viewType,
onChanged: onViewChange, onChanged: onViewChange,
), ),
RadioListTile<FolderViewType>(
title: const Text("Card View (Experimental)"),
value: FolderViewType.Card,
groupValue: _viewType,
onChanged: onViewChange,
),
]; ];
return AlertDialog( return AlertDialog(
@ -350,6 +359,9 @@ class _FolderViewState extends State<FolderView> {
case FolderViewType.Journal: case FolderViewType.Journal:
Settings.instance.defaultView = SettingsFolderViewType.Journal; Settings.instance.defaultView = SettingsFolderViewType.Journal;
break; break;
case FolderViewType.Card:
Settings.instance.defaultView = SettingsFolderViewType.Card;
break;
} }
Settings.instance.save(); Settings.instance.save();
}); });

View File

@ -271,6 +271,7 @@ class SettingsEditorType {
class SettingsFolderViewType { class SettingsFolderViewType {
static const Standard = SettingsFolderViewType("Standard", "Standard"); static const Standard = SettingsFolderViewType("Standard", "Standard");
static const Journal = SettingsFolderViewType("Journal", "Journal"); static const Journal = SettingsFolderViewType("Journal", "Journal");
static const Card = SettingsFolderViewType("Card", "Card");
static const Default = Standard; static const Default = Standard;
final String _str; final String _str;
@ -288,6 +289,7 @@ class SettingsFolderViewType {
static const options = <SettingsFolderViewType>[ static const options = <SettingsFolderViewType>[
Standard, Standard,
Journal, Journal,
Card,
]; ];
static SettingsFolderViewType fromInternalString(String str) { static SettingsFolderViewType fromInternalString(String str) {