avatarTiger Asks...

Summary

A beginner is documenting their journey of learning Flutter to build a personalized language learning Android application inspired by Duolingo's widget feature, aiming to manage tasks and build consistency in language practice.

Abstract

The author of the article is embarking on a learning journey with Flutter, starting from scratch. They plan to create an Android application that mimics the functionality of Duolingo's widget, which is designed to remind users to practice their language skills consistently. The project is broken down into 12 increments, starting with basic CRUD operations for tasks and progressing to more complex features like reminder notifications, widgets, and syncing with Google Tasks API. The author acknowledges their limited knowledge of Flutter and Dart but is motivated by the opportunity to learn, the desire to better understand frontend development, and the personal need for such an application to aid in their language learning.

Opinions

  • The author believes that the Duolingo widget is an effective tool for building consistency in language learning but finds it unsuitable for their specific language needs.
  • They express a modest view of their current understanding of Flutter, comparing Dart unfavorably to Kotlin and anticipating challenges with state management and testing.
  • The author is motivated by the chance to learn Flutter provided by their employer, the aspiration to reduce imposter syndrome by gaining frontend knowledge, and the practical use case of their project.
  • They are open to exploring mobile application development beyond their previous experience with Android and Kotlin, expecting Flutter to simplify the process.
  • The author is uncertain about how far they will progress with their project given time constraints but is optimistic about the learning experience.

Flutter from a complete beginner

A series from somebody who knows nothing for people who know nothing.

Parts:

First and foremost for me to document my learnings, but then I do hope these posts may prove useful to other people who start off learning because … well, I don’t know things, so I’ll have to figure them out.

This first post is going to provide a rough overview of what pet project I’ve dreamt up and go a bit into the motivation behind it.

The Project

Duolingo is a language learning platform. And it has this really great widget feature (cf. https://blog.duolingo.com/widget-feature/ ), where their emotionally manipulative mascot bird is prominently reminding the user to not forget to practice today such as to keep their “streak” (i.e. the number of consecutive days practiced) running.

The duolingo widget in some of its forms

I really like that feature, and I’ve observed first-hand how that kind of widget is helpful in building consistency, but for the language I’m learning, Duolingo is not really suitable and so I don’t get to make use of it.

So I’m going to build my own android application.

As far as mobile applications go, TODO lists have long been the “hello world” project for newcomers. I’m going to put a spin on it, to make it more interesting. I broke down my project into 12 increments:

  1. CRUD for one-off completable tasks
  2. CRUD for completable periodic tasks (i.e. tasks to be repeated at a fixed interval), for now just for tasks that need be done once every X days
  3. reminder notifications (both for one-off and periodic tasks) at user-specified times
  4. reminder widget for periodic tasks: show “call to action” image if task is due but not completed, show “task done” image if task was completed and isn’t yet due again
  5. streak counter for periodic tasks
  6. more widget images for diversity
  7. UI testing with Flutter
  8. support for hour-based periodic tasks (“do every Y hours”, with time limit within which the tasks needs to be completed)
  9. support for fixed-time periodic tasks (“do every X days at Y o’clock”, with time limit within which the tasks needs to be completed)
  10. support for multiple-times-a-day fixed-time periodic tasks (“do every X days at U and V and Y o’clock”, with time limit within which the task needs to be completed)
  11. add cut-off date to periodic tasks (“stop periodic tasks at a certain date”)
  12. support for optional sync with google tasks API

How far down this list will I get before I run out of time I can allot to this project? I don’t know, but that’s the plan anyway.

What do I already know about Flutter?

If this section was very long, the title of this article wouldn’t be very honest. Most of these, I just overheard from our frontend devs.

  • it’s a framework for building multi-platform apps
  • it uses Dart as its language
  • Google supports it
  • the concept of a “widget” is important
  • something called a “bloc” is somehow related to state management
  • testing is a bit of a pain in the neck

I’ve not worked with Dart before, but from what I’ve read online, it seems to be something like a worse Kotlin. So while I’ll probably curse the lack of certain features like scope functions, that should flatten the learning curve a bit. Importantly, it comes with null-safety and extension functions.

Why Flutter?

Even though I’ve been in a full-stack-ish position for years, I’ve always been more of a backend engineer at heart.

So why would I bother learning Flutter?

First (and perhaps most boring) of all, I have the opportunity to. My current employer is looking to expand company knowledge in Flutter, I have some self-study time that I can allot to this.

Second, I want to understand frontend engineers better. For if what I wrote about frontends were true, nobody would be interested in doing them.

Then, admittedly, to get rid of a bit of an impostor syndrome. These past couple of years, I’ve mainly been working on a Spring Boot application with a Vaadin interface. Vaadin is very convenient for people like me, as it allows me to write the frontend in the same Kotlin I use to write the server (unless some functionality isn’t supported, that’s when you hack the functionality into the framework by means of JavaScript injections). And while that setup technically would allow me to call myself a full-stack engineer, I do feel such a title is meaningless unless I understand a more “pure frontend” kind of technology.

Then, of course, mobile applications. I have dabbled in Android applications before. And while I’m very grateful for the simplifications Kotlin has brought to the platform, it’s been years since I’ve written anything remotely useful and I wouldn’t be opposed to writing more in the future. Flutter is supposedly making this easier, so why not give it a try?

And finally, I have an actual use case that should keep me motivated throughout the project.

Software Engineering
Flutter
Coding
Programming
Software Development
Recommended from ReadMedium