advanced_settings_screen.dart 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. import 'package:flutter/cupertino.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:photos/core/configuration.dart';
  4. import 'package:photos/core/event_bus.dart';
  5. import 'package:photos/ente_theme_data.dart';
  6. import 'package:photos/events/force_reload_home_gallery_event.dart';
  7. import 'package:photos/theme/ente_theme.dart';
  8. import 'package:photos/ui/components/captioned_text_widget.dart';
  9. import 'package:photos/ui/components/icon_button_widget.dart';
  10. import 'package:photos/ui/components/menu_item_widget.dart';
  11. import 'package:photos/ui/components/title_bar_title_widget.dart';
  12. import 'package:photos/ui/components/title_bar_widget.dart';
  13. class AdvancedSettingsScreen extends StatefulWidget {
  14. const AdvancedSettingsScreen({super.key});
  15. @override
  16. State<AdvancedSettingsScreen> createState() => _AdvancedSettingsScreenState();
  17. }
  18. class _AdvancedSettingsScreenState extends State<AdvancedSettingsScreen> {
  19. late int _albumGridSize, _chosenGridSize;
  20. final _config = Configuration.instance;
  21. @override
  22. void initState() {
  23. _albumGridSize = _config.getAlbumGridSize();
  24. _chosenGridSize = _albumGridSize;
  25. super.initState();
  26. }
  27. @override
  28. Widget build(BuildContext context) {
  29. final colorScheme = getEnteColorScheme(context);
  30. return Scaffold(
  31. body: CustomScrollView(
  32. primary: false,
  33. slivers: <Widget>[
  34. TitleBarWidget(
  35. flexibleSpaceTitle: const TitleBarTitleWidget(
  36. title: "Advanced",
  37. ),
  38. actionIcons: [
  39. IconButtonWidget(
  40. icon: Icons.close_outlined,
  41. iconButtonType: IconButtonType.secondary,
  42. onTap: () {
  43. Navigator.pop(context);
  44. Navigator.pop(context);
  45. },
  46. ),
  47. ],
  48. ),
  49. SliverList(
  50. delegate: SliverChildBuilderDelegate(
  51. (context, index) {
  52. return Padding(
  53. padding: const EdgeInsets.symmetric(horizontal: 16),
  54. child: Padding(
  55. padding: const EdgeInsets.symmetric(vertical: 20),
  56. child: Column(
  57. mainAxisSize: MainAxisSize.min,
  58. children: [
  59. Column(
  60. children: [
  61. GestureDetector(
  62. onTap: () {
  63. _showAlbumGridSizePicker();
  64. },
  65. child: MenuItemWidget(
  66. captionedTextWidget: const CaptionedTextWidget(
  67. title: "Album grid size",
  68. ),
  69. menuItemColor: colorScheme.fillFaint,
  70. trailingSwitch: Row(
  71. mainAxisAlignment: MainAxisAlignment.center,
  72. crossAxisAlignment: CrossAxisAlignment.center,
  73. children: [
  74. Text(
  75. _albumGridSize.toString(),
  76. ),
  77. Icon(
  78. Icons.chevron_right,
  79. color: colorScheme.strokeMuted,
  80. ),
  81. ],
  82. ),
  83. borderRadius: 8,
  84. alignCaptionedTextToLeft: true,
  85. // isBottomBorderRadiusRemoved: true,
  86. isGestureDetectorDisabled: true,
  87. ),
  88. ),
  89. ],
  90. ),
  91. ],
  92. ),
  93. ),
  94. );
  95. },
  96. childCount: 1,
  97. ),
  98. ),
  99. ],
  100. ),
  101. );
  102. }
  103. Future<void> _showAlbumGridSizePicker() async {
  104. final List<Text> options = [];
  105. options.add(
  106. Text("2", style: Theme.of(context).textTheme.subtitle1),
  107. );
  108. options.add(
  109. Text("3", style: Theme.of(context).textTheme.subtitle1),
  110. );
  111. options.add(
  112. Text("4", style: Theme.of(context).textTheme.subtitle1),
  113. );
  114. return showCupertinoModalPopup(
  115. context: context,
  116. builder: (context) {
  117. return Column(
  118. mainAxisAlignment: MainAxisAlignment.end,
  119. children: <Widget>[
  120. Container(
  121. decoration: BoxDecoration(
  122. color: Theme.of(context).colorScheme.cupertinoPickerTopColor,
  123. border: const Border(
  124. bottom: BorderSide(
  125. color: Color(0xff999999),
  126. width: 0.0,
  127. ),
  128. ),
  129. ),
  130. child: Row(
  131. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  132. children: <Widget>[
  133. CupertinoButton(
  134. onPressed: () {
  135. Navigator.of(context).pop('cancel');
  136. },
  137. padding: const EdgeInsets.symmetric(
  138. horizontal: 8.0,
  139. vertical: 5.0,
  140. ),
  141. child: Text(
  142. 'Cancel',
  143. style: Theme.of(context).textTheme.subtitle1,
  144. ),
  145. ),
  146. CupertinoButton(
  147. onPressed: () async {
  148. await _config.setAlbumGridSize(_chosenGridSize);
  149. Bus.instance.fire(
  150. ForceReloadHomeGalleryEvent("grid size changed"),
  151. );
  152. _albumGridSize = _chosenGridSize;
  153. setState(() {});
  154. Navigator.of(context).pop('');
  155. },
  156. padding: const EdgeInsets.symmetric(
  157. horizontal: 16.0,
  158. vertical: 2.0,
  159. ),
  160. child: Text(
  161. 'Confirm',
  162. style: Theme.of(context).textTheme.subtitle1,
  163. ),
  164. )
  165. ],
  166. ),
  167. ),
  168. Container(
  169. height: 220.0,
  170. color: const Color(0xfff7f7f7),
  171. child: CupertinoPicker(
  172. backgroundColor:
  173. Theme.of(context).backgroundColor.withOpacity(0.95),
  174. onSelectedItemChanged: (index) {
  175. _chosenGridSize = _getAlbumGridSizeFromIndex(index);
  176. setState(() {});
  177. },
  178. scrollController: FixedExtentScrollController(
  179. initialItem: _getIndexFromAlbumGridSize(_chosenGridSize),
  180. ),
  181. magnification: 1.3,
  182. useMagnifier: true,
  183. itemExtent: 25,
  184. diameterRatio: 1,
  185. children: options,
  186. ),
  187. )
  188. ],
  189. );
  190. },
  191. );
  192. }
  193. int _getAlbumGridSizeFromIndex(int index) {
  194. return index + 2;
  195. }
  196. int _getIndexFromAlbumGridSize(int gridSize) {
  197. return gridSize - 2;
  198. }
  199. }