ChristianFindlay.com

Christian Findlay is a professional Software Developer and trainer based in Melbourne, Australia. He builds with Flutter, .NET, AI, Firebase/Supabase, Google Cloud, and Microsoft Azure.

Follow Me

Christian Findlay

Based in Melbourne, I'm a skilled Flutter and .NET developer, well-versed in Google Cloud Platform, Azure, and Firebase. Crafting user-centric apps with a unified codebase, I'm eager to collaborate on your Flutter project. Reach out via the contact link or social icons to connect!

Fortnightly Waterfall (a.k.a Scrum)
Read More

Fortnightly Waterfall (a.k.a Scrum)

Most modern software teams do some variation of Scrum. You can read the Scrum Guide here. According to many, Scrum is an “Agile” framework, but...

04 Feb 2024 Christian Findlay
Investing in Mobile App Development: A Lucrative Opportunity for Tech Investors in 2024
Read More

Investing in Mobile App Development: A Lucrative Opportunity for Tech Investors in 2024

Introduction

22 Jan 2024 Christian Findlay
Build Your First Flutter App with ChatGPT - A Comprehensive Beginner's Guide
Read More

Build Your First Flutter App with ChatGPT - A Comprehensive Beginner's Guide

Introduction

04 Jan 2024 Christian Findlay
Reactive Programming in Flutter: Understanding the Power of Observables and Computed Values with Signals, Riverpod and RxDart
Read More

Reactive Programming in Flutter: Understanding the Power of Observables and Computed Values with Signals, Riverpod and RxDart

This article introduces you to the concept of Reactive programming (Rx) in Flutter and talks about how a few popular libraries implement it. It talks...

30 Nov 2023 Christian Findlay
Mastering Dart Extension Methods in Flutter: A Comprehensive Guide
Read More

Mastering Dart Extension Methods in Flutter: A Comprehensive Guide

Dart has a powerful feature called extensions. This feature can significantly improve the readability and maintainability of your Flutter code. This comprehensive tutorial explores how...

25 Jun 2023 Christian Findlay
N-tier Architecture Was a Mistake: Long Live Apps That Talk Directly to the Database
Read More

N-tier Architecture Was a Mistake: Long Live Apps That Talk Directly to the Database

Back in the day, many desktop apps talked directly to the database. We didn’t have APIs over the top of the database, and quite often,...

12 Jun 2023 Christian Findlay
Dart 3: A Comprehensive Guide to Records and Futures
Read More

Dart 3: A Comprehensive Guide to Records and Futures

35 Best Flutter Blogs - Check out the top Flutter blogs

15 May 2023 Christian Findlay
Dart Switch Expressions
Read More

Dart Switch Expressions

Dart 3 adds a new feature called Switch Expressions. Dart is a multi-paradigm language that supports both object-oriented, imperative, functional-style and declarative programming. Programmers have...

11 May 2023 Christian Findlay
Mastering Material Design 3: The Complete Guide to Theming in Flutter
Read More

Mastering Material Design 3: The Complete Guide to Theming in Flutter

One of the most common questions developers ask when working with Flutter is how to efficiently manage themes to create visually appealing and consistent UIs...

04 May 2023 Christian Findlay
Components of Flutter State Management
Read More

Components of Flutter State Management

State management is a critical aspect of building responsive Flutter apps. We often talk about “State Management Solutions” in Flutter, but we rarely break down...

18 Apr 2023 Christian Findlay
Flutter - Full App Widget Testing
Read More

Flutter - Full App Widget Testing

I offer full widget testing training for your team. Book a session to learn how to test your Flutter apps.

04 Apr 2023 Christian Findlay
Rounded Buttons in Flutter with Material Design 3
Read More

Rounded Buttons in Flutter with Material Design 3

Rounded buttons in Material Design 3 is even simpler than before. Google’s latest design language offers the ability to enable rounded buttons by default with...

03 Apr 2023 Christian Findlay
Using Hexadecimal Color Strings in Flutter: A Comprehensive Guide
Read More

Using Hexadecimal Color Strings in Flutter: A Comprehensive Guide

Color plays a critical role in the Flutter user experience. It can enhance or destroy the look and feel of your app. We can represent...

03 Apr 2023 Christian Findlay
Receive and Test Incoming Webhooks in an ASP.NET Core Minimal API: A Comprehensive Guide
Read More

Receive and Test Incoming Webhooks in an ASP.NET Core Minimal API: A Comprehensive Guide

Introduction

02 Apr 2023 Christian Findlay
Stateful Factory Pattern
Read More

Stateful Factory Pattern

This is a parody blog post about how you can manipulate language to make a made-up pattern sound like a perfectly reasonable solution to a...

23 Mar 2023 Christian Findlay
Why Flutter Is The Best Choice For Startups
Read More

Why Flutter Is The Best Choice For Startups

As a startup, choosing the right technology stack to build your first app is critical. The technology you choose will significantly impact your product’s success...

19 Mar 2023 Christian Findlay
Add A Search Bar To The AppBar In Flutter
Read More

Add A Search Bar To The AppBar In Flutter

Search bars are often an essential UI component in a Flutter app. This blog post walks you through creating a search bar in Flutter and...

19 Mar 2023 Christian Findlay
Basic Flutter Animations With Tweens
Read More

Basic Flutter Animations With Tweens

In Flutter we create animations with the Animation class, which is part of the Flutter animation framework. We can use animations to change the size,...

17 Mar 2023 Christian Findlay
Test Coverage
Read More

Test Coverage

This article is part of a series I am writing about testing. It refers to an article I wrote on test isolation, which is important reading for...

09 Mar 2023 Christian Findlay
Test Isolation is Expensive
Read More

Test Isolation is Expensive

This article is part of a series on testing that I am writing, and this series is part of an e-book on testing that I...

20 Feb 2023 Christian Findlay
Leveraging AI To Build Apps
Read More

Leveraging AI To Build Apps

Artificial intelligence (AI) has already significantly impacted various industries and is quickly making its way into software development. As AI technology advances, software businesses will...

09 Jan 2023 Christian Findlay
Hiring an Independent Software Developer vs. a Software Consultancy
Read More

Hiring an Independent Software Developer vs. a Software Consultancy

Hiring a software developer can be daunting, especially for small businesses or startups with limited experience in the field. You may decide between hiring an...

03 Jan 2023 Christian Findlay
Flutter: Breaking the BloC Rules
Read More

Flutter: Breaking the BloC Rules

BloC is a common UI pattern in the Flutter world. Google originally created the idea early on in Flutter’s life. Since its inception, the pattern...

28 Dec 2022 Christian Findlay
Flutter: How To Mock Functions For Testing
Read More

Flutter: How To Mock Functions For Testing

The Dart language allows us to implement and mock any class. That’s because Dart has implicit interfaces, which is great for testing. However, some libraries...

17 Dec 2022 Christian Findlay
Immutability: Dart vs. F#
Read More

Immutability: Dart vs. F#

Immutability is a very important part of Functional Programming. Dart and F# are two excellent modern languages that support immutability and functional programming constructs. However, Don Syme and the...

05 Nov 2022 Christian Findlay
Flutter Dependency Injection: ioc_container V1
Read More

Flutter Dependency Injection: ioc_container V1

ioc_container is an IoC Container for Dart and Flutter. It started about five months ago as a quick way to replace dependencies for testing but...

24 Oct 2022 Christian Findlay
Separate Business Logic and Presentation
Read More

Separate Business Logic and Presentation

The Flutter community is always looking for ways to create a clear separation between business logic and presentation. There are several solutions, but they can...

09 Oct 2022 Christian Findlay
Dart Immutable Collections
Read More

Dart Immutable Collections

Dart makes it pretty easy to create immutable classes, and several patterns encourage you to use them. However, we often don’t use immutable collections correctly. If...

29 Sep 2022 Christian Findlay
Device.Net Project Status
Read More

Device.Net Project Status

Device.Net is a cross-platform framework that attempts to put a layer over the top of USB and Hid. It runs on Android, UWP, .NET Framework and...

06 Aug 2022 Christian Findlay
Dart: Formatting and Trailing Commas
Read More

Dart: Formatting and Trailing Commas

Trailing commas may sound like a minor aspect of the Dart language, but they have a major impact on the formatting of your code. This...

30 Jul 2022 Christian Findlay
Google Cloud Run
Read More

Google Cloud Run

Google Cloud Run is a serverless container app service. You can deploy containerised apps to the cloud, which will autoscale horizontally with minimal configuration. It is...

26 Jul 2022 Christian Findlay
Cross-Platform Vs. Native Apps
Read More

Cross-Platform Vs. Native Apps

Once in a while, I get into a Twitter debate about cross-platform vs. native apps. It’s a difficult conversation because people have very strong opinions...

21 Jul 2022 Christian Findlay
Papilio: An Intro
Read More

Papilio: An Intro

Flutter gives you a powerful toolset for building rich cross-platform apps. You can build single-source apps on macOS, Windows or Linux and run those apps...

20 Jul 2022 Christian Findlay
C# Code Rules
Read More

C# Code Rules

The C# Compiler’s name is Roslyn. Roslyn has a very large set of analyzers to check the quality of your code, but you must turn...

24 Apr 2022 Christian Findlay
Performance Vs. Scalability
Read More

Performance Vs. Scalability

Performance and scalability are two related but separate aspects of a system. However, there is a lot of confusion around the two terms, which often...

13 Feb 2022 Christian Findlay
Run Flutter Widget Tests as Integration Tests
Read More

Run Flutter Widget Tests as Integration Tests

Automated testing in flutter is easy. The flutter team built it into the framework from the ground up. They call it integration testing, but non-flutter developers...

18 Dec 2021 Christian Findlay
Upgrade from .NET Framework to .NET 6
Read More

Upgrade from .NET Framework to .NET 6

You’re probably here because your business has a legacy codebase, and you need to upgrade it. You’re not alone, and almost every business goes through...

12 Dec 2021 Christian Findlay
Dart: Manual Mutation Testing
Read More

Dart: Manual Mutation Testing

Mutation testing is a technique for measuring the quality of your tests.

04 Dec 2021 Christian Findlay
How to Build a Flutter Navigation Drawer
Read More

How to Build a Flutter Navigation Drawer

Navigation drawer is a typical UI pattern for adaptive menus. The Material Design documentation formalizes the menu’s behavior, but this pattern is not peculiar to...

30 Oct 2021 Christian Findlay
Dart Classes for C# Programmers
Read More

Dart Classes for C# Programmers

Building classes in Dart is similar to C#, but there are some quirks that you need to be aware of. This article shows you how...

06 Sep 2021 Christian Findlay
Flutter: First Impressions
Read More

Flutter: First Impressions

Flutter is Google’s cross-platform UI Toolkit. It uses the language Dart. I have a long history of building cross-platform apps with .NET and XAML. I...

04 Sep 2021 Christian Findlay
How to Stop NullReferenceExceptions in .NET
Read More

How to Stop NullReferenceExceptions in .NET

This article gives you a toolset for stopping NullReferenceExceptions in .NET code. The article centers around Nullable Reference Types (NRT), a feature that Microsoft added...

30 Jul 2021 Christian Findlay
RestClient.Net 5
Read More

RestClient.Net 5

RestClient.Net makes HTTP calls in .NET easy. Send the request body as a strongly typed object, and get back a strongly typed object. You can...

27 May 2021 Christian Findlay
How To Change the Behavior of a C# Record Constructor
Read More

How To Change the Behavior of a C# Record Constructor

Records are a new feature in C# 9. Records are special classes that borrow from Structs in that they have value-based equality. You could look at them as a...

29 Apr 2021 Christian Findlay
Choose ASP.NET Core in 2021
Read More

Choose ASP.NET Core in 2021

ASP.NET Core is the most up-to-date Microsoft technology for building web apps. You can build Web APIs for your SPA front-end or traditional web-apps in...

26 Feb 2021 Christian Findlay
Device.Net (Usb.Net, Hid.Net) 4.0
Read More

Device.Net (Usb.Net, Hid.Net) 4.0

Device.Net is a cross-platform .NET framework for talking to connected devices such as USB, Serial Port and Hid devices. It aims to make device communication...

31 Jan 2021 Christian Findlay
Publish Source Link NuGet Packages with Azure Pipelines
Read More

Publish Source Link NuGet Packages with Azure Pipelines

Source Link allows you to publish debuggable NuGet packages. Source Link adds debug symbols to compiled code that point back to your Git repository. That...

25 Dec 2020 Christian Findlay
Why .NET Standard Is Still Relevant
Read More

Why .NET Standard Is Still Relevant

.NET Standard is a .NET formal specification or API contract that is available across many .NET implementations. It exists because there are many .NET implementations on...

21 Dec 2020 Christian Findlay
Reactive Programming: Hot Vs. Cold Observables
Read More

Reactive Programming: Hot Vs. Cold Observables

The Observer Pattern is at the core of reactive programming, and observables come in two flavors: hot and cold. This is not explicit when you...

25 Oct 2020 Christian Findlay
How to Use F# from C#
Read More

How to Use F# from C#

F# is a functional programming language that compiles to .NET Intermediate Language (IL). C# is becoming a more functional programming language. The latest version of...

17 Oct 2020 Christian Findlay
Android HID/USB with Flutter and .NET
Read More

Android HID/USB with Flutter and .NET

Flutter is an emerging UI technology by Google. Flutnet brings Flutter and .NET together. It allows you to create a Flutter UI with .NET logic....

09 Oct 2020 Christian Findlay
ILogger and Null Object Pattern
Read More

ILogger and Null Object Pattern

The Null Object Pattern is a pattern that uses objects with null behavior instead of performing null checks throughout the codebase. ILogger and ILoggerFactory are...

30 Sep 2020 Christian Findlay
XAML: How to Implement INotifyPropertyChanged
Read More

XAML: How to Implement INotifyPropertyChanged

The INotifyPropertyChanged changed interface is at the heart of XAML apps and has been a part of the .NET ecosystem since the early days of...

11 Sep 2020 Christian Findlay
Git Submodules Vs. NuGet Dependencies
Read More

Git Submodules Vs. NuGet Dependencies

Breaking your solutions up into manageable chunks (libraries) is one of the most important aspects of code maintainability. This article is .NET centric, but the...

28 Aug 2020 Christian Findlay
How To Buy a Computer for Cross-Platform Development
Read More

How To Buy a Computer for Cross-Platform Development

Computers are expensive, and you may need to buy a Mac and a PC as a mobile developer. As a mobile developer, you will spend...

28 Aug 2020 Christian Findlay
How to Move Uno Platform Pages to a Multi-Targeting Library
Read More

How to Move Uno Platform Pages to a Multi-Targeting Library

You can move Uno Platform pages and other code into a multi-targeted library that you can reference from the Uno Platform head projects. This is...

25 Aug 2020 Christian Findlay
First Uno Platform Course Published
Read More

First Uno Platform Course Published

The first Uno Platform Course is live! Over the last few months, I’ve been busily preparing material and editing video for the first Uno Platform...

05 Aug 2020 Christian Findlay
How To Access SQL Generated By Entity Framework Core 3
Read More

How To Access SQL Generated By Entity Framework Core 3

Entity Framework Core (EF) converts expressions into SQL at runtime. In earlier versions, it was straight forward to get the SQL. In Entity Framework Core...

19 Jul 2020 Christian Findlay
Blazor Vs. Traditional Web Apps
Read More

Blazor Vs. Traditional Web Apps

Blazor is a new Single Page Application (SPA) technology by Microsoft. It is a comparable technology to React, Angular, and Vue.js but uses C# instead...

09 Jul 2020 Christian Findlay
How to Use and Unit Test ILogger
Read More

How to Use and Unit Test ILogger

ILogger is at the heart of the ASP.NET Core infrastructure and works well when you use it correctly. If you approach it the wrong way,...

03 Jul 2020 Christian Findlay
Cross-Platform C# UI Technologies Part 2
Read More

Cross-Platform C# UI Technologies Part 2

The options for building cross-platform phone, desktop, and web-apps with C# are expanding. I previously wrote about Uno Platform, Xamarin.Forms, and Avalonia UI. The recent Microsoft Build...

24 Jun 2020 Christian Findlay
RestClient.Net 4
Read More

RestClient.Net 4

RestClient.Net is a cross-platform rest-client for .NET Core, .NET Framework, iOS, Android, WASM and UWP. It puts a wrapper over the .NET HttpClient API and allows...

17 Jun 2020 Christian Findlay
Blazor vs. React / Angular / Vue.js
Read More

Blazor vs. React / Angular / Vue.js

Blazor is a new Microsoft technology that allows developers to write code for browsers in C#. This article compares Blazor to three other common SPA...

04 Jun 2020 Christian Findlay
C# Delegates with IoC Containers and Dependency Injection
Read More

C# Delegates with IoC Containers and Dependency Injection

Developers are usually encouraged to do dependency injection with interfaces. Some developers don’t know that they can do dependency injection with delegates, and there are...

16 May 2020 Christian Findlay
How To Hire Good Software Developers
Read More

How To Hire Good Software Developers

If you’re reading this, you’re probably a development lead or someone else in charge of interviewing or hiring development staff. This article is based on...

04 Apr 2020 Christian Findlay
Blazor WebAssembly Rest Client
Read More

Blazor WebAssembly Rest Client

Blazor is Microsoft’s latest Single Page Application (SPA) framework, which is C# based and renders to the browser HTML DOM. Blazor comes in two flavors:...

14 Feb 2020 Christian Findlay
.NET - How to Sign an Assembly in Visual Studio 2019
Read More

.NET - How to Sign an Assembly in Visual Studio 2019

Signing an assembly ensures that the consumer knows its origin and uniquely identifies the component. It makes the physical DLL file tamper-proof. This tutorial will...

25 Jan 2020 Christian Findlay
System.Text.Json Rest Client
Read More

System.Text.Json Rest Client

The System.Text.Json namespace provides high-performance, low-allocating, and standards-compliant capabilities to process JavaScript Object Notation (JSON), which includes serializing objects to JSON text and deserializing JSON...

21 Jan 2020 Christian Findlay
Protobuf Web API in C#
Read More

Protobuf Web API in C#

Using Google Protocol Buffers (protobuf) for serialization over a Web API (or REST API) is simple. Most developers use JSON as the go-to transfer protocol for...

11 Jan 2020 Christian Findlay
RestClient.Net 3.0
Read More

RestClient.Net 3.0

REST Client Framework for all .NET Platforms

03 Jan 2020 Christian Findlay
.NET Application Frameworks - Part 1
Read More

.NET Application Frameworks - Part 1

Every system needs a framework. The main hubs that a framework should cover are UI/UX, database, and logic. These are the indispensable parts of the...

19 Dec 2019 Christian Findlay
C# Code Quality - Part 1
Read More

C# Code Quality - Part 1

Improving a codebase can be a difficult task. The larger the codebase, the more difficult it becomes to find and fix poor code manually. When...

09 Nov 2019 Christian Findlay
C# String Interpolation
Read More

C# String Interpolation

Introduction

05 Oct 2019 Christian Findlay
C# Serial Port Access - Windows
Read More

C# Serial Port Access - Windows

There are various ways connected devices communicate with your computer. One of the oldest ways is via the Serial Port. In some ways, serial port access...

14 Sep 2019 Christian Findlay
Device.Net 3.0
Read More

Device.Net 3.0

Device.Net 3.0 has been released. Device.Net is a framework for communicating with connected devices. Along with Device.Net Usb.Net, and Hid.Net 3.0 were also released. These...

26 Aug 2019 Christian Findlay
RestClient.Net on WebAssembly (C#)
Read More

RestClient.Net on WebAssembly (C#)

RestClient.Net is a simple wrapper for HttpClient. It adds strong typing to REST calls and speeds up writing basic Http Request/Response operations. WebAssembly (Wasm) is...

15 Aug 2019 Christian Findlay
Visual Studio - Break On All Exceptions
Read More

Visual Studio - Break On All Exceptions

An app should throw exceptions when something exceptional happens. However, developers should design apps and APIs so that under regular use, exceptions do not occur. Exceptions...

14 Jul 2019 Christian Findlay
xUnit - Strongly Typed Test Data
Read More

xUnit - Strongly Typed Test Data

xUnit has a quirky system for consuming test data. Strongly typed test data can be specified with the MemberData attribute and the Theory attribute but...

30 Jun 2019 Christian Findlay
C# and WebAssembly (Wasm)
Read More

C# and WebAssembly (Wasm)

WebAssembly may be the most exciting technology for C# developers to emerge in recent times. Browser based applications have been developed in JavaScript, or languages...

29 Jun 2019 Christian Findlay
Anti-patterns: A Misused Term
Read More

Anti-patterns: A Misused Term

The term “anti-pattern” is a derogatory term used to disparage software design approaches that a given developer or group of developers may not like. The...

01 Jun 2019 Christian Findlay
C# and gRPC Part One
Read More

C# and gRPC Part One

gRPC is a modern open source RPC framework created by Google. It is based on Google’s modern Protocol Buffer serialization engine but is not tied...

26 May 2019 Christian Findlay
Cross-Platform C# UI Technologies
Read More

Cross-Platform C# UI Technologies

Several UI technologies can be used to build Cross-Platform apps in C# or other .NET based languages such as Visual Basic (VB). This article looks...

11 May 2019 Christian Findlay
API Versioning: Mandatory Columns
Read More

API Versioning: Mandatory Columns

There are some difficulties with versioning APIs. One such difficulty is dealing with mandatory columns. If a back-end API upgrade is taking place, and we...

31 Mar 2019 Christian Findlay
Back-end - Front-End Versioning
Read More

Back-end - Front-End Versioning

This article is part of a larger series that I am writing on App Store Deployment, but this is not limited to App Store Deployment....

23 Mar 2019 Christian Findlay
App Store Deployment
Read More

App Store Deployment

App Stores are a great advancement in Software Deployment. They offer something like the Zero Footprint model while still allowing the application to have access...

23 Mar 2019 Christian Findlay
App Store Deployment - Back-end First
Read More

App Store Deployment - Back-end First

This follows on from my article about App Store Deployment. Here I am going to offer a strategy for dealing with App Store Deployment where...

23 Mar 2019 Christian Findlay
C# Code Rules Part 2 - How To Configure
Read More

C# Code Rules Part 2 - How To Configure

Edit: There is a new article that replaces these two articles and uses the more modern editor config format. These two articles are still useful...

23 Feb 2019 Christian Findlay
C# Code Rules Part 1
Read More

C# Code Rules Part 1

Edit: There is a new article that replaces these two articles and uses the more modern editor config format. These two articles are still useful...

11 Feb 2019 Christian Findlay
Cross Platform USB and Hid Programming
Read More

Cross Platform USB and Hid Programming

Delving in to the world of crypto hardwarewallets has led me deep in to the rabbit hole of USB and Hid  programming. I didn’t want...

30 Dec 2018 Christian Findlay
RestClient.Net
Read More

RestClient.Net

Edit: this library has undergone multiple iterations since this early blog post. It is no longer in beta, and has been moved to GitHub. Check...

14 Aug 2016 Christian Findlay