Files
tatuchat/lib/pages/chat/events/map_bubble.dart
Welton Moura c01372353c
Some checks failed
Close stale issues and PRs / stale (push) Has been cancelled
Main Deploy Workflow / deploy_web (push) Has been cancelled
Main Deploy Workflow / deploy_playstore_internal (push) Has been cancelled
zoon map
2026-09-23 19:15:41 -03:00

106 lines
3.3 KiB
Dart

// SPDX-FileCopyrightText: 2019-Present Christian Kußowski
// SPDX-FileCopyrightText: 2019-Present Contributors to FluffyChat
//
// SPDX-License-Identifier: AGPL-3.0-or-later
import 'package:tatchat/l10n/l10n.dart';
import 'package:flutter_map/flutter_map.dart';
import 'package:latlong2/latlong.dart';
import 'package:material_ui/material_ui.dart';
import '../../../config/app_config.dart';
class MapBubble extends StatelessWidget {
final double latitude;
final double longitude;
final double zoom;
final double width;
final double height;
final double radius;
final VoidCallback? onTap;
const MapBubble({
required this.latitude,
required this.longitude,
this.zoom = 16.0,
this.width = 350,
this.height = 350,
this.radius = 10.0,
this.onTap,
super.key,
});
@override
Widget build(BuildContext context) {
final theme = Theme.of(context);
return Container(
constraints: BoxConstraints.loose(Size(width, height)),
child: AspectRatio(
aspectRatio: width / height,
child: Stack(
children: <Widget>[
FlutterMap(
options: MapOptions(
initialCenter: LatLng(latitude, longitude),
initialZoom: zoom,
),
children: [
TileLayer(
maxZoom: 20,
minZoom: 0,
urlTemplate:
'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
userAgentPackageName: AppConfig.appId,
subdomains: const ['a', 'b', 'c'],
),
MarkerLayer(
rotate: true,
markers: [
Marker(
point: LatLng(latitude, longitude),
width: 30,
height: 30,
child: Transform.translate(
// No idea why the offset has to be like this, instead of -15
// It has been determined by trying out, though, that this yields
// the tip of the location pin to be static when zooming.
// Might have to do with psychological perception of where the tip exactly is
offset: const Offset(0, -12.5),
child: const Icon(
Icons.location_pin,
color: Colors.red,
size: 30,
),
),
),
],
),
],
),
Container(
alignment: Alignment.bottomRight,
child: Text(
' © OpenStreetMap contributors ',
style: TextStyle(
color: theme.brightness == Brightness.dark
? Colors.white
: Colors.black,
backgroundColor: theme.appBarTheme.backgroundColor,
),
),
),
Material(
color: Colors.transparent,
child: Tooltip(
message: L10n.of(context).openInMaps,
child: InkWell(onTap: onTap, child: SizedBox.expand()),
),
),
],
),
),
);
}
}