Flutter Framework uses Dart as programming language and Framework has a set of utility functions through which you can add UI Elements and Widgets in your Flutter App. And Flutter SDK allows you to build and deploy and customize your Flutter Apps. Because Dart is strongly typed Object Oriented programming language.
Why use Flutter?
What are some advantages of Flutter? It helps you:
Be highly productive
Develop for iOS and Android from a single codebase
Do more with less code, even on a single OS, with a modern, expressive language and a declarative approach
Prototype and iterate easily
Experiment by changing code and reloading as your app runs (with hot reload)
Fix crashes and continue debugging from where the app left off
Create beautiful, highly-customized user experiences
Benefit from a rich set of Material Design and Cupertino (iOS-flavor) widgets built using Flutter’s own framework
Realize custom, beautiful, brand-driven designs, without the limitations of OEM widget sets
Flutter includes a modern react-style framework, a 2D rendering engine, ready-made widgets, and development tools. These components work together to help you design, build, test, and debug apps. Everything is organized around a few core principles.
Widgets are the basic building blocks of a Flutter app’s user interface. Each widget is an immutable declaration of part of the user interface. Unlike other frameworks that separate views, view controllers, layouts, and other properties, Flutter has a consistent, unified object model: the widget.
A widget can define:
a structural element (like a button or menu)
a stylistic element (like a font or color scheme)
an aspect of layout (like padding)
and so on…
Widgets form a hierarchy based on composition. Each widget nests inside, and inherits properties from, its parent. There is no separate “application” object. Instead, the root widget serves this role.
You can respond to events, like user interaction, by telling the framework to replace a widget in the hierarchy with another widget. The framework then compares the new and old widgets and efficiently updates the user interface.
Widgets are themselves often composed of many small, single-purpose widgets that combine to produce powerful effects. For example, Container, a commonly-used widget, is made up of several widgets responsible for layout, painting, positioning, and sizing. Specifically, Container is made up of LimitedBox, ConstrainedBox, Align, Padding, DecoratedBox, and Transform widgets. Rather than subclassing Container to produce a customized effect, you can compose these, and other, simple widgets in novel ways.
The class hierarchy is shallow and broad to maximize the possible number of combinations.