A month of Flutter: a look back

This is it. 31 blog posts in 31 days. Writing a month of flutter has been a ton of work but also lots of fun and a good learning experience. I really appreciate how supportive and and positive everyone as been.

Publishing experience

For the series I've been posting on bendyworks.com, DEV, my personal blog, and Medium. After publishing to these sites, I would put the Bendyworks link on Twitter, Reddit, and the Flutter Study Group Slack.

Posting to DEV was easy as they use Markdown just like the Bendworks blog. DEV also has built in support for a series of posts so it's easy to read the entire series. I did have to manually upload any embedded images. DEV also has a number of liquid tags for embedding things like GitHub issues that I didn't make as much use of as I should have.

Blogger is rich text so it was easy to copy/paste the rendered posts. This would hotlink all the images though so I had to remove them and manually re-upload them.

Medium will only support canonical links if you import from a URL for some reason. They would grab any images and host them on their CDN so no manual uploading. Importing would lose all the code snippet formatting though so I would have to fix all of that.

Engagement

Bendyworks received the most page views which is not surprising since those were the URLs shared on Twitter/Reddit/Slack. DEV was second with with Medium and my blog getting negligible views.

views by date posted

For engagement DEV was the leader with lots of ❤️ and Twitter close behind. Reddit had some upvotes but not that many and only a few claps came from Medium.

engagement by site over time

The real breakout for me here was DEV. I had never posted anything or used it much but I found the community very friendly and engaging. I received a lot more activity from the 600+ followers up built up there than the almost 9000 followers I have on Twitter. If you're not on DEV yet, sign up and follow me.

Goals

Kicking off I had three main goals

  • Become a better Flutter developer
  • Practice writing concise blog posts
  • Practice writing project requirements

I certainly become a better Flutter developer and learned a lot along the way. I would like to try more architecture patterns but the need to always be publishing didn't leave me with much room for exploration. Maybe I could have written more "I tried this and here why it didn't work" posts but I felt pressure to always deliver progress.

I am much better at throwing words onto a page and coming out with a decent post. One aspect of blogging that I constantly struggle with is keeping posts small and digestible. It's easy to get into the mindset that posts have to be long and perfect. Short and to the point is usually better though.

Working on improving project requirements kind of fell by the wayside as I tried to keep up with posting every day. It just wasn't a priority.

App

The app isn't done yet but it has Sign in with Google, a home stream, and fancy animations.

AnnotatedRegion

Miguel submitted a pull request fixing a bug on Android where the bottom navigation theme would break on sign in. He fixed it by wrapping the HomePage Scaffold in an AnnotatedRegion widget.

AnnotatedRegion<SystemUiOverlayStyle>(
  value: lightSystemUiOverlayStyle,
  child: Scaffold(/* ... */),
)

Thanks

A huge thank you goes to Pearl for proofreading every single post and reviewing all the code, sometimes late at night at the last minute. I couldn't have done a month of Flutter without her help.

Thanks also to: Unsplash for all the featured images. @NinaLimpi and unDraw for the fantastic illustrations. @tommy_emo_ for the awesome icon.

All of you for reading along and your feedback and support.

What's next

I'm going to keep developing Birb and writing about it as "a month+ of Flutter". Just don't expect posts every day. For example I'd like to finally get a readme written and take a second look at something I didn't get running before.

Follow me on Twitter and DEV for future posts and GitHub for code changes.

Code changes

Posts in this series

  • A month of Flutter
  • A month of Flutter: create the app
  • A month of Flutter: configuring continuous integration
  • A month of Flutter: continuous linting
  • A month of Flutter: upgrading to 1.0
  • A month of Flutter: initial theme
  • A month of Flutter: no content widget
  • A month of Flutter: a list of posts
  • A month of Flutter: extract post item widget
  • A month of Flutter: post model and mock data
  • A month of Flutter: rendering a ListView with StreamBuilder
  • A month of Flutter: Stream transforms and failing tests
  • A month of Flutter: real faker data
  • A month of Flutter: rendering network images
  • A month of Flutter: FABulous authentication
  • A month of Flutter: configure Firebase Auth for Sign in with Google on Android
  • A month of Flutter: configure Firebase Auth for Sign in with Google on iOS
  • A month of Flutter: Sign in with Google
  • A month of Flutter: mocking Firebase Auth in tests
  • A month of Flutter: delicious welcome snackbar
  • A month of Flutter: navigate to user registration
  • A month of Flutter: user registration form
  • A month of Flutter: testing forms
  • A month of Flutter: setting up Firebase Firestore
  • A month of Flutter: awesome adaptive icons
  • A month of Flutter: set up Firestore rules tests
  • A month of Flutter: Firestore create user rules and tests
  • A month of Flutter: WIP save users to Firestore
  • A month of Flutter: user registration refactor with reactive scoped model
  • A month of Flutter: the real hero animation
  • A month of Flutter: a look back