mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-06-26 16:46:51 +08:00
Add as NotesFolderReadOnly interface
This simplifies the implementation of VirtualNotesFolder and NotesFolder.
This commit is contained in:
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -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),
|
||||||
|
@ -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({
|
||||||
|
Reference in New Issue
Block a user