Update: 2026-08-03 13:10:56

This commit is contained in:
Hamza-Ayed
2026-08-03 13:10:57 +03:00
parent f36b30f0b8
commit b60129d246
4 changed files with 45 additions and 7 deletions
@@ -40,8 +40,22 @@ class CaptainsPage extends StatelessWidget {
return _buildEmptyState(cs);
}
final List<dynamic> captains =
message is List ? message : [message];
// AdminCaptain/get.php يغلّف النتيجة مرّتين:
// {"status":"success","message":{"data":[ ...الكباتن... ]}}
// الشرط السابق كان `message is List ? message : [message]`،
// فيلفّ الخريطة نفسها في قائمة من عنصر واحد. النتيجة بطاقة
// واحدة كل حقولها null — وهو سبب اختفاء الاسم والهاتف،
// لا خطأ في فك التشفير.
final List<dynamic> captains;
if (message is List) {
captains = message;
} else if (message is Map && message['data'] is List) {
captains = message['data'];
} else if (message is Map) {
captains = [message];
} else {
captains = const [];
}
if (captains.isEmpty) {
return _buildEmptyState(cs);
@@ -35,7 +35,12 @@ class _HeatmapPageState extends State<HeatmapPage> {
@override
void initState() {
super.initState();
_fetchHeatmapData();
// _fetchHeatmapData يقرأ Theme.of(context) لتلوين العلامات، وهذا ممنوع
// قبل اكتمال initState (يرمي dependOnInheritedWidgetOfExactType).
// التأجيل إلى ما بعد أول إطار يضمن جاهزية الشجرة.
WidgetsBinding.instance.addPostFrameCallback((_) {
if (mounted) _fetchHeatmapData();
});
}
Future<void> _fetchHeatmapData() async {