diff --git a/assets/langs/en.yaml b/assets/langs/en.yaml index 5895856b..30abd88a 100644 --- a/assets/langs/en.yaml +++ b/assets/langs/en.yaml @@ -47,6 +47,10 @@ settings: title: Example Title privacy: Privacy Policy terms: Terms and Conditions + experimental: + title: Experimental Features + subtitle: Try out features in Development + backlinks: Show Backlinks in Markdown Preview editors: checklist: diff --git a/lib/screens/settings_experimental.dart b/lib/screens/settings_experimental.dart new file mode 100644 index 00000000..931e36fb --- /dev/null +++ b/lib/screens/settings_experimental.dart @@ -0,0 +1,45 @@ +import 'package:flutter/material.dart'; +import 'package:easy_localization/easy_localization.dart'; +import 'package:gitjournal/settings.dart'; + +class ExperimentalSettingsScreen extends StatefulWidget { + @override + _ExperimentalSettingsScreenState createState() => + _ExperimentalSettingsScreenState(); +} + +class _ExperimentalSettingsScreenState + extends State { + @override + Widget build(BuildContext context) { + var settings = Settings.instance; + + return Scaffold( + appBar: AppBar( + title: Text(tr('settings.experimental.title')), + leading: IconButton( + icon: const Icon(Icons.arrow_back), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + ), + body: Scrollbar( + child: ListView( + children: [ + SwitchListTile( + title: Text(tr('settings.experimental.backlinks')), + value: settings.experimentalBacklinks, + onChanged: (bool newVal) { + settings.experimentalBacklinks = newVal; + settings.save(); + setState(() {}); + }, + ), + ], + padding: const EdgeInsets.fromLTRB(0.0, 16.0, 0.0, 0.0), + ), + ), + ); + } +} diff --git a/lib/screens/settings_screen.dart b/lib/screens/settings_screen.dart index 20ffe63e..06c27ef0 100644 --- a/lib/screens/settings_screen.dart +++ b/lib/screens/settings_screen.dart @@ -4,6 +4,7 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:gitjournal/core/notes_folder_fs.dart'; import 'package:gitjournal/screens/debug_screen.dart'; import 'package:gitjournal/screens/settings_editors.dart'; +import 'package:gitjournal/screens/settings_experimental.dart'; import 'package:gitjournal/screens/settings_images.dart'; import 'package:gitjournal/settings.dart'; import 'package:gitjournal/state_container.dart'; @@ -270,6 +271,17 @@ class SettingsListState extends State { Navigator.of(context).push(route); }, ), + ListTile( + title: Text(tr('settings.experimental.title')), + subtitle: Text(tr('settings.experimental.subtitle')), + onTap: () { + var route = MaterialPageRoute( + builder: (context) => ExperimentalSettingsScreen(), + settings: const RouteSettings(name: '/settings/experimental'), + ); + Navigator.of(context).push(route); + }, + ), ListTile( title: Text(tr('settings.privacy')), onTap: () { diff --git a/lib/settings.dart b/lib/settings.dart index 79ba88f0..b9536459 100644 --- a/lib/settings.dart +++ b/lib/settings.dart @@ -49,6 +49,8 @@ class Settings { String imageLocationSpec = "."; // . means the same folder String debugLogLevel = 'v'; + bool experimentalBacklinks = true; + void load(SharedPreferences pref) { gitAuthor = pref.getString("gitAuthor") ?? gitAuthor; gitAuthorEmail = pref.getString("gitAuthorEmail") ?? gitAuthorEmail; @@ -102,6 +104,8 @@ class Settings { pref.getString("imageLocationSpec") ?? imageLocationSpec; debugLogLevel = pref.getString("debugLogLevel") ?? debugLogLevel; + experimentalBacklinks = + pref.getBool("experimentalBacklinks") ?? experimentalBacklinks; } Future save() async { @@ -159,6 +163,8 @@ class Settings { _setString(pref, "imageLocationSpec", imageLocationSpec, defaultSet.imageLocationSpec); _setString(pref, "debugLogLevel", debugLogLevel, defaultSet.debugLogLevel); + _setBool(pref, "experimentalBacklinks", experimentalBacklinks, + defaultSet.experimentalBacklinks); pref.setInt("settingsVersion", version); @@ -219,6 +225,7 @@ class Settings { 'homeScreen': homeScreen.toInternalString(), 'imageLocationSpec': imageLocationSpec, 'debugLogLevel': debugLogLevel, + 'experimentalBacklinks': experimentalBacklinks.toString(), }; } diff --git a/lib/widgets/note_viewer.dart b/lib/widgets/note_viewer.dart index a4145048..ff67f371 100644 --- a/lib/widgets/note_viewer.dart +++ b/lib/widgets/note_viewer.dart @@ -5,6 +5,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_markdown/flutter_markdown.dart'; import 'package:gitjournal/folder_views/common.dart'; +import 'package:gitjournal/settings.dart'; import 'package:gitjournal/utils.dart'; import 'package:gitjournal/utils/logger.dart'; import 'package:gitjournal/widgets/editor_scroll_view.dart'; @@ -79,7 +80,8 @@ class NoteViewer extends StatelessWidget { ), ), const SizedBox(height: 16.0), - NoteBacklinkRenderer(note: note, rootFolder: rootFolder), + if (Settings.instance.experimentalBacklinks) + NoteBacklinkRenderer(note: note, rootFolder: rootFolder), // _buildFooter(context), ], crossAxisAlignment: CrossAxisAlignment.start,