Flutter vs React Native
نقارن Flutter من Google المبني على Dart مع React Native من Meta المبني على JavaScript/TypeScript من كل الجوانب. أي إطار عمل عابر للمنصات (cross-platform) يتصدر المشهد في 2025؟
معمارية provider سريعة التطور وآمنة وقت الترجمة (compile-time) بكود أقل
عقد معماري ناضج وذو مجتمع كبير يفرض تدفق الحدث/الحالة (event/state)
لا يوجد "اختيار خاطئ" هنا — كلاهما مُثبت وبرخصة MIT. في فريق من 1 إلى 5 أشخاص يعمل بتكرار سريع، يناسب Riverpod أكثر: كود متكرر أقل، توليد الكود اختياري، ووتيرة إصدارات نشطة جدًا (3.4.3 بتاريخ 2026-09-03). في مشروع مؤسسي متعدد الفرق يحتاج تدفق أحداث قابل للتدقيق، يناسب Bloc أكثر: فصل الحدث/الحالة إلزامي، ويتوفر BlocObserver، لكن آخر إصدار من flutter_bloc بتاريخ 2025-05-02 — راقب هذا. السؤال ليس "أيهما أفضل" بل "إلى أي مدى يجب فرض الانضباط من الخارج".
| الفئة | Riverpod | Bloc |
|---|---|---|
| الأداء | 8/10 | 8/10 |
| سهولة التعلّم | 8/10 | 6/10 |
| النظام البيئي | 7/10 | 9/10 |
| المجتمع | 7/10 | 9/10 |
| سوق العمل | 7/10 | 7/10 |
| الاستدامة المستقبلية | 8/10 | 7/10 |
// Riverpod - قائمة المستخدمين (بتوليد الكود)
// المصدر: نمط التوثيق الرسمي لـ 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')),
);
}
}
// بديل الصياغة الكلاسيكية بدون توليد كود (التوثيق الرسمي، اختياري):
final userListClassicProvider =
FutureProvider.autoDispose.family<List<User>, int>((ref, page) async {
final repository = ref.watch(userRepositoryProvider);
return repository.fetchUsers(page: page);
});// Bloc - قائمة المستخدمين (Event/State + Repository)
// المصدر: نمط Core Concepts الرسمي في 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()));
}
}
}لا يوجد "اختيار خاطئ" هنا — كلاهما مُثبت وبرخصة MIT. في فريق من 1 إلى 5 أشخاص يعمل بتكرار سريع، يناسب Riverpod أكثر: كود متكرر أقل، توليد الكود اختياري، ووتيرة إصدارات نشطة جدًا (3.4.3 بتاريخ 2026-09-03). في مشروع مؤسسي متعدد الفرق يحتاج تدفق أحداث قابل للتدقيق، يناسب Bloc أكثر: فصل الحدث/الحالة إلزامي، ويتوفر BlocObserver، لكن آخر إصدار من flutter_bloc بتاريخ 2025-05-02 — راقب هذا. السؤال ليس "أيهما أفضل" بل "إلى أي مدى يجب فرض الانضباط من الخارج".
احصل على استشارة مجانيةلا توجد إجابة واحدة صحيحة. إذا كنت تعمل في فريق من 1 إلى 5 أشخاص بتكرار سريع، ويمكنك حسم القرار المعماري بنقاش داخلي، فإن Riverpod (كود متكرر أقل، توليد الكود اختياري، اختبار بدون BuildContext) أنسب. أما في مشروع مؤسسي متعدد الفرق يحتاج تدفق أحداث قابل للتدقيق وعقدًا صارمًا (في قطاعات منظّمة مثل التقنية المالية أو الصحة)، فإن Bloc يوفر أرضية أكثر أمانًا بفرضه فصل الحدث/الحالة والتسجيل المركزي عبر BlocObserver.