ente/lib/ui/map/tile/layers.dart

94 lines
3.1 KiB
Dart
Raw Normal View History

2023-06-07 11:08:25 +00:00
import "package:flutter/material.dart";
import "package:flutter_map/flutter_map.dart";
2023-06-07 12:11:50 +00:00
import "package:photos/generated/l10n.dart";
import "package:photos/theme/ente_theme.dart";
import "package:photos/ui/map/tile/attribution/map_attribution.dart";
2023-06-15 04:53:33 +00:00
import "package:photos/ui/map/tile/cache.dart";
2023-06-07 12:11:50 +00:00
import "package:url_launcher/url_launcher.dart";
import "package:url_launcher/url_launcher_string.dart";
2023-06-07 11:08:25 +00:00
2023-06-15 03:43:41 +00:00
const String _userAgent = "io.ente.photos";
2023-06-07 11:08:25 +00:00
class OSMTileLayer extends StatelessWidget {
const OSMTileLayer({super.key});
@override
Widget build(BuildContext context) {
return TileLayer(
urlTemplate: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
subdomains: const ['a', 'b', 'c'],
backgroundColor: Colors.transparent,
2023-06-15 03:43:41 +00:00
userAgentPackageName: _userAgent,
2023-06-15 04:53:33 +00:00
tileProvider: CachedNetworkTileProvider(),
2023-06-07 11:08:25 +00:00
);
}
}
class OSMFranceTileLayer extends StatelessWidget {
const OSMFranceTileLayer({super.key});
@override
Widget build(BuildContext context) {
return TileLayer(
urlTemplate: 'https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png',
2023-06-08 04:07:39 +00:00
fallbackUrl: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
2023-06-07 11:08:25 +00:00
subdomains: const ['a', 'b', 'c'],
2023-06-15 04:53:33 +00:00
tileProvider: CachedNetworkTileProvider(),
backgroundColor: const Color.fromARGB(255, 246, 246, 246),
2023-06-15 03:43:41 +00:00
userAgentPackageName: _userAgent,
2023-06-15 05:04:25 +00:00
panBuffer: 1,
2023-06-07 11:08:25 +00:00
);
}
}
2023-06-07 12:11:50 +00:00
class OSMFranceTileAttributes extends StatelessWidget {
const OSMFranceTileAttributes({super.key});
@override
Widget build(BuildContext context) {
return MapAttributionWidget(
alignment: AttributionAlignment.bottomLeft,
showFlutterMapAttribution: false,
attributions: [
TextSourceAttribution(
S.of(context).openstreetmapContributors,
textStyle: getEnteTextTheme(context).smallBold,
onTap: () => launchUrlString('https://openstreetmap.org/copyright'),
),
TextSourceAttribution(
2023-06-08 04:07:39 +00:00
'HOT Tiles',
2023-06-07 12:11:50 +00:00
textStyle: getEnteTextTheme(context).smallBold,
onTap: () => launchUrl(Uri.parse('https://www.hotosm.org/')),
),
TextSourceAttribution(
S.of(context).hostedAtOsmFrance,
onTap: () => launchUrl(Uri.parse('https://www.openstreetmap.fr/')),
textStyle: getEnteTextTheme(context).smallBold,
),
],
);
}
}
2023-06-07 11:08:25 +00:00
class MapBoxTilesLayer extends StatelessWidget {
const MapBoxTilesLayer({super.key});
@override
Widget build(BuildContext context) {
return TileLayer(
urlTemplate:
"https://api.mapbox.com/styles/v1/{mb_user}/{mb_style_id}/tiles/{z}/{x}/{y}?access_token={mb_token}",
fallbackUrl: 'https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png',
subdomains: const ['a', 'b', 'c'],
backgroundColor: Colors.transparent,
2023-06-15 03:43:41 +00:00
userAgentPackageName: _userAgent,
2023-06-15 04:53:33 +00:00
tileProvider: CachedNetworkTileProvider(),
2023-06-07 11:08:25 +00:00
additionalOptions: const {
"mb_token": String.fromEnvironment("mb_token"),
"mb_style_id": String.fromEnvironment("mb_style_id"),
"mb_user": String.fromEnvironment("mb_user"),
},
);
}
}