Mobile App Development Services
We build cross-platform mobile applications in Flutter — one codebase for iOS and Android — with particular depth in apps that have to keep working without a network.
What is cross-platform mobile app development?
Cross-platform mobile development builds one codebase that compiles to native iOS and Android applications, rather than maintaining two separate teams and codebases. Techroniqs builds these in Flutter, using Riverpod for state, AutoRoute for navigation, and Isar as an on-device database. Our SmartED Mobile engagement used this stack to deliver an offline-first warehouse asset-tracking app for field staff working across multiple warehouse locations without reliable connectivity.
Key takeaways
- One Flutter codebase produces both the iOS and the Android application, which roughly halves build and maintenance cost against two native teams.
- Offline-first is an architecture decision made at the start, not a feature added later. It changes the data layer, not the UI.
- We use Isar as the on-device database and a DAO pattern to keep sync logic separate from screens.
- Flutter is the wrong choice when an app depends on brand-new platform APIs or heavy platform-specific hardware access.
- Enterprise field apps live or die on conflict resolution — deciding what wins when two offline devices edit the same record.
Who this is for
- Operations teams whose staff work in warehouses, sites, or vehicles where connectivity is unreliable.
- Companies that need the same product on iOS and Android without funding two engineering teams.
- Businesses extending an existing web platform to mobile without rebuilding the backend.
What you get
Every engagement produces these. Anything else is scoped explicitly rather than assumed.
- iOS and Android applications
- One Flutter codebase, two store-ready builds.
- Offline data layer
- Local database, sync engine, and a documented conflict-resolution rule.
- Role-based workflows
- Screens and permissions scoped to what each type of user is allowed to do.
- Store submission
- App Store and Play Store builds, signing, and release configuration.
- Backend integration
- API layer connecting the app to your existing systems.
Technology stack
Framework
- Flutter
- Dart
State and routing
- Riverpod
- AutoRoute
On-device data
- Isar DB
- DAO pattern
Backend
- Node.js
- Ruby on Rails
- PostgreSQL
Flutter, React Native, or native
All three ship a working app. The decision turns on how much platform-specific behaviour the product needs and how large the team maintaining it will be.
| Approach | Codebases | Strongest when | Weakest when |
|---|---|---|---|
| Flutter | One | Consistent custom UI across both platforms; offline-heavy apps | You need day-one support for a brand-new OS API |
| React Native | One | Your team already writes React and shares logic with a web app | Heavy animation or rendering work |
| Native (Swift / Kotlin) | Two | Deep hardware access, platform-specific UX, maximum performance | Budget and timeline are constrained |
| Progressive web app | One (shared with web) | Simple, connectivity-dependent tools with no store requirement | You need push, background sync, or store distribution |
We build in Flutter. If a requirement genuinely calls for native, we will say so rather than force the stack.
How we build it
- Decide the offline conflict rule before writing sync code — last-write-wins, server-authoritative, or per-field merge each produce a different data layer.
- Keep database access behind a DAO layer so screens never talk to storage directly, which is what kept SmartED Mobile maintainable across multiple warehouse workflows.
- Design for the worst device your users actually carry, not the newest one.
- Test the reconnect path as carefully as the offline path. Most field-app bugs surface when a device comes back online.
- Budget for store review time in the launch plan; it is outside your control.
Common mistakes
Treating offline support as a later milestone
The data layer has to be rewritten, which usually means rewriting the app.
Instead: Choose offline-first or online-only in week one and architect accordingly.
Porting a web layout directly to mobile
Dense tables and hover states are unusable on a handset in a warehouse.
Instead: Redesign the flows around one-handed use and large touch targets.
No conflict-resolution policy
Two devices edit the same record offline and one user silently loses work.
Instead: Define and document what wins, then surface conflicts to the user.
Ignoring store requirements until submission
Launch slips by weeks on privacy declarations and permission justifications.
Instead: Review store policy during design.
Typical timeline
Ranges reflect engagements we have delivered. Scope, integration count, and decision speed on your side move these more than anything else.
1. Discovery and flows
1–2 weeksUser roles, offline policy, and screen inventory.
2. Data layer and sync
2–4 weeksLocal database and sync engine working against the real API.
3. Feature build
6–12 weeksComplete app on both platforms in internal testing.
4. Store release
1–3 weeksSigned builds submitted and approved.
Where we have done this
When this is the wrong choice
Stated plainly, because finding this out in month three costs you far more than reading it now.
- We build in Flutter. We do not staff separate Swift and Kotlin native teams.
- Apps whose core value is a brand-new platform capability on release day are better served native.
- We do not build games or anything depending on a real-time 3D engine.
What to consider instead
- Responsive web app
- Users always have connectivity and you do not need store distribution.
- Native development
- The product depends on platform-specific hardware or day-one OS features.
- Off-the-shelf field service software
- Your workflow is standard and configuration beats building.
Frequently asked questions
Should I build in Flutter or React Native?
Choose Flutter when you want one consistent custom interface across both platforms and the app does heavy local data work. Choose React Native when your team already writes React and wants to share logic with an existing web application. Both ship from a single codebase; the difference is which ecosystem your team already lives in.
What does offline-first actually mean?
The app reads and writes to a database on the device first, then syncs to the server when a connection is available. The interface never blocks on the network. This requires an on-device database and an explicit rule for resolving conflicts when two devices change the same record.
How long does a mobile app take to build?
A focused enterprise app typically runs six to twelve weeks of build after one to two weeks of discovery, plus one to three weeks for store review. Offline-first apps sit at the longer end because the sync layer is built and tested before feature work begins.
Do you publish to the App Store and Play Store?
Yes. Signing, release configuration, and submission are part of the engagement. Review time itself is set by Apple and Google.
Can the app work with our existing backend?
Yes. Most engagements connect to systems that already exist. Where an API layer is missing we build one rather than replacing the underlying system.
Do you build native iOS and Android apps?
We build cross-platform apps in Flutter, which compile to native iOS and Android binaries. We do not staff separate Swift and Kotlin teams, and we will tell you if your requirement genuinely calls for one.
Related
Talk to an engineer about mobile app development
A 30-minute call with someone who will be writing the code. We will tell you if we are the wrong fit, and what we would do instead.