diff --git a/lib/screens/settings_screen.dart b/lib/screens/settings_screen.dart index a0b41b41..89da24a2 100644 --- a/lib/screens/settings_screen.dart +++ b/lib/screens/settings_screen.dart @@ -128,40 +128,20 @@ class SettingsListState extends State { } }, ), - DropdownPreference( - 'Font Size', - 'font_size', - defaultVal: "Normal", - values: [ - "Extra Small", - "Small", - "Normal", - "Large", - "Extra Large", - ], - onChange: (newVal) { - NoteViewerFontSize fontSize; - switch (newVal) { - case "Extra Small": - fontSize = NoteViewerFontSize.ExtraSmall; - break; - case "Small": - fontSize = NoteViewerFontSize.Small; - break; - case "Normal": - fontSize = NoteViewerFontSize.Normal; - break; - case "Large": - fontSize = NoteViewerFontSize.Large; - break; - case "Extra Large": - fontSize = NoteViewerFontSize.ExtraLarge; - break; - default: - fontSize = NoteViewerFontSize.Normal; - } + ListTile( + title: Text("Font Size"), + subtitle: Text( + Settings.noteViewerFontSizeToString( + Settings.instance.noteViewerFontSize), + ), + onTap: () async { + String result = await showDialog( + context: context, builder: (context) => FontSizeSettingsDialog()); + + var fontSize = Settings.noteViewerFontSizeFromString(result); Settings.instance.noteViewerFontSize = fontSize; Settings.instance.save(); + setState(() {}); }, ), SettingsHeader("Git Author Settings"), @@ -283,3 +263,68 @@ class VersionNumberTileState extends State { ); } } + +class FontSizeSettingsDialog extends StatelessWidget { + final String title = "Font Size"; + + @override + Widget build(BuildContext context) { + var style = Theme.of(context).textTheme.body1; + var sizes = [ + ListTile( + title: Text("Extra Small", + style: style.copyWith( + fontSize: Settings.noteViewerFontSizeToDouble( + NoteViewerFontSize.ExtraSmall))), + onTap: () { + Navigator.of(context).pop("Extra Small"); + }, + ), + ListTile( + title: Text("Small", + style: style.copyWith( + fontSize: Settings.noteViewerFontSizeToDouble( + NoteViewerFontSize.Small))), + onTap: () { + Navigator.of(context).pop("Small"); + }, + ), + ListTile( + title: Text("Normal", + style: style.copyWith( + fontSize: Settings.noteViewerFontSizeToDouble( + NoteViewerFontSize.Normal))), + onTap: () { + Navigator.of(context).pop("Normal"); + }, + ), + ListTile( + title: Text("Large", + style: style.copyWith( + fontSize: Settings.noteViewerFontSizeToDouble( + NoteViewerFontSize.Large))), + onTap: () { + Navigator.of(context).pop("Large"); + }, + ), + ListTile( + title: Text("Extra Large", + style: style.copyWith( + fontSize: Settings.noteViewerFontSizeToDouble( + NoteViewerFontSize.ExtraLarge))), + onTap: () { + Navigator.of(context).pop("Extra Large"); + }, + ), + ]; + + return AlertDialog( + title: Text(title), + content: SingleChildScrollView( + child: ListBody( + children: sizes, + ), + ), + ); + } +} diff --git a/lib/settings.dart b/lib/settings.dart index bc738ba9..2f56fd64 100644 --- a/lib/settings.dart +++ b/lib/settings.dart @@ -62,7 +62,11 @@ class Settings { } double getNoteViewerFontSize() { - switch (noteViewerFontSize) { + return noteViewerFontSizeToDouble(noteViewerFontSize); + } + + static double noteViewerFontSizeToDouble(NoteViewerFontSize size) { + switch (size) { case NoteViewerFontSize.Normal: return 18.0; case NoteViewerFontSize.Small: @@ -75,7 +79,42 @@ class Settings { return 26.0; } - assert(false, "getNoteViewerFontSize: We should never be here"); + assert(false, "noteViewerFontSizeToDouble: We should never be here"); return 50000.0; } + + static String noteViewerFontSizeToString(NoteViewerFontSize size) { + switch (size) { + case NoteViewerFontSize.Normal: + return "Normal"; + case NoteViewerFontSize.Small: + return "Small"; + case NoteViewerFontSize.ExtraSmall: + return "Extra Small"; + case NoteViewerFontSize.Large: + return "Large"; + case NoteViewerFontSize.ExtraLarge: + return "Extra Large"; + } + + assert(false, "noteViewerFontSizeToString: We should never be here"); + return ""; + } + + static NoteViewerFontSize noteViewerFontSizeFromString(String val) { + switch (val) { + case "Extra Small": + return NoteViewerFontSize.ExtraSmall; + case "Small": + return NoteViewerFontSize.Small; + case "Normal": + return NoteViewerFontSize.Normal; + case "Large": + return NoteViewerFontSize.Large; + case "Extra Large": + return NoteViewerFontSize.ExtraLarge; + default: + return NoteViewerFontSize.Normal; + } + } }