import 'package:auto_size_text/auto_size_text.dart'; import 'package:baligh_dashboard/utils/file_classification.dart'; import 'package:baligh_dashboard/widgets/app_toast.dart'; import 'package:baligh_dashboard/widgets/dashboard_tile.dart'; import 'package:baligh_dashboard/widgets/file_card.dart'; import 'package:bot_toast/bot_toast.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/material.dart'; class ReportDetailsScreen extends StatefulWidget { const ReportDetailsScreen({ super.key, required this.id, required this.name, required this.address, required this.school, required this.type, required this.status, required this.age, required this.attachments, required this.createdAt, required this.description, required this.nationalIdNumber, required this.phone, }); final String id; final String name; final String address; final String school; final String type; final String status; final Timestamp createdAt; final int age; final String phone; final int nationalIdNumber; final String description; final List attachments; @override State createState() => _ReportDetailsScreenState(); } class _ReportDetailsScreenState extends State { String selectedStatus = "قيد الانتظار"; List availableStatus = [ "قيد الانتظار", "قيد المعالجة", "مكتمل", ]; @override void initState() { setState(() { selectedStatus = widget.status; }); super.initState(); } @override Widget build(BuildContext context) { return Directionality( textDirection: TextDirection.rtl, child: Scaffold( body: SafeArea( child: ListView( padding: const EdgeInsets.symmetric(horizontal: 15), children: [ const SizedBox( height: 50, ), AutoSizeText( "تفاصيل البلاغ", style: Theme.of(context).textTheme.titleLarge, minFontSize: 12, ), const SizedBox( height: 30, ), Wrap( children: [ Text( "حالة البلاغ:", style: Theme.of(context).textTheme.bodyLarge, ), const SizedBox( width: 5, ), DropdownMenu( initialSelection: "قيد الانتظار", label: const Text("الحالة"), onSelected: (String? value) async { var old = selectedStatus; setState(() { selectedStatus = value ?? "قيد الانتظار"; }); try { await FirebaseFirestore.instance .collection("reports") .doc(widget.id) .update({ 'status': selectedStatus, }); } catch (e) { setState(() { selectedStatus = old; }); BotToast.showCustomText(toastBuilder: (_) { return const AppToast(text: "حدث خطأ ما"); }); } }, dropdownMenuEntries: availableStatus.map>((value) { return DropdownMenuEntry( value: value, label: value, ); }).toList(), ), ], ), const SizedBox( height: 15, ), Row( children: [ Expanded( child: AutoSizeText( "اسم صاحب البلاغ", style: Theme.of(context).textTheme.bodyMedium, maxLines: 3, minFontSize: 8, ), ), const SizedBox( width: 5, ), Expanded( child: AutoSizeText( "عنوان صاحب البلاغ", style: Theme.of(context).textTheme.bodyMedium, maxLines: 3, minFontSize: 8, ), ), const SizedBox( width: 5, ), Expanded( child: AutoSizeText( "المدرسة", style: Theme.of(context).textTheme.bodyMedium, maxLines: 3, minFontSize: 8, ), ), const SizedBox( width: 5, ), Expanded( child: AutoSizeText( "نوع البلاغ", style: Theme.of(context).textTheme.bodyMedium, maxLines: 3, minFontSize: 8, ), ), const SizedBox( width: 5, ), Expanded( child: AutoSizeText( "الحالة", style: Theme.of(context).textTheme.bodyMedium, maxLines: 3, minFontSize: 8, ), ), ], ), const SizedBox( height: 10, ), DashboardTile( id: widget.id, name: widget.name, age: widget.age, phone: widget.phone, address: widget.address, school: widget.school, nationalIdNumber: widget.nationalIdNumber, description: widget.description, attachments: widget.attachments, type: widget.type, createdAt: widget.createdAt, status: widget.status, ), const SizedBox( height: 20, ), AutoSizeText( "وصف البلاغ", style: Theme.of(context).textTheme.bodyLarge, minFontSize: 12, ), const SizedBox( height: 10, ), Text( widget.description, style: Theme.of(context).textTheme.bodySmall, ), const SizedBox( height: 20, ), AutoSizeText( "الملفات المرفقة", style: Theme.of(context).textTheme.bodyLarge, minFontSize: 12, ), const SizedBox( height: 10, ), Wrap( children: widget.attachments .map( (el) => FileCard( type: FileClassification.getFileClass(el), filename: FileClassification.getFileName(el) ?? "", fileUrl: el,), ) .toList(), ), const SizedBox( height: 30, ), ], ), ), ), ); } }