LocalJsonPersist class

Save a simple-object in a file, in UTF-8 Json format.

Use save to save as Json:

var persist = LocalJsonPersist("xyz");
var simpleObj = "Hello";
await persist.saveJson(simpleObj);

Use load to load from Json:

var persist = LocalJsonPersist("xyz");
Object? decoded = await persist.loadJson();

Examples of valid JSON includes: 42 42.5 "abc" 1, 2, 3 "42", 123 {"42": 123}

Examples of invalid JSON includes: 4, 5, 6 // Not valid because Json does not allow two separate objects. 1, 2, 3 // Not valid because Json does not allow comma separated objects. 'abc' // Not valid because string must use double quotes. {42: "123"} // Not valid because a map key must be of type string.

Constructors

LocalJsonPersist(Object dbName, {String? dbSubDir, List<Object>? subDirs})
Saves to appDocsDir/db/${dbName}.json
LocalJsonPersist.from(File file)
Saves to the given file.

Properties

dbName String?
final
dbSubDir String?
final
hashCode int
The hash code for this object.
no setterinherited
runtimeType Type
A representation of the runtime type of the object.
no setterinherited
subDirs List<String>?
final

Methods

delete() Future<bool>
Deletes the file. If the file was deleted, returns true. If the file did not exist, return false.
exists() Future<bool>
Returns true if the file exist. False, otherwise.
file() Future<File>
Gets the file.
length() Future<int>
Returns the file length. If the file doesn't exist, or exists and is empty, returns 0.
load() Future<Object?>
Loads a simple-object from a JSON file. If the file doesn't exist, returns null. A JSON can be a String, a number, null, true, false, '{' (a map) or ']' (a list). Note: The file must contain a single JSON, and it can't be empty. It can, however simple contain 'null' (without the quotes) which will return null.
loadAsObj() Future<Map<String, dynamic>?>
Same as load, but expects the file to be a Map<String, dynamic> representing a single object. Will fail if it's not a map. It may return null.
loadAsObjConverting() Future<Map<String, dynamic>?>
Same as loadConverting, but expects the file to be a Map<String, dynamic> representing a single object. Will fail if it's not a map. It may return null.
loadConverting({required bool isList}) Future<Object?>
This method can be used if you were using a Json sequence file with a ".db" termination, and wants to convert it to a regular Json file. This only works if your original ".db" file has a single object.
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
save(Object? simpleObj) Future<File>
Saves the given simple object as JSON. If the file exists, it will be overwritten.
toString() String
A string representation of this object.
inherited

Operators

operator ==(Object other) bool
The equality operator.
inherited

Static Properties

appDocDir Directory?
no setter
defaultDbSubDir String
The default is saving/loading to/from "appDocsDir/db/". This is not final, so you can change it. Make it an empty string to remove it.
getter/setter pair
useBaseDirectory Future<void> Function()
If running from Flutter, the default base directory is the application's documents dir. If running from tests (detected by the LocalFileSystem not being present), it will use the system's temp directory.
getter/setter pair

Static Methods

decodeJson(Uint8List bytes) Object?
Decodes a single JSON into a simple object, from the given bytes.
encodeJson(Object? simpleObj) Uint8List
Decodes a single simple object into a JSON, from the given simpleObj.
pathName(String? dbName, {String? dbSubDir, List<String>? subDirs}) String
resetFileSystem() → void
setFileSystem(FileSystem fileSystem) → void
You can set a memory file-system in your tests. For example:
simpleObjsToString(List<Object?>? simpleObjs) String?
useAppCacheDir() Future<void>
If running from Flutter, this will get the application's cache directory. If running from tests, it will use the system's temp directory.
useAppDocumentsDir() Future<void>
If running from Flutter, this will get the application's documents directory. If running from tests, it will use the system's temp directory.
useAppDownloadsDir() Future<void>
If running from Flutter, this will get the application's downloads directory. If running from tests, it will use the system's temp directory.
useCustomBaseDirectory({required Directory baseDirectory, Directory? testDirectory}) Future<void>
If running from Flutter, the base directory will be the given baseDirectory. If running from tests, it will use the optional testDirectory, or if this is not provided, it will use the system's temp directory.

Constants

jsonTermination → const String
The default is adding a ".json" termination to the file name.