backup_settings_screen.dart 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  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/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. iconButtonType: IconButtonType.secondary,
  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. trailingWidget: ToggleSwitchWidget(
  55. value: () => Configuration.instance
  56. .shouldBackupOverMobileData(),
  57. onChanged: () async {
  58. await Configuration.instance
  59. .setBackupOverMobileData(
  60. !Configuration.instance
  61. .shouldBackupOverMobileData(),
  62. );
  63. },
  64. ),
  65. singleBorderRadius: 8,
  66. alignCaptionedTextToLeft: true,
  67. isBottomBorderRadiusRemoved: true,
  68. isGestureDetectorDisabled: true,
  69. ),
  70. DividerWidget(
  71. dividerType: DividerType.menuNoIcon,
  72. bgColor: colorScheme.fillFaint,
  73. ),
  74. MenuItemWidget(
  75. captionedTextWidget: const CaptionedTextWidget(
  76. title: "Backup videos",
  77. ),
  78. menuItemColor: colorScheme.fillFaint,
  79. trailingWidget: ToggleSwitchWidget(
  80. value: () =>
  81. Configuration.instance.shouldBackupVideos(),
  82. onChanged: () => Configuration.instance
  83. .setShouldBackupVideos(
  84. !Configuration.instance.shouldBackupVideos(),
  85. ),
  86. ),
  87. singleBorderRadius: 8,
  88. alignCaptionedTextToLeft: true,
  89. isTopBorderRadiusRemoved: true,
  90. isGestureDetectorDisabled: true,
  91. ),
  92. ],
  93. ),
  94. const SizedBox(height: 24),
  95. Platform.isIOS
  96. ? Column(
  97. children: [
  98. MenuItemWidget(
  99. captionedTextWidget:
  100. const CaptionedTextWidget(
  101. title: "Disable auto lock",
  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. const MenuSectionDescriptionWidget(
  120. content:
  121. "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.",
  122. )
  123. ],
  124. )
  125. : const SizedBox.shrink(),
  126. ],
  127. ),
  128. ),
  129. );
  130. },
  131. childCount: 1,
  132. ),
  133. ),
  134. ],
  135. ),
  136. );
  137. }
  138. }