ente/lib/ui/advanced_settings_screen.dart

207 lines
7.1 KiB
Dart
Raw Normal View History

2022-12-06 17:47:37 +00:00
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:photos/core/event_bus.dart';
import 'package:photos/events/force_reload_home_gallery_event.dart';
import 'package:photos/theme/ente_theme.dart';
import 'package:photos/ui/components/captioned_text_widget.dart';
import 'package:photos/ui/components/icon_button_widget.dart';
import 'package:photos/ui/components/menu_item_widget.dart';
import 'package:photos/ui/components/title_bar_title_widget.dart';
import 'package:photos/ui/components/title_bar_widget.dart';
import 'package:photos/utils/local_settings.dart';
2022-12-06 17:47:37 +00:00
class AdvancedSettingsScreen extends StatefulWidget {
const AdvancedSettingsScreen({super.key});
@override
State<AdvancedSettingsScreen> createState() => _AdvancedSettingsScreenState();
}
class _AdvancedSettingsScreenState extends State<AdvancedSettingsScreen> {
late int _albumGridSize, _chosenGridSize;
@override
void initState() {
_albumGridSize = LocalSettings.instance.getAlbumGridSize();
2022-12-06 17:47:37 +00:00
_chosenGridSize = _albumGridSize;
super.initState();
}
@override
Widget build(BuildContext context) {
final colorScheme = getEnteColorScheme(context);
return Scaffold(
body: CustomScrollView(
primary: false,
slivers: <Widget>[
TitleBarWidget(
flexibleSpaceTitle: const TitleBarTitleWidget(
title: "Advanced",
),
actionIcons: [
IconButtonWidget(
icon: Icons.close_outlined,
iconButtonType: IconButtonType.secondary,
onTap: () {
Navigator.pop(context);
Navigator.pop(context);
},
),
],
),
SliverList(
delegate: SliverChildBuilderDelegate(
(context, index) {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 20),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Column(
children: [
GestureDetector(
onTap: () {
_showAlbumGridSizePicker();
},
child: MenuItemWidget(
captionedTextWidget: const CaptionedTextWidget(
title: "Album grid size",
),
menuItemColor: colorScheme.fillFaint,
2022-12-06 18:03:39 +00:00
trailingWidget: Row(
2022-12-06 18:02:51 +00:00
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
2022-12-06 17:47:37 +00:00
children: [
Text(
_albumGridSize.toString(),
),
Icon(
Icons.chevron_right,
color: colorScheme.strokeMuted,
),
],
),
borderRadius: 8,
alignCaptionedTextToLeft: true,
// isBottomBorderRadiusRemoved: true,
isGestureDetectorDisabled: true,
),
),
],
),
],
),
),
);
},
childCount: 1,
),
),
],
),
);
}
Future<void> _showAlbumGridSizePicker() async {
2022-12-07 01:54:49 +00:00
final textTheme = getEnteTextTheme(context);
2022-12-06 17:47:37 +00:00
final List<Text> options = [];
options.add(
2022-12-07 01:54:49 +00:00
Text("2", style: textTheme.body),
2022-12-06 17:47:37 +00:00
);
options.add(
2022-12-07 01:54:49 +00:00
Text("3", style: textTheme.body),
2022-12-06 17:47:37 +00:00
);
options.add(
2022-12-07 01:54:49 +00:00
Text("4", style: textTheme.body),
2022-12-06 17:47:37 +00:00
);
return showCupertinoModalPopup(
context: context,
builder: (context) {
return Column(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
Container(
decoration: BoxDecoration(
color: getEnteColorScheme(context).backgroundElevated2,
2022-12-06 17:47:37 +00:00
border: const Border(
bottom: BorderSide(
color: Color(0xff999999),
width: 0.0,
),
),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
CupertinoButton(
onPressed: () {
Navigator.of(context).pop('cancel');
},
padding: const EdgeInsets.symmetric(
horizontal: 8.0,
vertical: 5.0,
),
child: Text(
'Cancel',
2022-12-07 01:54:49 +00:00
style: textTheme.body,
2022-12-06 17:47:37 +00:00
),
),
CupertinoButton(
onPressed: () async {
await LocalSettings.instance
.setAlbumGridSize(_chosenGridSize);
2022-12-06 17:47:37 +00:00
Bus.instance.fire(
ForceReloadHomeGalleryEvent("grid size changed"),
);
_albumGridSize = _chosenGridSize;
setState(() {});
Navigator.of(context).pop('');
},
padding: const EdgeInsets.symmetric(
horizontal: 16.0,
vertical: 2.0,
),
child: Text(
'Confirm',
2022-12-07 01:54:49 +00:00
style: textTheme.body,
2022-12-06 17:47:37 +00:00
),
)
],
),
),
Container(
height: 220.0,
color: const Color(0xfff7f7f7),
child: CupertinoPicker(
2022-12-07 01:49:21 +00:00
backgroundColor: getEnteColorScheme(context).backgroundElevated,
2022-12-06 17:47:37 +00:00
onSelectedItemChanged: (index) {
_chosenGridSize = _getAlbumGridSizeFromIndex(index);
setState(() {});
},
scrollController: FixedExtentScrollController(
initialItem: _getIndexFromAlbumGridSize(_chosenGridSize),
),
magnification: 1.3,
useMagnifier: true,
itemExtent: 25,
diameterRatio: 1,
children: options,
),
)
],
);
},
);
}
int _getAlbumGridSizeFromIndex(int index) {
return index + 2;
}
int _getIndexFromAlbumGridSize(int gridSize) {
return gridSize - 2;
}
}