Add as NotesFolderReadOnly interface

This simplifies the implementation of VirtualNotesFolder and
NotesFolder.
This commit is contained in:
Vishesh Handa
2020-02-09 19:11:01 +01:00
parent 313aace7fb
commit 7fd2546334
5 changed files with 22 additions and 131 deletions

View File

@ -6,7 +6,15 @@ import 'package:path/path.dart';
import 'note.dart'; import 'note.dart';
import 'notes_folder_notifier.dart'; import 'notes_folder_notifier.dart';
class NotesFolder with NotesFolderNotifier implements Comparable<NotesFolder> { abstract class NotesFolderReadOnly implements NotesFolderNotifier {
bool get isEmpty;
bool get hasNotes;
List<Note> get notes;
}
class NotesFolder
with NotesFolderNotifier
implements NotesFolderReadOnly, Comparable<NotesFolder> {
final NotesFolder parent; final NotesFolder parent;
String _folderPath; String _folderPath;
@ -31,6 +39,7 @@ class NotesFolder with NotesFolderNotifier implements Comparable<NotesFolder> {
String get folderPath => _folderPath; String get folderPath => _folderPath;
@override
bool get isEmpty { bool get isEmpty {
return _notes.isEmpty && _folders.isEmpty; return _notes.isEmpty && _folders.isEmpty;
} }
@ -54,6 +63,7 @@ class NotesFolder with NotesFolderNotifier implements Comparable<NotesFolder> {
return _folders.isNotEmpty; return _folders.isNotEmpty;
} }
@override
bool get hasNotes { bool get hasNotes {
return _notes.isNotEmpty; return _notes.isNotEmpty;
} }
@ -75,6 +85,7 @@ class NotesFolder with NotesFolderNotifier implements Comparable<NotesFolder> {
return _notes.length; return _notes.length;
} }
@override
List<Note> get notes { List<Note> get notes {
return _notes; return _notes;
} }

View File

@ -2,7 +2,9 @@ import 'note.dart';
import 'notes_folder.dart'; import 'notes_folder.dart';
import 'notes_folder_notifier.dart'; import 'notes_folder_notifier.dart';
class SortedNotesFolder with NotesFolderNotifier implements NotesFolder { class SortedNotesFolder
with NotesFolderNotifier
implements NotesFolderReadOnly {
final NotesFolder folder; final NotesFolder folder;
List<Note> _notes = []; List<Note> _notes = [];
@ -76,71 +78,9 @@ class SortedNotesFolder with NotesFolderNotifier implements NotesFolder {
@override @override
List<Note> get notes => _notes; List<Note> get notes => _notes;
@override
List<NotesFolder> getFolders() => folder.getFolders();
//
// Dumb Interface Implementation
//
@override
NotesFolder get parent => folder.parent;
@override
String get folderPath => folder.folderPath;
@override
bool get isEmpty => folder.isEmpty;
@override
String get name => folder.name;
@override
String get fullName => folder.fullName;
@override
bool get hasSubFolders => folder.hasSubFolders;
@override @override
bool get hasNotes => folder.hasNotes; bool get hasNotes => folder.hasNotes;
@override @override
bool get hasNotesRecursive => folder.hasNotesRecursive; bool get isEmpty => folder.isEmpty;
@override
int get numberOfNotes => folder.numberOfNotes;
@override
Future<void> loadRecursively() => folder.loadRecursively();
@override
Future<void> load() => folder.load();
@override
void add(Note note) => folder.add(note);
@override
void insert(int index, Note note) => folder.insert(index, note);
@override
void remove(Note note) => folder.remove(note);
@override
void create() => folder.create();
@override
void addFolder(NotesFolder folder) => folder.addFolder(folder);
@override
void removeFolder(NotesFolder folder) => folder.removeFolder(folder);
@override
void rename(String newName) => folder.rename(newName);
@override
String pathSpec() => folder.pathSpec();
@override
int compareTo(NotesFolder other) {
return folderPath.compareTo(other.folderPath);
}
} }

View File

@ -2,7 +2,9 @@ import 'note.dart';
import 'notes_folder.dart'; import 'notes_folder.dart';
import 'notes_folder_notifier.dart'; import 'notes_folder_notifier.dart';
class VirtualNotesFolder with NotesFolderNotifier implements NotesFolder { class VirtualNotesFolder
with NotesFolderNotifier
implements NotesFolderReadOnly {
final List<Note> _notes; final List<Note> _notes;
VirtualNotesFolder(this._notes); VirtualNotesFolder(this._notes);
@ -10,71 +12,9 @@ class VirtualNotesFolder with NotesFolderNotifier implements NotesFolder {
@override @override
List<Note> get notes => _notes; List<Note> get notes => _notes;
@override
List<NotesFolder> getFolders() => [];
//
// Dumb Interface Implementation
//
@override
NotesFolder get parent => null;
@override
String get folderPath => "";
@override @override
bool get isEmpty => _notes.isEmpty; bool get isEmpty => _notes.isEmpty;
@override
String get name => "";
@override
String get fullName => "";
@override
bool get hasSubFolders => false;
@override @override
bool get hasNotes => _notes.isNotEmpty; bool get hasNotes => _notes.isNotEmpty;
@override
bool get hasNotesRecursive => hasNotes;
@override
int get numberOfNotes => _notes.length;
@override
Future<void> loadRecursively() async {}
@override
Future<void> load() async {}
@override
void add(Note note) {}
@override
void insert(int index, Note note) {}
@override
void remove(Note note) {}
@override
void create() {}
@override
void addFolder(NotesFolder folder) {}
@override
void removeFolder(NotesFolder folder) {}
@override
void rename(String newName) {}
@override
String pathSpec() => "";
@override
int compareTo(NotesFolder other) {
return folderPath.compareTo(other.folderPath);
}
} }

View File

@ -91,11 +91,11 @@ class _JournalListingScreenState extends State<JournalListingScreen> {
Navigator.of(context).push(route); Navigator.of(context).push(route);
} }
Widget buildJournalList(NotesFolder folder) { Widget buildJournalList(NotesFolderReadOnly folder) {
return Builder( return Builder(
builder: (context) { builder: (context) {
return JournalList( return JournalList(
folder: SortedNotesFolder(folder), folder: folder,
noteSelectedFunction: (Note note) async { noteSelectedFunction: (Note note) async {
var route = MaterialPageRoute( var route = MaterialPageRoute(
builder: (context) => NoteEditor.fromNote(note), builder: (context) => NoteEditor.fromNote(note),

View File

@ -12,7 +12,7 @@ typedef void NoteSelectedFunction(Note note);
class JournalList extends StatefulWidget { class JournalList extends StatefulWidget {
final NoteSelectedFunction noteSelectedFunction; final NoteSelectedFunction noteSelectedFunction;
final NotesFolder folder; final NotesFolderReadOnly folder;
final String emptyText; final String emptyText;
JournalList({ JournalList({