mirror of
https://github.com/ente-io/ente.git
synced 2025-05-05 04:47:41 +00:00
116 lines
3.6 KiB
Dart
116 lines
3.6 KiB
Dart
import "package:flutter/material.dart";
|
|
import "package:flutter_map/flutter_map.dart";
|
|
import "package:photos/generated/l10n.dart";
|
|
import "package:photos/theme/ente_theme.dart";
|
|
import "package:photos/ui/map/tile/attribution/map_attribution.dart";
|
|
import "package:photos/ui/map/tile/cache.dart";
|
|
import "package:url_launcher/url_launcher.dart";
|
|
import "package:url_launcher/url_launcher_string.dart";
|
|
|
|
const String _userAgent = "io.ente.photos";
|
|
|
|
class MapAttributionOptions {
|
|
final double permanentHeight;
|
|
final BorderRadius popupBorderRadius;
|
|
final double iconSize;
|
|
|
|
const MapAttributionOptions({
|
|
this.permanentHeight = 24,
|
|
this.popupBorderRadius = const BorderRadius.all(Radius.circular(12)),
|
|
this.iconSize = 20,
|
|
});
|
|
}
|
|
|
|
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,
|
|
userAgentPackageName: _userAgent,
|
|
tileProvider: CachedNetworkTileProvider(),
|
|
);
|
|
}
|
|
}
|
|
|
|
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',
|
|
fallbackUrl: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
|
|
subdomains: const ['a', 'b', 'c'],
|
|
tileProvider: CachedNetworkTileProvider(),
|
|
backgroundColor: const Color.fromARGB(255, 246, 246, 246),
|
|
userAgentPackageName: _userAgent,
|
|
panBuffer: 1,
|
|
);
|
|
}
|
|
}
|
|
|
|
class OSMFranceTileAttributes extends StatelessWidget {
|
|
final MapAttributionOptions options;
|
|
const OSMFranceTileAttributes({
|
|
this.options = const MapAttributionOptions(),
|
|
super.key,
|
|
});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final textTheme = getEnteTextTheme(context).tinyBold;
|
|
return MapAttributionWidget(
|
|
alignment: AttributionAlignment.bottomLeft,
|
|
showFlutterMapAttribution: false,
|
|
permanentHeight: options.permanentHeight,
|
|
popupBackgroundColor: getEnteColorScheme(context).backgroundElevated,
|
|
popupBorderRadius: options.popupBorderRadius,
|
|
iconSize: options.iconSize,
|
|
attributions: [
|
|
TextSourceAttribution(
|
|
S.of(context).openstreetmapContributors,
|
|
textStyle: textTheme,
|
|
onTap: () => launchUrlString('https://openstreetmap.org/copyright'),
|
|
),
|
|
TextSourceAttribution(
|
|
'HOT Tiles',
|
|
textStyle: textTheme,
|
|
onTap: () => launchUrl(Uri.parse('https://www.hotosm.org/')),
|
|
),
|
|
TextSourceAttribution(
|
|
S.of(context).hostedAtOsmFrance,
|
|
textStyle: textTheme,
|
|
onTap: () => launchUrl(Uri.parse('https://www.openstreetmap.fr/')),
|
|
),
|
|
],
|
|
);
|
|
}
|
|
}
|
|
|
|
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,
|
|
|
|
userAgentPackageName: _userAgent,
|
|
tileProvider: CachedNetworkTileProvider(),
|
|
additionalOptions: const {
|
|
"mb_token": String.fromEnvironment("mb_token"),
|
|
"mb_style_id": String.fromEnvironment("mb_style_id"),
|
|
"mb_user": String.fromEnvironment("mb_user"),
|
|
},
|
|
);
|
|
}
|
|
}
|