Update: 2026-06-26 17:29:23

This commit is contained in:
Hamza-Ayed
2026-06-26 17:29:23 +03:00
parent a323da29aa
commit 9ded734e38
139 changed files with 1815 additions and 2676 deletions

View File

@@ -3,6 +3,7 @@ import 'package:get/get.dart';
import '../../../constant/colors.dart';
import '../../../constant/style.dart';
import '../../../controller/admin/kazan_controller.dart';
import '../../../views/widgets/snackbar.dart';
import '../../widgets/my_scafold.dart';
import '../../widgets/elevated_btn.dart';
@@ -17,39 +18,77 @@ class KazanEditorPage extends StatelessWidget {
title: 'تعديل أسعار كازان'.tr,
isleading: true,
body: [
Obx(() => controller.isLoading.value && controller.kazanData.isEmpty
? const Center(child: CircularProgressIndicator())
: SingleChildScrollView(
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
Column(
children: [
_buildCountryDropdown(),
Expanded(
child: Obx(() => controller.isLoading.value && controller.kazanData.isEmpty
? const Center(child: CircularProgressIndicator())
: SingleChildScrollView(
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_buildSectionHeader('⚙️ الإعدادات العامة'),
_buildGeneralSettings(),
const SizedBox(height: 24),
_buildSectionHeader('🚗 أسعار الكيلومتر لكل نوع سيارة'),
_buildKmPricesGrid(),
const SizedBox(height: 24),
_buildSectionHeader('⏱️ أسعار الدقيقة (حسب وقت اليوم)'),
_buildMinutePrices(),
const SizedBox(height: 32),
MyElevatedButton(
title: '💾 حفظ جميع التعديلات',
icon: Icons.save_rounded,
onPressed: () => _handleSave(),
),
const SizedBox(height: 100),
],
),
)),
),
],
),
],
);
}
Widget _buildCountryDropdown() {
return Container(
width: double.infinity,
padding: const EdgeInsets.fromLTRB(16, 12, 16, 4),
child: Obx(() => Container(
padding: const EdgeInsets.symmetric(horizontal: 16),
decoration: BoxDecoration(
color: AppColor.surface,
borderRadius: BorderRadius.circular(14),
border: Border.all(color: AppColor.divider),
),
child: DropdownButtonHideUnderline(
child: DropdownButton<String>(
value: controller.selectedCountry.value,
isExpanded: true,
icon: const Icon(Icons.keyboard_arrow_down_rounded),
style: AppStyle.title.copyWith(fontSize: 16),
items: controller.countries.map((c) {
return DropdownMenuItem<String>(
value: c['name'],
child: Row(
children: [
// ⚙️ الإعدادات العامة
_buildSectionHeader('⚙️ الإعدادات العامة'),
_buildGeneralSettings(),
const SizedBox(height: 24),
// 🚗 أسعار الكيلومتر لكل نوع سيارة
_buildSectionHeader('🚗 أسعار الكيلومتر لكل نوع سيارة'),
_buildKmPricesGrid(),
const SizedBox(height: 24),
// ⏱️ أسعار الدقيقة
_buildSectionHeader('⏱️ أسعار الدقيقة (حسب وقت اليوم)'),
_buildMinutePrices(),
const SizedBox(height: 32),
// 💾 زر الحفظ
MyElevatedButton(
title: '💾 حفظ جميع التعديلات',
icon: Icons.save_rounded,
onPressed: () => _handleSave(),
),
const SizedBox(height: 100),
Text(c['flag']!, style: const TextStyle(fontSize: 22)),
const SizedBox(width: 12),
Text(c['name']!),
],
),
)),
],
);
}).toList(),
onChanged: (val) {
if (val != null) controller.setCountry(val);
},
),
),
)),
);
}
@@ -373,26 +412,18 @@ class KazanEditorPage extends StatelessWidget {
final data = Map<String, dynamic>.from(controller.kazanData);
data['adminId'] = 'admin1';
// التأكد من وجود country (إذا لم يكن موجوداً، استخدم 'syria')
// التأكد من وجود country
if (!data.containsKey('country') ||
data['country'] == null ||
data['country'].toString().isEmpty) {
data['country'] = 'Syria';
data['country'] = controller.selectedCountry.value;
}
bool success = await controller.updateKazan(data);
if (success) {
Get.snackbar("نجاح", "تم تحديث الأسعار بنجاح",
backgroundColor: AppColor.successSoft,
colorText: AppColor.textPrimary,
snackPosition: SnackPosition.BOTTOM,
margin: const EdgeInsets.all(16));
mySnackbarSuccess('تم تحديث أسعار ${controller.selectedCountry.value} بنجاح');
} else {
Get.snackbar("خطأ", "فشل تحديث الأسعار",
backgroundColor: Colors.red.shade100,
colorText: AppColor.textPrimary,
snackPosition: SnackPosition.BOTTOM,
margin: const EdgeInsets.all(16));
mySnackbarError('فشل تحديث الأسعار');
}
}
}