mirror of
				https://github.com/immich-app/immich.git
				synced 2025-11-04 03:27:09 -05:00 
			
		
		
		
	* date time component * rename to info_sheet * simplify map info * Edit datetime sheet * fix janking when scroll on info sheet * Location refactor * refactor name * Update date time after editing * localize rebuild to smaller component * restore advanced bottom sheet * reassign EXIF back to local database * remove print statements
		
			
				
	
	
		
			90 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
import 'dart:io';
 | 
						|
 | 
						|
import 'package:flutter/material.dart';
 | 
						|
import 'package:immich_mobile/widgets/map/map_thumbnail.dart';
 | 
						|
import 'package:immich_mobile/entities/exif_info.entity.dart';
 | 
						|
import 'package:maplibre_gl/maplibre_gl.dart';
 | 
						|
import 'package:url_launcher/url_launcher.dart';
 | 
						|
 | 
						|
class ExifMap extends StatelessWidget {
 | 
						|
  final ExifInfo exifInfo;
 | 
						|
  final String? markerId;
 | 
						|
 | 
						|
  const ExifMap({
 | 
						|
    super.key,
 | 
						|
    required this.exifInfo,
 | 
						|
    this.markerId = 'marker',
 | 
						|
  });
 | 
						|
 | 
						|
  @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;
 | 
						|
            }
 | 
						|
 | 
						|
            debugPrint('Opening Map Uri: $uri');
 | 
						|
            launchUrl(uri);
 | 
						|
          },
 | 
						|
        );
 | 
						|
      },
 | 
						|
    );
 | 
						|
  }
 | 
						|
}
 |