Added default tags
This commit is contained in:
@@ -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