How Flutter works
In Flutter, everything the user sees is built from widgets: a button, a margin, a list, an entire screen. Widgets nest inside one another like building blocks, and any interface can be assembled from them.
Flutter has its own rendering engine: instead of asking iOS or Android to draw a button, it draws the button itself. That is both its main strength — a consistent look everywhere — and its main quirk: the app doesn't use native system controls directly. For release, the code is compiled to machine code for each platform, so it runs fast.
Beyond mobile apps, the same codebase can produce a web version and desktop apps for Windows, macOS and Linux. Whether that makes sense depends on the project.
Advantages of Flutter
- One codebase for two platforms. Both the logic and the UI are written once, so development and ongoing maintenance cost less than two native apps.
- Design without compromise. What the designer draws is implemented precisely: custom fonts, shadows, animations, non-standard elements.
- Hot reload. Developers see changes on the phone screen almost instantly, without a full restart. This speeds up UI work.
- Ready-made component sets. Flutter ships with Material Design widgets for Android and iOS-style widgets, so a familiar look is achievable without building from scratch.
- Smooth performance. Animations and scrolling stay smooth even on budget smartphones, as long as screens are built carefully.
Drawbacks and limitations
- Larger app size. The Flutter engine is bundled into every build, so a minimal app weighs more than a native one.
- Not quite the native look. Widgets mimic iOS and Android controls, and an attentive user may notice small differences. After OS updates, these differences sometimes become more noticeable.
- New OS features arrive via packages. Access to new iOS or Android capabilities appears once someone writes a package for it. Otherwise, we build the module ourselves.
- Package quality varies. Some third-party packages are maintained by enthusiasts and may be abandoned. We vet every package before using it.
- The web version isn't for content sites. Flutter for web works for internal dashboards, but not for sites where fast loading and SEO matter.
When another tool is a better fit
- Your web product is already built in React and you have developers maintaining it — React Native is the smarter choice: you can reuse some of the code and know-how.
- The app relies heavily on the camera, audio, augmented reality or background processes — separate native apps are more reliable.
- You only need convenient mobile access to your website without publishing to app stores — consider a progressive web app.
Packages and native modules
Flutter has ready-made packages for most common tasks: payments, maps, notifications, Google and Apple sign-in, analytics, Firebase. But "there's a package" doesn't mean "it's safe to use." We check who maintains it, how often it's updated, whether it works with the current Flutter version and whether it has known issues.
If there's no reliable package, we write our own native module — a Swift part for iOS and a Kotlin part for Android — and connect it to the shared code. That's how we integrate, for example, specific payment terminals or third-party SDKs that have no Flutter version.
Code structure and state management
A small Flutter app is easy to write any which way, but with every new feature that code becomes more fragile. The key question is where the data the user sees lives (cart, profile, filters) and how screens learn that it has changed. This is called state management.
We choose the approach based on the size of the product: lighter solutions for simple apps, stricter separation of UI, logic and data for large ones. That way new developers get up to speed faster, and changing one screen doesn't break the others.
Flutter for web and desktop
One of Flutter's advantages is the ability to build a web version or a desktop app from the same code. This is handy for internal tools — for example, a mobile app for couriers and a dispatcher dashboard sharing the same logic. For public-facing websites, we recommend separate web development.
New project or improving an existing one
A new app starts with a design system: colors, fonts, buttons, fields and cards first become a set of custom widgets. After that, screens come together faster, and style changes are made in one place.
An existing Flutter project often comes to us in a "hasn't been updated in ages" state. Flutter evolves quickly, and an app that went several years without updates may no longer build with current Apple and Google tooling. We assess which packages are outdated and what will change during the upgrade, then migrate the project to the latest version step by step.
What affects the cost
- Design: standard Material Design components or a fully custom branded interface with animations.
- Native modules: how many features aren't covered by existing packages.
- Backend: an existing API that just needs to be connected, or new backend development.
- Platforms: phones only, or also tablets, a web version or a desktop app.
- State of an existing project: for upgrades — the Flutter version, the number of outdated packages, whether there are tests.
We provide an estimate after reviewing your project, with the work broken down into clear phases.
Frequently asked questions
Is Flutter suitable for large apps? Yes, if a clear project structure and state management are in place from the start. Problems in large Flutter apps usually stem from architecture, not from the tool itself.
Will the iOS app look like an Android app? No, not if the design is thought through for both platforms. You can use a single brand style or show platform-native elements where it matters.
Can you update an old Flutter project built by another team? Yes. We'll start by auditing the code, versions and packages, then propose an upgrade plan.
Who maintains Flutter? The framework is developed by Google together with the community; it's open source and updated regularly.
Why Promodex
Since 2015, Promodex has delivered 750+ projects. The mobile apps we've worked on include My Viva and MyAmeria. Design and development are handled by our in-house team, with no subcontractors, so the designer and the Flutter developer discuss every screen directly. After launch, we help with app support and ongoing development: updating Flutter and packages, adding features and monitoring stability.