123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- import 'package:auto_route/auto_route.dart';
- import 'package:flutter/material.dart';
- import 'package:hooks_riverpod/hooks_riverpod.dart';
- import 'package:immich_mobile/shared/models/store.dart';
- import 'package:immich_mobile/shared/ui/user_circle_avatar.dart';
- import 'package:immich_mobile/modules/login/models/authentication_state.model.dart';
- import 'package:immich_mobile/modules/login/providers/authentication.provider.dart';
- import 'package:immich_mobile/routing/router.dart';
- import 'package:immich_mobile/modules/backup/models/backup_state.model.dart';
- import 'package:immich_mobile/shared/models/server_info_state.model.dart';
- import 'package:immich_mobile/modules/backup/providers/backup.provider.dart';
- import 'package:immich_mobile/shared/providers/server_info.provider.dart';
- class HomePageAppBar extends ConsumerWidget implements PreferredSizeWidget {
- @override
- Size get preferredSize => const Size.fromHeight(kToolbarHeight);
- const HomePageAppBar({
- super.key,
- this.onPopBack,
- });
- final Function? onPopBack;
- @override
- Widget build(BuildContext context, WidgetRef ref) {
- final BackUpState backupState = ref.watch(backupProvider);
- final bool isEnableAutoBackup =
- backupState.backgroundBackup || backupState.autoBackup;
- final ServerInfoState serverInfoState = ref.watch(serverInfoProvider);
- AuthenticationState authState = ref.watch(authenticationProvider);
- final user = Store.tryGet(StoreKey.currentUser);
- buildProfilePhoto() {
- if (authState.profileImagePath.isEmpty || user == null) {
- return IconButton(
- splashRadius: 25,
- icon: const Icon(
- Icons.face_outlined,
- size: 30,
- ),
- onPressed: () {
- Scaffold.of(context).openDrawer();
- },
- );
- } else {
- return InkWell(
- onTap: () {
- Scaffold.of(context).openDrawer();
- },
- child: UserCircleAvatar(
- radius: 18,
- size: 33,
- user: user,
- ),
- );
- }
- }
- return AppBar(
- backgroundColor: Theme.of(context).appBarTheme.backgroundColor,
- shape: const RoundedRectangleBorder(
- borderRadius: BorderRadius.all(
- Radius.circular(5),
- ),
- ),
- leading: Builder(
- builder: (BuildContext context) {
- return Stack(
- children: [
- Center(
- child: buildProfilePhoto(),
- ),
- if (serverInfoState.isVersionMismatch)
- Positioned(
- bottom: 4,
- right: 6,
- child: GestureDetector(
- onTap: () => Scaffold.of(context).openDrawer(),
- child: Material(
- // color: Colors.grey[200],
- elevation: 1,
- shape: RoundedRectangleBorder(
- borderRadius: BorderRadius.circular(50.0),
- ),
- child: const Padding(
- padding: EdgeInsets.all(2.0),
- child: Icon(
- Icons.info,
- color: Color.fromARGB(255, 243, 188, 106),
- size: 15,
- ),
- ),
- ),
- ),
- ),
- ],
- );
- },
- ),
- title: const Text(
- 'IMMICH',
- style: TextStyle(
- fontFamily: 'SnowburstOne',
- fontWeight: FontWeight.bold,
- fontSize: 22,
- ),
- ),
- actions: [
- Stack(
- alignment: AlignmentDirectional.center,
- children: [
- if (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,
- ),
- ),
- ),
- ),
- IconButton(
- splashRadius: 25,
- iconSize: 30,
- icon: isEnableAutoBackup
- ? const Icon(
- Icons.backup_rounded,
- )
- : Badge(
- padding: const EdgeInsets.all(4),
- backgroundColor: Colors.white,
- label: const Icon(
- Icons.cloud_off_rounded,
- size: 8,
- color: Colors.indigo,
- ),
- child: Icon(
- Icons.backup_rounded,
- color: Theme.of(context).primaryColor,
- ),
- ),
- onPressed: () async {
- var onPop = await AutoRouter.of(context)
- .push(const BackupControllerRoute());
- if (onPop != null && onPop == true) {
- onPopBack!();
- }
- },
- ),
- if (backupState.backupProgress == BackUpProgressEnum.inProgress)
- Positioned(
- bottom: 5,
- child: Text(
- '${backupState.allUniqueAssets.length - backupState.selectedAlbumsBackupAssetsIds.length}',
- style:
- const TextStyle(fontSize: 9, fontWeight: FontWeight.bold),
- ),
- ),
- ],
- ),
- ],
- );
- }
- }
|