Flutter Local Storage

A Flutter package for secure local storage of key-value pairs, designed with encryption and singleton patterns. This package leverages the path_provider and encrypt libraries to store encrypted data in a JSON file located in the app's document directory.

Features

  • Singleton Design: Ensures a single instance of the storage class throughout the app.
  • Data Encryption: Uses AES encryption for secure data storage.
  • Key-Value Storage: Store, retrieve, update, and delete key-value pairs easily.
  • Persistent Storage: Data is saved to a JSON file that persists across app sessions.

Installation

Add the following to your pubspec.yaml file:

dependencies:
  flutter_secure_local_storage: ^0.0.1

Then, import it in your Dart code:

import 'package:flutter_secure_local_storage/flutter_secure_local_storage.dart';

Usage

Initialization

Initialize the storage by calling initFlutterLocalStorage with a secret key:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  final storage = FlutterLocalStorage();
  await storage.initFlutterLocalStorage(secretKey: 'mySecretKey');
}

Writing Data

To store data with a key, use the write method:

await storage.write('username', 'JohnDoe');

Reading Data

Retrieve stored data using the read method:

final username = storage.read('username', defaultValue: 'Guest');
print(username); // Output: JohnDoe

Removing Data

To remove specific data by key:

await storage.remove('username');

Clearing All Data

To clear all data stored in the file:

await storage.clearAllData();

Example

Here’s a full example showcasing basic usage:

import 'package:flutter/material.dart';
import 'package:flutter_secure_local_storage/flutter_secure_local_storage.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  final storage = FlutterLocalStorage();
  await storage.initFlutterLocalStorage(secretKey: 'mySecretKey');

  await storage.write('username', 'JohnDoe');

  final username = storage.read('username', defaultValue: 'Guest');
  print(username);

  await storage.remove('username');
  await storage.clearAllData();
}

How It Works

Singleton Pattern:

FlutterLocalStorage uses a singleton pattern to ensure a single instance is used across the app.

Encryption:

Data is encrypted using AES encryption and stored in a JSON file.

Data Handling:

Each write, read, and delete operation directly updates the JSON file for persistence.

Dependencies

  • path_provider: For accessing device paths.
  • encrypt: For AES encryption and data security.
  • crypto: For generating a secure SHA-256 key.

License

MIT License

This README provides an overview, installation instructions, usage examples, and technical details to help users understand and utilize your package.