Overview

Lite Ref is a lightweight dependency injection library for Dart and Flutter.

Installation

dart pub add lite_ref

Why Lite Ref?

  • Fast: Doesn't use hashmaps to store instances so it's faster than all other DI libraries.

  • Safe: Uses top level variables so it's impossible to get a NOT_FOUND error.

  • Lightweight: Has no dependencies.

  • Simple: Easy to learn with a small API surface:

    • Create a singleton:

      final dbRef = Ref.singleton(() => Database());
      
      assert(dbRef.instance == dbRef.instance);
      
    • Use it:

      final db = dbRef.instance; // or dbRef()
      
    • Override it (for testing):

      dbRef.overrideWith(() => MockDatabase());
      
    • Freeze it (disable overriding):

      // overrideWith is marked as @visibleForTesting so this isn't really necessary.
      dbRef.freeze();
      
    • Create a transient instance (always return new instance):

      final dbRef = Ref.transient(() => Database());
      
      assert(dbRef.instance != dbRef.instance);
      
    • Create a singleton asynchronously:

      final dbRef = Ref.asyncSingleton(() async => await Database.init());
      
    • Use it:

      final db = await dbRef.instance;
      
    • Use it synchronously:

      // only use this if you know the instance is already created
      final db = dbRef.assertInstance;
      

Click here for a flutter example with testing.

Libraries

lite_ref_core
A lightweight dependency injection package for dart and flutter with support for overriding for testing.