MIF_E31222653/adminkurir/lib/screens/courier/courier_delivery_screen.dart

160 lines
5.9 KiB
Dart

import 'package:flutter/material.dart';
import '../home_screen.dart';
class CourierDeliveryScreen extends StatelessWidget {
const CourierDeliveryScreen({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: Stack(
children: [
// Map background
Positioned.fill(
child: Image.asset(
'assets/images/map.png',
fit: BoxFit.cover,
),
),
// Back button
SafeArea(
child: Padding(
padding: const EdgeInsets.all(12),
child: Align(
alignment: Alignment.topLeft,
child: CircleAvatar(
backgroundColor: Colors.white,
child: IconButton(
icon: const Icon(Icons.arrow_back, color: Colors.blue),
onPressed: () => Navigator.of(context).pop(),
),
),
),
),
),
// Dummy route (bisa diganti CustomPaint/Polyline jika ingin lebih dinamis)
// Marker avatar (dummy posisi)
Positioned(
top: 110,
left: 210,
child: CircleAvatar(
radius: 18,
backgroundColor: Colors.white,
child: const CircleAvatar(
radius: 16,
backgroundImage: AssetImage('assets/images/orang.jpg'),
),
),
),
Positioned(
top: 320,
left: 80,
child: CircleAvatar(
radius: 18,
backgroundColor: Colors.white,
child: const CircleAvatar(
radius: 16,
backgroundImage: AssetImage('assets/images/courier.png'),
),
),
),
// Bottom sheet info pesanan
Align(
alignment: Alignment.bottomCenter,
child: Container(
width: double.infinity,
decoration: const BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(24),
topRight: Radius.circular(24),
),
boxShadow: [
BoxShadow(
color: Colors.black12,
blurRadius: 10,
offset: Offset(0, -2),
),
],
),
padding: const EdgeInsets.fromLTRB(20, 18, 20, 24),
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
CircleAvatar(
backgroundColor: Colors.green[50],
radius: 18,
child: const Icon(Icons.person, color: Colors.green),
),
const SizedBox(width: 10),
const Text('Dipesan oleh', style: TextStyle(fontSize: 13, color: Colors.grey)),
const SizedBox(width: 6),
const Text('Dewi Sartika', style: TextStyle(fontWeight: FontWeight.bold, fontSize: 15)),
const Spacer(),
IconButton(
icon: const Icon(Icons.call, color: Colors.blue),
onPressed: () {},
),
IconButton(
icon: const Icon(Icons.chat, color: Colors.blue),
onPressed: () {},
),
],
),
const SizedBox(height: 10),
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Icon(Icons.location_on, color: Colors.red, size: 22),
const SizedBox(width: 8),
Expanded(
child: const Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('Alamat', style: TextStyle(fontSize: 13, color: Colors.grey)),
Text('Gedung Teknologi Informasi', style: TextStyle(fontWeight: FontWeight.bold, fontSize: 15)),
SizedBox(height: 2),
Text('Catatan', style: TextStyle(fontSize: 13, color: Colors.grey)),
Text('Lantai 1 Ruang Baca JTI', style: TextStyle(fontSize: 14)),
],
),
),
],
),
const SizedBox(height: 18),
SizedBox(
width: double.infinity,
child: ElevatedButton(
onPressed: () {
Navigator.of(context).pushAndRemoveUntil(
MaterialPageRoute(
builder: (context) => const HomeScreen(),
),
(route) => false,
);
},
style: ElevatedButton.styleFrom(
backgroundColor: Colors.blue,
foregroundColor: Colors.white,
padding: const EdgeInsets.symmetric(vertical: 14),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(14),
),
textStyle: const TextStyle(fontWeight: FontWeight.bold, fontSize: 16),
),
child: const Text('Selesai'),
),
),
],
),
),
),
],
),
);
}
}