Update: 2026-08-03 00:20:40
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_map/flutter_map.dart';
|
||||
|
||||
/// مصدر بلاطات الخرائط الموحّد لكل شاشات اللوحة.
|
||||
///
|
||||
/// لماذا هذا الملف موجود:
|
||||
/// كانت خمس شاشات تكتب `urlTemplate` بنفسها، وأربع منها تشير مباشرة إلى
|
||||
/// `https://tile.openstreetmap.org/...`. سياسة استخدام بلاطات OpenStreetMap
|
||||
/// تمنع صراحةً هذا الاستعمال لتطبيق إنتاجي، والخوادم التطوّعية تحجب المخالفين —
|
||||
/// وهو سبب رسالة "Access Blocked: App is not following the Tile Usage Policy"
|
||||
/// واختفاء الخريطة في شاشة المراقب.
|
||||
///
|
||||
/// التوحيد هنا يجعل تبديل المزوّد تعديل سطر واحد بدل خمسة.
|
||||
///
|
||||
/// الافتراضي الحالي هو خرائط CARTO الأساسية (مجانية للاستعمال المعتدل ولا
|
||||
/// تحجب كخوادم OSM التطوّعية)، مع نسختين فاتحة وداكنة تتبعان ثيم اللوحة.
|
||||
/// للإنتاج بحِمل كبير: سجّل في MapTiler أو Stadia واضبط [tileUrlOverride]
|
||||
/// و[attributionOverride] بمفتاحك.
|
||||
class MapTiles {
|
||||
MapTiles._();
|
||||
|
||||
/// اضبطه لتجاوز المزوّد الافتراضي (مثلاً رابط MapTiler مع مفتاحك).
|
||||
/// اتركه فارغاً لاستخدام CARTO.
|
||||
static const String tileUrlOverride = '';
|
||||
static const String attributionOverride = '';
|
||||
|
||||
static const String _cartoLight =
|
||||
'https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}{r}.png';
|
||||
static const String _cartoDark =
|
||||
'https://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}{r}.png';
|
||||
|
||||
static const List<String> _subdomains = ['a', 'b', 'c', 'd'];
|
||||
|
||||
/// عرّف عن التطبيق بوضوح — شرط في سياسة كل المزوّدين، وغيابه سبب شائع للحجب.
|
||||
static const String userAgent = 'com.siromove.admin';
|
||||
|
||||
static String urlFor(BuildContext context) {
|
||||
if (tileUrlOverride.isNotEmpty) return tileUrlOverride;
|
||||
return Theme.of(context).brightness == Brightness.dark
|
||||
? _cartoDark
|
||||
: _cartoLight;
|
||||
}
|
||||
|
||||
static String attributionFor(BuildContext context) {
|
||||
if (attributionOverride.isNotEmpty) return attributionOverride;
|
||||
return '© OpenStreetMap contributors © CARTO';
|
||||
}
|
||||
|
||||
/// طبقة البلاطات الجاهزة — استعملها بدل بناء [TileLayer] يدوياً.
|
||||
static TileLayer layer(BuildContext context) {
|
||||
return TileLayer(
|
||||
urlTemplate: urlFor(context),
|
||||
subdomains: tileUrlOverride.isEmpty ? _subdomains : const [],
|
||||
userAgentPackageName: userAgent,
|
||||
// الحد الأقصى الذي تخدمه معظم المزوّدات المجانية؛ تجاوزه يُرجع 404
|
||||
// فتظهر الخريطة رمادية عند التقريب الشديد.
|
||||
maxNativeZoom: 19,
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user