Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions lib/core/constants/assets_app.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ abstract class AssetsApp {
// logo
static const String logo = 'assets/logo/Logo.png';
static const String logoMedical = 'assets/logo/حضانات.png';
static const String hospitalLogo = 'assets/logo/hospital.png';

// onboarding
static const String icOnboard1 = 'assets/images/onboard/onboard-1.png';
Expand Down
118 changes: 118 additions & 0 deletions lib/core/widgets/hospital_header.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
import 'package:flutter/material.dart';
import '../constants/assets_app.dart';
import '../theme/color_app.dart';

class HospitalHeader extends StatelessWidget {
const HospitalHeader({super.key});

@override
Widget build(BuildContext context) {
final isDark = Theme.of(context).brightness == Brightness.dark;

return Container(
padding: const EdgeInsets.fromLTRB(15, 10, 15, 12),
decoration: BoxDecoration(
color: isDark ? ColorApp.appDark : ColorApp.appLight,
border: Border(
bottom: BorderSide(
color: const Color(0xFF0D47A1).withOpacity(0.2),
width: 1.2,
),
),
),
child: SafeArea(
bottom: false,
child: Column(
children: [
Row(
children: [
// 1. أيقونة التنبيهات (جهة اليسار)
Stack(
clipBehavior: Clip.none,
children: [
Image.asset('assets/icon/bell.png', height: 28),
Positioned(
right: 0,
top: 0,
child: Container(
width: 8,
height: 8,
decoration: const BoxDecoration(
color: Colors.red,
shape: BoxShape.circle,
),
),
),
],
),

// مسافة مرنة تدفع المحتوى للمنتصف
const Spacer(),

// 2. الجزء الأوسط: اللوجو + النصوص (متلاصقين)
Row(
mainAxisSize: MainAxisSize.min,

children: [
Image.asset(
AssetsApp.hospitalLogo,
height: 55, // حجم مناسب عشان مياخدش مساحة رأسية كبيرة
),
SizedBox(width: 8),
Column(
// محاذاة لليمين
children: [
Text(
'مستشفى بنها الجامعي',
style: TextStyle(
fontSize: 22,
fontWeight: FontWeight.w900,
color: isDark
? ColorApp.textDark
: ColorApp.textLight,
),
),
Text(
'القليوبية، بنها، الإشارة',
style: TextStyle(
fontSize: 10,
fontWeight: FontWeight.w500,
color: ColorApp.locationText,
),
),
],
),
],
),

const Spacer(),

// 3. شعار "شفاء" (جهة اليمين)
Hero(
tag: 'shifa_logo',
child: Image.asset(AssetsApp.logo, height: 55),
),
],
),
const SizedBox(height: 10),

// الـ Divider الاحترافي
Container(
height: 1.2,
width: double.infinity,
decoration: BoxDecoration(
gradient: LinearGradient(
colors: [
ColorApp.primary.withOpacity(0.0),
ColorApp.primary.withOpacity(0.4),
ColorApp.primary.withOpacity(0.0),
],
),
),
),
],
),
),
);
}
}
131 changes: 131 additions & 0 deletions lib/features/hospital/bookingChildrensNurseries.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
import 'package:flutter/material.dart';
import 'package:shefa/core/theme/color_app.dart';
import 'package:shefa/core/widgets/hospital_header.dart';
import 'package:shefa/features/hospital/nursery_request_model.dart';
import 'package:shefa/features/hospital/requestCard.dart';

class NurseryRequestsScreen extends StatelessWidget {
NurseryRequestsScreen({super.key});

final List<NurseryRequest> requests = [
NurseryRequest(
childName: 'أحمد محمد',
phone: '0100000000',
status: '********************************************',
serviceType: 'حضانات أطفال',
time: '5:54 PM - 10 Jan 2026',
),
NurseryRequest(
childName: 'سارة علي',
phone: '0111111111',
status: '******************************************',
serviceType: ' حضانات أطفال',
time: '3:20 PM - 11 Jan 2026',
),
NurseryRequest(
childName: 'محمود حسن',
phone: '0122222222',
status: '*******************************************',
serviceType: 'حضانات أطفال ',
time: '1:10 PM - 12 Jan 2026',
),
];

@override
Widget build(BuildContext context) {
return Scaffold(
body: Stack(
children: [
Positioned.fill(
child: Image.asset(
'assets/images/background/background-reduce-opacity.png',
),
),
Column(
children: [
const HospitalHeader(),
Container(
margin: const EdgeInsets.symmetric(
horizontal: 10,
vertical: 10,
),
padding: const EdgeInsets.symmetric(
horizontal: 12,
vertical: 10,
),
decoration: BoxDecoration(
color: Colors.white.withOpacity(0.0),
boxShadow: [
BoxShadow(
color: Colors.black.withOpacity(0.04),
blurRadius: 6,
offset: const Offset(0, 2),
),
],
),
child: Row(
children: [
Container(
width: 22,
height: 22,
decoration: BoxDecoration(
color: ColorApp.primary.withOpacity(0.1),
shape: BoxShape.rectangle,
),
child: IconButton(
padding: EdgeInsets.zero,
onPressed: () => Navigator.pop(context),
icon: const Icon(
Icons.arrow_back,
color: ColorApp.primary,
size: 18,
),
),
),
const SizedBox(width: 12),
Container(
width: 45,
height: 45,
decoration: BoxDecoration(
shape: BoxShape.circle,
border: Border.all(
color: ColorApp.primary.withOpacity(0.3),
width: 1.5,
),
),
child: ClipOval(
child: Image.asset(
'assets/images/onboard/onboard-1.png',
fit: BoxFit.cover,
),
),
),
const SizedBox(width: 12),
const Text(
'طلبات حجز حضانات الأطفال',
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.bold,
color: ColorApp.primary,
),
),
const SizedBox(width: 10),
],
),
),
Expanded(
child: ListView.builder(
padding: const EdgeInsets.only(bottom: 20),
itemCount: requests.length,
itemBuilder: (context, index) {
return RequestCard(request: requests[index]);
},
),
),
],
),
],
),
);
}
}
136 changes: 136 additions & 0 deletions lib/features/hospital/icu_request_card.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
import 'package:flutter/material.dart';
import 'package:shefa/core/theme/color_app.dart';
import 'package:shefa/features/hospital/icu_request_details_screen.dart';
import 'package:shefa/features/hospital/icu_request_model.dart';

class IcuRequestCard extends StatelessWidget {
final IcuRequest request;

const IcuRequestCard({super.key, required this.request});

@override
Widget build(BuildContext context) {
return Container(
margin: const EdgeInsets.symmetric(horizontal: 16, vertical: 10),
decoration: BoxDecoration(
color: Colors.white.withOpacity(0.4),
borderRadius: BorderRadius.circular(25),
border: Border.all(color: ColorApp.primary.withOpacity(0.2)),
boxShadow: [
BoxShadow(
color: ColorApp.icons.withOpacity(0.05),
blurRadius: 10,
offset: const Offset(0, 4),
),
],
),
child: ClipRRect(
borderRadius: BorderRadius.circular(25),
child: Stack(
children: [
Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
request.time,
style: TextStyle(
color: ColorApp.locationText,
fontSize: 10,
),
),
Center(
child: Text(
'بيانات الطلب',
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
color: ColorApp.locationText,
),
),
),
const SizedBox(height: 12),
_buildLabelOnly('اسم المريض'),
_buildLabelOnly('رقم التليفون'),
_buildLabelOnly('الحالة'),
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text(
'نوع الخدمة:',
style: TextStyle(
color: ColorApp.icons,
fontWeight: FontWeight.bold,
fontSize: 16,
),
),
Text(
' ${request.serviceType}',
style: TextStyle(
color: ColorApp.icons,
fontWeight: FontWeight.bold,
fontSize: 16,
),
),
],
),
const SizedBox(height: 12),
Align(
alignment: Alignment.center,
child: GestureDetector(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
IcuRequestDetailsScreen(request: request),
),
);
},
child: Container(
padding: const EdgeInsets.symmetric(
horizontal: 20,
vertical: 8,
),
decoration: BoxDecoration(
color: ColorApp.buttonDetails,
borderRadius: BorderRadius.circular(15),
),
child: Text(
'تفاصيل الطلب',
style: TextStyle(
color: ColorApp.icons,
fontWeight: FontWeight.bold,
fontSize: 13,
),
),
),
),
),
],
),
),
],
),
),
);
}

Widget _buildLabelOnly(String title) {
return Padding(
padding: const EdgeInsets.only(bottom: 4),
child: Align(
alignment: Alignment.centerRight,
child: Text(
title,
style: TextStyle(
fontWeight: FontWeight.w600,
fontSize: 15,
color: ColorApp.icons,
),
),
),
);
}
}
Loading