mirror of
				https://github.com/immich-app/immich.git
				synced 2025-10-31 10:37:11 -04:00 
			
		
		
		
	* chore: map widget and page styling * fix: map bottom sheet styling * fix: attribution location on android it appears that on android, the attribution marker is positioned from the top of the display and on iOS its positioned from the safe area edge
		
			
				
	
	
		
			45 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| import 'package:flutter/material.dart';
 | |
| import 'package:hooks_riverpod/hooks_riverpod.dart';
 | |
| import 'package:immich_mobile/extensions/build_context_extensions.dart';
 | |
| import 'package:immich_mobile/presentation/widgets/bottom_sheet/base_bottom_sheet.widget.dart';
 | |
| import 'package:immich_mobile/presentation/widgets/map/map.state.dart';
 | |
| import 'package:immich_mobile/presentation/widgets/timeline/timeline.widget.dart';
 | |
| import 'package:immich_mobile/providers/infrastructure/timeline.provider.dart';
 | |
| 
 | |
| class MapBottomSheet extends StatelessWidget {
 | |
|   const MapBottomSheet({super.key});
 | |
| 
 | |
|   @override
 | |
|   Widget build(BuildContext context) {
 | |
|     return BaseBottomSheet(
 | |
|       initialChildSize: 0.25,
 | |
|       maxChildSize: 0.9,
 | |
|       shouldCloseOnMinExtent: false,
 | |
|       resizeOnScroll: false,
 | |
|       actions: [],
 | |
|       backgroundColor: context.themeData.colorScheme.surface,
 | |
|       slivers: [const SliverFillRemaining(hasScrollBody: false, child: _ScopedMapTimeline())],
 | |
|     );
 | |
|   }
 | |
| }
 | |
| 
 | |
| class _ScopedMapTimeline extends StatelessWidget {
 | |
|   const _ScopedMapTimeline();
 | |
| 
 | |
|   @override
 | |
|   Widget build(BuildContext context) {
 | |
|     // TODO: this causes the timeline to switch to flicker to "loading" state and back. This is both janky and inefficient.
 | |
|     return ProviderScope(
 | |
|       overrides: [
 | |
|         timelineServiceProvider.overrideWith((ref) {
 | |
|           final bounds = ref.watch(mapStateProvider).bounds;
 | |
|           final timelineService = ref.watch(timelineFactoryProvider).map(bounds);
 | |
|           ref.onDispose(timelineService.dispose);
 | |
|           return timelineService;
 | |
|         }),
 | |
|       ],
 | |
|       child: const Timeline(appBar: null, bottomSheet: null, withScrubber: false),
 | |
|     );
 | |
|   }
 | |
| }
 |