Context in Android vs BuildContext in Flutter — Comparing the Two Worlds
I come from a Native Android development background. I have written applications using Java and Kotlin for years, and only got my hands on Flutter last year. If there was something I noticed while creating my first widget it was this word — “context”.
So what exactly is a Context? Does context have the same importance in both Android and Flutter worlds? Why is it called BuildContext in Flutter? What is the difference between the two? Or is there even a similarity?
Cutting it short: there is no similarity. While the Android Context is a bridge between your app and the Android system, the Flutter BuildContext represents the location of a widget within the widget tree hierarchy. Let’s take a look on how these two work and what they are used for..
1.1 Android Context — Technical explanation
Context in Android is a fundamental class that acts as a gateway to the application’s resources, system services, and environment.
As shown in the diagram above, the fundamental classes like Activity, Service and Application are subclasses of Context.
1.2 Android Context — Practical explanation
Context is a class in Android that provides your app access to external resources. If you need to get anything done in the system which is not a part of your app’s process you will need a Context
instance. It acts like the bridge between your app and the Android system (or other apps in the system).
For example, if your app needs to read or write to a local database (which is a part of the device’s file system) it will need a Context
instance. Or, if your app needs to launch an intent (implicit or explicit) it will need a Context
instance.
💡 Bonus Tip: Context instances are of many types and the types are just scopes. An Application Context is different from an Activity Context, and so is a Service Context. I will write about the differences between these in a subsequent blog. Using the wrong context instance can also lead to memory leaks.
2.1 Flutter BuildContext — Technical explanation
BuildContext in Flutter represents the location of a widget within the widget tree hierarchy. Every widget in Flutter receives a BuildContext
during the build phase, allowing it to be positioned correctly in the widget tree. BuildContext is also needed for navigation between screens and routes, theme management and other interface-related tasks.
2.2 Flutter BuildContext — Practical explanation
When a widget needs to build, regardless of whether it is a StatelessWidget
or a StatefulWidget
, Flutter identifies the affected child widgets that need to be (re)drawn and pinpoints them in the tree using their BuildContext
instance.
setState(() {
status = Status.loading;
});
Or, when you pop a screen, Flutter identifies which exact widget to remove using the provided BuildContext
instance.
Navigator.pop(context);
Conclusion
To understand the difference between Context in Android and BuildContext in Flutter, we have to understand that in action Flutter is just a layer on top of running native applications.
Context empowers Android developers to access system services, resources, and manage application state, while BuildContext facilitates the efficient rendering and updating of widgets in the Flutter framework. Let me know if this comparison was insightful and let’s meet in another blog. Happy Coding!