Improved error messages

This commit is contained in:
Juan Gilsanz Polo
2024-02-24 01:57:39 +01:00
parent f11b112f97
commit ac340c108b
8 changed files with 69 additions and 36 deletions

View File

@@ -4,9 +4,9 @@
/// To regenerate, run: `dart run slang`
///
/// Locales: 2
/// Strings: 208 (104 per locale)
/// Strings: 212 (106 per locale)
///
/// Built on 2024-02-24 at 00:45 UTC
/// Built on 2024-02-24 at 00:56 UTC
// coverage:ignore-file
// ignore_for_file: type=lint
@@ -212,6 +212,8 @@ class _StringsBookmarksEn {
// Translations
String get bookmarks => 'Bookmarks';
String get noBookmarksAdded => 'No bookmarks added';
String get cannotLoadBookmarks => 'Cannot load the bookmarks';
late final _StringsBookmarksDatesEn dates = _StringsBookmarksDatesEn._(_root);
late final _StringsBookmarksAddBookmarkEn addBookmark = _StringsBookmarksAddBookmarkEn._(_root);
}
@@ -462,6 +464,8 @@ class _StringsBookmarksEs implements _StringsBookmarksEn {
// Translations
@override String get bookmarks => 'Marcadores';
@override String get noBookmarksAdded => 'No hay marcadores añadidos';
@override String get cannotLoadBookmarks => 'No se pueden cargar los marcadores';
@override late final _StringsBookmarksDatesEs dates = _StringsBookmarksDatesEs._(_root);
@override late final _StringsBookmarksAddBookmarkEs addBookmark = _StringsBookmarksAddBookmarkEs._(_root);
}
@@ -660,6 +664,8 @@ extension on Translations {
case 'onboarding.cannotConnectToServer': return 'Cannot connect to the server.';
case 'onboarding.invalidToken': return 'Invalid token.';
case 'bookmarks.bookmarks': return 'Bookmarks';
case 'bookmarks.noBookmarksAdded': return 'No bookmarks added';
case 'bookmarks.cannotLoadBookmarks': return 'Cannot load the bookmarks';
case 'bookmarks.dates.todayAt': return ({required Object time}) => 'Today, ${time}';
case 'bookmarks.dates.yesterdayAt': return ({required Object time}) => 'Yesterday, ${time}';
case 'bookmarks.addBookmark.addBookmark': return 'Add new bookmark';
@@ -772,6 +778,8 @@ extension on _StringsEs {
case 'onboarding.cannotConnectToServer': return 'No se puede conectar con el servidor.';
case 'onboarding.invalidToken': return 'Token no válido.';
case 'bookmarks.bookmarks': return 'Marcadores';
case 'bookmarks.noBookmarksAdded': return 'No hay marcadores añadidos';
case 'bookmarks.cannotLoadBookmarks': return 'No se pueden cargar los marcadores';
case 'bookmarks.dates.todayAt': return ({required Object time}) => 'Hoy, ${time}';
case 'bookmarks.dates.yesterdayAt': return ({required Object time}) => 'Ayer, ${time}';
case 'bookmarks.addBookmark.addBookmark': return 'Añadir nuevo marcador';

View File

@@ -34,6 +34,8 @@
},
"bookmarks": {
"bookmarks": "Bookmarks",
"noBookmarksAdded": "No bookmarks added",
"cannotLoadBookmarks": "Cannot load the bookmarks",
"dates": {
"todayAt": "Today, $time",
"yesterdayAt": "Yesterday, $time"

View File

@@ -34,6 +34,8 @@
},
"bookmarks": {
"bookmarks": "Marcadores",
"noBookmarksAdded": "No hay marcadores añadidos",
"cannotLoadBookmarks": "No se pueden cargar los marcadores",
"dates": {
"todayAt": "Hoy, $time",
"yesterdayAt": "Ayer, $time"

View File

@@ -6,6 +6,8 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:linkdy/screens/bookmarks/provider/bookmarks.provider.dart';
import 'package:linkdy/screens/bookmarks/ui/bookmark_item.dart';
import 'package:linkdy/screens/bookmarks/ui/add_bookmark_modal.dart';
import 'package:linkdy/widgets/error_screen.dart';
import 'package:linkdy/widgets/no_data_screen.dart';
import 'package:linkdy/i18n/strings.g.dart';
@@ -65,17 +67,17 @@ class BookmarksScreen extends ConsumerWidget {
child: Center(child: CircularProgressIndicator()),
),
if (bookmarks.value != null && bookmarks.value!.successful == false)
const SliverFillRemaining(
child: Center(
child: Icon(Icons.error),
SliverFillRemaining(
child: ErrorScreen(
error: t.bookmarks.cannotLoadBookmarks,
),
),
if (bookmarks.value != null &&
bookmarks.value!.successful == true &&
bookmarks.value!.content!.results!.isEmpty)
const SliverFillRemaining(
child: Center(
child: Text("No bookmarks"),
SliverFillRemaining(
child: NoDataScreen(
message: t.bookmarks.noBookmarksAdded,
),
),
if (bookmarks.value != null &&

View File

@@ -1,11 +1,12 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:linkdy/i18n/strings.g.dart';
import 'package:linkdy/screens/search/ui/error_search_list.dart';
import 'package:linkdy/screens/search/ui/input_search_term.dart';
import 'package:linkdy/screens/bookmarks/ui/bookmark_item.dart';
import 'package:linkdy/screens/search/provider/search.provider.dart';
import 'package:linkdy/screens/search/ui/search_no_data.dart';
import 'package:linkdy/widgets/error_screen.dart';
import 'package:linkdy/widgets/no_data_screen.dart';
import 'package:linkdy/widgets/sliver_tab_body.dart';
class BookmarksSearchList extends ConsumerWidget {
@@ -26,17 +27,19 @@ class BookmarksSearchList extends ConsumerWidget {
return bookmarksSearch.when(
data: (data) {
if (data!.successful == false) {
return const SliverTabBody(
return SliverTabBody(
child: SliverFillRemaining(
child: Center(
child: Icon(Icons.error_rounded),
child: ErrorScreen(
error: t.search.cannotSearchError,
),
),
);
} else if (data.content!.results!.isEmpty) {
return const SliverTabBody(
return SliverTabBody(
child: SliverFillRemaining(
child: SearchNoData(),
child: NoDataScreen(
message: t.search.inputtedSearchTermNoResults,
),
),
);
} else {
@@ -51,10 +54,10 @@ class BookmarksSearchList extends ConsumerWidget {
);
}
},
error: (error, stackTrace) => const SliverTabBody(
error: (error, stackTrace) => SliverTabBody(
child: SliverFillRemaining(
child: Center(
child: ErrorSearchList(),
child: ErrorScreen(
error: t.search.cannotSearchError,
),
),
),

View File

@@ -2,9 +2,9 @@ import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:linkdy/screens/search/provider/search.provider.dart';
import 'package:linkdy/screens/search/ui/error_search_list.dart';
import 'package:linkdy/screens/search/ui/input_search_term.dart';
import 'package:linkdy/screens/search/ui/search_no_data.dart';
import 'package:linkdy/widgets/error_screen.dart';
import 'package:linkdy/widgets/no_data_screen.dart';
import 'package:linkdy/widgets/sliver_tab_body.dart';
import 'package:linkdy/i18n/strings.g.dart';
@@ -28,17 +28,23 @@ class TagsSearchList extends ConsumerWidget {
return bookmarksSearch.when(
data: (data) {
if (data!.successful == false) {
return const SliverTabBody(
return SliverTabBody(
child: SliverFillRemaining(
child: Center(
child: Icon(Icons.error_rounded),
child: SliverTabBody(
child: SliverFillRemaining(
child: ErrorScreen(
error: t.search.cannotSearchError,
),
),
),
),
);
} else if (data.content!.results!.isEmpty) {
return const SliverTabBody(
return SliverTabBody(
child: SliverFillRemaining(
child: SearchNoData(),
child: NoDataScreen(
message: t.search.inputtedSearchTermNoResults,
),
),
);
} else {
@@ -65,10 +71,14 @@ class TagsSearchList extends ConsumerWidget {
);
}
},
error: (error, stackTrace) => const SliverTabBody(
error: (error, stackTrace) => SliverTabBody(
child: SliverFillRemaining(
child: Center(
child: ErrorSearchList(),
child: SliverTabBody(
child: SliverFillRemaining(
child: ErrorScreen(
error: t.search.cannotSearchError,
),
),
),
),
),

View File

@@ -1,9 +1,12 @@
import 'package:flutter/material.dart';
import 'package:linkdy/i18n/strings.g.dart';
class ErrorScreen extends StatelessWidget {
final String error;
class ErrorSearchList extends StatelessWidget {
const ErrorSearchList({Key? key}) : super(key: key);
const ErrorScreen({
Key? key,
required this.error,
}) : super(key: key);
@override
Widget build(BuildContext context) {
@@ -19,7 +22,7 @@ class ErrorSearchList extends StatelessWidget {
),
const SizedBox(height: 30),
Text(
t.search.cannotSearchError,
error,
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 24,

View File

@@ -1,9 +1,12 @@
import 'package:flutter/material.dart';
import 'package:linkdy/i18n/strings.g.dart';
class NoDataScreen extends StatelessWidget {
final String message;
class SearchNoData extends StatelessWidget {
const SearchNoData({Key? key}) : super(key: key);
const NoDataScreen({
Key? key,
required this.message,
}) : super(key: key);
@override
Widget build(BuildContext context) {
@@ -19,7 +22,7 @@ class SearchNoData extends StatelessWidget {
),
const SizedBox(height: 30),
Text(
t.search.inputtedSearchTermNoResults,
message,
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 24,