Added default tags
This commit is contained in:
@@ -6,4 +6,5 @@ class SharedPreferencesKeys {
|
||||
static const useInAppBrowser = "useInAppBrowser";
|
||||
static const showFavicon = "showFavicon";
|
||||
static const openLinksBrowser = "openLinksBrowser";
|
||||
static const defaultTags = "defaultTags";
|
||||
}
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
/// To regenerate, run: `dart run slang`
|
||||
///
|
||||
/// Locales: 3
|
||||
/// Strings: 591 (197 per locale)
|
||||
/// Strings: 603 (201 per locale)
|
||||
///
|
||||
/// Built on 2024-06-11 at 16:25 UTC
|
||||
/// Built on 2024-06-11 at 17:17 UTC
|
||||
|
||||
// coverage:ignore-file
|
||||
// ignore_for_file: type=lint
|
||||
@@ -503,8 +503,7 @@ class _StringsSettingsGeneralSettingsEn {
|
||||
String get browserCustomTab => 'Browser custom tab';
|
||||
String get systemBrowser => 'System browser';
|
||||
String get tags => 'Tags';
|
||||
String get defaultTags => 'Default tags';
|
||||
String get defaultTagsDescription => 'Define a list of tags that will be added by default when creating a bookmark';
|
||||
late final _StringsSettingsGeneralSettingsDefaultTagsEn defaultTags = _StringsSettingsGeneralSettingsDefaultTagsEn._(_root);
|
||||
}
|
||||
|
||||
// Path: settings.generalSettings.disconnectModal
|
||||
@@ -518,6 +517,21 @@ class _StringsSettingsGeneralSettingsDisconnectModalEn {
|
||||
String get description => 'Are you sure you want to disconnect from the server?\nYou will be redirected to the initial setup.';
|
||||
}
|
||||
|
||||
// Path: settings.generalSettings.defaultTags
|
||||
class _StringsSettingsGeneralSettingsDefaultTagsEn {
|
||||
_StringsSettingsGeneralSettingsDefaultTagsEn._(this._root);
|
||||
|
||||
final Translations _root; // ignore: unused_field
|
||||
|
||||
// Translations
|
||||
String get defaultTags => 'Default tags';
|
||||
String get defaultTagsDescription => 'Define a list of tags that will be added by default when creating a bookmark';
|
||||
String get newTag => 'New tag';
|
||||
String get addTag => 'Add tag';
|
||||
String get removeThisTag => 'Remove this tag';
|
||||
String get noDefaultTags => 'There are no default tags';
|
||||
}
|
||||
|
||||
// Path: <root>
|
||||
class _StringsEs implements Translations {
|
||||
/// You can call this constructor and build your own translation instance of this locale.
|
||||
@@ -896,8 +910,7 @@ class _StringsSettingsGeneralSettingsEs implements _StringsSettingsGeneralSettin
|
||||
@override String get browserCustomTab => 'Pestaña personalizada del navegador';
|
||||
@override String get systemBrowser => 'Navegador del sistema';
|
||||
@override String get tags => 'Etiquetas';
|
||||
@override String get defaultTags => 'Etiquetas por defecto';
|
||||
@override String get defaultTagsDescription => 'Define una lista de etiquetas que se añadirán por defecto al crear un marcador';
|
||||
@override late final _StringsSettingsGeneralSettingsDefaultTagsEs defaultTags = _StringsSettingsGeneralSettingsDefaultTagsEs._(_root);
|
||||
}
|
||||
|
||||
// Path: settings.generalSettings.disconnectModal
|
||||
@@ -911,6 +924,21 @@ class _StringsSettingsGeneralSettingsDisconnectModalEs implements _StringsSettin
|
||||
@override String get description => '¿Estás seguro que deseas desconectarte del servidor?\nSerás redirigido a la configuración inicial.';
|
||||
}
|
||||
|
||||
// Path: settings.generalSettings.defaultTags
|
||||
class _StringsSettingsGeneralSettingsDefaultTagsEs implements _StringsSettingsGeneralSettingsDefaultTagsEn {
|
||||
_StringsSettingsGeneralSettingsDefaultTagsEs._(this._root);
|
||||
|
||||
@override final _StringsEs _root; // ignore: unused_field
|
||||
|
||||
// Translations
|
||||
@override String get defaultTags => 'Etiquetas por defecto';
|
||||
@override String get defaultTagsDescription => 'Define una lista de etiquetas que se añadirán por defecto al crear un marcador';
|
||||
@override String get newTag => 'Nueva etiqueta';
|
||||
@override String get addTag => 'Añadir etiqueta';
|
||||
@override String get removeThisTag => 'Eliminar esta etiqueta';
|
||||
@override String get noDefaultTags => 'No hay etiquetas por defecto';
|
||||
}
|
||||
|
||||
// Path: <root>
|
||||
class _StringsTr implements Translations {
|
||||
/// You can call this constructor and build your own translation instance of this locale.
|
||||
@@ -1289,8 +1317,7 @@ class _StringsSettingsGeneralSettingsTr implements _StringsSettingsGeneralSettin
|
||||
@override String get browserCustomTab => 'Browser custom tab';
|
||||
@override String get systemBrowser => 'System browser';
|
||||
@override String get tags => 'Tags';
|
||||
@override String get defaultTags => 'Default tags';
|
||||
@override String get defaultTagsDescription => 'Define a list of tags that will be added by default when creating a bookmark';
|
||||
@override late final _StringsSettingsGeneralSettingsDefaultTagsTr defaultTags = _StringsSettingsGeneralSettingsDefaultTagsTr._(_root);
|
||||
}
|
||||
|
||||
// Path: settings.generalSettings.disconnectModal
|
||||
@@ -1304,6 +1331,21 @@ class _StringsSettingsGeneralSettingsDisconnectModalTr implements _StringsSettin
|
||||
@override String get description => 'Sunucu bağlantısını kesmek istediğinizden emin misiniz?\nİlk kuruluma yönlendirileceksiniz.';
|
||||
}
|
||||
|
||||
// Path: settings.generalSettings.defaultTags
|
||||
class _StringsSettingsGeneralSettingsDefaultTagsTr implements _StringsSettingsGeneralSettingsDefaultTagsEn {
|
||||
_StringsSettingsGeneralSettingsDefaultTagsTr._(this._root);
|
||||
|
||||
@override final _StringsTr _root; // ignore: unused_field
|
||||
|
||||
// Translations
|
||||
@override String get defaultTags => 'Default tags';
|
||||
@override String get defaultTagsDescription => 'Define a list of tags that will be added by default when creating a bookmark';
|
||||
@override String get newTag => 'New tag';
|
||||
@override String get addTag => 'AddTag';
|
||||
@override String get removeThisTag => 'Remove this tag';
|
||||
@override String get noDefaultTags => 'There are no default tags';
|
||||
}
|
||||
|
||||
/// Flat map(s) containing all translations.
|
||||
/// Only for edge cases! For simple maps, use the map function of this library.
|
||||
|
||||
@@ -1487,8 +1529,12 @@ extension on Translations {
|
||||
case 'settings.generalSettings.browserCustomTab': return 'Browser custom tab';
|
||||
case 'settings.generalSettings.systemBrowser': return 'System browser';
|
||||
case 'settings.generalSettings.tags': return 'Tags';
|
||||
case 'settings.generalSettings.defaultTags': return 'Default tags';
|
||||
case 'settings.generalSettings.defaultTagsDescription': return 'Define a list of tags that will be added by default when creating a bookmark';
|
||||
case 'settings.generalSettings.defaultTags.defaultTags': return 'Default tags';
|
||||
case 'settings.generalSettings.defaultTags.defaultTagsDescription': return 'Define a list of tags that will be added by default when creating a bookmark';
|
||||
case 'settings.generalSettings.defaultTags.newTag': return 'New tag';
|
||||
case 'settings.generalSettings.defaultTags.addTag': return 'Add tag';
|
||||
case 'settings.generalSettings.defaultTags.removeThisTag': return 'Remove this tag';
|
||||
case 'settings.generalSettings.defaultTags.noDefaultTags': return 'There are no default tags';
|
||||
case 'webview.goBack': return 'Go back';
|
||||
case 'webview.goForward': return 'Go forward';
|
||||
case 'webview.reload': return 'Reload';
|
||||
@@ -1692,8 +1738,12 @@ extension on _StringsEs {
|
||||
case 'settings.generalSettings.browserCustomTab': return 'Pestaña personalizada del navegador';
|
||||
case 'settings.generalSettings.systemBrowser': return 'Navegador del sistema';
|
||||
case 'settings.generalSettings.tags': return 'Etiquetas';
|
||||
case 'settings.generalSettings.defaultTags': return 'Etiquetas por defecto';
|
||||
case 'settings.generalSettings.defaultTagsDescription': return 'Define una lista de etiquetas que se añadirán por defecto al crear un marcador';
|
||||
case 'settings.generalSettings.defaultTags.defaultTags': return 'Etiquetas por defecto';
|
||||
case 'settings.generalSettings.defaultTags.defaultTagsDescription': return 'Define una lista de etiquetas que se añadirán por defecto al crear un marcador';
|
||||
case 'settings.generalSettings.defaultTags.newTag': return 'Nueva etiqueta';
|
||||
case 'settings.generalSettings.defaultTags.addTag': return 'Añadir etiqueta';
|
||||
case 'settings.generalSettings.defaultTags.removeThisTag': return 'Eliminar esta etiqueta';
|
||||
case 'settings.generalSettings.defaultTags.noDefaultTags': return 'No hay etiquetas por defecto';
|
||||
case 'webview.goBack': return 'Ir atrás';
|
||||
case 'webview.goForward': return 'Ir adelante';
|
||||
case 'webview.reload': return 'Recargar';
|
||||
@@ -1897,8 +1947,12 @@ extension on _StringsTr {
|
||||
case 'settings.generalSettings.browserCustomTab': return 'Browser custom tab';
|
||||
case 'settings.generalSettings.systemBrowser': return 'System browser';
|
||||
case 'settings.generalSettings.tags': return 'Tags';
|
||||
case 'settings.generalSettings.defaultTags': return 'Default tags';
|
||||
case 'settings.generalSettings.defaultTagsDescription': return 'Define a list of tags that will be added by default when creating a bookmark';
|
||||
case 'settings.generalSettings.defaultTags.defaultTags': return 'Default tags';
|
||||
case 'settings.generalSettings.defaultTags.defaultTagsDescription': return 'Define a list of tags that will be added by default when creating a bookmark';
|
||||
case 'settings.generalSettings.defaultTags.newTag': return 'New tag';
|
||||
case 'settings.generalSettings.defaultTags.addTag': return 'AddTag';
|
||||
case 'settings.generalSettings.defaultTags.removeThisTag': return 'Remove this tag';
|
||||
case 'settings.generalSettings.defaultTags.noDefaultTags': return 'There are no default tags';
|
||||
case 'webview.goBack': return 'Geri dön';
|
||||
case 'webview.goForward': return 'İleri git';
|
||||
case 'webview.reload': return 'Yenile';
|
||||
|
||||
@@ -204,8 +204,14 @@
|
||||
"browserCustomTab": "Browser custom tab",
|
||||
"systemBrowser": "System browser",
|
||||
"tags": "Tags",
|
||||
"defaultTags": "Default tags",
|
||||
"defaultTagsDescription": "Define a list of tags that will be added by default when creating a bookmark"
|
||||
"defaultTags": {
|
||||
"defaultTags": "Default tags",
|
||||
"defaultTagsDescription": "Define a list of tags that will be added by default when creating a bookmark",
|
||||
"newTag": "New tag",
|
||||
"addTag": "Add tag",
|
||||
"removeThisTag": "Remove this tag",
|
||||
"noDefaultTags": "There are no default tags"
|
||||
}
|
||||
}
|
||||
},
|
||||
"webview": {
|
||||
|
||||
@@ -204,8 +204,14 @@
|
||||
"browserCustomTab": "Pestaña personalizada del navegador",
|
||||
"systemBrowser": "Navegador del sistema",
|
||||
"tags": "Etiquetas",
|
||||
"defaultTags": "Etiquetas por defecto",
|
||||
"defaultTagsDescription": "Define una lista de etiquetas que se añadirán por defecto al crear un marcador"
|
||||
"defaultTags": {
|
||||
"defaultTags": "Etiquetas por defecto",
|
||||
"defaultTagsDescription": "Define una lista de etiquetas que se añadirán por defecto al crear un marcador",
|
||||
"newTag": "Nueva etiqueta",
|
||||
"addTag": "Añadir etiqueta",
|
||||
"removeThisTag": "Eliminar esta etiqueta",
|
||||
"noDefaultTags": "No hay etiquetas por defecto"
|
||||
}
|
||||
}
|
||||
},
|
||||
"webview": {
|
||||
|
||||
@@ -204,8 +204,14 @@
|
||||
"browserCustomTab": "Browser custom tab",
|
||||
"systemBrowser": "System browser",
|
||||
"tags": "Tags",
|
||||
"defaultTags": "Default tags",
|
||||
"defaultTagsDescription": "Define a list of tags that will be added by default when creating a bookmark"
|
||||
"defaultTags": {
|
||||
"defaultTags": "Default tags",
|
||||
"defaultTagsDescription": "Define a list of tags that will be added by default when creating a bookmark",
|
||||
"newTag": "New tag",
|
||||
"addTag": "AddTag",
|
||||
"removeThisTag": "Remove this tag",
|
||||
"noDefaultTags": "There are no default tags"
|
||||
}
|
||||
}
|
||||
},
|
||||
"webview": {
|
||||
|
||||
@@ -7,6 +7,7 @@ class AppStatusModel {
|
||||
int selectedColor;
|
||||
OpenLinksBrowser openLinksBrowser;
|
||||
bool showFavicon;
|
||||
List<String> defaultTags;
|
||||
|
||||
AppStatusModel({
|
||||
this.selectedTheme = SelectedTheme.system,
|
||||
@@ -15,5 +16,6 @@ class AppStatusModel {
|
||||
this.selectedColor = 0,
|
||||
this.openLinksBrowser = OpenLinksBrowser.integrated,
|
||||
this.showFavicon = true,
|
||||
required this.defaultTags,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ class AppStatus extends _$AppStatus {
|
||||
OpenLinksBrowserExtension.fromString(sharedPreferences.getString(SharedPreferencesKeys.openLinksBrowser)) ??
|
||||
OpenLinksBrowser.integrated,
|
||||
showFavicon: sharedPreferences.getBool(SharedPreferencesKeys.showFavicon) ?? true,
|
||||
defaultTags: sharedPreferences.getStringList(SharedPreferencesKeys.defaultTags) ?? [],
|
||||
);
|
||||
}
|
||||
|
||||
@@ -61,6 +62,20 @@ class AppStatus extends _$AppStatus {
|
||||
ref.read(faviconStoreProvider.notifier).clearFavicons();
|
||||
ref.notifyListeners();
|
||||
}
|
||||
|
||||
void addDefaultTag(String value) {
|
||||
final newTags = [...state.defaultTags, value];
|
||||
state.defaultTags = newTags;
|
||||
ref.read(sharedPreferencesProvider).setStringList(SharedPreferencesKeys.defaultTags, newTags);
|
||||
ref.notifyListeners();
|
||||
}
|
||||
|
||||
void removeDefaultTag(String value) {
|
||||
final newTags = state.defaultTags.where((e) => e != value).toList();
|
||||
state.defaultTags = newTags;
|
||||
ref.read(sharedPreferencesProvider).setStringList(SharedPreferencesKeys.defaultTags, newTags);
|
||||
ref.notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
@riverpod
|
||||
|
||||
@@ -21,7 +21,7 @@ final selectedThemeProvider = AutoDisposeProvider<ThemeMode>.internal(
|
||||
);
|
||||
|
||||
typedef SelectedThemeRef = AutoDisposeProviderRef<ThemeMode>;
|
||||
String _$appStatusHash() => r'f9f4e14943668e49749dfb7e65b42add404e9e8e';
|
||||
String _$appStatusHash() => r'745dcff38d083afce16217c439f7667bda875a6d';
|
||||
|
||||
/// See also [AppStatus].
|
||||
@ProviderFor(AppStatus)
|
||||
|
||||
@@ -9,5 +9,6 @@ class RoutesPaths {
|
||||
static const archivedBookmarks = "/bookmarks/archived";
|
||||
static const settings = "/settings";
|
||||
static const customization = "/settings/customization";
|
||||
static const defaultTags = "/settings/default-tags";
|
||||
static const generalSettings = "/settings/general";
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import 'package:linkdy/router/names.dart';
|
||||
import 'package:linkdy/screens/bookmarks/ui/bookmarks.dart';
|
||||
import 'package:linkdy/screens/onboarding/ui/onboarding.dart';
|
||||
import 'package:linkdy/screens/settings/ui/customization/customization.dart';
|
||||
import 'package:linkdy/screens/settings/ui/default_tags/default_tags.dart';
|
||||
import 'package:linkdy/screens/settings/ui/general_settings/general_settings.dart';
|
||||
import 'package:linkdy/screens/settings/ui/settings.dart';
|
||||
import 'package:linkdy/screens/filtered_bookmarks/ui/filtered_bookmarks.dart';
|
||||
@@ -60,6 +61,10 @@ final List<RouteBase> appRoutes = [
|
||||
path: RoutesPaths.customization,
|
||||
builder: (context, state) => const Customization(),
|
||||
),
|
||||
GoRoute(
|
||||
path: RoutesPaths.defaultTags,
|
||||
builder: (context, state) => const DefaultTagsScreen(),
|
||||
),
|
||||
GoRoute(
|
||||
path: RoutesPaths.generalSettings,
|
||||
builder: (context, state) => const GeneralSettings(),
|
||||
|
||||
@@ -175,7 +175,7 @@ final getTagsProvider =
|
||||
);
|
||||
|
||||
typedef GetTagsRef = AutoDisposeFutureProviderRef<ApiResponse<TagsResponse>>;
|
||||
String _$bookmarkFormHash() => r'a89ab1d3b17c37f072e016d033a0adc26ed39748';
|
||||
String _$bookmarkFormHash() => r'9d99362f0234456b26e4ef16179455862b300fe4';
|
||||
|
||||
/// See also [BookmarkForm].
|
||||
@ProviderFor(BookmarkForm)
|
||||
|
||||
@@ -221,7 +221,7 @@ final bookmarksRequestLoadMoreProvider =
|
||||
);
|
||||
|
||||
typedef BookmarksRequestLoadMoreRef = AutoDisposeFutureProviderRef<void>;
|
||||
String _$bookmarksHash() => r'ed3a350dc6f4818adf146c1dab84005fec8c9be4';
|
||||
String _$bookmarksHash() => r'21cfb29298db2edcea8ce2b162e2f312972e9f3b';
|
||||
|
||||
/// See also [Bookmarks].
|
||||
@ProviderFor(Bookmarks)
|
||||
|
||||
@@ -174,7 +174,7 @@ final fetchSearchBookmarksLoadMoreProvider =
|
||||
);
|
||||
|
||||
typedef FetchSearchBookmarksLoadMoreRef = AutoDisposeFutureProviderRef<void>;
|
||||
String _$searchBookmarksHash() => r'a70324693484f2c7731fcebf4df007443f1c30e9';
|
||||
String _$searchBookmarksHash() => r'545924de28fd2ce74b8c243db8dda33c5fd079a2';
|
||||
|
||||
/// See also [SearchBookmarks].
|
||||
@ProviderFor(SearchBookmarks)
|
||||
|
||||
@@ -6,6 +6,7 @@ import 'package:linkdy/screens/bookmarks/provider/bookmark_form.provider.dart';
|
||||
import 'package:linkdy/widgets/section_label.dart';
|
||||
|
||||
import 'package:linkdy/models/data/bookmarks.dart';
|
||||
import 'package:linkdy/providers/app_status.provider.dart';
|
||||
import 'package:linkdy/config/sizes.dart';
|
||||
import 'package:linkdy/i18n/strings.g.dart';
|
||||
import 'package:linkdy/constants/global_keys.dart';
|
||||
@@ -28,6 +29,9 @@ class BookmarkFormModal extends ConsumerStatefulWidget {
|
||||
class BookmarkFormModalState extends ConsumerState<BookmarkFormModal> {
|
||||
@override
|
||||
void initState() {
|
||||
if (widget.bookmark == null) {
|
||||
ref.read(bookmarkFormProvider).tags = ref.read(appStatusProvider).defaultTags;
|
||||
}
|
||||
if (widget.bookmark != null) {
|
||||
ref.read(bookmarkFormProvider.notifier).initializeProvider(widget.bookmark!);
|
||||
}
|
||||
@@ -362,6 +366,7 @@ class _ModalContent extends ConsumerWidget {
|
||||
separatorBuilder: (context, index) => const SizedBox(width: 8),
|
||||
itemBuilder: (context, index) => InputChip(
|
||||
label: Text(provider.tags[index]),
|
||||
isEnabled: enabledFields,
|
||||
onDeleted: () => ref
|
||||
.read(bookmarkFormProvider.notifier)
|
||||
.setTags(provider.tags.where((tag) => tag != provider.tags[index]).toList()),
|
||||
|
||||
@@ -7,7 +7,7 @@ part of 'filtered_bookmarks.provider.dart';
|
||||
// **************************************************************************
|
||||
|
||||
String _$tagBookmarksRequestHash() =>
|
||||
r'abcde0e4ef3aecf21708a24573ddd4279211e288';
|
||||
r'795205672ccd02914dbb2e15dbcf93bac94c645c';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
@@ -372,7 +372,7 @@ final filteredBookmarksRequestLoadMoreProvider =
|
||||
|
||||
typedef FilteredBookmarksRequestLoadMoreRef
|
||||
= AutoDisposeFutureProviderRef<void>;
|
||||
String _$filteredBookmarksHash() => r'2239ac5e2eb27ffee118a5c513f191702faea8de';
|
||||
String _$filteredBookmarksHash() => r'8f5229e1bb6b0d50c7df4fcb6c3ef6c2aab898af';
|
||||
|
||||
/// See also [FilteredBookmarks].
|
||||
@ProviderFor(FilteredBookmarks)
|
||||
|
||||
@@ -21,7 +21,7 @@ final connectToServerProvider = AutoDisposeFutureProvider<bool>.internal(
|
||||
);
|
||||
|
||||
typedef ConnectToServerRef = AutoDisposeFutureProviderRef<bool>;
|
||||
String _$connectHash() => r'5382c9c95131bf263662799f30d2c131a548a8c5';
|
||||
String _$connectHash() => r'15405d136ca9517c557e6a3e021a882213ee3be2';
|
||||
|
||||
/// See also [Connect].
|
||||
@ProviderFor(Connect)
|
||||
|
||||
126
lib/screens/settings/ui/default_tags/default_tags.dart
Normal file
126
lib/screens/settings/ui/default_tags/default_tags.dart
Normal file
@@ -0,0 +1,126 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
|
||||
import 'package:linkdy/i18n/strings.g.dart';
|
||||
import 'package:linkdy/providers/app_status.provider.dart';
|
||||
|
||||
class DefaultTagsScreen extends ConsumerStatefulWidget {
|
||||
const DefaultTagsScreen({super.key});
|
||||
|
||||
@override
|
||||
DefaultTagsScreenState createState() => DefaultTagsScreenState();
|
||||
}
|
||||
|
||||
class DefaultTagsScreenState extends ConsumerState<DefaultTagsScreen> {
|
||||
final _newTagController = TextEditingController();
|
||||
bool _addEnabled = false;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
body: NestedScrollView(
|
||||
headerSliverBuilder: (context, innerBoxIsScrolled) => [
|
||||
SliverOverlapAbsorber(
|
||||
handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context),
|
||||
sliver: SliverAppBar.large(
|
||||
pinned: true,
|
||||
floating: true,
|
||||
centerTitle: false,
|
||||
forceElevated: innerBoxIsScrolled,
|
||||
title: Text(t.settings.generalSettings.defaultTags.defaultTags),
|
||||
),
|
||||
),
|
||||
],
|
||||
body: SafeArea(
|
||||
top: false,
|
||||
bottom: false,
|
||||
child: Builder(
|
||||
builder: (context) => CustomScrollView(
|
||||
slivers: [
|
||||
SliverOverlapInjector(
|
||||
handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context),
|
||||
),
|
||||
SliverList.list(
|
||||
children: [
|
||||
if (ref.watch(appStatusProvider).defaultTags.isNotEmpty)
|
||||
...ref.watch(appStatusProvider).defaultTags.map(
|
||||
(tag) => ListTile(
|
||||
title: Text(tag),
|
||||
trailing: IconButton(
|
||||
onPressed: () => ref.read(appStatusProvider.notifier).removeDefaultTag(tag),
|
||||
icon: const Icon(Icons.delete_rounded),
|
||||
tooltip: t.settings.generalSettings.defaultTags.removeThisTag,
|
||||
),
|
||||
),
|
||||
),
|
||||
if (ref.watch(appStatusProvider).defaultTags.isEmpty)
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(16),
|
||||
child: Center(
|
||||
child: Text(
|
||||
t.settings.generalSettings.defaultTags.noDefaultTags,
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontSize: 18,
|
||||
color: Theme.of(context).colorScheme.onSurfaceVariant,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
const Divider(),
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 16),
|
||||
child: Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: TextFormField(
|
||||
controller: _newTagController,
|
||||
onChanged: (v) => setState(() => v != "" ? _addEnabled = true : _addEnabled = false),
|
||||
autocorrect: false,
|
||||
textCapitalization: TextCapitalization.none,
|
||||
decoration: InputDecoration(
|
||||
prefixIcon: const Icon(Icons.sell_rounded),
|
||||
border: const OutlineInputBorder(
|
||||
borderRadius: BorderRadius.all(
|
||||
Radius.circular(10),
|
||||
),
|
||||
),
|
||||
labelText: t.settings.generalSettings.defaultTags.newTag,
|
||||
),
|
||||
onFieldSubmitted: (value) {
|
||||
ref.read(appStatusProvider.notifier).addDefaultTag(value);
|
||||
setState(() {
|
||||
_newTagController.text = "";
|
||||
_addEnabled = false;
|
||||
});
|
||||
},
|
||||
),
|
||||
),
|
||||
const SizedBox(width: 16),
|
||||
IconButton(
|
||||
onPressed: _addEnabled
|
||||
? () {
|
||||
ref.read(appStatusProvider.notifier).addDefaultTag(_newTagController.text);
|
||||
setState(() {
|
||||
_newTagController.text = "";
|
||||
_addEnabled = false;
|
||||
});
|
||||
}
|
||||
: null,
|
||||
icon: const Icon(Icons.add_rounded),
|
||||
tooltip: t.settings.generalSettings.defaultTags.addTag,
|
||||
),
|
||||
const SizedBox(width: 8),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,8 @@ import 'package:linkdy/screens/settings/ui/general_settings/browser_mode_selecti
|
||||
import 'package:linkdy/screens/settings/ui/general_settings/disconnect_modal.dart';
|
||||
import 'package:linkdy/widgets/section_label.dart';
|
||||
|
||||
import 'package:linkdy/router/paths.dart';
|
||||
import 'package:linkdy/providers/router.provider.dart';
|
||||
import 'package:linkdy/i18n/strings.g.dart';
|
||||
import 'package:linkdy/providers/app_status.provider.dart';
|
||||
import 'package:linkdy/constants/enums.dart';
|
||||
@@ -71,8 +73,9 @@ class GeneralSettings extends ConsumerWidget {
|
||||
),
|
||||
SectionLabel(label: t.settings.generalSettings.tags),
|
||||
ListTile(
|
||||
title: Text(t.settings.generalSettings.defaultTags),
|
||||
subtitle: Text(t.settings.generalSettings.defaultTagsDescription),
|
||||
title: Text(t.settings.generalSettings.defaultTags.defaultTags),
|
||||
subtitle: Text(t.settings.generalSettings.defaultTags.defaultTagsDescription),
|
||||
onTap: () => ref.watch(routerProvider).push(RoutesPaths.defaultTags),
|
||||
),
|
||||
const Padding(
|
||||
padding: EdgeInsets.symmetric(vertical: 16),
|
||||
|
||||
Reference in New Issue
Block a user