Blog
Mert Özen's blog posts on software development, backend, frontend, and DevOps.
What Is Flutter? One Codebase, Its Own Rendering Engine and Where It Stands Against .NET MAUI, React Native and Native
Flutter is a UI toolkit that draws every pixel with its own engine (Impeller) instead of using the platform's native controls, and builds Android and iOS apps from one Dart codebase. We walk through its layers, show with real measurements how Dart is JIT-compiled in development and AOT-compiled for release, compare it with .NET MAUI, React Native and native development, and explain when not to choose Flutter.
Installing Flutter and Your First Project: the SDK, Android Studio, Xcode, Emulators, flutter doctor and Hot Reload
This post covers installing Flutter on Windows for Android and on macOS for Android and iOS, reading the output of flutter doctor and creating bookstore_app with material_ui. We show with a real run that hot reload keeps state while hot restart resets it, map pubspec.yaml to csproj and package.json, and verify the app without an emulator using a widget test and a web build.
Dart for C# Developers, Part 1: Types, Null Safety, Collections, Functions and Records
Dart's null safety, unlike C#'s, is sound: using a nullable value without a check is a compile error rather than a warning, and a non-nullable variable can never be null at run time. For readers who know C#, we explain var/final/const, how const produces canonical instances, collection if/for and null-aware elements, named parameters and records with real output, and write Bookstore's Book and Author models.
Dart for C# Developers, Part 2: Classes, Primary Constructors, Mixins, Sealed Classes and Pattern Matching
In Dart, a switch over a sealed hierarchy stops compiling when a new subtype is added and names the missing case, while value equality does not come without writing == and hashCode. We cover the kinds of constructors, how Dart 3.13 primary constructors differ from C# 12, class modifiers, mixins and extension types with real output, and write Bookstore's OrderStatus and Money types.
Asynchronous Programming in Dart: Futures, async/await, Streams and Isolates
Dart runs on a single-threaded event loop: async/await does not move work to the background, heavy work freezes the UI, and real parallelism needs isolates with separate memory. We compare Future with C#'s Task and Stream with IAsyncEnumerable, measure that parsing a 20 MB JSON on the main isolate stops frames while Isolate.run does not, and show how the error of an un-awaited Future gets lost.
What Changed in Flutter 3 and Dart 3: Impeller, Patterns, Widget Previews, material_ui and What's Next
Dart 3.0 made null safety mandatory and brought records, patterns and sealed classes; 3.6 to 3.13 took small steps that change everyday code, from digit separators to primary constructors. On the Flutter side there are Impeller, SwiftPM, UIScene, Widget Previews and, between 3.44 and 3.50, Material moving into the material_ui package; we show with real output that the language version comes from the pubspec, and how to upgrade.