backup_settings_screen.dart 6.2 KB

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