Introducing the series
Tags: android, flutter, dart, ios
Published: 2019-12-01 15:46:51

![Header](https://thepracticaldev.s3.amazonaws.com/i/89huiel8s701v2ulyez7.png)
Hello, good people! I hope you’re having a wonderful day! I’ve recently decided to get into the world of writing. I want to write about something I’m extremely passionate about. I’ve been using Flutter for a while and really like using it. So, I’ve decided to write about it.

# Flutter?

### What is it?
Flutter is Google’s UI framework to develop cross-platform applications. Meaning, you can build applications for multiple platforms using a single code base. The stable version of flutter released in December of 2018. So, it's relatively new.

### Why should you care about Flutter?
1. **Developed and backed by *Google***, the tech giant behind Android mobile OS.
2. Although it has been out for little over a year, the ***flutter* community has been growing rapidly**. More and more people are trying it out and are absolutely loving it. *According to LinkedIn, it is the number one most sought skill in 2019.*
3. **Dart**, the language Flutter is written in, **compiles directly to native code**. For Android, it compiles to java, for iOS objective C, and for web JavaScript.
[Here’s an amazing article was written by Wm Leler that explains why Flutter uses Dart.](https://medium.com/hackernoon/why-flutter-uses-dart-dd635a054ebf)
4. **Features hot reload**. Watch your modified code take effect as soon as you hit save. An extremely useful feature when you’re designing app UI, as you can see what effect your code is having in real-time.
5. **Develop apps for multiple platforms** using a single code base.

### My history with Flutter
![Story time](https://media.giphy.com/media/Idz7cyLRe2bVm/giphy.gif)
I started learning flutter back in December of 2018. I’ve have been using it for mobile application development ever since. It’s been a rocky journey for me if I’m being completely honest. I didn’t follow any specific tutorials or took any course on it. (Flutter version 1.0 came out in December 2018. So there weren’t that many structured courses to begin with.) So, I read articles and documentation to learn about the framework. Built some small projects to get hands-on learning experience.  
But, it’s been great. Flutter is fun to use. Easy to learn. It has spoiled me to the point that I now don’t even want to do native app development anymore.

# Introducing the series

### My intentions
In this blog series, I’ll write articles about how I’m developing an app called Leaf. Whenever I sit down to develop the application, I shall write an accompanying post to clarify what I’m doing and why. There are a couple of reasons as to why I’m doing this.

1. Building an application from scratch using Flutter will help people get a good grasp of how it is used. So, **people can more easily learn it by doing.**
2. Explaining requires understanding first. I’ve been using Flutter for over a year. So, I want to take this opportunity to challenge my understanding of this framework. If I am unable to explain it well, that means I don’t understand it well enough myself. So, I’ll have to study up on topics to write each article. **This will further my knowledge in Flutter**.

### The topics I wish to cover
1. Basics of flutter
2. Firebase cloud services
3. Animation using flutter
4. State management using Bloc pattern
5. Asynchronous programming using Futures and Streams
6. Testing in Flutter

With all my intents and purposes out of the way let me now give a short introduction about the app which I will be building.

# Leaf: Social Media App

### Basic idea
I will develop a mobile application, called **Leaf**, using flutter completely from scratch. **Leaf** will be a simple social media application. It’s going to be an app for plant lovers. Using it people can share thoughts about plants and interact with each other. The features I have planned to include are:
1. User authentication.
2. Writing posts with image attachments.
3. Becoming followers of other users.
4. Reacting and commenting on posts.
5. Notification about the latest posts from followed users.
6. Searching for specific posts.

### Basic Design
![Rough sketch](https://thepracticaldev.s3.amazonaws.com/i/uix1bqom06s4jngrpde8.jpeg)

### Inspired by
So, why am I writing about developing an app that's for tree lovers? I'm a nature lover. But that wasn't my primary motivation for choosing this app as the theme for this series. It was mainly due to an event that's happening in YouTube as of writing this. A YouTuber called [Mr.Beast](https://www.youtube.com/user/MrBeast6000) in collaboration with many other YouTubers decided to plant 20 million trees by 1st January 2020. They're working with the [Arbor Day Foundation](https://www.arborday.org) to make this happen. For each dollar donated they have agreed to plant a single tree. 

Their undertaking is truly inspirational for me. This was my primary motivation for developing a nature centered social media app for this series. If you can, consider donating for a great cause. [Visit teamtrees.org](https://teamtrees.org/).

# Advice to beginners
> Learning something new can be overwhelming at first. Don’t worry. It’s the same for everyone.

I’ll be heavily hyperlinking documentation and articles for further reading in all my posts to aid you.

> The documentation can seem very confusing if not entirely frightening. There will be a lot of things you won’t understand and that’s OK.

Even I don’t understand most of the stuff the documentation refers to. Don’t worry about it too much. You’ll learn as you go on. Here’s my advice on how to tackle the learning process:

1. **Code along.** Read about the explanations I give or refer to additional resources if you want to.
2. If you understand that’s great. Then **play with different parameters to see what happens**. You’ll quickly understand what a widget is for and how to use it.
3. If you don’t understand then **try to go slow and re-read the explanations**. If it doesn’t work then ask for help. The community is great. People will almost always extend a helping hand. Start discussions here or anywhere and you’ll find answers very quickly.
4. If you’re still feel bothered by something, then **try to note it down and move on**. Along the line you’ll come across it again. And the knowledge you’ll build along the way will aid you to understand it. Sometimes you need to learn other things to get a good grasp of something else.

# Prerequisite knowledge

The series will be for flutter beginners. But some prerequisite knowledge is mandatory to understand what is happening in the code. These prerequisites are:

1. **Basic programming knowledge**
    A) Variables and Data types  
    B) Conditional statements like if-else and switch  
    C) Looping using for, while statements  
    D) Enumerators  
    E) Functions and their parameters, arguments and return types  
    F) Arrays both single and multi-dimensional  
2. **Object-Oriented Programming knowledge**
    A) Classes and objects  
    B) Inheritance  
    C) Abstract classes  
    D) Extending and implementing classes  
3. **Dart language.** You don’t need to know everything about dart. [Just follow this overview to get acquainted with the language.](https://dart.dev/guides/language) The following are enough:
    A) Variable and data types  
    B) Functions and different types of parameters  
    C) Maps and Lists  
    D) Enumerators  
    E) Classes  

Thanks for reading! I hope you have a great day. Happy coding!

# Important links
1. [GitHub Profile](https://github.com/Shakleen)
2. [Leaf GitHub Repository](https://github.com/Shakleen/Leaf)
3. [teamtrees.org](https://teamtrees.org/)

# Support me by
1. Reacting and sharing this article.
2. Following me in [GitHub Profile](https://github.com/Shakleen), [Dev](https://dev.to/shakleen) and [Medium](https://medium.com/@shakleenishfar).
3. Starring the [Leaf GitHub Repository](https://github.com/Shakleen/Leaf).
4. Discussing this project.
5. Giving me tips regarding Flutter and Dart.