by David | Mar 14, 2021 | General
You’ve probably tried upgrading major versions before, if you haven’t I recommend you do it as soon as you can. Upgrading both libraries and frameworks frequently will save you loads of time compared to letting it pile up. Also, you get the benefits of any...
by David | Feb 15, 2021 | Development
Yesterday I spent two long hours tracking down the solution to a __TCC_CRASHING_DUE_TO_PRIVACY_VIOLATION error and I hope this post might save that time for someone else. In my project JReader, I use the admob_flutter package to display advertisements to my users. It...
by David | Dec 30, 2020 | General
Heading into 2021, I want to make my app, JReader, bring in some cash to bear its own weight and maybe you want to help out? Frankly put, JReader began as a half-hearted project to see if I could launch and market an app that would potentially make some money. The...
by David | Oct 4, 2020 | General
My current project is releasing soon (yay!) and everyone is posting bugs. I wish there were fewer bugs reported of course 😂 but it is great to see so many things found before our customers get their hands the product. To effectively fix these bugs it is important our...
by David | Sep 19, 2020 | Clean code
It might be easier to split a cake but it’s not impossible! I encourage doing as small PRs as possible. Preferably under 200 lines of code. But how is this possible? If you have a big feature or so? It may contain loads of code. That’s completely fine. We don’t need...
by David | Aug 11, 2020 | Automation, Testing
I’m convinced that any time we want to build a large application we need automated testing. If we can’t run our tests automatically, we can’t scale development. The testing time will increase for each feature we add and eventually our testing cycle...
by David | Jul 25, 2020 | General
Maybe the easiest way to handle user input during async operations is to simply block the entire UI. Sure, there are friendlier ways but if we don’t block the UI we may need to handle cancels and late-response errors in a much more complicated manner. Simply...
by David | May 30, 2020 | General
Today I came across a good refactoring example, extracting a cross cutting concern using proxy pattern. First let me explain what I’m trying to achieve here and then dig into the problem and how I solve it. The example code In our app, we have a class to wrap...
by David | Apr 26, 2020 | General
The Flutter FutureBuilder is a great example of Flutters composability with widgets. It allows us to wrap a Future, an async operation, and easily render the three different states, loading, error or result. However, this turned out to be less straightforward than I...
by David | Feb 26, 2020 | Development
A good pull request is small Agile teaches frequent delivery so we get fast feedback. Lean is similar in that small batch sizes help decrease risk and find issues faster. This is all true for code as well! In this article, I’ll share how my team in MoJ...