Added default tags

This commit is contained in:
Juan Gilsanz Polo
2024-06-11 19:27:11 +02:00
parent bfaa8bf356
commit 9765dfeea5
18 changed files with 259 additions and 29 deletions

View File

@@ -6,4 +6,5 @@ class SharedPreferencesKeys {
static const useInAppBrowser = "useInAppBrowser"; static const useInAppBrowser = "useInAppBrowser";
static const showFavicon = "showFavicon"; static const showFavicon = "showFavicon";
static const openLinksBrowser = "openLinksBrowser"; static const openLinksBrowser = "openLinksBrowser";
static const defaultTags = "defaultTags";
} }

View File

@@ -4,9 +4,9 @@
/// To regenerate, run: `dart run slang` /// To regenerate, run: `dart run slang`
/// ///
/// Locales: 3 /// 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 // coverage:ignore-file
// ignore_for_file: type=lint // ignore_for_file: type=lint
@@ -503,8 +503,7 @@ class _StringsSettingsGeneralSettingsEn {
String get browserCustomTab => 'Browser custom tab'; String get browserCustomTab => 'Browser custom tab';
String get systemBrowser => 'System browser'; String get systemBrowser => 'System browser';
String get tags => 'Tags'; String get tags => 'Tags';
String get defaultTags => 'Default tags'; late final _StringsSettingsGeneralSettingsDefaultTagsEn defaultTags = _StringsSettingsGeneralSettingsDefaultTagsEn._(_root);
String get defaultTagsDescription => 'Define a list of tags that will be added by default when creating a bookmark';
} }
// Path: settings.generalSettings.disconnectModal // 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.'; 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> // Path: <root>
class _StringsEs implements Translations { class _StringsEs implements Translations {
/// You can call this constructor and build your own translation instance of this locale. /// 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 browserCustomTab => 'Pestaña personalizada del navegador';
@override String get systemBrowser => 'Navegador del sistema'; @override String get systemBrowser => 'Navegador del sistema';
@override String get tags => 'Etiquetas'; @override String get tags => 'Etiquetas';
@override String get defaultTags => 'Etiquetas por defecto'; @override late final _StringsSettingsGeneralSettingsDefaultTagsEs defaultTags = _StringsSettingsGeneralSettingsDefaultTagsEs._(_root);
@override String get defaultTagsDescription => 'Define una lista de etiquetas que se añadirán por defecto al crear un marcador';
} }
// Path: settings.generalSettings.disconnectModal // 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.'; @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> // Path: <root>
class _StringsTr implements Translations { class _StringsTr implements Translations {
/// You can call this constructor and build your own translation instance of this locale. /// 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 browserCustomTab => 'Browser custom tab';
@override String get systemBrowser => 'System browser'; @override String get systemBrowser => 'System browser';
@override String get tags => 'Tags'; @override String get tags => 'Tags';
@override String get defaultTags => 'Default tags'; @override late final _StringsSettingsGeneralSettingsDefaultTagsTr defaultTags = _StringsSettingsGeneralSettingsDefaultTagsTr._(_root);
@override String get defaultTagsDescription => 'Define a list of tags that will be added by default when creating a bookmark';
} }
// Path: settings.generalSettings.disconnectModal // 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.'; @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. /// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library. /// 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.browserCustomTab': return 'Browser custom tab';
case 'settings.generalSettings.systemBrowser': return 'System browser'; case 'settings.generalSettings.systemBrowser': return 'System browser';
case 'settings.generalSettings.tags': return 'Tags'; case 'settings.generalSettings.tags': return 'Tags';
case 'settings.generalSettings.defaultTags': return 'Default tags'; case 'settings.generalSettings.defaultTags.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.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.goBack': return 'Go back';
case 'webview.goForward': return 'Go forward'; case 'webview.goForward': return 'Go forward';
case 'webview.reload': return 'Reload'; 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.browserCustomTab': return 'Pestaña personalizada del navegador';
case 'settings.generalSettings.systemBrowser': return 'Navegador del sistema'; case 'settings.generalSettings.systemBrowser': return 'Navegador del sistema';
case 'settings.generalSettings.tags': return 'Etiquetas'; case 'settings.generalSettings.tags': return 'Etiquetas';
case 'settings.generalSettings.defaultTags': return 'Etiquetas por defecto'; case 'settings.generalSettings.defaultTags.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.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.goBack': return 'Ir atrás';
case 'webview.goForward': return 'Ir adelante'; case 'webview.goForward': return 'Ir adelante';
case 'webview.reload': return 'Recargar'; case 'webview.reload': return 'Recargar';
@@ -1897,8 +1947,12 @@ extension on _StringsTr {
case 'settings.generalSettings.browserCustomTab': return 'Browser custom tab'; case 'settings.generalSettings.browserCustomTab': return 'Browser custom tab';
case 'settings.generalSettings.systemBrowser': return 'System browser'; case 'settings.generalSettings.systemBrowser': return 'System browser';
case 'settings.generalSettings.tags': return 'Tags'; case 'settings.generalSettings.tags': return 'Tags';
case 'settings.generalSettings.defaultTags': return 'Default tags'; case 'settings.generalSettings.defaultTags.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.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.goBack': return 'Geri dön';
case 'webview.goForward': return 'İleri git'; case 'webview.goForward': return 'İleri git';
case 'webview.reload': return 'Yenile'; case 'webview.reload': return 'Yenile';

View File

@@ -204,8 +204,14 @@
"browserCustomTab": "Browser custom tab", "browserCustomTab": "Browser custom tab",
"systemBrowser": "System browser", "systemBrowser": "System browser",
"tags": "Tags", "tags": "Tags",
"defaultTags": "Default tags", "defaultTags": {
"defaultTagsDescription": "Define a list of tags that will be added by default when creating a bookmark" "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": { "webview": {

View File

@@ -204,8 +204,14 @@
"browserCustomTab": "Pestaña personalizada del navegador", "browserCustomTab": "Pestaña personalizada del navegador",
"systemBrowser": "Navegador del sistema", "systemBrowser": "Navegador del sistema",
"tags": "Etiquetas", "tags": "Etiquetas",
"defaultTags": "Etiquetas por defecto", "defaultTags": {
"defaultTagsDescription": "Define una lista de etiquetas que se añadirán por defecto al crear un marcador" "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": { "webview": {

View File

@@ -204,8 +204,14 @@
"browserCustomTab": "Browser custom tab", "browserCustomTab": "Browser custom tab",
"systemBrowser": "System browser", "systemBrowser": "System browser",
"tags": "Tags", "tags": "Tags",
"defaultTags": "Default tags", "defaultTags": {
"defaultTagsDescription": "Define a list of tags that will be added by default when creating a bookmark" "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": { "webview": {

View File

@@ -7,6 +7,7 @@ class AppStatusModel {
int selectedColor; int selectedColor;
OpenLinksBrowser openLinksBrowser; OpenLinksBrowser openLinksBrowser;
bool showFavicon; bool showFavicon;
List<String> defaultTags;
AppStatusModel({ AppStatusModel({
this.selectedTheme = SelectedTheme.system, this.selectedTheme = SelectedTheme.system,
@@ -15,5 +16,6 @@ class AppStatusModel {
this.selectedColor = 0, this.selectedColor = 0,
this.openLinksBrowser = OpenLinksBrowser.integrated, this.openLinksBrowser = OpenLinksBrowser.integrated,
this.showFavicon = true, this.showFavicon = true,
required this.defaultTags,
}); });
} }

View File

@@ -23,6 +23,7 @@ class AppStatus extends _$AppStatus {
OpenLinksBrowserExtension.fromString(sharedPreferences.getString(SharedPreferencesKeys.openLinksBrowser)) ?? OpenLinksBrowserExtension.fromString(sharedPreferences.getString(SharedPreferencesKeys.openLinksBrowser)) ??
OpenLinksBrowser.integrated, OpenLinksBrowser.integrated,
showFavicon: sharedPreferences.getBool(SharedPreferencesKeys.showFavicon) ?? true, 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.read(faviconStoreProvider.notifier).clearFavicons();
ref.notifyListeners(); 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 @riverpod

View File

@@ -21,7 +21,7 @@ final selectedThemeProvider = AutoDisposeProvider<ThemeMode>.internal(
); );
typedef SelectedThemeRef = AutoDisposeProviderRef<ThemeMode>; typedef SelectedThemeRef = AutoDisposeProviderRef<ThemeMode>;
String _$appStatusHash() => r'f9f4e14943668e49749dfb7e65b42add404e9e8e'; String _$appStatusHash() => r'745dcff38d083afce16217c439f7667bda875a6d';
/// See also [AppStatus]. /// See also [AppStatus].
@ProviderFor(AppStatus) @ProviderFor(AppStatus)

View File

@@ -9,5 +9,6 @@ class RoutesPaths {
static const archivedBookmarks = "/bookmarks/archived"; static const archivedBookmarks = "/bookmarks/archived";
static const settings = "/settings"; static const settings = "/settings";
static const customization = "/settings/customization"; static const customization = "/settings/customization";
static const defaultTags = "/settings/default-tags";
static const generalSettings = "/settings/general"; static const generalSettings = "/settings/general";
} }

View File

@@ -5,6 +5,7 @@ import 'package:linkdy/router/names.dart';
import 'package:linkdy/screens/bookmarks/ui/bookmarks.dart'; import 'package:linkdy/screens/bookmarks/ui/bookmarks.dart';
import 'package:linkdy/screens/onboarding/ui/onboarding.dart'; import 'package:linkdy/screens/onboarding/ui/onboarding.dart';
import 'package:linkdy/screens/settings/ui/customization/customization.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/general_settings/general_settings.dart';
import 'package:linkdy/screens/settings/ui/settings.dart'; import 'package:linkdy/screens/settings/ui/settings.dart';
import 'package:linkdy/screens/filtered_bookmarks/ui/filtered_bookmarks.dart'; import 'package:linkdy/screens/filtered_bookmarks/ui/filtered_bookmarks.dart';
@@ -60,6 +61,10 @@ final List<RouteBase> appRoutes = [
path: RoutesPaths.customization, path: RoutesPaths.customization,
builder: (context, state) => const Customization(), builder: (context, state) => const Customization(),
), ),
GoRoute(
path: RoutesPaths.defaultTags,
builder: (context, state) => const DefaultTagsScreen(),
),
GoRoute( GoRoute(
path: RoutesPaths.generalSettings, path: RoutesPaths.generalSettings,
builder: (context, state) => const GeneralSettings(), builder: (context, state) => const GeneralSettings(),

View File

@@ -175,7 +175,7 @@ final getTagsProvider =
); );
typedef GetTagsRef = AutoDisposeFutureProviderRef<ApiResponse<TagsResponse>>; typedef GetTagsRef = AutoDisposeFutureProviderRef<ApiResponse<TagsResponse>>;
String _$bookmarkFormHash() => r'a89ab1d3b17c37f072e016d033a0adc26ed39748'; String _$bookmarkFormHash() => r'9d99362f0234456b26e4ef16179455862b300fe4';
/// See also [BookmarkForm]. /// See also [BookmarkForm].
@ProviderFor(BookmarkForm) @ProviderFor(BookmarkForm)

View File

@@ -221,7 +221,7 @@ final bookmarksRequestLoadMoreProvider =
); );
typedef BookmarksRequestLoadMoreRef = AutoDisposeFutureProviderRef<void>; typedef BookmarksRequestLoadMoreRef = AutoDisposeFutureProviderRef<void>;
String _$bookmarksHash() => r'ed3a350dc6f4818adf146c1dab84005fec8c9be4'; String _$bookmarksHash() => r'21cfb29298db2edcea8ce2b162e2f312972e9f3b';
/// See also [Bookmarks]. /// See also [Bookmarks].
@ProviderFor(Bookmarks) @ProviderFor(Bookmarks)

View File

@@ -174,7 +174,7 @@ final fetchSearchBookmarksLoadMoreProvider =
); );
typedef FetchSearchBookmarksLoadMoreRef = AutoDisposeFutureProviderRef<void>; typedef FetchSearchBookmarksLoadMoreRef = AutoDisposeFutureProviderRef<void>;
String _$searchBookmarksHash() => r'a70324693484f2c7731fcebf4df007443f1c30e9'; String _$searchBookmarksHash() => r'545924de28fd2ce74b8c243db8dda33c5fd079a2';
/// See also [SearchBookmarks]. /// See also [SearchBookmarks].
@ProviderFor(SearchBookmarks) @ProviderFor(SearchBookmarks)

View File

@@ -6,6 +6,7 @@ import 'package:linkdy/screens/bookmarks/provider/bookmark_form.provider.dart';
import 'package:linkdy/widgets/section_label.dart'; import 'package:linkdy/widgets/section_label.dart';
import 'package:linkdy/models/data/bookmarks.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/config/sizes.dart';
import 'package:linkdy/i18n/strings.g.dart'; import 'package:linkdy/i18n/strings.g.dart';
import 'package:linkdy/constants/global_keys.dart'; import 'package:linkdy/constants/global_keys.dart';
@@ -28,6 +29,9 @@ class BookmarkFormModal extends ConsumerStatefulWidget {
class BookmarkFormModalState extends ConsumerState<BookmarkFormModal> { class BookmarkFormModalState extends ConsumerState<BookmarkFormModal> {
@override @override
void initState() { void initState() {
if (widget.bookmark == null) {
ref.read(bookmarkFormProvider).tags = ref.read(appStatusProvider).defaultTags;
}
if (widget.bookmark != null) { if (widget.bookmark != null) {
ref.read(bookmarkFormProvider.notifier).initializeProvider(widget.bookmark!); ref.read(bookmarkFormProvider.notifier).initializeProvider(widget.bookmark!);
} }
@@ -362,6 +366,7 @@ class _ModalContent extends ConsumerWidget {
separatorBuilder: (context, index) => const SizedBox(width: 8), separatorBuilder: (context, index) => const SizedBox(width: 8),
itemBuilder: (context, index) => InputChip( itemBuilder: (context, index) => InputChip(
label: Text(provider.tags[index]), label: Text(provider.tags[index]),
isEnabled: enabledFields,
onDeleted: () => ref onDeleted: () => ref
.read(bookmarkFormProvider.notifier) .read(bookmarkFormProvider.notifier)
.setTags(provider.tags.where((tag) => tag != provider.tags[index]).toList()), .setTags(provider.tags.where((tag) => tag != provider.tags[index]).toList()),

View File

@@ -7,7 +7,7 @@ part of 'filtered_bookmarks.provider.dart';
// ************************************************************************** // **************************************************************************
String _$tagBookmarksRequestHash() => String _$tagBookmarksRequestHash() =>
r'abcde0e4ef3aecf21708a24573ddd4279211e288'; r'795205672ccd02914dbb2e15dbcf93bac94c645c';
/// Copied from Dart SDK /// Copied from Dart SDK
class _SystemHash { class _SystemHash {
@@ -372,7 +372,7 @@ final filteredBookmarksRequestLoadMoreProvider =
typedef FilteredBookmarksRequestLoadMoreRef typedef FilteredBookmarksRequestLoadMoreRef
= AutoDisposeFutureProviderRef<void>; = AutoDisposeFutureProviderRef<void>;
String _$filteredBookmarksHash() => r'2239ac5e2eb27ffee118a5c513f191702faea8de'; String _$filteredBookmarksHash() => r'8f5229e1bb6b0d50c7df4fcb6c3ef6c2aab898af';
/// See also [FilteredBookmarks]. /// See also [FilteredBookmarks].
@ProviderFor(FilteredBookmarks) @ProviderFor(FilteredBookmarks)

View File

@@ -21,7 +21,7 @@ final connectToServerProvider = AutoDisposeFutureProvider<bool>.internal(
); );
typedef ConnectToServerRef = AutoDisposeFutureProviderRef<bool>; typedef ConnectToServerRef = AutoDisposeFutureProviderRef<bool>;
String _$connectHash() => r'5382c9c95131bf263662799f30d2c131a548a8c5'; String _$connectHash() => r'15405d136ca9517c557e6a3e021a882213ee3be2';
/// See also [Connect]. /// See also [Connect].
@ProviderFor(Connect) @ProviderFor(Connect)

View 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),
],
),
),
],
),
],
),
),
),
),
);
}
}

View File

@@ -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/screens/settings/ui/general_settings/disconnect_modal.dart';
import 'package:linkdy/widgets/section_label.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/i18n/strings.g.dart';
import 'package:linkdy/providers/app_status.provider.dart'; import 'package:linkdy/providers/app_status.provider.dart';
import 'package:linkdy/constants/enums.dart'; import 'package:linkdy/constants/enums.dart';
@@ -71,8 +73,9 @@ class GeneralSettings extends ConsumerWidget {
), ),
SectionLabel(label: t.settings.generalSettings.tags), SectionLabel(label: t.settings.generalSettings.tags),
ListTile( ListTile(
title: Text(t.settings.generalSettings.defaultTags), title: Text(t.settings.generalSettings.defaultTags.defaultTags),
subtitle: Text(t.settings.generalSettings.defaultTagsDescription), subtitle: Text(t.settings.generalSettings.defaultTags.defaultTagsDescription),
onTap: () => ref.watch(routerProvider).push(RoutesPaths.defaultTags),
), ),
const Padding( const Padding(
padding: EdgeInsets.symmetric(vertical: 16), padding: EdgeInsets.symmetric(vertical: 16),