Calling Rust from Flutter: FRB or UniFFI?
A beginner-friendly comparison of flutter_rust_bridge and UniFFI, with small examples, practical differences, and guidance on choosing between them.
11 posts.
A beginner-friendly comparison of flutter_rust_bridge and UniFFI, with small examples, practical differences, and guidance on choosing between them.
Starting from a Flutter app that gradually became harder to maintain, this article explains why I introduced a Rust Core, what FRB does between the two sides, and how the architecture creates clearer boundaries.
The same goal — seeing an app's HTTPS traffic — plays out very differently on native Android and Flutter: certificate trust, traffic redirection, and hostname verification each fail at a different point. Ends with a complete reusable capture flow you can follow next time.
How I went from a suspicious difference in app behavior to the client-side A/B routing logic using USB packet capture, remote-config decoding, and Dart AOT analysis.
A firsthand account of dividing responsibilities across a Flutter host, a contract SDK, and a Vue web app—and of handling payments, back navigation, lifecycle, startup, and updates along the way.
A practical investigation into a long-running Flutter Android issue: why common navigation bar fixes work in some projects but not others, and how to reduce the problem to a minimal fix.
A practical workflow from API definitions and generated code to Repository mapping, using AI to reduce repetitive work and let API integration and UI development move forward in parallel.
A practical look at wrapping a C/C++ business core for iOS, Android, and Flutter, with notes on runtime boundaries, ABI choices, adapters, and release checks.
A debugging note for a facebook_app_events issue where debug/profile builds worked, but Android release builds only reported install events and lost purchase/subscription events. The root cause is explained through R8 reachability analysis, dynamic calls, and keep rules.
Move stable business semantics into Core, leave concrete product implementation to Variant, and keep engineering independence while preserving the same business outcome.
When a pinned header, PageView, and inner lists appear together, SliverOverlapAbsorber and SliverOverlapInjector should be used to build the correct scrolling relationship.