backup_settings_screen.dart 6.5 KB

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