mirror of
				https://github.com/immich-app/immich.git
				synced 2025-10-31 10:49:11 -04:00 
			
		
		
		
	* refactor: autoroutex pushroute * refactor: autoroutex popRoute * refactor: autoroutex navigate and replace * chore: add doc comments for extension methods * refactor: Add LoggerMixin and refactor Album activities to use mixin * refactor: Activity page * chore: activity user from user constructor * fix: update current asset after build method * refactor: tests with similar structure as lib * chore: remove avoid-declaring-call-method rule from dcm analysis * test: fix proper expect order * test: activity_statistics_provider_test * test: activity_provider_test * test: use proper matchers * test: activity_text_field_test & dismissible_activity_test added * test: add http mock to return transparent image * test: download isar core libs during test * test: add widget tags to widget test cases * test: activity_tile_test * build: currentAlbumProvider to generator * movie add / remove like to activity input tile * test: activities_page_test.dart * chore: better error logs * chore: dismissibleactivity as statelesswidget --------- Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
		
			
				
	
	
		
			139 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			139 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| import 'dart:io';
 | |
| 
 | |
| import 'package:auto_route/auto_route.dart';
 | |
| import 'package:flutter/material.dart';
 | |
| import 'package:flutter_hooks/flutter_hooks.dart';
 | |
| import 'package:immich_mobile/modules/home/ui/asset_grid/disable_multi_select_button.dart';
 | |
| import 'package:immich_mobile/modules/map/ui/map_settings_dialog.dart';
 | |
| 
 | |
| class MapAppBar extends HookWidget implements PreferredSizeWidget {
 | |
|   final ValueNotifier<bool> selectionEnabled;
 | |
|   final int selectedAssetsLength;
 | |
|   final bool isDarkTheme;
 | |
| 
 | |
|   final void Function() onShare;
 | |
|   final void Function() onFavorite;
 | |
|   final void Function() onArchive;
 | |
| 
 | |
|   const MapAppBar({
 | |
|     super.key,
 | |
|     required this.selectionEnabled,
 | |
|     required this.selectedAssetsLength,
 | |
|     required this.onShare,
 | |
|     required this.onArchive,
 | |
|     required this.onFavorite,
 | |
|     this.isDarkTheme = false,
 | |
|   });
 | |
| 
 | |
|   List<Widget> buildNonSelectionWidgets(BuildContext context) {
 | |
|     return [
 | |
|       Padding(
 | |
|         padding: const EdgeInsets.only(left: 15, top: 15),
 | |
|         child: ElevatedButton(
 | |
|           onPressed: () => context.popRoute(),
 | |
|           style: ElevatedButton.styleFrom(
 | |
|             shape: const CircleBorder(),
 | |
|             padding: const EdgeInsets.all(12),
 | |
|           ),
 | |
|           child: const Icon(Icons.arrow_back_ios_new_rounded, size: 22),
 | |
|         ),
 | |
|       ),
 | |
|       Padding(
 | |
|         padding: const EdgeInsets.only(right: 15, top: 15),
 | |
|         child: ElevatedButton(
 | |
|           onPressed: () => showDialog(
 | |
|             context: context,
 | |
|             builder: (BuildContext _) {
 | |
|               return const MapSettingsDialog();
 | |
|             },
 | |
|           ),
 | |
|           style: ElevatedButton.styleFrom(
 | |
|             shape: const CircleBorder(),
 | |
|             padding: const EdgeInsets.all(12),
 | |
|           ),
 | |
|           child: const Icon(Icons.more_vert_rounded, size: 22),
 | |
|         ),
 | |
|       ),
 | |
|     ];
 | |
|   }
 | |
| 
 | |
|   List<Widget> buildSelectionWidgets() {
 | |
|     return [
 | |
|       DisableMultiSelectButton(
 | |
|         onPressed: () {
 | |
|           selectionEnabled.value = false;
 | |
|         },
 | |
|         selectedItemCount: selectedAssetsLength,
 | |
|       ),
 | |
|       Row(
 | |
|         children: [
 | |
|           // Share button
 | |
|           Padding(
 | |
|             padding: const EdgeInsets.only(top: 15),
 | |
|             child: ElevatedButton(
 | |
|               onPressed: onShare,
 | |
|               style: ElevatedButton.styleFrom(
 | |
|                 shape: const CircleBorder(),
 | |
|                 padding: const EdgeInsets.all(12),
 | |
|               ),
 | |
|               child: Icon(
 | |
|                 Platform.isAndroid
 | |
|                     ? Icons.share_rounded
 | |
|                     : Icons.ios_share_rounded,
 | |
|                 size: 22,
 | |
|               ),
 | |
|             ),
 | |
|           ),
 | |
|           // Favorite button
 | |
|           Padding(
 | |
|             padding: const EdgeInsets.only(top: 15),
 | |
|             child: ElevatedButton(
 | |
|               onPressed: onFavorite,
 | |
|               style: ElevatedButton.styleFrom(
 | |
|                 shape: const CircleBorder(),
 | |
|                 padding: const EdgeInsets.all(12),
 | |
|               ),
 | |
|               child: const Icon(
 | |
|                 Icons.favorite,
 | |
|                 size: 22,
 | |
|               ),
 | |
|             ),
 | |
|           ),
 | |
|           // Archive Button
 | |
|           Padding(
 | |
|             padding: const EdgeInsets.only(right: 10, top: 15),
 | |
|             child: ElevatedButton(
 | |
|               onPressed: onArchive,
 | |
|               style: ElevatedButton.styleFrom(
 | |
|                 shape: const CircleBorder(),
 | |
|                 padding: const EdgeInsets.all(12),
 | |
|               ),
 | |
|               child: const Icon(
 | |
|                 Icons.archive,
 | |
|                 size: 22,
 | |
|               ),
 | |
|             ),
 | |
|           ),
 | |
|         ],
 | |
|       ),
 | |
|     ];
 | |
|   }
 | |
| 
 | |
|   @override
 | |
|   Widget build(BuildContext context) {
 | |
|     return Padding(
 | |
|       padding: EdgeInsets.only(top: MediaQuery.of(context).padding.top + 15),
 | |
|       child: Row(
 | |
|         mainAxisAlignment: MainAxisAlignment.spaceBetween,
 | |
|         children: [
 | |
|           if (!selectionEnabled.value) ...buildNonSelectionWidgets(context),
 | |
|           if (selectionEnabled.value) ...buildSelectionWidgets(),
 | |
|         ],
 | |
|       ),
 | |
|     );
 | |
|   }
 | |
| 
 | |
|   @override
 | |
|   Size get preferredSize => const Size.fromHeight(100);
 | |
| }
 |