omnAPP/lib/app/utils/kr_fm_tc.dart
2025-09-23 16:23:15 +08:00

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();
}
}