backup_settings_screen.dart 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. import 'dart:io';
  2. import 'package:flutter/material.dart';
  3. import 'package:photos/core/configuration.dart';
  4. import "package:photos/generated/l10n.dart";
  5. import 'package:photos/theme/ente_theme.dart';
  6. import 'package:photos/ui/components/buttons/icon_button_widget.dart';
  7. import 'package:photos/ui/components/captioned_text_widget.dart';
  8. import 'package:photos/ui/components/divider_widget.dart';
  9. import 'package:photos/ui/components/menu_item_widget/menu_item_widget.dart';
  10. import 'package:photos/ui/components/menu_section_description_widget.dart';
  11. import 'package:photos/ui/components/title_bar_title_widget.dart';
  12. import 'package:photos/ui/components/title_bar_widget.dart';
  13. import 'package:photos/ui/components/toggle_switch_widget.dart';
  14. class BackupSettingsScreen extends StatelessWidget {
  15. const BackupSettingsScreen({super.key});
  16. @override
  17. Widget build(BuildContext context) {
  18. final colorScheme = getEnteColorScheme(context);
  19. return Scaffold(
  20. body: CustomScrollView(
  21. primary: false,
  22. slivers: <Widget>[
  23. TitleBarWidget(
  24. flexibleSpaceTitle: TitleBarTitleWidget(
  25. title: S.of(context).backupSettings,
  26. ),
  27. actionIcons: [
  28. IconButtonWidget(
  29. icon: Icons.close_outlined,
  30. iconButtonType: IconButtonType.secondary,
  31. onTap: () {
  32. Navigator.pop(context);
  33. Navigator.pop(context);
  34. },
  35. ),
  36. ],
  37. ),
  38. SliverList(
  39. delegate: SliverChildBuilderDelegate(
  40. (context, index) {
  41. return Padding(
  42. padding: const EdgeInsets.symmetric(horizontal: 16),
  43. child: Padding(
  44. padding: const EdgeInsets.symmetric(vertical: 20),
  45. child: Column(
  46. mainAxisSize: MainAxisSize.min,
  47. children: [
  48. Column(
  49. children: [
  50. MenuItemWidget(
  51. captionedTextWidget: CaptionedTextWidget(
  52. title: S.of(context).backupOverMobileData,
  53. ),
  54. menuItemColor: colorScheme.fillFaint,
  55. trailingWidget: ToggleSwitchWidget(
  56. value: () => Configuration.instance
  57. .shouldBackupOverMobileData(),
  58. onChanged: () async {
  59. await Configuration.instance
  60. .setBackupOverMobileData(
  61. !Configuration.instance
  62. .shouldBackupOverMobileData(),
  63. );
  64. },
  65. ),
  66. singleBorderRadius: 8,
  67. alignCaptionedTextToLeft: true,
  68. isBottomBorderRadiusRemoved: true,
  69. isGestureDetectorDisabled: true,
  70. ),
  71. DividerWidget(
  72. dividerType: DividerType.menuNoIcon,
  73. bgColor: colorScheme.fillFaint,
  74. ),
  75. MenuItemWidget(
  76. captionedTextWidget: CaptionedTextWidget(
  77. title: S.of(context).backupVideos,
  78. ),
  79. menuItemColor: colorScheme.fillFaint,
  80. trailingWidget: ToggleSwitchWidget(
  81. value: () =>
  82. Configuration.instance.shouldBackupVideos(),
  83. onChanged: () => Configuration.instance
  84. .setShouldBackupVideos(
  85. !Configuration.instance.shouldBackupVideos(),
  86. ),
  87. ),
  88. singleBorderRadius: 8,
  89. alignCaptionedTextToLeft: true,
  90. isTopBorderRadiusRemoved: true,
  91. isGestureDetectorDisabled: true,
  92. ),
  93. ],
  94. ),
  95. const SizedBox(height: 24),
  96. Platform.isIOS
  97. ? Column(
  98. children: [
  99. MenuItemWidget(
  100. captionedTextWidget: CaptionedTextWidget(
  101. title: S.of(context).disableAutoLock,
  102. ),
  103. menuItemColor: colorScheme.fillFaint,
  104. trailingWidget: ToggleSwitchWidget(
  105. value: () => Configuration.instance
  106. .shouldKeepDeviceAwake(),
  107. onChanged: () {
  108. return Configuration.instance
  109. .setShouldKeepDeviceAwake(
  110. !Configuration.instance
  111. .shouldKeepDeviceAwake(),
  112. );
  113. },
  114. ),
  115. singleBorderRadius: 8,
  116. alignCaptionedTextToLeft: true,
  117. isGestureDetectorDisabled: true,
  118. ),
  119. MenuSectionDescriptionWidget(
  120. content:
  121. S.of(context).deviceLockExplanation,
  122. )
  123. ],
  124. )
  125. : const SizedBox.shrink(),
  126. ],
  127. ),
  128. ),
  129. );
  130. },
  131. childCount: 1,
  132. ),
  133. ),
  134. ],
  135. ),
  136. );
  137. }
  138. }