Commit c145991a authored by Mahmoud Aglan's avatar Mahmoud Aglan

Fix event image field name and outstanding_balance type cast

- Use cover_url (API field) instead of image_url for events
- Add errorBuilder fallback for broken image URLs
- Parse outstanding_balance as int before comparison (API returns string)
Co-Authored-By: 's avatarClaude Opus 4.6 <noreply@anthropic.com>
parent 9ebfaeab
description: This file stores settings for Dart & Flutter DevTools.
documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states
extensions:
......@@ -27,6 +27,12 @@ class AppTheme {
useMaterial3: true,
colorScheme: colorScheme,
fontFamily: 'Cairo',
textTheme: const TextTheme().apply(fontFamily: 'Cairo').copyWith(
bodyLarge: const TextStyle(fontFamily: 'Cairo', height: 1.5),
bodyMedium: const TextStyle(fontFamily: 'Cairo', height: 1.5),
bodySmall: const TextStyle(fontFamily: 'Cairo', height: 1.5),
labelLarge: const TextStyle(fontFamily: 'Cairo', height: 1.4),
),
scaffoldBackgroundColor: const Color(0xFFF8FAFC),
appBarTheme: AppBarTheme(
backgroundColor: Colors.white,
......@@ -55,7 +61,8 @@ class AppTheme {
backgroundColor: primaryColor,
foregroundColor: Colors.white,
elevation: 0,
padding: const EdgeInsets.symmetric(horizontal: 32, vertical: 16),
minimumSize: const Size(double.infinity, 52),
padding: const EdgeInsets.symmetric(horizontal: 32, vertical: 14),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(14),
),
......@@ -63,6 +70,7 @@ class AppTheme {
fontFamily: 'Cairo',
fontSize: 16,
fontWeight: FontWeight.w600,
height: 1.4,
),
),
),
......
......@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_animate/flutter_animate.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../../core/api/api_service.dart';
import '../../core/auth/auth_store.dart';
import '../../core/l10n/app_localizations.dart';
import '../../core/theme/app_theme.dart';
import '../../core/widgets/loading_overlay.dart';
......@@ -82,13 +83,16 @@ class _EventCard extends StatelessWidget {
color: AppTheme.primaryColor.withValues(alpha: 0.08),
borderRadius: const BorderRadius.vertical(top: Radius.circular(18)),
),
child: event['image_url'] != null
child: (event['cover_url'] ?? event['image_url']) != null
? ClipRRect(
borderRadius: const BorderRadius.vertical(top: Radius.circular(18)),
child: Image.network(
event['image_url'],
event['cover_url'] ?? event['image_url'],
width: double.infinity,
fit: BoxFit.cover,
errorBuilder: (_, __, ___) => Center(
child: Icon(Icons.event, size: 48, color: AppTheme.primaryColor.withValues(alpha: 0.3)),
),
),
)
: Center(
......@@ -143,8 +147,33 @@ class _EventCard extends StatelessWidget {
onPressed: isRegistered
? null
: () async {
await ref.read(apiServiceProvider).registerForEvent(event['uuid'], '');
final participants = ref.read(authStoreProvider).participants;
if (participants.isEmpty) {
if (context.mounted) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('لا يوجد مشتركين مربوطين بحسابك')),
);
}
return;
}
try {
await ref.read(apiServiceProvider).registerForEvent(
event['uuid'],
participants.first['uuid'] ?? '',
);
ref.invalidate(eventsProvider);
if (context.mounted) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('تم التسجيل بنجاح')),
);
}
} catch (_) {
if (context.mounted) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('حدث خطأ أثناء التسجيل')),
);
}
}
},
style: ElevatedButton.styleFrom(
backgroundColor: isRegistered ? Colors.grey.shade200 : AppTheme.primaryColor,
......
......@@ -233,7 +233,7 @@ class DashboardScreen extends ConsumerWidget {
],
),
),
if ((child['outstanding_balance'] ?? 0) > 0)
if ((int.tryParse(child['outstanding_balance']?.toString() ?? '0') ?? 0) > 0)
Container(
padding: const EdgeInsets.symmetric(
horizontal: 10,
......
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'core/l10n/app_localizations.dart';
import 'core/l10n/locale_provider.dart';
......@@ -34,8 +35,9 @@ class ElCaptainApp extends ConsumerWidget {
supportedLocales: const [Locale('ar'), Locale('en')],
localizationsDelegates: const [
AppLocalizations.delegate,
DefaultMaterialLocalizations.delegate,
DefaultWidgetsLocalizations.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
routerConfig: router,
builder: (context, child) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment