Understanding Flutter - a beginner's guide
Tags: flutter, android, ios, dart
Published: 2021-07-15 05:51:19

##_What is Flutter?_
**[Flutter](https://flutter.dev)** is a tool that allows to build *native cross-platform apps* and that means for *iOS* and *Android*, with the one programming language and codebase. So let's have a closer look at this nice sentence here. Important is that we build *native cross-platform apps*, so we build both an *iOS* app and an *Android* app. We're not building a *web app* that runs in the browser, we're not building an app that gets *wrapped* by native apps, we build real apps, two different kinds of apps in the end for *iOS* and *Android*, which you then distribute through the different app stores, so through the **Apple App Store** and the **Google Play store**, that's what you get as a result.

Now you get there by using *one* programming language, so that you don't have to learn two different programming languages, one for *iOS*, one for *Android*, instead you have one programming language, **[Dart](https://dart.dev)** and also one *codebase*.

So you work in one project, you write your code once and you still get two different apps as a result and that's the cool thing about Flutter, you only learn one programming language, you only write your code once and you get two apps. Without Flutter, you would normally build an **iOS** app by writing some *[Swift](https://developer.apple.com/swift/)* or *[Objective C](https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html)* code and using the iOS development environment and for **Android**, you would be using *[Java](www.java.com)* with the Android framework or you would be using *[Kotlin](https://kotlinlang.org)* and also the Android development environment and you would have to learn all these different languages and tools and you would have to write two totally different apps or work in two totally different projects and with Flutter, that's not the case, one programming language and one codebase!

![Dart-Flutter](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8ghtekgpp5iiogdmfa46.jpg)
##_How it works?_
The term *Flutter* refers to two major things. One is an *[SDK](https://www.redhat.com/en/topics/cloud-native-apps/what-is-SDK)*, a *Software Development Kit*, you could say a collection of tools that allows you to write one codebase with one programming language because it includes tools to then *compile* this code, which normally would not run on *iOS* and *Android*, into *native machine code* that does run on these platforms because if there would be one programming language that would work on both platforms, we wouldn't need *Flutter*, but there isn't one!

Now therefore, the one programming language Flutter uses doesn't work on *iOS* and *Android*, so it needs to be compiled to *native machine code* for *iOS* and native machine code for *Android* so that we have code that has run on these platforms and that compilation task, along with a couple of other things, that's all part of Flutter but of course, it's not just a collection of tools, it also gives you everything you need to create beautiful applications.

It gives you a *framework*, a *widget library* for that one programming language which is called **Dart** which you can use to build beautiful Flutter apps.

It gives you a vast collection of reusable *UI* building blocks, these so-called *[widgets](https://developer.android.com/guide/topics/appwidgets/overview)*, so these are things like buttons, tabs, text inputs, drop downs, you get all of that out of the box. You can style them and customize them and then you build user interfaces with these tools. In addition, you get a couple of utility functions and generally, some *[packages](https://pub.dev/)* that help you build what your users see and what your users interact with and then that code which you built with the help of that framework, that is then compiled native machine code with the help of the *SDK*.
![Why Dart?](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dk9ky8qk45g30ysey4fj.png)
##_Dart_

Now as I mentioned, Flutter uses a programming language called *Dart*. *Dart* is a programming language which is focused on building front-end user interfaces, front-end apps. It's not limited to building mobile apps, that's just what Flutter uses it for but *Dart* is independent of *Flutter* and you can also build web apps with it. So it's a programming language built to make it really simple to build *front-end user interfaces*.

It was developed by [Google](www.google.com), just like Flutter, so these are actually two independent teams in Google but of course they're working together to improve each other and therefore, we have a hand in hand solution here and in case you already have some programming experience, it's an [object oriented](https://en.wikipedia.org/wiki/Object-oriented_programming) and strongly typed language and its syntax is a bit like a mixture of *[JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript)*, *[Java](www.java.com)*, *[C#](https://docs.microsoft.com/en-us/dotnet/csharp/)*.

##_In a nutshell_
*Flutter* builds up on *Dart*, it's a framework for *Dart* and *Dart* actually is the programming language which we're using, Flutter then just is a collection of tools, a set of features, utility functions and these widgets which are implemented using Dart, so that you don't have to reinvent the wheel there but you can write your own Dart code and use these existing widgets in your code so that you don't have to again reinvent how a button should look like and work but use the pre-built button instead and then just customize it to your requirements, that's how this works.
And in addition as mentioned, Flutter also gives you that SDK, so all these tools for compiling your code in the end.

Thanks for reading, hope you have a great day :)
Find me on GitHub [here](https://github.com/geekyprawins) to have a look at my Flutter repositories!😊