Flutter vs React Native
Wir vergleichen Googles Dart-basiertes Flutter mit Metas JavaScript-/TypeScript-basiertem React Native aus jeder Perspektive. Welches Cross-Platform-Framework setzt sich 2025 durch?
Compile-zeit-sichere Provider-Architektur mit wenig Code, die sich schnell weiterentwickelt
Ausgereifter architektonischer Vertrag mit großer Community, der einen verbindlichen Event/State-Fluss erzwingt
Es gibt keine "falsche Wahl" — beide sind bewährt und MIT-lizenziert. In einem kleinen Team mit 1-5 Personen und schneller Iteration: Riverpod — wenig Boilerplate, Codegen optional, sehr aktives Release-Tempo (3.4.3, 2026-09-03). In einem Unternehmensprojekt mit mehreren Teams, das einen prüfbaren Event-Fluss braucht: Bloc — Event/State ist verbindlich, BlocObserver ist vorhanden, aber die letzte flutter_bloc-Version stammt vom 2025-05-02 — im Auge behalten. Die Frage lautet nicht "welches ist besser", sondern "wie viel Disziplin soll von außen erzwungen werden".
| Kategorie | Riverpod | Bloc |
|---|---|---|
| Performance | 8/10 | 8/10 |
| Erlernbarkeit | 8/10 | 6/10 |
| Ökosystem | 7/10 | 9/10 |
| Community | 7/10 | 9/10 |
| Arbeitsmarkt | 7/10 | 7/10 |
| Zukunftssicherheit | 8/10 | 7/10 |
// Riverpod - Benutzerliste (mit Codegenerierung)
// Quelle: offizielles Dokumentationsmuster von riverpod.dev
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')),
);
}
}
// Alternative mit klassischer Syntax ohne Codegen (offizielle Doku, optional):
final userListClassicProvider =
FutureProvider.autoDispose.family<List<User>, int>((ref, page) async {
final repository = ref.watch(userRepositoryProvider);
return repository.fetchUsers(page: page);
});// Bloc - Benutzerliste (Event/State + Repository)
// Quelle: offizielles Core-Concepts-Muster von bloclibrary.dev
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()));
}
}
}Es gibt keine "falsche Wahl" — beide sind bewährt und MIT-lizenziert. In einem kleinen Team mit 1-5 Personen und schneller Iteration: Riverpod — wenig Boilerplate, Codegen optional, sehr aktives Release-Tempo (3.4.3, 2026-09-03). In einem Unternehmensprojekt mit mehreren Teams, das einen prüfbaren Event-Fluss braucht: Bloc — Event/State ist verbindlich, BlocObserver ist vorhanden, aber die letzte flutter_bloc-Version stammt vom 2025-05-02 — im Auge behalten. Die Frage lautet nicht "welches ist besser", sondern "wie viel Disziplin soll von außen erzwungen werden".
Kostenlose Beratung erhaltenEs gibt keine einzige richtige Antwort. Wenn du in einem Team mit 1-5 Personen schnell iterierst und architektonische Entscheidungen im Team klären kannst, ist Riverpod (wenig Boilerplate, Codegen optional, Tests ohne BuildContext) besser geeignet. In einem Unternehmensprojekt mit mehreren Teams, das einen prüfbaren Event-Fluss und einen strikten Vertrag benötigt (etwa in regulierten Branchen wie Fintech oder Gesundheitswesen), bietet Bloc durch die verbindliche Trennung von Event und State sowie zentrale Protokollierung mit BlocObserver eine sicherere Grundlage.