mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-06-28 18:03:14 +08:00
Allow Swipe to delete to be configurable
This commit is contained in:
@ -95,6 +95,10 @@ settings:
|
||||
subtitle: Configure how inline tags are parsed
|
||||
enable: Parse Inline Tags
|
||||
prefixes: Inline Tags Prefixes
|
||||
misc:
|
||||
title: Misc Settings
|
||||
swipe: Swipe to Delete Note
|
||||
listView: List View
|
||||
|
||||
editors:
|
||||
checklist:
|
||||
|
@ -5,6 +5,7 @@ import 'package:provider/provider.dart';
|
||||
|
||||
import 'package:gitjournal/core/note.dart';
|
||||
import 'package:gitjournal/core/notes_folder.dart';
|
||||
import 'package:gitjournal/settings.dart';
|
||||
import 'package:gitjournal/state_container.dart';
|
||||
import 'package:gitjournal/utils.dart';
|
||||
import 'package:gitjournal/widgets/icon_dismissable.dart';
|
||||
@ -129,34 +130,39 @@ class _FolderListViewState extends State<FolderListView> {
|
||||
Note note,
|
||||
Animation<double> animation,
|
||||
) {
|
||||
var viewItem = IconDismissable(
|
||||
key: ValueKey("FolderListView_" + note.filePath),
|
||||
child: Hero(
|
||||
tag: note.filePath,
|
||||
child: widget.noteTileBuilder(context, note),
|
||||
flightShuttleBuilder: (BuildContext flightContext,
|
||||
Animation<double> animation,
|
||||
HeroFlightDirection flightDirection,
|
||||
BuildContext fromHeroContext,
|
||||
BuildContext toHeroContext) =>
|
||||
Material(child: toHeroContext.widget),
|
||||
),
|
||||
backgroundColor: Colors.red[800],
|
||||
iconData: Icons.delete,
|
||||
onDismissed: (direction) {
|
||||
deletedViaDismissed.add(note.filePath);
|
||||
|
||||
var stateContainer =
|
||||
Provider.of<StateContainer>(context, listen: false);
|
||||
stateContainer.removeNote(note);
|
||||
|
||||
var snackBar = buildUndoDeleteSnackbar(stateContainer, note);
|
||||
Scaffold.of(context)
|
||||
..removeCurrentSnackBar()
|
||||
..showSnackBar(snackBar);
|
||||
},
|
||||
var settings = Provider.of<Settings>(context);
|
||||
Widget viewItem = Hero(
|
||||
tag: note.filePath,
|
||||
child: widget.noteTileBuilder(context, note),
|
||||
flightShuttleBuilder: (BuildContext flightContext,
|
||||
Animation<double> animation,
|
||||
HeroFlightDirection flightDirection,
|
||||
BuildContext fromHeroContext,
|
||||
BuildContext toHeroContext) =>
|
||||
Material(child: toHeroContext.widget),
|
||||
);
|
||||
|
||||
if (settings.swipeToDelete) {
|
||||
viewItem = IconDismissable(
|
||||
key: ValueKey("FolderListView_" + note.filePath),
|
||||
child: viewItem,
|
||||
backgroundColor: Colors.red[800],
|
||||
iconData: Icons.delete,
|
||||
onDismissed: (direction) {
|
||||
deletedViaDismissed.add(note.filePath);
|
||||
|
||||
var stateContainer =
|
||||
Provider.of<StateContainer>(context, listen: false);
|
||||
stateContainer.removeNote(note);
|
||||
|
||||
var snackBar = buildUndoDeleteSnackbar(stateContainer, note);
|
||||
Scaffold.of(context)
|
||||
..removeCurrentSnackBar()
|
||||
..showSnackBar(snackBar);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
return SizeTransition(
|
||||
key: ValueKey("FolderListView_tr_" + note.filePath),
|
||||
axis: Axis.vertical,
|
||||
|
47
lib/screens/settings_misc.dart
Normal file
47
lib/screens/settings_misc.dart
Normal file
@ -0,0 +1,47 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:easy_localization/easy_localization.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
import 'package:gitjournal/screens/settings_screen.dart';
|
||||
import 'package:gitjournal/settings.dart';
|
||||
|
||||
class SettingsMisc extends StatefulWidget {
|
||||
@override
|
||||
_SettingsMiscState createState() => _SettingsMiscState();
|
||||
}
|
||||
|
||||
class _SettingsMiscState extends State<SettingsMisc> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
var settings = Provider.of<Settings>(context);
|
||||
|
||||
var body = Column(
|
||||
children: <Widget>[
|
||||
SettingsHeader(tr('settings.misc.listView')),
|
||||
SwitchListTile(
|
||||
title: Text(tr('settings.misc.swipe')),
|
||||
value: settings.swipeToDelete,
|
||||
onChanged: (bool newVal) {
|
||||
settings.swipeToDelete = newVal;
|
||||
settings.save();
|
||||
},
|
||||
),
|
||||
],
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
);
|
||||
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: Text(tr("settings.misc.title")),
|
||||
leading: IconButton(
|
||||
icon: const Icon(Icons.arrow_back),
|
||||
onPressed: () {
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
),
|
||||
),
|
||||
body: body,
|
||||
);
|
||||
}
|
||||
}
|
@ -13,6 +13,7 @@ import 'package:gitjournal/screens/settings_editors.dart';
|
||||
import 'package:gitjournal/screens/settings_experimental.dart';
|
||||
import 'package:gitjournal/screens/settings_git_remote.dart';
|
||||
import 'package:gitjournal/screens/settings_images.dart';
|
||||
import 'package:gitjournal/screens/settings_misc.dart';
|
||||
import 'package:gitjournal/screens/settings_note_metadata.dart';
|
||||
import 'package:gitjournal/screens/settings_tags.dart';
|
||||
import 'package:gitjournal/screens/settings_widgets.dart';
|
||||
@ -265,6 +266,16 @@ class SettingsListState extends State<SettingsList> {
|
||||
Navigator.of(context).push(route);
|
||||
},
|
||||
),
|
||||
ListTile(
|
||||
title: Text(tr('settings.misc.title')),
|
||||
onTap: () {
|
||||
var route = MaterialPageRoute(
|
||||
builder: (context) => SettingsMisc(),
|
||||
settings: const RouteSettings(name: '/settings/misc'),
|
||||
);
|
||||
Navigator.of(context).push(route);
|
||||
},
|
||||
),
|
||||
const SizedBox(height: 16.0),
|
||||
ListTile(
|
||||
title: Text(tr("feature_timeline.title")),
|
||||
|
@ -67,6 +67,8 @@ class Settings extends ChangeNotifier {
|
||||
bool zenMode = false;
|
||||
bool saveTitleInH1 = true;
|
||||
|
||||
bool swipeToDelete = true;
|
||||
|
||||
Set<String> inlineTagPrefixes = {'#'};
|
||||
|
||||
void load(SharedPreferences pref) {
|
||||
@ -145,6 +147,8 @@ class Settings extends ChangeNotifier {
|
||||
|
||||
zenMode = pref.getBool("zenMode") ?? zenMode;
|
||||
saveTitleInH1 = pref.getBool("saveTitleInH1") ?? saveTitleInH1;
|
||||
swipeToDelete = pref.getBool("swipeToDelete") ?? swipeToDelete;
|
||||
|
||||
inlineTagPrefixes =
|
||||
pref.getStringList("inlineTagPrefixes")?.toSet() ?? inlineTagPrefixes;
|
||||
}
|
||||
@ -225,6 +229,7 @@ class Settings extends ChangeNotifier {
|
||||
defaultSet.experimentalMarkdownToolbar);
|
||||
_setBool(pref, "zenMode", zenMode, defaultSet.zenMode);
|
||||
_setBool(pref, "saveTitleInH1", saveTitleInH1, defaultSet.saveTitleInH1);
|
||||
_setBool(pref, "swipeToDelete", swipeToDelete, defaultSet.swipeToDelete);
|
||||
_setStringSet(pref, "inlineTagPrefixes", inlineTagPrefixes,
|
||||
defaultSet.inlineTagPrefixes);
|
||||
|
||||
@ -311,6 +316,7 @@ class Settings extends ChangeNotifier {
|
||||
'experimentalMarkdownToolbar': experimentalMarkdownToolbar.toString(),
|
||||
'zenMode': zenMode.toString(),
|
||||
'saveTitleInH1': saveTitleInH1.toString(),
|
||||
'swipeToDelete': swipeToDelete.toString(),
|
||||
'inlineTagPrefixes': inlineTagPrefixes.join(' '),
|
||||
};
|
||||
}
|
||||
|
Reference in New Issue
Block a user