diff --git a/lib/screens/settings_screen.dart b/lib/screens/settings_screen.dart index f9570139..190cf7f6 100644 --- a/lib/screens/settings_screen.dart +++ b/lib/screens/settings_screen.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:gitjournal/settings.dart'; import 'package:gitjournal/utils.dart'; +import 'package:gitjournal/screens/settings_widgets.dart'; import 'package:dynamic_theme/dynamic_theme.dart'; @@ -284,88 +285,3 @@ class FontSizeSettingsDialog extends StatelessWidget { return tile; } } - -class ListPreference extends StatelessWidget { - final String title; - final String currentOption; - final List options; - final Function onChange; - - ListPreference({ - @required this.title, - @required this.currentOption, - @required this.options, - @required this.onChange, - }); - - @override - Widget build(BuildContext context) { - return ListTile( - title: Text(title), - subtitle: Text(currentOption), - onTap: () async { - var option = await showDialog( - context: context, - builder: (BuildContext context) { - var children = []; - for (var o in options) { - var tile = RadioListTile( - title: Text(o), - value: o, - groupValue: currentOption, - onChanged: (String val) { - Navigator.of(context).pop(val); - }, - ); - children.add(tile); - } - return AlertDialog( - title: Text(title), - content: SingleChildScrollView( - child: ListBody( - children: children, - ), - ), - contentPadding: const EdgeInsets.all(0.0), - actions: [ - FlatButton( - child: const Text('CANCEL'), - onPressed: () { - Navigator.of(context).pop(); - }, - ) - ], - ); - }); - - if (option != null) { - onChange(option); - } - }, - ); - } -} - -class BoolPreference extends StatelessWidget { - final String title; - final bool defaultValue; - final Function(bool) onChange; - - BoolPreference({ - @required this.title, - @required this.defaultValue, - @required this.onChange, - }); - - @override - Widget build(BuildContext context) { - return ListTile( - title: Text(title), - trailing: Switch( - value: defaultValue, - onChanged: onChange, - ), - onTap: () => onChange(!defaultValue), - ); - } -} diff --git a/lib/screens/settings_widgets.dart b/lib/screens/settings_widgets.dart new file mode 100644 index 00000000..8686f687 --- /dev/null +++ b/lib/screens/settings_widgets.dart @@ -0,0 +1,89 @@ +import 'package:flutter/material.dart'; + +class ListPreference extends StatelessWidget { + final String title; + final String currentOption; + final List options; + final Function onChange; + final bool enabled; + + ListPreference({ + @required this.title, + @required this.currentOption, + @required this.options, + @required this.onChange, + this.enabled = true, + }); + + @override + Widget build(BuildContext context) { + return ListTile( + title: Text(title), + subtitle: Text(currentOption), + onTap: () async { + var option = await showDialog( + context: context, + builder: (BuildContext context) { + var children = []; + for (var o in options) { + var tile = RadioListTile( + title: Text(o), + value: o, + groupValue: currentOption, + onChanged: (String val) { + Navigator.of(context).pop(val); + }, + ); + children.add(tile); + } + return AlertDialog( + title: Text(title), + content: SingleChildScrollView( + child: ListBody( + children: children, + ), + ), + contentPadding: const EdgeInsets.all(0.0), + actions: [ + FlatButton( + child: const Text('CANCEL'), + onPressed: () { + Navigator.of(context).pop(); + }, + ) + ], + ); + }); + + if (option != null) { + onChange(option); + } + }, + enabled: enabled, + ); + } +} + +class BoolPreference extends StatelessWidget { + final String title; + final bool defaultValue; + final Function(bool) onChange; + + BoolPreference({ + @required this.title, + @required this.defaultValue, + @required this.onChange, + }); + + @override + Widget build(BuildContext context) { + return ListTile( + title: Text(title), + trailing: Switch( + value: defaultValue, + onChanged: onChange, + ), + onTap: () => onChange(!defaultValue), + ); + } +}