mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-06-29 02:07:39 +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
|
subtitle: Configure how inline tags are parsed
|
||||||
enable: Parse Inline Tags
|
enable: Parse Inline Tags
|
||||||
prefixes: Inline Tags Prefixes
|
prefixes: Inline Tags Prefixes
|
||||||
|
misc:
|
||||||
|
title: Misc Settings
|
||||||
|
swipe: Swipe to Delete Note
|
||||||
|
listView: List View
|
||||||
|
|
||||||
editors:
|
editors:
|
||||||
checklist:
|
checklist:
|
||||||
|
@ -5,6 +5,7 @@ import 'package:provider/provider.dart';
|
|||||||
|
|
||||||
import 'package:gitjournal/core/note.dart';
|
import 'package:gitjournal/core/note.dart';
|
||||||
import 'package:gitjournal/core/notes_folder.dart';
|
import 'package:gitjournal/core/notes_folder.dart';
|
||||||
|
import 'package:gitjournal/settings.dart';
|
||||||
import 'package:gitjournal/state_container.dart';
|
import 'package:gitjournal/state_container.dart';
|
||||||
import 'package:gitjournal/utils.dart';
|
import 'package:gitjournal/utils.dart';
|
||||||
import 'package:gitjournal/widgets/icon_dismissable.dart';
|
import 'package:gitjournal/widgets/icon_dismissable.dart';
|
||||||
@ -129,34 +130,39 @@ class _FolderListViewState extends State<FolderListView> {
|
|||||||
Note note,
|
Note note,
|
||||||
Animation<double> animation,
|
Animation<double> animation,
|
||||||
) {
|
) {
|
||||||
var viewItem = IconDismissable(
|
var settings = Provider.of<Settings>(context);
|
||||||
key: ValueKey("FolderListView_" + note.filePath),
|
Widget viewItem = Hero(
|
||||||
child: Hero(
|
tag: note.filePath,
|
||||||
tag: note.filePath,
|
child: widget.noteTileBuilder(context, note),
|
||||||
child: widget.noteTileBuilder(context, note),
|
flightShuttleBuilder: (BuildContext flightContext,
|
||||||
flightShuttleBuilder: (BuildContext flightContext,
|
Animation<double> animation,
|
||||||
Animation<double> animation,
|
HeroFlightDirection flightDirection,
|
||||||
HeroFlightDirection flightDirection,
|
BuildContext fromHeroContext,
|
||||||
BuildContext fromHeroContext,
|
BuildContext toHeroContext) =>
|
||||||
BuildContext toHeroContext) =>
|
Material(child: toHeroContext.widget),
|
||||||
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);
|
|
||||||
},
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
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(
|
return SizeTransition(
|
||||||
key: ValueKey("FolderListView_tr_" + note.filePath),
|
key: ValueKey("FolderListView_tr_" + note.filePath),
|
||||||
axis: Axis.vertical,
|
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_experimental.dart';
|
||||||
import 'package:gitjournal/screens/settings_git_remote.dart';
|
import 'package:gitjournal/screens/settings_git_remote.dart';
|
||||||
import 'package:gitjournal/screens/settings_images.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_note_metadata.dart';
|
||||||
import 'package:gitjournal/screens/settings_tags.dart';
|
import 'package:gitjournal/screens/settings_tags.dart';
|
||||||
import 'package:gitjournal/screens/settings_widgets.dart';
|
import 'package:gitjournal/screens/settings_widgets.dart';
|
||||||
@ -265,6 +266,16 @@ class SettingsListState extends State<SettingsList> {
|
|||||||
Navigator.of(context).push(route);
|
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),
|
const SizedBox(height: 16.0),
|
||||||
ListTile(
|
ListTile(
|
||||||
title: Text(tr("feature_timeline.title")),
|
title: Text(tr("feature_timeline.title")),
|
||||||
|
@ -67,6 +67,8 @@ class Settings extends ChangeNotifier {
|
|||||||
bool zenMode = false;
|
bool zenMode = false;
|
||||||
bool saveTitleInH1 = true;
|
bool saveTitleInH1 = true;
|
||||||
|
|
||||||
|
bool swipeToDelete = true;
|
||||||
|
|
||||||
Set<String> inlineTagPrefixes = {'#'};
|
Set<String> inlineTagPrefixes = {'#'};
|
||||||
|
|
||||||
void load(SharedPreferences pref) {
|
void load(SharedPreferences pref) {
|
||||||
@ -145,6 +147,8 @@ class Settings extends ChangeNotifier {
|
|||||||
|
|
||||||
zenMode = pref.getBool("zenMode") ?? zenMode;
|
zenMode = pref.getBool("zenMode") ?? zenMode;
|
||||||
saveTitleInH1 = pref.getBool("saveTitleInH1") ?? saveTitleInH1;
|
saveTitleInH1 = pref.getBool("saveTitleInH1") ?? saveTitleInH1;
|
||||||
|
swipeToDelete = pref.getBool("swipeToDelete") ?? swipeToDelete;
|
||||||
|
|
||||||
inlineTagPrefixes =
|
inlineTagPrefixes =
|
||||||
pref.getStringList("inlineTagPrefixes")?.toSet() ?? inlineTagPrefixes;
|
pref.getStringList("inlineTagPrefixes")?.toSet() ?? inlineTagPrefixes;
|
||||||
}
|
}
|
||||||
@ -225,6 +229,7 @@ class Settings extends ChangeNotifier {
|
|||||||
defaultSet.experimentalMarkdownToolbar);
|
defaultSet.experimentalMarkdownToolbar);
|
||||||
_setBool(pref, "zenMode", zenMode, defaultSet.zenMode);
|
_setBool(pref, "zenMode", zenMode, defaultSet.zenMode);
|
||||||
_setBool(pref, "saveTitleInH1", saveTitleInH1, defaultSet.saveTitleInH1);
|
_setBool(pref, "saveTitleInH1", saveTitleInH1, defaultSet.saveTitleInH1);
|
||||||
|
_setBool(pref, "swipeToDelete", swipeToDelete, defaultSet.swipeToDelete);
|
||||||
_setStringSet(pref, "inlineTagPrefixes", inlineTagPrefixes,
|
_setStringSet(pref, "inlineTagPrefixes", inlineTagPrefixes,
|
||||||
defaultSet.inlineTagPrefixes);
|
defaultSet.inlineTagPrefixes);
|
||||||
|
|
||||||
@ -311,6 +316,7 @@ class Settings extends ChangeNotifier {
|
|||||||
'experimentalMarkdownToolbar': experimentalMarkdownToolbar.toString(),
|
'experimentalMarkdownToolbar': experimentalMarkdownToolbar.toString(),
|
||||||
'zenMode': zenMode.toString(),
|
'zenMode': zenMode.toString(),
|
||||||
'saveTitleInH1': saveTitleInH1.toString(),
|
'saveTitleInH1': saveTitleInH1.toString(),
|
||||||
|
'swipeToDelete': swipeToDelete.toString(),
|
||||||
'inlineTagPrefixes': inlineTagPrefixes.join(' '),
|
'inlineTagPrefixes': inlineTagPrefixes.join(' '),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user