Flutter is seeing a significant surge in usage recently. With Google’s commitment to bringing it into mainstream app development, we believe that it’s here to stay and will be used by more developers and companies.
The Flutter community has recently announced many exciting new updates in the framework, including new plugins, and other tools. Flutter has attained more popularity after the recent updates.
Unlike other cross-platform technologies like React Native and Xamarin, Flutter has a much more comfortable, faster, and stable development tooling, making it easier to pick up. Thanks to the fantastic community and ecosystem, Flutter also has a massive number of packages for just about everything.
However, not all packages are of high quality, and it’s essential to know the high-quality ones. Hence, here we are writing about those packages which we use when doing app development using Flutter.
Dio is our goto HTTP client package for Flutter. The standard HTTP package is excellent, but it leaves a lot to be desired. With a very stable API, it includes things like Interceptors, Global configuration, FormData, Request Cancellation, File downloading, Timeout, etc.
All of the added features in Dio makes doing HTTP calls a breeze. For example, using interceptors, we achieve mock testing of APIs while global configuration helps in quickly changing the environment from testing to production.
Almost every mobile application needs to have some data caching and offline saving mechanism. We use the shared_preferences package to achieve such functionality when doing Flutter app development.
This package wraps NSUserDefaults (on iOS) and SharedPreferences (on Android), providing a clean and straightforward API to persist user data in a Flutter app. It is highly recommended for caching non-relational data offline
Dependency injection is a design pattern that is used to implement IoC (Inversion of Control). In simple terms, it means that the dependencies are created outside the classes and injected into them.
This package makes it easy to perform dependency injection in your Flutter application. We use it for injection things like shared preferences, databases, dio, etc. Unlike most packages, this package does not use mirrors and uses a factory approach instead. This results in better overall performance.
In a sense, Provider is a dependency injection tool. But when combined with ChangeNotifier, it morphs into a state management framework. After trying many sophisticated techniques like BLoC, MobX, etc., we decided to stick with Provider (with ChangeNotifier) to implement state management in our Flutter apps. The results have been great. The code is maintainable, and the performance is top-notch.
Shared preferences are suitable for storing trivial data like tokens, user profiles, etc. But when it comes to saving complex, more relational data SQFlite is our goto package.
It essentially wraps SQLite APIs present in Android and iOS and effortlessly exposes them to Flutter. This means that you don’t need to worry about many things when developing cross-platform apps with Flutter. It comes with full query support and simple APIs to understand.
Check out our blog post to learn more about SQFlite and how to use it in your mobile app. It also explains how to use the flutter_simple_dependency_injection package to inject the database object into various classes.
Although Flutter is an excellent tool for building cross-platform apps, however, just like every other framework, it has its issues. One of them is the dependency on the BuildContext object.
Want to show Snackbar? You need the right BuildContext.
Want to show a dialog? You need the right BuildContext.
Want to navigate to a new screen? You need the right BuildContext.
There are so many more cases.
If you want to get rid of the dependency on BuildContext, we suggest using the Get package. We have to say this- this package is seriously under-rated. It has reduced our boilerplate code by almost 20%! This is huge when writing enterprise-class applications.
This package allows you to show Snackbars, dialogs, bottom sheets, do navigation (even nested ones), WITHOUT using BuildContext! Note that we do not use this library for state management because we’re happy with Provide + ChangeNotifer.
We all are merely aware of the increasing popularity of the Flutter framework. These mentioned Flutter packages help to develop Flutter apps without much hassle. The Flutter packages list is curated, considering the ease of maintenance, package health, and overall score. With Flutter packages, developers do not need to start Flutter app development from scratch.
Our adept development team has worked on many Flutter projects and come out with the most used and essential Flutter packages.