61 lines
2.9 KiB
Dart
61 lines
2.9 KiB
Dart
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,
|
|
);
|
|
}
|
|
}
|