Flutter vs React Native
Google'ın Dart tabanlı Flutter'ı ile Meta'nın JavaScript/TypeScript tabanlı React Native'ini her açıdan karşılaştırıyoruz. Hangi cross-platform framework 2025'te öne çıkıyor?
Az kodla derleme-zamanı güvenli, hızlı gelişen provider mimarisi
Event/state akışını zorunlu kılan, olgun ve topluluk-büyük mimari sözleşmesi
"Yanlış seçim" yok — ikisi de kanıtlanmış, MIT lisanslı. 1-5 kişilik, hızlı iterasyon yapan ekipte Riverpod: az boilerplate, codegen isteğe bağlı, çok aktif sürüm temposu (3.4.3, 2026-09-03). Çok ekipli, denetlenebilir olay akışı isteyen kurumsal projede Bloc: event/state zorunlu, BlocObserver var, ama flutter_bloc'un son sürümü 2025-05-02 tarihli — izle. Soru "hangisi iyi" değil, "disiplin ne kadar dışarıdan dayatılmalı" sorusu.
| Kategori | Riverpod | Bloc |
|---|---|---|
| Performans | 8/10 | 8/10 |
| Öğrenme Kolaylığı | 8/10 | 6/10 |
| Ekosistem | 7/10 | 9/10 |
| Topluluk | 7/10 | 9/10 |
| İş Pazarı | 7/10 | 7/10 |
| Gelecek | 8/10 | 7/10 |
// Riverpod - Kullanıcı listesi (code generation ile)
// Kaynak: riverpod.dev resmi doküman deseni
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'user_list_provider.g.dart';
@riverpod
Future<List<User>> userList(Ref ref, {required int page}) async {
final repository = ref.watch(userRepositoryProvider);
return repository.fetchUsers(page: page);
}
class UserListScreen extends ConsumerWidget {
const UserListScreen({super.key});
@override
Widget build(BuildContext context, WidgetRef ref) {
final usersAsync = ref.watch(userListProvider(page: 1));
return usersAsync.when(
data: (users) => ListView.builder(
itemCount: users.length,
itemBuilder: (context, index) => ListTile(
title: Text(users[index].name),
subtitle: Text(users[index].email),
),
),
loading: () => const Center(child: CircularProgressIndicator()),
error: (error, stack) => Center(child: Text('Hata: $error')),
);
}
}
// Codegen'siz klasik syntax alternatifi (resmi doküman, opsiyonel):
final userListClassicProvider =
FutureProvider.autoDispose.family<List<User>, int>((ref, page) async {
final repository = ref.watch(userRepositoryProvider);
return repository.fetchUsers(page: page);
});// Bloc - Kullanıcı listesi (Event/State + Repository)
// Kaynak: bloclibrary.dev resmi Core Concepts deseni
import 'package:flutter_bloc/flutter_bloc.dart';
sealed class UserListEvent {}
class FetchUsers extends UserListEvent {
FetchUsers({required this.page});
final int page;
}
sealed class UserListState {}
class UserListInitial extends UserListState {}
class UserListLoading extends UserListState {}
class UserListLoaded extends UserListState {
UserListLoaded({required this.users});
final List<User> users;
}
class UserListError extends UserListState {
UserListError({required this.message});
final String message;
}
class UserListBloc extends Bloc<UserListEvent, UserListState> {
UserListBloc({required this.repository}) : super(UserListInitial()) {
on<FetchUsers>(_onFetchUsers);
}
final UserRepository repository;
Future<void> _onFetchUsers(
FetchUsers event,
Emitter<UserListState> emit,
) async {
emit(UserListLoading());
try {
final users = await repository.fetchUsers(page: event.page);
emit(UserListLoaded(users: users));
} catch (error) {
emit(UserListError(message: error.toString()));
}
}
}"Yanlış seçim" yok — ikisi de kanıtlanmış, MIT lisanslı. 1-5 kişilik, hızlı iterasyon yapan ekipte Riverpod: az boilerplate, codegen isteğe bağlı, çok aktif sürüm temposu (3.4.3, 2026-09-03). Çok ekipli, denetlenebilir olay akışı isteyen kurumsal projede Bloc: event/state zorunlu, BlocObserver var, ama flutter_bloc'un son sürümü 2025-05-02 tarihli — izle. Soru "hangisi iyi" değil, "disiplin ne kadar dışarıdan dayatılmalı" sorusu.
Ücretsiz Danışmanlık AlTekil doğru cevap yok. 1-5 kişilik ekipte hızlı iterasyon yapıyorsan ve mimari kararı ekip içi konuşmayla çözebiliyorsan Riverpod (az boilerplate, codegen isteğe bağlı, BuildContext'siz test) daha uygun. Çok ekipli, denetlenebilir bir olay akışı ve katı sözleşme isteyen kurumsal projede (fintech, sağlık gibi regüle sektörlerde) Bloc, event/state ayrımını ve BlocObserver ile merkezi loglamayı zorunlu kılarak daha güvenli bir zemin sunuyor.