Since this is a crash course, I’m going to only focus on the useful and most commonly used features of Flutter and mobile development.
In each group of lessons, we’ll be working with realistic screens that we typically find in mobile apps. The code will also be “end to end”, where we will go beyond Flutter. For example, we will work with web services and third party Dart libraries, with approaches common in real apps and topics that are not covered in the Flutter documentation.
I write Flutter apps in my free time and ever since submitting my first Flutter app, have learned a lot about what the common, useful features were in Flutter as well as the useful Dart libraries out there. I also wasted my time a bit initially learning Flutter features and widgets that I ended up not needing.
Hey, my name's Nick. I'm really excited to be able to finally offer this course. You probably know me as @seenickcode on Twitter. I've been a passionate Flutter follower since late 2017. I love to write apps with Flutter in my free time (here's one, and another I'm working on as of Aug 2018), as well as write about Flutter on Medium (some of my articles are here, here and here). I live with my wife Irina, a mobile UX designer and son Felix just outside of NYC in the beautiful Hudson Valley.
First, a note on how this course is organized. We'll be always working on realistic types of screen that are typically used in most apps out there: a login form, product detail screen, a list of some type, etc etc.
I've broken up these screens or "recipes" by groups of short, focused lessons, each of which will cover a subset of the functionality of each screen. The last lesson in each module will summarize the final piece of code, which will be posted on Github.
Throughout this course, we will learn Dart bit by bit. I will explain Dart concepts and features as I walk through code. I think this makes learning Dart much more fun. Though, if you want to read up on Dart beforehand, please go right ahead.
Flutter is a framework for crafting cross platform, native mobile apps using a single codebase and programming language. In Google's words: "Flutter is Google’s mobile app SDK for crafting high-quality native interfaces on iOS and Android in record time. Flutter works with existing code, is used by developers and organizations around the world, and is free and open source."
I've taught Java-based developer courses in the past in Germany and India for larger companies. I've also have been mentoring my brother-in-law and got him from absolute zero knowledge in programming to now a React Native developer. So while I've never developed an online course, I've decided to give this a try.
My goals are to promote Flutter enough so that it surpasses technologies such as React Native. Don't get me wrong, React Native is great (I use it all the time at work btw) but after seeing the capabilities, speed and developer experience of Flutter, I think Flutter deserves to be the technology of choice for cross platform, native mobile development.
I also build apps in my free time, so I have a long term interest in sticking with Flutter because of how productive I can be using it.
Lastly, I love helping other developers grow their careers and become excited about software engineering, the best profession there is :-)
Material Design is a "design language" developed by Google in 2014. That's fancy UX talk for basically a standard for how UIs can be designed. While Material Design can be used for web and mobile, platform and OS agnostic, Material Design is, in reality heavily used throughout the Android app world.
"But what about iOS apps" you say? Technically Material Design can be used for iOS apps yet the reality of it is that Apple has already their own style guidelines which are prevalent throughout the iOS app world.
So why is this important to know? Well, Flutter offers a very comprehensive library of high quality, customizable Material Design widgets. As for iOS widgets, Google does offer some of these yet there is minimal support for them, as the Flutter team has chosen to go with a single, unified, high quality widget library for all to use.
At the end of the day, if you want to develop Flutter apps for both iOS and Android, if the app is very simple, go with Material Design. If you want to develop the next iOS Music, Apps, or Contacts app, making sure the UI very closely follows the iOS SDK style, you will be out of luck more or less, again, since Flutter has only basic widgets implemented.
In my opinion, this doesn't matter a lot of the time, because most companies who offer an app for both iOS and Android, end up choosing to design the app with something custom. By custom, I mean that common components like a navigation bar, bottom tab bar, back button will look pretty much the same on both platforms. In this case, and in this course, we will focus on crafting custom UIs that most app users are used to, so nothing "super Material Design" like or "super iOS" like.
With that said, we will be using Material Design components and simply will customize them to look wonderful and again, not seem like they are biased or look like they are for one platform or another. For example, take a form field validation error message. With Material Design, a user will see this error message under the relevant form field. On iOS, the user, in a trivial implementation will simply see an iOS alert dialog instead.
Head over to lesson one from the homepage to continue.