ente/lib/ui/components/home_header_widget.dart

100 lines
3.3 KiB
Dart
Raw Normal View History

import "dart:async";
import "dart:io";
2022-10-11 05:38:16 +00:00
import 'package:flutter/material.dart';
import "package:logging/logging.dart";
import "package:photo_manager/photo_manager.dart";
import "package:photos/generated/l10n.dart";
import "package:photos/services/local_sync_service.dart";
import 'package:photos/ui/components/buttons/icon_button_widget.dart';
import "package:photos/ui/settings/backup/backup_folder_selection_page.dart";
import "package:photos/utils/dialog_util.dart";
import "package:photos/utils/navigation_util.dart";
2022-10-11 05:38:16 +00:00
class HomeHeaderWidget extends StatefulWidget {
final Widget centerWidget;
const HomeHeaderWidget({required this.centerWidget, Key? key})
: super(key: key);
@override
State<HomeHeaderWidget> createState() => _HomeHeaderWidgetState();
}
class _HomeHeaderWidgetState extends State<HomeHeaderWidget> {
@override
Widget build(BuildContext context) {
return Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Row(
mainAxisSize: MainAxisSize.min,
children: [
IconButtonWidget(
iconButtonType: IconButtonType.primary,
icon: Icons.menu_outlined,
onTap: () {
Scaffold.of(context).openDrawer();
},
),
],
),
AnimatedSwitcher(
duration: const Duration(milliseconds: 250),
child: widget.centerWidget,
),
IconButtonWidget(
icon: Icons.add_photo_alternate_outlined,
iconButtonType: IconButtonType.primary,
onTap: () async {
try {
final PermissionState state =
await PhotoManager.requestPermissionExtend();
await LocalSyncService.instance.onUpdatePermission(state);
} on Exception catch (e) {
Logger("HomeHeaderWidget").severe(
"Failed to request permission: ${e.toString()}",
e,
);
}
if (!LocalSyncService.instance.hasGrantedFullPermission()) {
if (Platform.isAndroid) {
await PhotoManager.openSetting();
} else {
final bool hasGrantedLimit =
LocalSyncService.instance.hasGrantedLimitedPermissions();
2023-12-21 07:34:06 +00:00
// ignore: unawaited_futures
showChoiceActionSheet(
context,
title: S.of(context).preserveMore,
body: S.of(context).grantFullAccessPrompt,
firstButtonLabel: S.of(context).openSettings,
firstButtonOnTap: () async {
await PhotoManager.openSetting();
},
secondButtonLabel: hasGrantedLimit
? S.of(context).selectMorePhotos
: S.of(context).cancel,
secondButtonOnTap: () async {
if (hasGrantedLimit) {
await PhotoManager.presentLimited();
}
},
);
}
} else {
unawaited(
routeToPage(
context,
BackupFolderSelectionPage(
buttonText: S.of(context).backup,
),
),
);
}
},
),
],
2022-10-11 05:38:16 +00:00
);
}
}