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.

--

--

Tiger Asks...

🇨🇭-based Software Engineer with a lot of questions and some answers.