• What It Was Like to Write a Full Blown Flutter App
  • By Nick Manning
  • The Nuggets translation Project
  • Permanent link to this article: github.com/xitu/gold-m…
  • Translator: tanglie1993
  • Proofread by: Park-Ma, Atuooo

Update: I will be Posting a new Flutter course called Practical Flutter. It will begin at the end of July ’18. If you want to be notified, click here. 🚀

I had two breakfasts this morning because I needed all the brain power I could muster for blogging. I’ve had a lot to say since my last post, so let’s get started.

I am very excited that I can officially continue writing about Flutter as I am about to release my first Flutter app to the iOS and Android stores — only a week or two away! Because I’ve been writing this app in my free time, I’ve been refusing to be bothered for the past few months.

I haven’t been this excited about a technology since Ruby on Rails or Go was released. After years of deep learning about iOS app development, I was frustrated by how unfamiliar Android was. Also, previous cross-platform frameworks have had a hard time appealing to me.

Going to a cross-platform app development gathering two years ago, for example, I would have felt that everything was irregular, unstable, had a bad developer experience, was hard to use, or had been unavailable for the last year or two.

I have just finished my first Flutter app and feel that I can safely invest more time in this framework in the long run. Writing an APP is the final test of a framework, and Flutter passes this test. I was pleasantly surprised to be able to skillfully develop iOS and Android apps. I also love server-side development and scaling, and my wife Irina is a user experience designer, so it’s a powerful combination.

This blog post is going to be long because it covers a lot of stuff:

  1. My experience with Migrating iOS Apps to Flutter
  2. Ideas about Flutter so far
  3. Advice to the Google team

I decided to write down my thoughts as soon as possible in order to continue writing tutorials (and more apps!). .

1. Migrate iOS apps to Flutter

Since my last post on Flutter, I feel the logical next step is to really learn about Flutter in depth. I’m a big fan of tried-and-true, end-to-end tutorials (think Digital Ocean or even Auth0 tutorials). End-to-end, detailed, high-quality examples have always been what appeals to me about new technologies, because I can see the code that’s basically ready to go live and make sure I’m implementing the functionality the right way. I wanted to do the same thing, so I decided to write a tutorial on Flutter.

With these goals in mind, I decided that the best app for me would be to rewrite an iOS app THAT I had already published on the App Store. The Steady Calendar (Homepage, Product Hunt) is a custom synthesizer designed and developed by my wife Irina and me. We developed it a few years ago when we were living in Berlin. Since then, the product has fascinated us with designing, implementing, and releasing products that help others develop healthy habits.

Migrating the iOS app to Flutter took me one to two months of free time. This allows me to write good Flutter tutorials without pressure.

It’s cool that I can include the following in my tutorial because I implement them in the app:

  • Introduction before login.
  • Facebook/ Email registration and login.
  • A grid view that displays a calendar and allows users to highlight a day after completing a goal.
  • Cross-platform forms familiar to iOS and Android users.
  • Redux-style state management using the Scoped Model.
  • Custom UI with stacks, positioning elements, images, and buttons.
  • The list view.
  • Simple, multilingual, internationalized UI.
  • The cross-platform navigation bar is also familiar to iOS and Android users.
  • A control with a global style.
  • Integration testing.
  • Submit your app to the Apple App Store.
  • Submit your app to the Google Play Store.

2. Thoughts on Flutter so far

I have over 17 years of experience in backend and WebApp development, 4 of which I was heavily involved in iOS development, and I spent a lot of time working on React Native last year (I also released some React projects last year).

Here are some thoughts that come up while learning Flutter:

  1. The developer experience, the community spirit of the developers and the support they’ve given me has been amazing. Everything from Stack Overflow, Google Groups to blog posts is of high quality because people are so passionate about Flutter. Google engineers spend a lot of time answering questions on Google Groups in addition to their day jobs, which makes for an amazing community. They are very polite and professional in working with engineers from all backgrounds, which is not the case at many other companies. The developer community is very lively, the members are very positive and provide thoughtful answers. The documentation is also excellent. The library is stable. Flutter is based on Dart, a language that has been around for years, easy to learn, and time-tested. All in all, the developer experience was great.
  2. As I expected, there are relatively few third-party libraries using Dart. None of this is to say Dart isn’t suitable for use, at least not in my experience. Ninety-five percent of the features we need are already available, with the exception of third-party analysis tools, but simply encapsulating HTTP will do the trick.
  3. The Material Design control, the Flutter framework contains a lot of these things. It is good for quick and simple app development, but for professional, cross-platform apps, it will be unfamiliar to iOS users. I couldn’t present the Material Design control to my iOS users because it would make my app unfamiliar to them. Flutter certainly offers a range of iOS controls, but none of them are complete enough. Fortunately, most of the controls in my Steady app are already custom. For things like forms, that can be quite challenging. So in the end, documentation, samples, and the entire Flutter SDK rely heavily on Material Design. That’s fine, but for someone like me, there’s more balance.
  4. Developing a custom UI in Flutter is very smooth. After being spoiled by CocoaTouch/iOS, I have very high standards. After reading a lot of Flutter code and comparing their experience in developing a custom UI, the Google team did a really good job. Sure, there are some controls that I feel are too complex and can make the learning curve too steep, but that’s not a big deal. After writing a real app, people will soon be able to detect the characteristics of the most critical and commonly used controls (hey, I’ll cover that in a future tutorial).
  5. As an iOS user, I spent a few months developing the original iOS App Steady Calendar, and I’ll never forget the thrill of running it for the first time on a physical Android device. I guess this is because I’ve always particularly disliked other cross-platform mobile frameworks. If you spend months of your free time toiling away at something and find that you can run it on both major platforms, you’ll be hooked. This may not be helpful feedback for many people, but I need to share my opinion anyway!
  6. There are more design challenges to developing a cross-platform app, but this really has nothing to do with Flutter itself, it’s all about cross-platform development. When you are planning to develop a Flutter app, make sure you have a good designer and a good custom UI, otherwise you will be ready to decide whether your app should use Material Design or Cupertino controls depending on the situation. In the former case, this has less to do with Flutter and more to do with the challenges of developing cross-platform apps themselves. You need to make sure that the UI looks good for both Android and iOS users and that they can get used to it.
  7. Dart is a pleasure to learn and use. I like its stability and reliability compared to TypeScript or Flow. To be more specific, I have some React background and have learned React Native a lot (very much) in my day job over the past few months. I also have years of experience with Objective-C and then Swift. Dart is a breath of fresh air because it doesn’t try to get too complicated and has a solid core library and package. Seriously, I think even high school freshmen can do basic programming with Dart. I hear a lot of people complaining that they need to learn a new language, but for Dart it only takes an hour or two, or a day at most.
  8. Flutter is great. It’s not perfect, but in my personal opinion, its learning curve, ease of use, and available tools make it a better mobile development framework than any I’ve used before.

What should Google do

  1. Google team members and friends should continue to provide thoughtful, friendly and immediate support in Google Groups. This is a big plus and what makes the framework so great in terms of ease of use and support. The team that supports and nurtures the developer community is in a good, loving mood, and that’s important.
  2. Survey members of the developer community to determine which controls might be less useful. For less useful controls, simply remove them from documents and tutorials or discourage their use. For example, the ‘Center’ control is great for Hello, World containers, but I’ve never understood it. Why doesn’t the more commonly used “Container” have a property that does the same thing? This is a very low-level example, but I think it’s one of the reasons Go has been so successful, because its core library has been so simple for so long.
  3. More focused on iOS users. Material Design is great for quickly developing things for Android users. But I never use it for iOS apps. Compared to Swift, I feel that Flutter is much easier and doesn’t need to learn a lot of libraries. I think many iOS users would enjoy learning About Flutter if it had more ios-style controls.
  4. More tutorials for more realistic features and screens. I’d like to see more tutorials like this one: flutter. IO /get-started… And more “end-to-end” tutorials, including backend integration.
  5. App themes should focus less on Material Design. Again, I don’t want to use the “MaterialApp” control when developing iOS. The theme seems to be tightly coupled to it, but the theme should be more universal.
  6. Use Firebase less in your documentation or don’t push users to use it so often. I’ve found Firebase to be great for rapid development, and it’s very easy to use for new users. But a large number of people already have a back end or would never consider using Firebase. So I thought it would be helpful to focus more on how to finally use JSON and simple Web services. I had to read a lot of third-party tutorials because I didn’t think the documentation was realistic enough. I’ll elaborate on this in a future blog post.

So far, Flutter has made me feel very happy.

Next, I’ll consider rewriting another app I have in the iOS app Store, www.brewswap.co, which is more complex (Tinder-style photo swipes, live chat, etc.).

So far, these are the main drawbacks I can think of. Like all frameworks, it has a lot of weird issues and the learning curve isn’t entirely reasonable, but overall, Flutter makes me feel like I can invest a lot of time in it and, more importantly, enjoy using it.

Be prepared to receive the first few Flutter tutorials, and I hope I can provide some useful insights for those preparing to commit to Flutter – I say, get started!

If anyone has any questions, better ping me on Twitter @seenickcode.

Update: After registering, you will be notified when the Practical Flutter course goes online. 🚀

Use Flutter happily.

If you find any mistakes in your translation or other areas that need to be improved, you are welcome to the Nuggets Translation Program to revise and PR your translation, and you can also get the corresponding reward points. The permanent link to this article at the beginning of this article is the MarkDown link to this article on GitHub.


The Nuggets Translation Project is a community that translates quality Internet technical articles from English sharing articles on nuggets. The content covers Android, iOS, front-end, back-end, blockchain, products, design, artificial intelligence and other fields. If you want to see more high-quality translation, please continue to pay attention to the Translation plan of Digging Gold, the official Weibo, Zhihu column.