diff --git a/lib/i18n/strings.g.dart b/lib/i18n/strings.g.dart index 9defe7a..d1899bc 100644 --- a/lib/i18n/strings.g.dart +++ b/lib/i18n/strings.g.dart @@ -4,9 +4,9 @@ /// To regenerate, run: `dart run slang` /// /// Locales: 3 -/// Strings: 561 (187 per locale) +/// Strings: 570 (190 per locale) /// -/// Built on 2024-04-03 at 23:27 UTC +/// Built on 2024-04-14 at 18:40 UTC // coverage:ignore-file // ignore_for_file: type=lint @@ -348,6 +348,7 @@ class _StringsBookmarksAddBookmarkEn { String get title => 'Title'; String get description => 'Description'; String get markAsUnread => 'Mark as unread'; + String get markAsUnreadDescription => 'Unread bookmarks can be filtered for, and marked as read after you had a chance to look at them.'; String get notes => 'Notes'; String get addNotes => 'Add notes'; String get tags => 'Tags'; @@ -360,6 +361,8 @@ class _StringsBookmarksAddBookmarkEn { String get errorSavingBookmark => 'An error occured when saving the new bookmark.'; String get leaveEmptyUseWebsiteTitle => 'Leave empty to use the website\'s title.'; String get leaveEmptyUseWebsiteDescription => 'Leave empty to use the website\'s description.'; + String get share => 'Share'; + String get shareDescription => 'Share this bookmark with other registered users and anonymous users.'; } // Path: bookmarks.search @@ -731,6 +734,7 @@ class _StringsBookmarksAddBookmarkEs implements _StringsBookmarksAddBookmarkEn { @override String get title => 'Title'; @override String get description => 'Description'; @override String get markAsUnread => 'Marcar como no leído'; + @override String get markAsUnreadDescription => 'Los marcadores no leídos pueden filtrarse y marcarse como leídos después de haberlos consultado.'; @override String get notes => 'Notas'; @override String get addNotes => 'Añadir notas'; @override String get tags => 'Etiquetas'; @@ -743,6 +747,8 @@ class _StringsBookmarksAddBookmarkEs implements _StringsBookmarksAddBookmarkEn { @override String get errorSavingBookmark => 'Ocurrió un error al guardar el nuevo marcador.'; @override String get leaveEmptyUseWebsiteTitle => 'Dejar vacío para usar el título del sitio web.'; @override String get leaveEmptyUseWebsiteDescription => 'Dejar vacío para usar la descripción del sitio web.'; + @override String get share => 'Compartir'; + @override String get shareDescription => 'Comparte este marcador con otros usuarios registrados y usuarios anónimos.'; } // Path: bookmarks.search @@ -1114,6 +1120,7 @@ class _StringsBookmarksAddBookmarkTr implements _StringsBookmarksAddBookmarkEn { @override String get title => 'Başlık'; @override String get description => 'Açıklama'; @override String get markAsUnread => 'Okunmadı olarak işaretle'; + @override String get markAsUnreadDescription => 'Unread bookmarks can be filtered for, and marked as read after you had a chance to look at them.'; @override String get notes => 'Notlar'; @override String get addNotes => 'Not ekle'; @override String get tags => 'Etiketler'; @@ -1126,6 +1133,8 @@ class _StringsBookmarksAddBookmarkTr implements _StringsBookmarksAddBookmarkEn { @override String get errorSavingBookmark => 'Yeni yer işareti kaydedilirken bir hata oluştu.'; @override String get leaveEmptyUseWebsiteTitle => 'Web sitesinin başlığını kullanmak için boş bırakın.'; @override String get leaveEmptyUseWebsiteDescription => 'Web sitesinin açıklamasını kullanmak için boş bırakın.'; + @override String get share => 'Share'; + @override String get shareDescription => 'Share this bookmark with other registered users and anonymous users.'; } // Path: bookmarks.search @@ -1353,6 +1362,7 @@ extension on Translations { case 'bookmarks.addBookmark.title': return 'Title'; case 'bookmarks.addBookmark.description': return 'Description'; case 'bookmarks.addBookmark.markAsUnread': return 'Mark as unread'; + case 'bookmarks.addBookmark.markAsUnreadDescription': return 'Unread bookmarks can be filtered for, and marked as read after you had a chance to look at them.'; case 'bookmarks.addBookmark.notes': return 'Notes'; case 'bookmarks.addBookmark.addNotes': return 'Add notes'; case 'bookmarks.addBookmark.tags': return 'Tags'; @@ -1365,6 +1375,8 @@ extension on Translations { case 'bookmarks.addBookmark.errorSavingBookmark': return 'An error occured when saving the new bookmark.'; case 'bookmarks.addBookmark.leaveEmptyUseWebsiteTitle': return 'Leave empty to use the website\'s title.'; case 'bookmarks.addBookmark.leaveEmptyUseWebsiteDescription': return 'Leave empty to use the website\'s description.'; + case 'bookmarks.addBookmark.share': return 'Share'; + case 'bookmarks.addBookmark.shareDescription': return 'Share this bookmark with other registered users and anonymous users.'; case 'bookmarks.search.searchBookmarks': return 'Search bookmarks'; case 'bookmarks.search.clearSearch': return 'Clear search'; case 'bookmarks.search.inputSearchTerm': return 'Input a search term'; @@ -1548,6 +1560,7 @@ extension on _StringsEs { case 'bookmarks.addBookmark.title': return 'Title'; case 'bookmarks.addBookmark.description': return 'Description'; case 'bookmarks.addBookmark.markAsUnread': return 'Marcar como no leído'; + case 'bookmarks.addBookmark.markAsUnreadDescription': return 'Los marcadores no leídos pueden filtrarse y marcarse como leídos después de haberlos consultado.'; case 'bookmarks.addBookmark.notes': return 'Notas'; case 'bookmarks.addBookmark.addNotes': return 'Añadir notas'; case 'bookmarks.addBookmark.tags': return 'Etiquetas'; @@ -1560,6 +1573,8 @@ extension on _StringsEs { case 'bookmarks.addBookmark.errorSavingBookmark': return 'Ocurrió un error al guardar el nuevo marcador.'; case 'bookmarks.addBookmark.leaveEmptyUseWebsiteTitle': return 'Dejar vacío para usar el título del sitio web.'; case 'bookmarks.addBookmark.leaveEmptyUseWebsiteDescription': return 'Dejar vacío para usar la descripción del sitio web.'; + case 'bookmarks.addBookmark.share': return 'Compartir'; + case 'bookmarks.addBookmark.shareDescription': return 'Comparte este marcador con otros usuarios registrados y usuarios anónimos.'; case 'bookmarks.search.searchBookmarks': return 'Buscar marcadores'; case 'bookmarks.search.clearSearch': return 'Limpiar búsqueda'; case 'bookmarks.search.inputSearchTerm': return 'Introduce un término de búsqueda'; @@ -1743,6 +1758,7 @@ extension on _StringsTr { case 'bookmarks.addBookmark.title': return 'Başlık'; case 'bookmarks.addBookmark.description': return 'Açıklama'; case 'bookmarks.addBookmark.markAsUnread': return 'Okunmadı olarak işaretle'; + case 'bookmarks.addBookmark.markAsUnreadDescription': return 'Unread bookmarks can be filtered for, and marked as read after you had a chance to look at them.'; case 'bookmarks.addBookmark.notes': return 'Notlar'; case 'bookmarks.addBookmark.addNotes': return 'Not ekle'; case 'bookmarks.addBookmark.tags': return 'Etiketler'; @@ -1755,6 +1771,8 @@ extension on _StringsTr { case 'bookmarks.addBookmark.errorSavingBookmark': return 'Yeni yer işareti kaydedilirken bir hata oluştu.'; case 'bookmarks.addBookmark.leaveEmptyUseWebsiteTitle': return 'Web sitesinin başlığını kullanmak için boş bırakın.'; case 'bookmarks.addBookmark.leaveEmptyUseWebsiteDescription': return 'Web sitesinin açıklamasını kullanmak için boş bırakın.'; + case 'bookmarks.addBookmark.share': return 'Share'; + case 'bookmarks.addBookmark.shareDescription': return 'Share this bookmark with other registered users and anonymous users.'; case 'bookmarks.search.searchBookmarks': return 'Yer işaretlerini ara'; case 'bookmarks.search.clearSearch': return 'Aramayı temizle'; case 'bookmarks.search.inputSearchTerm': return 'Bir arama terimi girin'; diff --git a/lib/i18n/strings_en.i18n.json b/lib/i18n/strings_en.i18n.json index 0ed0fb8..c70814e 100644 --- a/lib/i18n/strings_en.i18n.json +++ b/lib/i18n/strings_en.i18n.json @@ -80,6 +80,7 @@ "title": "Title", "description": "Description", "markAsUnread": "Mark as unread", + "markAsUnreadDescription": "Unread bookmarks can be filtered for, and marked as read after you had a chance to look at them.", "notes": "Notes", "addNotes": "Add notes", "tags": "Tags", @@ -91,7 +92,9 @@ "bookmarkSavedSuccessfully": "Bookmark saved successfully.", "errorSavingBookmark": "An error occured when saving the new bookmark.", "leaveEmptyUseWebsiteTitle": "Leave empty to use the website's title.", - "leaveEmptyUseWebsiteDescription": "Leave empty to use the website's description." + "leaveEmptyUseWebsiteDescription": "Leave empty to use the website's description.", + "share": "Share", + "shareDescription": "Share this bookmark with other registered users and anonymous users." }, "search": { "searchBookmarks": "Search bookmarks", diff --git a/lib/i18n/strings_es.i18n.json b/lib/i18n/strings_es.i18n.json index cacdb98..278734b 100644 --- a/lib/i18n/strings_es.i18n.json +++ b/lib/i18n/strings_es.i18n.json @@ -80,6 +80,7 @@ "title": "Title", "description": "Description", "markAsUnread": "Marcar como no leído", + "markAsUnreadDescription": "Los marcadores no leídos pueden filtrarse y marcarse como leídos después de haberlos consultado.", "notes": "Notas", "addNotes": "Añadir notas", "tags": "Etiquetas", @@ -91,7 +92,9 @@ "bookmarkSavedSuccessfully": "Marcador guardado correctamente", "errorSavingBookmark": "Ocurrió un error al guardar el nuevo marcador.", "leaveEmptyUseWebsiteTitle": "Dejar vacío para usar el título del sitio web.", - "leaveEmptyUseWebsiteDescription": "Dejar vacío para usar la descripción del sitio web." + "leaveEmptyUseWebsiteDescription": "Dejar vacío para usar la descripción del sitio web.", + "share": "Compartir", + "shareDescription": "Comparte este marcador con otros usuarios registrados y usuarios anónimos." }, "search": { "searchBookmarks": "Buscar marcadores", diff --git a/lib/i18n/strings_tr.i18n.json b/lib/i18n/strings_tr.i18n.json index a56c097..f5cdb18 100644 --- a/lib/i18n/strings_tr.i18n.json +++ b/lib/i18n/strings_tr.i18n.json @@ -80,6 +80,7 @@ "title": "Başlık", "description": "Açıklama", "markAsUnread": "Okunmadı olarak işaretle", + "markAsUnreadDescription": "Unread bookmarks can be filtered for, and marked as read after you had a chance to look at them.", "notes": "Notlar", "addNotes": "Not ekle", "tags": "Etiketler", @@ -91,7 +92,9 @@ "bookmarkSavedSuccessfully": "Yer işareti başarıyla kaydedildi.", "errorSavingBookmark": "Yeni yer işareti kaydedilirken bir hata oluştu.", "leaveEmptyUseWebsiteTitle": "Web sitesinin başlığını kullanmak için boş bırakın.", - "leaveEmptyUseWebsiteDescription": "Web sitesinin açıklamasını kullanmak için boş bırakın." + "leaveEmptyUseWebsiteDescription": "Web sitesinin açıklamasını kullanmak için boş bırakın.", + "share": "Share", + "shareDescription": "Share this bookmark with other registered users and anonymous users." }, "search": { "searchBookmarks": "Yer işaretlerini ara", diff --git a/lib/screens/bookmarks/model/bookmark_form.model.dart b/lib/screens/bookmarks/model/bookmark_form.model.dart index 880d201..eac959e 100644 --- a/lib/screens/bookmarks/model/bookmark_form.model.dart +++ b/lib/screens/bookmarks/model/bookmark_form.model.dart @@ -16,6 +16,7 @@ class BookmarkFormModel { List tags; final TextEditingController notesController; int? editBookmarkId; + bool share; BookmarkFormModel({ required this.urlController, @@ -30,5 +31,6 @@ class BookmarkFormModel { required this.tags, required this.notesController, this.editBookmarkId, + this.share = false, }); } diff --git a/lib/screens/bookmarks/provider/bookmark_form.provider.dart b/lib/screens/bookmarks/provider/bookmark_form.provider.dart index e718bfb..4ea5592 100644 --- a/lib/screens/bookmarks/provider/bookmark_form.provider.dart +++ b/lib/screens/bookmarks/provider/bookmark_form.provider.dart @@ -63,6 +63,7 @@ class BookmarkForm extends _$BookmarkForm { state.tags = bookmark.tagNames ?? []; state.notesController.text = bookmark.notes ?? ''; state.markAsUnread = bookmark.unread ?? false; + state.share = bookmark.shared ?? false; } void initializeProviderUrl(String url) { @@ -112,6 +113,11 @@ class BookmarkForm extends _$BookmarkForm { ref.notifyListeners(); } + void updateShare(bool value) { + state.share = value; + ref.notifyListeners(); + } + void saveBookmark() async { final newBookmark = SetBookmarkData( url: state.urlController.text, @@ -121,7 +127,7 @@ class BookmarkForm extends _$BookmarkForm { : state.checkBookmark?.metadata?.description ?? '', isArchived: false, unread: state.markAsUnread, - shared: false, + shared: state.share, tagNames: state.tags.join(","), notes: state.notesController.text, ); diff --git a/lib/screens/bookmarks/ui/bookmark_form_modal.dart b/lib/screens/bookmarks/ui/bookmark_form_modal.dart index ad099b1..be9314f 100644 --- a/lib/screens/bookmarks/ui/bookmark_form_modal.dart +++ b/lib/screens/bookmarks/ui/bookmark_form_modal.dart @@ -133,7 +133,10 @@ class BookmarkFormModalState extends ConsumerState { handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context), ), SliverList.list( - children: const [_ModalContent()], + children: const [ + _ModalContent(), + SizedBox(height: 16), + ], ), ], ), @@ -412,11 +415,20 @@ class _ModalContent extends ConsumerWidget { SwitchListTile( contentPadding: const EdgeInsets.symmetric(horizontal: 16, vertical: 4), title: Text(t.bookmarks.addBookmark.markAsUnread), + subtitle: Text(t.bookmarks.addBookmark.markAsUnreadDescription), value: provider.markAsUnread, onChanged: provider.checkBookmark != null ? (v) => ref.read(bookmarkFormProvider.notifier).updateMarkAsUnread(v) : null, ), + SwitchListTile( + contentPadding: const EdgeInsets.symmetric(horizontal: 16, vertical: 4), + title: Text(t.bookmarks.addBookmark.share), + subtitle: Text(t.bookmarks.addBookmark.shareDescription), + value: provider.share, + onChanged: + provider.checkBookmark != null ? (v) => ref.read(bookmarkFormProvider.notifier).updateShare(v) : null, + ), const SizedBox(height: 16), ], );