mirror of
				https://github.com/immich-app/immich.git
				synced 2025-11-04 03:27:09 -05:00 
			
		
		
		
	* add lint rule * update usages * stragglers * use dcm * formatting * test ci * Revert "test ci" This reverts commit 8f864c4e4d3a7ec1a7e820b1afb3e801f2e82bc5. * revert whitespace change
		
			
				
	
	
		
			79 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
import 'dart:io';
 | 
						|
 | 
						|
import 'package:flutter/material.dart';
 | 
						|
import 'package:immich_mobile/domain/models/exif.model.dart';
 | 
						|
import 'package:immich_mobile/widgets/map/map_thumbnail.dart';
 | 
						|
import 'package:maplibre_gl/maplibre_gl.dart';
 | 
						|
import 'package:url_launcher/url_launcher.dart';
 | 
						|
import 'package:immich_mobile/utils/debug_print.dart';
 | 
						|
 | 
						|
class ExifMap extends StatelessWidget {
 | 
						|
  final ExifInfo exifInfo;
 | 
						|
  final String? markerId;
 | 
						|
  final MapCreatedCallback? onMapCreated;
 | 
						|
 | 
						|
  const ExifMap({super.key, required this.exifInfo, this.markerId = 'marker', this.onMapCreated});
 | 
						|
 | 
						|
  @override
 | 
						|
  Widget build(BuildContext context) {
 | 
						|
    final hasCoordinates = exifInfo.hasCoordinates;
 | 
						|
    Future<Uri?> createCoordinatesUri() async {
 | 
						|
      if (!hasCoordinates) {
 | 
						|
        return null;
 | 
						|
      }
 | 
						|
 | 
						|
      final double latitude = exifInfo.latitude!;
 | 
						|
      final double longitude = exifInfo.longitude!;
 | 
						|
 | 
						|
      const zoomLevel = 16;
 | 
						|
 | 
						|
      if (Platform.isAndroid) {
 | 
						|
        Uri uri = Uri(
 | 
						|
          scheme: 'geo',
 | 
						|
          host: '$latitude,$longitude',
 | 
						|
          queryParameters: {'z': '$zoomLevel', 'q': '$latitude,$longitude'},
 | 
						|
        );
 | 
						|
        if (await canLaunchUrl(uri)) {
 | 
						|
          return uri;
 | 
						|
        }
 | 
						|
      } else if (Platform.isIOS) {
 | 
						|
        var params = {'ll': '$latitude,$longitude', 'q': '$latitude,$longitude', 'z': '$zoomLevel'};
 | 
						|
        Uri uri = Uri.https('maps.apple.com', '/', params);
 | 
						|
        if (await canLaunchUrl(uri)) {
 | 
						|
          return uri;
 | 
						|
        }
 | 
						|
      }
 | 
						|
 | 
						|
      return Uri(
 | 
						|
        scheme: 'https',
 | 
						|
        host: 'openstreetmap.org',
 | 
						|
        queryParameters: {'mlat': '$latitude', 'mlon': '$longitude'},
 | 
						|
        fragment: 'map=$zoomLevel/$latitude/$longitude',
 | 
						|
      );
 | 
						|
    }
 | 
						|
 | 
						|
    return LayoutBuilder(
 | 
						|
      builder: (context, constraints) {
 | 
						|
        return MapThumbnail(
 | 
						|
          centre: LatLng(exifInfo.latitude ?? 0, exifInfo.longitude ?? 0),
 | 
						|
          height: 150,
 | 
						|
          width: constraints.maxWidth,
 | 
						|
          zoom: 12.0,
 | 
						|
          assetMarkerRemoteId: markerId,
 | 
						|
          onTap: (tapPosition, latLong) async {
 | 
						|
            Uri? uri = await createCoordinatesUri();
 | 
						|
 | 
						|
            if (uri == null) {
 | 
						|
              return;
 | 
						|
            }
 | 
						|
 | 
						|
            dPrint(() => 'Opening Map Uri: $uri');
 | 
						|
            launchUrl(uri);
 | 
						|
          },
 | 
						|
          onCreated: onMapCreated,
 | 
						|
        );
 | 
						|
      },
 | 
						|
    );
 | 
						|
  }
 | 
						|
}
 |