Daria’s Flutter diaries #4

Daria Orlova
7 min readJan 24, 2022

--

https://unsplash.com/photos/OvLXbURo9Wo

whoami

My name is Daria, and I’m a Flutter developer at a mobile studio, Chili Labs. Our main specialty is customer projects, and I’m currently working on one of them and supervising others.

What is this about?

In this series, I talk about my daily work as a Flutter developer, as well as tap into my evening pet projects. Basically an overview of the challenges, problems, interesting tasks, and just thoughts that I encounter during the week (or two 😁). And a small disclaimer: this is not a tutorial, in case I talk about any solutions, they are just my takes on the issues, and you can come up with different ones. So with that in mind, let’s dive in 🤿

# Technical

Now that the holidays are over and everyone’s back to work, my backlog finally had some new features to implement and not just bugs to fix 😁

1. Promote app updates via Firebase Remote Config

Why do the users usually leave reviews?
1. They are your friends and family
2. You encourage them with a "rate app" popup
3. Something doesn't work for them and they're eager to let you know that with a 1⭐ review 😅

The problem with the No.3 is that even if the issue is fixed, some of the users may not receive it due to disabled autoupdates. And that 1⭐ will keep shining in your app store 🙈
So we decided to explicitly promote app updates to the users.

Android actually has an API for this, and there are 2 types of update flows: flexible and immediate. Flexible flow allows the user to skip the updates… and immediate, well, doesn’t allow skipping the updates 😁

iOS doesn’t have a similar API, so we decided to go with a custom solution. We chose Firebase Remote Config. So there are several variables in the config — the version to update to, should the update be forced, and of course different values for staging and production. This allows us to use custom views to promote updates and also gives us more control. And it was quite easy to implement too 😁

2. Firebase performance monitoring

Recently, we had an internal presentation from a co-worker about how they refactored an app that was given to them by a different company. He mentioned tracking network requests speed via Firebase performance in order to determine which API endpoints have problems. Somehow this Firebase feature went past me, but once I learned about it, I added it to our app the same day 😂 We do have some issues with the requests speed, but to be sure about it, we lacked a better picture with a bigger selection of requests. We wrapped our GET requests into the tracing API, and now we can monitor it all in a convenient way on the dashboard.

3. Promo banners

In order to promote some features and advertise product updates, our client introduced the promo banners feature. The idea is that the banners should be native in-app views so that they feel natural in the UI, yet their content should be flexible since some campaigns are temporal, some are only for a specific audience, etc.

So we agreed on a format:

  • several types of backgrounds
  • a couple of possible foregrounds
  • length of the promo text
  • an action for the button (external URL or an internal deep link)

The information about the banners comes from the API, but there is a catch: the backend isn’t connected to the localization service (we use remote localizations), so they can’t send us the actual texts… But they also can’t send us the translation keys, that are not included in the app code. So the solution was to reserve an X amount of localization keys, e.g. campaign_title_1, campaign_title_2 and so on and just reuse them for different campaigns. Those keys are set up in a separate admin panel and saved to the database. The same goes for the URLs. I find this to be flexible, yet an easy solution. A good thing that we can test all the banners on the staging environment before pushing them live 😁

4. Custom currency formatting

Maybe you remember (yeah, right, Daria 😂), but in my first Daria’s Flutter Diaries I described how I implemented locale-specific currency formatting. The challenge was that we support 24 languages and some formats specified by the translators were different from the ones specified in the intl package, so we couldn’t just fall back to them. And if that isn’t enough, this week I implemented a possibility for the user to set up custom formatting: select the group & decimal separators, as well as the currency sign placement. Since I had this feature in mind when implementing the locale-based formatting, everything was already set up. So all the callers of the CurrencyFormatter didn’t need to change anything, because I injected them with the extended CustomCurrencyFormatter, which listens to custom changes under the hood and formats based on that 😛

# Community

1. First meeting with my mentees from RigaTechGirls

I mention that I’m mentoring in RTG in almost every diary’s post, but this is an important part of my Flutter world right now 😅 This is a new experience for me in the regard that I’ve never mentored on Flutter outside my work, so I’m excited, yet nervous too. We had our first meeting with mentees, discussed goals, processes, and some practical things related to IT in general and Flutter specifically. They’re now learning Dart, and I’m trying to work out the most effective approaches to help them reach their goals 🤩

First meeting for mentors: we get some valuable workshops too! 🤩 The wine is non-alcohol 😂

2. Twitter Spaces

When Clubhouse emerged, I wasn’t sold. Probably because I’m an Android user 😂 But the concept still seemed weird to me. Maybe that is because Clubhouse was yet another social network where you need to manage an account and all the burden associated with that. But since spaces aren’t the only feature of Twitter, they feel more organic, and I actually enjoy some of them on a regular basis! Even better is that they’re now recorded, and you can listen later if you missed them. Or if you’re on a train that just can’t handle a stable connection across the cities of Latvia 😬

Of course all about Flutter 😁

  1. The “Flutter dArtists” — hosted by Mangirdas and Danny. This is a weekly Friday space with a cozy atmosphere, where topics vary each week depending on the speakers, but always sprinkled by Mangirdas jokes and just a fun ambiance overall. I encourage you to tune in into live to experience it 🤩
  2. The “Let’s talk Flutter” — hosted by Majid Hajian. This is a weekly Thursday (if I’m not wrong 🙊) space with very informative content related to development in general and Flutter in particular. The last couple of topics were “Deep work” & “Good code / bad code” and they were tightly packed with valuable information, so you will benefit from playing the recordings too!
  3. The “Flutter Dev Chat”. This is a more recent space that I’ve just participated once in (well… about participating, remember that train part? Well, I tried. Had to listen to the recording in the end 😂) hosted by Pawann Kumaarr and Deven Joshi. The last one was about “Creating your identity” — about creating content and your personal brand in the Flutter community. It was great and inspiring to hear the experiences of different people, I can relate to a lot of them.

3. Flutter Meetups

It is really great to see many local meet-ups related to Flutter being organized 🤩 There was one by Flutter Bangalore last week, but you can watch the recording on Youtube. And there is one by Flutter Tunisia upcoming on Wednesday, 26.01. I’m really looking forward to the “Flutter Deep Dive” by Cagatay Ulusoy and can recommend “Dart Null Safety Migration Tips” by Vince Varga, which I enjoyed at Flutter Barcelona in November 🤩

# Personal

So this is where I say that this will be the last Daria’s Flutter Diaries for a while (not forever!) 😅 I really enjoy writing this, but the reality is that I have so many things to do and so little time to do them. Well, classic 😂 But I really want to focus on finishing some goals, which are:

  1. Release some tutorials and not just blog posts (it’s embarrassing how much time one tutorial takes compared to a blog post)
  2. Finish that fuzzy search in Bunny Search and open-source the app already 😅
  3. Mentorship, of course!
  4. I also want to participate in conferences/meetups this year and there are some CFP’s already open, so I need to get moving 😁
  5. And, of course, release the 1.0 of that secret app that I’m working on. With this, I’m consistent by the way and have made great progress on it. Can’t wait to share 🤩

And with that I want to say thank you for reading, if you’ve enjoyed this article, don’t be shy about clapping, commenting, or following me. Let’s connect on Twitter — you can find me by @dariadroid, probably on one of the spaces that I’ve mentioned today 😛

Daria 💙

--

--

Daria Orlova

Flutter Developer @ChiliLabs • Tech writer, speaker & mentor • Co-founder of the Bunny Search app • Love traveling & animals. Especially cats!