settings_dialog.dart 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import 'package:app_flowy/workspace/presentation/settings/widgets/settings_appearance_view.dart';
  2. import 'package:app_flowy/workspace/presentation/settings/widgets/settings_language_view.dart';
  3. import 'package:app_flowy/workspace/presentation/settings/widgets/settings_menu.dart';
  4. import 'package:flutter/material.dart';
  5. class SettingsDialog extends StatefulWidget {
  6. const SettingsDialog({Key? key}) : super(key: key);
  7. @override
  8. State<SettingsDialog> createState() => _SettingsDialogState();
  9. }
  10. class _SettingsDialogState extends State<SettingsDialog> {
  11. int _selectedViewIndex = 0;
  12. final List<Widget> settingsViews = const [
  13. SettingsAppearanceView(),
  14. SettingsLanguageView(),
  15. ];
  16. @override
  17. Widget build(BuildContext context) {
  18. return AlertDialog(
  19. shape: RoundedRectangleBorder(
  20. borderRadius: BorderRadius.circular(10),
  21. ),
  22. title: ConstrainedBox(
  23. constraints: const BoxConstraints(
  24. maxHeight: 600,
  25. ),
  26. child: Column(
  27. crossAxisAlignment: CrossAxisAlignment.start,
  28. children: [
  29. const SettingsPanelHeader(),
  30. Expanded(
  31. child: Row(
  32. crossAxisAlignment: CrossAxisAlignment.start,
  33. children: [
  34. Expanded(
  35. flex: 1,
  36. child: SettingsMenu(
  37. changeSelectedIndex: (index) {
  38. setState(() {
  39. _selectedViewIndex = index;
  40. });
  41. },
  42. currentIndex: _selectedViewIndex,
  43. ),
  44. ),
  45. const VerticalDivider(),
  46. const SizedBox(width: 10),
  47. Expanded(
  48. flex: 4,
  49. child: settingsViews[_selectedViewIndex],
  50. )
  51. ],
  52. ),
  53. ),
  54. ],
  55. ),
  56. ),
  57. );
  58. }
  59. }
  60. class SettingsPanelHeader extends StatelessWidget {
  61. const SettingsPanelHeader({
  62. Key? key,
  63. }) : super(key: key);
  64. @override
  65. Widget build(BuildContext context) {
  66. return const Padding(
  67. padding: EdgeInsets.all(16.0),
  68. child: Text(
  69. //TODO: Change to i10n
  70. 'Settings',
  71. style: TextStyle(
  72. fontWeight: FontWeight.bold,
  73. fontSize: 24,
  74. ),
  75. ),
  76. );
  77. }
  78. }