Search code examples
flutterdependency-injectionservice-locatorflutter-provider

Provider vs. Get_it


Searching for Dependency Injection solutions for Flutter, I found two awesome libraries: provider and get_it.

As far as I can see, provider has more boilerplate, but it fits really nicely with Flutter, allowing Consumer to rebuild parts of the Widget tree, once an injected value change.

get_it on the other hand is more straightforward, easier to use, and not dependant on Flutter, so can be used with any Dart code.

Are there any more differences and limitations between them? I know this is kinda opinionated, but Flutter is so new that it's good to register publicly benefits, side-effects and gotchas.


Solution

  • The main difference between both is that provider is not strictly dependency injection.

    By using widgets, provider is also able to:

    • providers are compatible with the Flutter devtool
    • know when a variable cannot be accessed (scoped to a tree)
    • know when to create and dispose of an object
    • synchronize model -> model and model -> UI
    • override some values for only a specific widget tree
    • voluntarily prevent circular dependency

    All of these are, while optional, good for the health of your app in the long run.

    It ensures that you're always up to date, makes it harder to have "spaghetti code", and makes your different elements more composable.