diff --git a/lib/file_storage.dart b/lib/file_storage.dart index b0c91308..816b7022 100644 --- a/lib/file_storage.dart +++ b/lib/file_storage.dart @@ -1,16 +1,20 @@ import 'dart:async'; import 'dart:io'; -import 'dart:convert'; import 'package:flutter/foundation.dart'; +import 'package:journal/serializers.dart'; import 'package:path/path.dart' as p; import './note.dart'; class FileStorage { final Future Function() getDirectory; + final NoteSerializer noteSerializer; - const FileStorage({@required this.getDirectory}); + const FileStorage({ + @required this.getDirectory, + @required this.noteSerializer, + }); Future> loadNotes() async { final dir = await getDirectory(); @@ -31,8 +35,7 @@ class FileStorage { } var file = entity as File; final string = await file.readAsString(); - final json = JsonDecoder().convert(string); - return new Note.fromJson(json); + return noteSerializer.decode(string); } Future saveNotes(List notes) async { @@ -44,7 +47,7 @@ class FileStorage { var filePath = p.join(dir.path, note.id); var file = new File(filePath); - var contents = JsonEncoder().convert(note.toJson()); + var contents = noteSerializer.encode(note); await file.writeAsString(contents); } diff --git a/lib/state_container.dart b/lib/state_container.dart index e25ad532..391972a8 100644 --- a/lib/state_container.dart +++ b/lib/state_container.dart @@ -3,6 +3,7 @@ import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:journal/serializers.dart'; import 'package:path_provider/path_provider.dart'; import 'package:path/path.dart' as p; import 'package:uuid/uuid.dart'; @@ -19,14 +20,10 @@ Future getNotesDir() async { } class StateContainer extends StatefulWidget { - final FileStorage fileStorage; final Widget child; StateContainer({ @required this.child, - this.fileStorage = const FileStorage( - getDirectory: getNotesDir, - ), }); static StateContainerState of(BuildContext context) { @@ -43,12 +40,18 @@ class StateContainer extends StatefulWidget { class StateContainerState extends State { AppState appState = AppState.loading(); + FileStorage fileStorage; @override void initState() { super.initState(); - widget.fileStorage.loadNotes().then((loadedNotes) { + fileStorage = new FileStorage( + getDirectory: getNotesDir, + noteSerializer: new MarkdownYAMLSerializer(), + ); + + fileStorage.loadNotes().then((loadedNotes) { setState(() { appState = AppState(notes: loadedNotes); }); @@ -65,7 +68,7 @@ class StateContainerState extends State { void setState(VoidCallback fn) { super.setState(fn); - widget.fileStorage.saveNotes(appState.notes); + fileStorage.saveNotes(appState.notes); } void addNote(Note note) {