Waktu pertama kali diminta bikin app mobile di kantor, saya bingung banget pilih framework. Ada Flutter, ada React Native, dan dua-duanya punya fans garis keras. Setelah setahun lebih pakai keduanya di project yang berbeda, akhirnya saya punya gambaran jelas mana yang cocok di situasi apa.
Di artikel ini, saya bakal share pengalaman pribadi pakai Flutter dan React Native di 2026. Bukan cuma teori, tapi juga benchmark real, code comparison, dan situasi nyata di mana masing-masing framework ini unggul.
Dua tahun terakhir perkembangan kedua framework ini pesat banget. Flutter sekarang di versi 3.24 dengan dukungan multi-platform yang makin matang mobile, web, desktop, bahkan embedded. React Native juga nggak kalah, arsitektur baru dengan Fabric renderer dan TurboModules udah jadi default di versi terbaru.
Yang menarik di 2026, Flutter udah bisa compile ke WASM (WebAssembly) buat web app, sementara React Native makin seamless integrasinya dengan ekosistem React yang gede banget. Jadi pertanyaannya bukan "mana yang lebih bagus" tapi "mana yang lebih cocok buat kasus kamu".
Flutter pakai Dart, bahasa yang dikembangkan Google. Buat developer yang udah kenal Java atau C#, Dart relatif gampang dipelajari. Tapi tetap ada effort tambahan buat belajar bahasa baru.
// Flutter - StatefulWidget sederhana
class CounterPage extends StatefulWidget {
@override
_CounterPageState createState() => _CounterPageState();
}
class _CounterPageState extends State<CounterPage> {
int _count = 0;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Counter')),
body: Center(
child: Text('Count: $_count', style: TextStyle(fontSize: 24)),
),
floatingActionButton: FloatingActionButton(
onPressed: () => setState(() => _count++),
child: Icon(Icons.add),
),
);
}
}
React Native pakai JavaScript/TypeScript. Kalau kamu udah web developer, ini keunggulan besar banget nggak perlu belajar bahasa baru. Langsung bisa mulai coding.
// React Native - Functional Component dengan Hooks
import React, { useState } from 'react';
import { View, Text, TouchableOpacity, StyleSheet } from 'react-native';
const CounterPage = () => {
const [count, setCount] = useState(0);
return (
<View style={styles.container}>
<Text style={styles.text}>Count: {count}</Text>
<TouchableOpacity
style={styles.button}
onPress={() => setCount(count + 1)}
>
<Text style={styles.buttonText}>+</Text>
</TouchableOpacity>
</View>
);
};
Dari segi learning curve, kalau kamu udah familiar sama React, React Native jelas lebih cepat buat mulai produksi. Tapi kalau kamu dari background OOP (Java/Kotlin/C#), Dart di Flutter terasa lebih natural.
Ini bagian yang paling sering diperdebatkan. Flutter render langsung ke canvas pakai Skia/Impeller engine, jadi nggak lewat native UI components. Hasilnya, UI konsisten di semua platform dan animasi jalan sangat mulus.
React Native pakai pendekatan berbeda dia me-render native components asli. Jadi tombol di iOS beneran UIButton, di Android beneran android.widget.Button. Kelebihannya: look and feel sesuai platform. Kekurangannya: konsistensi lintas platform lebih susah dijaga.
Benchmark kasar yang saya buat sendiri di project production:
| Metric | Flutter | React Native |
|---|---|---|
| Cold start | ~1.2 detik | ~1.5 detik |
| Frame rate (animasi kompleks) | 60 fps stabil | 55-60 fps |
| Memory usage (app sederhana) | ~85 MB | ~70 MB |
| APK size (hello world) | ~15 MB | ~8 MB |
| Hot reload time | <1 detik | ~2-3 detik |
Flutter menang di konsistensi performa dan hot reload. React Native menang di APK size dan memory footprint. Tapi angka-angka ini bisa beda tergantung kompleksitas app.
Flutter punya pendekatan "everything is a widget". Semua UI element adalah widget yang di-compose. Ini sangat powerful tapi kadang bikin file jadi panjang karena nested widget.
// Flutter - Custom card widget
Widget buildProductCard(Product product) {
return Card(
elevation: 4,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
ClipRRect(
borderRadius: BorderRadius.vertical(top: Radius.circular(12)),
child: Image.network(product.imageUrl, fit: BoxFit.cover, height: 180),
),
Padding(
padding: EdgeInsets.all(12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(product.name, style: TextStyle(fontWeight: FontWeight.bold, fontSize: 16)),
SizedBox(height: 4),
Text('Rp ${product.price}', style: TextStyle(color: Colors.green)),
],
),
),
],
),
);
}
React Native mengandalkan Flexbox untuk layout, yang familiar banget buat web developer. Styling pakai StyleSheet yang mirip CSS.
// React Native - Custom card component
const ProductCard = ({ product }) => (
<View style={styles.card}>
<Image source={{ uri: product.imageUrl }} style={styles.image} />
<View style={styles.info}>
<Text style={styles.name}>{product.name}</Text>
<Text style={styles.price}>Rp {product.price}</Text>
</View>
</View>
);
const styles = StyleSheet.create({
card: { borderRadius: 12, backgroundColor: '#fff', elevation: 4, overflow: 'hidden' },
image: { height: 180, width: '100%' },
info: { padding: 12 },
name: { fontWeight: 'bold', fontSize: 16 },
price: { color: 'green', marginTop: 4 },
});
Kalau kamu suka kontrol presisi terhadap UI, Flutter lebih unggul. Tapi kalau preferensi kamu "native look and feel", React Native lebih gampang achieve itu.
React Native unggul di sini karena berbagi ekosistem dengan React web. Jumlah package di npm jauh lebih banyak dibanding pub.dev. Tapi kualitas package Flutter cenderung lebih konsisten karena review process yang lebih ketat.
Package penting di Flutter:
Package penting di React Native:
Flutter di 2026 support: Android, iOS, Web, Windows, macOS, Linux, dan embedded devices. Satu codebase buat 7 platform gila banget.
React Native: Android, iOS, dan ada community effort buat Windows dan macOS (React Native for Windows + react-native-macos). Web support via React Native Web, tapi nggak se-matang Flutter Web.
State management di Flutter udah settle ke beberapa pilihan utama. Riverpod (by RemousseL) dan BLoC (by Felix Angelov) dominasi. Riverpod lebih populer di project baru karena API yang lebih clean.
// Flutter + Riverpod - fetch data dari API
@riverpod
Future<List<Product>> fetchProducts(FetchProductsRef ref) async {
final response = await http.get(Uri.parse('https://api.example.com/products'));
final data = jsonDecode(response.body) as List;
return data.map((e) => Product.fromJson(e)).toList();
}
// Di widget
class ProductList extends ConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final products = ref.watch(fetchProductsProvider);
return products.when(
data: (list) => ListView.builder(itemCount: list.length, itemBuilder: (_, i) => ProductCard(product: list[i])),
loading: () => CircularProgressIndicator(),
error: (err, _) => Text('Error: $err'),
);
}
}
Di React Native, tren 2026 condong ke Zustand buat client state dan TanStack Query buat server state. Redux masih ada tapi makin banyak team yang migrasi ke alternatif yang lebih ringan.
// React Native + Zustand + TanStack Query
import { create } from 'zustand';
import { useQuery } from '@tanstack/react-query';
// Client state - Zustand
const useCartStore = create((set) => ({
items: [],
addItem: (product) => set((state) => ({ items: [...state.items, product] })),
clearCart: () => set({ items: [] }),
}));
// Server state - TanStack Query
const useProducts = () =>
useQuery({
queryKey: ['products'],
queryFn: () => fetch('https://api.example.com/products').then(r => r.json()),
staleTime: 5 * 60 * 1000,
});
Dua-duanya punya testing framework yang solid. Flutter punya flutter_test built-in dengan widget testing yang powerful. React Native pakai Jest + React Native Testing Library.
Buat CI/CD:
Code signing dan store deployment di Flutter sedikit lebih straightforward karena tooling yang lebih terstandar. React Native lebih banyak opsi tapi juga lebih banyak konfigurasi.
Ini sering dilupain padahal penting banget. React Native developer lebih gampang dicari karena pool JavaScript developer gede banget. Flutter developer? Masih lebih sedikit, tapi tren hiring-nya naik terus.
Di Indonesia sendiri, demand Flutter developer naik signifikan di 2025-2026. Banyak startup yang mulai adopt Flutter karena efisiensi development. Tapi perusahaan enterprise yang udah punya web team React biasanya lebih milih React Native karena bisa reuse skill.
Setelah pakai keduanya di project production, kesimpulan saya simpel:
Dua-duanya mature, dua-duanya production-ready. Yang paling penting bukan framework-nya, tapi gimana kamu pakai framework itu. Developer yang paham best practice di framework apapun bakal menghasilkan app yang bagus.
Saran saya? Coba bikin app sederhana (todo list atau CRUD product) di dua-duanya. Dalam 1-2 hari kamu bakal punya feel yang jauh lebih baik dibanding baca 100 artikel perbandingan.