mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-07-02 12:56:16 +08:00
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:
@ -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),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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");
|
||||||
|
@ -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();
|
||||||
});
|
});
|
||||||
|
@ -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) {
|
||||||
|
Reference in New Issue
Block a user