FileStorage: Use the YAML Markdown serializer

Instead of saving stuff in json.
This commit is contained in:
Vishesh Handa
2018-06-03 19:14:25 +02:00
parent eb2c9eb33f
commit 157fc425dc
2 changed files with 17 additions and 11 deletions

View File

@ -1,16 +1,20 @@
import 'dart:async'; import 'dart:async';
import 'dart:io'; import 'dart:io';
import 'dart:convert';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:journal/serializers.dart';
import 'package:path/path.dart' as p; import 'package:path/path.dart' as p;
import './note.dart'; import './note.dart';
class FileStorage { class FileStorage {
final Future<Directory> Function() getDirectory; final Future<Directory> Function() getDirectory;
final NoteSerializer noteSerializer;
const FileStorage({@required this.getDirectory}); const FileStorage({
@required this.getDirectory,
@required this.noteSerializer,
});
Future<List<Note>> loadNotes() async { Future<List<Note>> loadNotes() async {
final dir = await getDirectory(); final dir = await getDirectory();
@ -31,8 +35,7 @@ class FileStorage {
} }
var file = entity as File; var file = entity as File;
final string = await file.readAsString(); final string = await file.readAsString();
final json = JsonDecoder().convert(string); return noteSerializer.decode(string);
return new Note.fromJson(json);
} }
Future<Directory> saveNotes(List<Note> notes) async { Future<Directory> saveNotes(List<Note> notes) async {
@ -44,7 +47,7 @@ class FileStorage {
var filePath = p.join(dir.path, note.id); var filePath = p.join(dir.path, note.id);
var file = new File(filePath); var file = new File(filePath);
var contents = JsonEncoder().convert(note.toJson()); var contents = noteSerializer.encode(note);
await file.writeAsString(contents); await file.writeAsString(contents);
} }

View File

@ -3,6 +3,7 @@ import 'dart:io';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:journal/serializers.dart';
import 'package:path_provider/path_provider.dart'; import 'package:path_provider/path_provider.dart';
import 'package:path/path.dart' as p; import 'package:path/path.dart' as p;
import 'package:uuid/uuid.dart'; import 'package:uuid/uuid.dart';
@ -19,14 +20,10 @@ Future<Directory> getNotesDir() async {
} }
class StateContainer extends StatefulWidget { class StateContainer extends StatefulWidget {
final FileStorage fileStorage;
final Widget child; final Widget child;
StateContainer({ StateContainer({
@required this.child, @required this.child,
this.fileStorage = const FileStorage(
getDirectory: getNotesDir,
),
}); });
static StateContainerState of(BuildContext context) { static StateContainerState of(BuildContext context) {
@ -43,12 +40,18 @@ class StateContainer extends StatefulWidget {
class StateContainerState extends State<StateContainer> { class StateContainerState extends State<StateContainer> {
AppState appState = AppState.loading(); AppState appState = AppState.loading();
FileStorage fileStorage;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
widget.fileStorage.loadNotes().then((loadedNotes) { fileStorage = new FileStorage(
getDirectory: getNotesDir,
noteSerializer: new MarkdownYAMLSerializer(),
);
fileStorage.loadNotes().then((loadedNotes) {
setState(() { setState(() {
appState = AppState(notes: loadedNotes); appState = AppState(notes: loadedNotes);
}); });
@ -65,7 +68,7 @@ class StateContainerState extends State<StateContainer> {
void setState(VoidCallback fn) { void setState(VoidCallback fn) {
super.setState(fn); super.setState(fn);
widget.fileStorage.saveNotes(appState.notes); fileStorage.saveNotes(appState.notes);
} }
void addNote(Note note) { void addNote(Note note) {