Default shared prefrences in android comes with limitations. Developers cant save objects to it, neither are those encrypted. This is to make the storage much more easy, you can now save the models to local storage by calling a single function. And guess what, its also encrypted! Zero boilerplate!


For installation you may see: https://pub.dartlang.org/packages/encrypted_prefs

How to use

Add serialization/deserialization technique to your object

/// Sample class used for storing locally
class User {
  final String username;
  final String password;

  User(this.username, this.password);

  bool operator == (user) => user is User && user.username == username && user.password == password;

  /// Serializing technique
  User.fromJson(Map<String, dynamic> json)
      : username = json['Username'],
        password = json['Password'];

  /// And deserializing
  Map<String, dynamic> toJson() => {
        'Username': username,
        'Password': password,

Generate a secure key and keep it in the safe place.

/// You can generate encryption key using EncryptedPrefs encryptionKey = await prefs.generateRandomKey();

Extend your adapter with FlagChatAdapter and pass context to the adapter

class ChatAdapter(context: Context, private var list: ArrayList) : FlagChatAdapter(context)

# Store and retrieve objets with encryption
Its one liner code
To encrypt and save, you just need to call set method

/// Save data in local storage with your object against key and encryption key await prefs.set("User", user, encryptionKey);

To get the decrypted object all you need to do is following

/// Retrieve your data from local storage with your key, encryption key and the serialization technique you are using prefs.get("User", encryptionKey, (json) => User.fromJson(json)).then((value) { if (user == value) { /// Do whatever you want :) } });

# Yes! Is it async
Yes! ```EncryptedPrefs``` are created by using the best technique and approaches availabe.
This is async and you dont have to worry about anything.

# Contributions

Pull requests are welcome! The best contributions will consist of substitutions or configurations for classes/methods known to block the main thread during a typical app lifecycle.

I would love to know if you are using FlagChatAdapter in your app, send an email to Salmaan Ahmed




Built-in types and core primitives for a Flutter application. [...]


Support for asynchronous programming, with classes such as Future and Stream. [...]
Classes and utilities that supplement the collection support in dart:core. [...]
Encoders and decoders for converting between different data representations, including JSON and UTF-8. [...]
Built-in types, collections, and other core functionality for every Dart program. [...]
Interact with developer tools such as the debugger and inspector. [...]
Mathematical constants and functions, plus a random number generator. [...]
Lists that efficiently handle fixed sized data (for example, unsigned 8 byte integers) and SIMD numeric types. [...]


File, socket, HTTP, and other I/O support for non-web applications. [...]
Concurrent programming using isolates: independent workers that are similar to threads but don't share memory, communicating only via messages. [...]