mirror of
				https://github.com/KevinMidboe/immich.git
				synced 2025-10-29 17:40:28 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			115 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			115 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| import 'package:auto_route/auto_route.dart';
 | |
| import 'package:flutter/material.dart';
 | |
| import 'package:flutter/services.dart';
 | |
| import 'package:google_fonts/google_fonts.dart';
 | |
| import 'package:hooks_riverpod/hooks_riverpod.dart';
 | |
| import 'package:immich_mobile/modules/home/providers/asset.provider.dart';
 | |
| 
 | |
| import 'package:immich_mobile/routing/router.dart';
 | |
| import 'package:immich_mobile/shared/models/backup_state.model.dart';
 | |
| import 'package:immich_mobile/shared/providers/backup.provider.dart';
 | |
| 
 | |
| class ImmichSliverAppBar extends ConsumerWidget {
 | |
|   const ImmichSliverAppBar({
 | |
|     Key? key,
 | |
|     required this.imageGridGroup,
 | |
|   }) : super(key: key);
 | |
| 
 | |
|   final List<Widget> imageGridGroup;
 | |
| 
 | |
|   @override
 | |
|   Widget build(BuildContext context, WidgetRef ref) {
 | |
|     final BackUpState _backupState = ref.watch(backupProvider);
 | |
| 
 | |
|     return SliverPadding(
 | |
|       padding: const EdgeInsets.symmetric(horizontal: 5, vertical: 5),
 | |
|       sliver: SliverAppBar(
 | |
|         centerTitle: true,
 | |
|         floating: true,
 | |
|         pinned: false,
 | |
|         snap: false,
 | |
|         backgroundColor: Colors.grey[200],
 | |
|         shape: const RoundedRectangleBorder(borderRadius: BorderRadius.all(Radius.circular(5))),
 | |
|         leading: Builder(
 | |
|           builder: (BuildContext context) {
 | |
|             return IconButton(
 | |
|               icon: const Icon(Icons.account_circle_rounded),
 | |
|               onPressed: () {
 | |
|                 Scaffold.of(context).openDrawer();
 | |
|               },
 | |
|               tooltip: MaterialLocalizations.of(context).openAppDrawerTooltip,
 | |
|             );
 | |
|           },
 | |
|         ),
 | |
|         title: Text(
 | |
|           'IMMICH',
 | |
|           style: GoogleFonts.snowburstOne(
 | |
|             textStyle: TextStyle(
 | |
|               fontWeight: FontWeight.bold,
 | |
|               fontSize: 18,
 | |
|               color: Theme.of(context).primaryColor,
 | |
|             ),
 | |
|           ),
 | |
|         ),
 | |
|         actions: [
 | |
|           Stack(
 | |
|             alignment: AlignmentDirectional.center,
 | |
|             children: [
 | |
|               _backupState.backupProgress == BackUpProgressEnum.inProgress
 | |
|                   ? Positioned(
 | |
|                       top: 10,
 | |
|                       right: 12,
 | |
|                       child: SizedBox(
 | |
|                         height: 8,
 | |
|                         width: 8,
 | |
|                         child: CircularProgressIndicator(
 | |
|                           strokeWidth: 1,
 | |
|                           valueColor: AlwaysStoppedAnimation<Color>(Theme.of(context).primaryColor),
 | |
|                         ),
 | |
|                       ),
 | |
|                     )
 | |
|                   : Container(),
 | |
|               IconButton(
 | |
|                 icon: const Icon(Icons.backup_rounded),
 | |
|                 tooltip: 'Backup Controller',
 | |
|                 onPressed: () async {
 | |
|                   var onPop = await AutoRouter.of(context).push(const BackupControllerRoute());
 | |
| 
 | |
|                   if (onPop == true) {
 | |
|                     // Remove and force getting new widget again if there is not many widget on screen.
 | |
|                     // Otherwise do nothing.
 | |
|                     if (imageGridGroup.isNotEmpty && imageGridGroup.length < 20) {
 | |
|                       print("Get more access");
 | |
|                       ref.read(assetProvider.notifier).getMoreAsset();
 | |
|                     } else if (imageGridGroup.isEmpty) {
 | |
|                       print("get immich asset");
 | |
|                       ref.read(assetProvider.notifier).getImmichAssets();
 | |
|                     }
 | |
|                   }
 | |
|                 },
 | |
|               ),
 | |
|               _backupState.backupProgress == BackUpProgressEnum.inProgress
 | |
|                   ? Positioned(
 | |
|                       bottom: 5,
 | |
|                       child: Text(
 | |
|                         _backupState.backingUpAssetCount.toString(),
 | |
|                         style: const TextStyle(fontSize: 9, fontWeight: FontWeight.bold),
 | |
|                       ),
 | |
|                     )
 | |
|                   : Container()
 | |
|             ],
 | |
|           ),
 | |
|         ],
 | |
|         systemOverlayStyle: const SystemUiOverlayStyle(
 | |
|           // Status bar color
 | |
|           statusBarColor: Colors.indigo,
 | |
| 
 | |
|           // Status bar brightness (optional)
 | |
|           statusBarIconBrightness: Brightness.light, // For Android (dark icons)
 | |
|           statusBarBrightness: Brightness.dark,
 | |
|         ),
 | |
|       ),
 | |
|     );
 | |
|   }
 | |
| }
 |