95 lines
2.9 KiB
Dart
Executable File
95 lines
2.9 KiB
Dart
Executable File
import 'dart:io';
|
|
import 'dart:typed_data';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_map/flutter_map.dart';
|
|
// import 'package:flutter_map_tile_caching/flutter_map_tile_caching.dart';
|
|
import 'package:http/http.dart' as http;
|
|
import 'package:path_provider/path_provider.dart';
|
|
import 'package:path/path.dart' as path;
|
|
|
|
import 'dart:ui' as ui;
|
|
|
|
/// 地图瓦片缓存工具类
|
|
class KRFMTC {
|
|
static const String kr_storeName = 'kaer_map_store';
|
|
|
|
/// HTTP 客户端,用于复用连接
|
|
static late final http.Client _httpClient = http.Client();
|
|
|
|
/// 瓦片提供者实例
|
|
static late final TileProvider _tileProvider = NetworkTileProvider();
|
|
|
|
/// 判断是否在中国大陆
|
|
static bool _kr_isInMainlandChina() {
|
|
// 获取系统语言
|
|
final List<Locale> systemLocales = ui.window.locales;
|
|
final String? languageCode = systemLocales.isNotEmpty ? systemLocales.first.languageCode : null;
|
|
final String? countryCode = systemLocales.isNotEmpty ? systemLocales.first.countryCode : null;
|
|
|
|
// 获取系统时区
|
|
final String timeZoneName = DateTime.now().timeZoneName;
|
|
|
|
// 检查是否为中文语言环境
|
|
bool isChineseLanguage = languageCode == 'zh';
|
|
// 检查是否为中国地区代码
|
|
bool isChineseRegion = countryCode == 'CN';
|
|
// 检查是否为中国时区
|
|
bool isChineseTimezone = timeZoneName.contains('China') || timeZoneName == 'Asia/Shanghai';
|
|
|
|
// 如果同时满足语言和地区或时区条件,则认为在中国大陆
|
|
return (isChineseLanguage && (isChineseRegion || isChineseTimezone));
|
|
}
|
|
|
|
/// 获取地图瓦片URL
|
|
static String kr_getTileUrl() {
|
|
if (_kr_isInMainlandChina()) {
|
|
// 使用高德地图
|
|
return 'https://webst0{s}.is.autonavi.com/appmaptile?style=7&x={x}&y={y}&z={z}';
|
|
} else {
|
|
// 使用 OpenStreetMap
|
|
return 'https://tile.openstreetmap.org/{z}/{x}/{y}.png';
|
|
}
|
|
}
|
|
|
|
/// 获取地图瓦片子域名
|
|
static List<String> kr_getTileSubdomains() {
|
|
if (_kr_isInMainlandChina()) {
|
|
return ['1', '2', '3', '4'];
|
|
} else {
|
|
return ['a', 'b', 'c'];
|
|
}
|
|
}
|
|
|
|
/// 获取地图瓦片提供者
|
|
static TileProvider kr_getTileProvider() {
|
|
return _tileProvider;
|
|
}
|
|
|
|
/// 初始化地图缓存
|
|
static Future<void> kr_initMapCache() async {
|
|
// 不使用缓存,无需实现
|
|
}
|
|
|
|
/// 清理地图缓存
|
|
static Future<void> kr_clearMapCache() async {
|
|
// 不使用缓存,无需实现
|
|
}
|
|
|
|
/// 检查瓦片是否已缓存
|
|
static Future<bool> kr_isTileCached({
|
|
required TileCoordinates coords,
|
|
required TileLayer options,
|
|
}) async {
|
|
return false;
|
|
}
|
|
|
|
/// 获取缓存状态信息
|
|
static Future<({bool isAvailable, int cacheCount, String cacheSize})> kr_checkCacheStatus() async {
|
|
return (isAvailable: false, cacheCount: 0, cacheSize: '0 MB');
|
|
}
|
|
|
|
/// 释放资源
|
|
static void kr_dispose() {
|
|
_httpClient.close();
|
|
}
|
|
} |