Simplify localized string access

This commit is contained in:
Ming Ming 2021-07-25 13:00:38 +08:00
parent 2472f839e8
commit bbb9eb14be
30 changed files with 250 additions and 301 deletions

View file

@ -0,0 +1,8 @@
import 'package:flutter/widgets.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
/// Simplify localized string access
class L10n {
static AppLocalizations of(BuildContext context) =>
AppLocalizations.of(context)!;
}

View file

@ -1,7 +1,7 @@
import 'dart:io';
import 'package:flutter/widgets.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:nc_photos/app_localizations.dart';
import 'package:nc_photos/exception.dart';
/// Convert an exception to a user-facing string
@ -10,16 +10,16 @@ import 'package:nc_photos/exception.dart';
String toUserString(dynamic exception, BuildContext context) {
if (exception is ApiException) {
if (exception.response.statusCode == 401) {
return AppLocalizations.of(context)!.errorUnauthenticated;
return L10n.of(context).errorUnauthenticated;
} else if (exception.response.statusCode == 423) {
return AppLocalizations.of(context)!.errorLocked;
return L10n.of(context).errorLocked;
} else if (exception.response.statusCode == 500) {
return AppLocalizations.of(context)!.errorServerError;
return L10n.of(context).errorServerError;
}
} else if (exception is SocketException) {
return AppLocalizations.of(context)!.errorDisconnected;
return L10n.of(context).errorDisconnected;
} else if (exception is InvalidBaseUrlException) {
return AppLocalizations.of(context)!.errorInvalidBaseUrl;
return L10n.of(context).errorInvalidBaseUrl;
}
return exception.toString();
}

View file

@ -1,8 +1,8 @@
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:logging/logging.dart';
import 'package:nc_photos/account.dart';
import 'package:nc_photos/app_localizations.dart';
import 'package:nc_photos/entity/file.dart';
import 'package:nc_photos/exception.dart';
import 'package:nc_photos/exception_util.dart' as exception_util;
@ -23,7 +23,7 @@ class ShareHandler {
showDialog(
context: context,
builder: (context) => ProcessingDialog(
text: AppLocalizations.of(context)!.shareDownloadingDialogContent),
text: L10n.of(context).shareDownloadingDialogContent),
);
final results = <Tuple2<File, dynamic>>[];
for (final f in files) {
@ -33,8 +33,8 @@ class ShareHandler {
} on PermissionException catch (_) {
_log.warning("[shareFiles] Permission not granted");
SnackBarManager().showSnackBar(SnackBar(
content: Text(AppLocalizations.of(context)!
.downloadFailureNoPermissionNotification),
content:
Text(L10n.of(context).downloadFailureNoPermissionNotification),
duration: k.snackBarDurationNormal,
));
// dismiss the dialog

View file

@ -1,8 +1,8 @@
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:logging/logging.dart';
import 'package:nc_photos/account.dart';
import 'package:nc_photos/app_localizations.dart';
import 'package:nc_photos/exception_util.dart' as exception_util;
import 'package:nc_photos/k.dart' as k;
import 'package:nc_photos/pref.dart';
@ -48,7 +48,7 @@ class _AccountPickerDialogState extends State<AccountPickerDialog> {
Icons.close,
color: AppTheme.getSecondaryTextColor(context),
),
tooltip: AppLocalizations.of(context)!.deleteTooltip,
tooltip: L10n.of(context).deleteTooltip,
onPressed: () => _onRemoveItemPressed(a),
),
),
@ -63,7 +63,7 @@ class _AccountPickerDialogState extends State<AccountPickerDialog> {
..pushNamed(SignIn.routeName);
},
child: Tooltip(
message: AppLocalizations.of(context)!.addServerTooltip,
message: L10n.of(context).addServerTooltip,
child: Center(
child: Icon(
Icons.add,
@ -89,7 +89,7 @@ class _AccountPickerDialogState extends State<AccountPickerDialog> {
Icons.edit,
color: AppTheme.getSecondaryTextColor(context),
),
tooltip: AppLocalizations.of(context)!.editTooltip,
tooltip: L10n.of(context).editTooltip,
onPressed: () => _onEditPressed(),
),
),
@ -112,8 +112,8 @@ class _AccountPickerDialogState extends State<AccountPickerDialog> {
_accounts = Pref.inst().getAccounts()!;
});
SnackBarManager().showSnackBar(SnackBar(
content: Text(AppLocalizations.of(context)!
.removeServerSuccessNotification(account.url)),
content:
Text(L10n.of(context).removeServerSuccessNotification(account.url)),
duration: k.snackBarDurationNormal,
));
} catch (e) {
@ -143,8 +143,8 @@ class _AccountPickerDialogState extends State<AccountPickerDialog> {
// the app passwords are unique to each entry, but just in case
Navigator.of(context).pop();
SnackBarManager().showSnackBar(SnackBar(
content: Text(AppLocalizations.of(context)!
.editAccountConflictFailureNotification),
content:
Text(L10n.of(context).editAccountConflictFailureNotification),
duration: k.snackBarDurationNormal,
));
return;

View file

@ -1,10 +1,10 @@
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:logging/logging.dart';
import 'package:nc_photos/account.dart';
import 'package:nc_photos/api/api_util.dart' as api_util;
import 'package:nc_photos/app_localizations.dart';
import 'package:nc_photos/entity/file.dart';
import 'package:nc_photos/iterable_extension.dart';
import 'package:nc_photos/k.dart' as k;
@ -86,7 +86,7 @@ class _AlbumDirPickerState extends State<AlbumDirPicker>
child: Column(
children: [
Text(
AppLocalizations.of(context)!.albumDirPickerHeaderText,
L10n.of(context).albumDirPickerHeaderText,
style: Theme.of(context).textTheme.headline5,
textAlign: TextAlign.center,
),
@ -94,7 +94,7 @@ class _AlbumDirPickerState extends State<AlbumDirPicker>
Align(
alignment: AlignmentDirectional.topStart,
child: Text(
AppLocalizations.of(context)!.albumDirPickerSubHeaderText,
L10n.of(context).albumDirPickerSubHeaderText,
),
),
],
@ -117,7 +117,7 @@ class _AlbumDirPickerState extends State<AlbumDirPicker>
),
ElevatedButton(
onPressed: () => _onConfirmPressed(context),
child: Text(AppLocalizations.of(context)!.confirmButtonLabel),
child: Text(L10n.of(context).confirmButtonLabel),
),
],
),
@ -131,8 +131,7 @@ class _AlbumDirPickerState extends State<AlbumDirPicker>
final picked = getPickedDirs();
if (picked.isEmpty) {
SnackBarManager().showSnackBar(SnackBar(
content: Text(
AppLocalizations.of(context)!.albumDirPickerListEmptyNotification),
content: Text(L10n.of(context).albumDirPickerListEmptyNotification),
duration: k.snackBarDurationNormal,
));
} else {

View file

@ -1,10 +1,10 @@
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:logging/logging.dart';
import 'package:nc_photos/account.dart';
import 'package:nc_photos/api/api_util.dart' as api_util;
import 'package:nc_photos/app_localizations.dart';
import 'package:nc_photos/bloc/list_importable_album.dart';
import 'package:nc_photos/entity/album.dart';
import 'package:nc_photos/entity/album/cover_provider.dart';
@ -102,7 +102,7 @@ class _AlbumImporterState extends State<AlbumImporter> {
child: Column(
children: [
Text(
AppLocalizations.of(context)!.albumImporterHeaderText,
L10n.of(context).albumImporterHeaderText,
style: Theme.of(context).textTheme.headline5,
textAlign: TextAlign.center,
),
@ -110,7 +110,7 @@ class _AlbumImporterState extends State<AlbumImporter> {
Align(
alignment: AlignmentDirectional.topStart,
child: Text(
AppLocalizations.of(context)!.albumImporterSubHeaderText,
L10n.of(context).albumImporterSubHeaderText,
),
),
],
@ -145,7 +145,7 @@ class _AlbumImporterState extends State<AlbumImporter> {
),
ElevatedButton(
onPressed: () => _onImportPressed(context),
child: Text(AppLocalizations.of(context)!.importButtonLabel),
child: Text(L10n.of(context).importButtonLabel),
),
],
),
@ -217,8 +217,8 @@ class _AlbumImporterState extends State<AlbumImporter> {
showDialog(
barrierDismissible: false,
context: context,
builder: (context) => ProcessingDialog(
text: AppLocalizations.of(context)!.albumImporterProgressText),
builder: (context) =>
ProcessingDialog(text: L10n.of(context).albumImporterProgressText),
);
try {
await _createAllAlbums(context);

View file

@ -1,10 +1,10 @@
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:kiwi/kiwi.dart';
import 'package:logging/logging.dart';
import 'package:nc_photos/account.dart';
import 'package:nc_photos/app_localizations.dart';
import 'package:nc_photos/bloc/list_album.dart';
import 'package:nc_photos/entity/album.dart';
import 'package:nc_photos/entity/album/provider.dart';
@ -81,7 +81,7 @@ class _AlbumPickerDialogState extends State<AlbumPickerDialog> {
SimpleDialogOption(
onPressed: () => _onNewAlbumPressed(context),
child: Tooltip(
message: AppLocalizations.of(context)!.createAlbumTooltip,
message: L10n.of(context).createAlbumTooltip,
child: Center(
child: Icon(
Icons.add,

View file

@ -1,8 +1,8 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
import 'package:nc_photos/account.dart';
import 'package:nc_photos/app_localizations.dart';
import 'package:nc_photos/bloc/album_search.dart';
import 'package:nc_photos/bloc/album_search_suggestion.dart';
import 'package:nc_photos/entity/album.dart';
@ -17,8 +17,7 @@ import 'package:nc_photos/widget/builder/album_grid_item_builder.dart';
class AlbumSearchDelegate extends SearchDelegate {
AlbumSearchDelegate(BuildContext context, this.account)
: super(
searchFieldLabel:
AppLocalizations.of(context)!.albumSearchTextFieldHint,
searchFieldLabel: L10n.of(context).albumSearchTextFieldHint,
) {
final fileRepo = FileRepo(FileCachedDataSource());
final albumRepo = AlbumRepo(AlbumCachedDataSource());
@ -38,7 +37,7 @@ class AlbumSearchDelegate extends SearchDelegate {
return [
IconButton(
icon: Icon(Icons.clear),
tooltip: AppLocalizations.of(context)!.clearTooltip,
tooltip: L10n.of(context).clearTooltip,
onPressed: () {
query = "";
},
@ -88,7 +87,7 @@ class AlbumSearchDelegate extends SearchDelegate {
),
const SizedBox(height: 8),
Text(
AppLocalizations.of(context)!.listNoResultsText,
L10n.of(context).listNoResultsText,
style: const TextStyle(fontSize: 24),
),
],

View file

@ -1,11 +1,11 @@
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
import 'package:logging/logging.dart';
import 'package:nc_photos/account.dart';
import 'package:nc_photos/api/api_util.dart' as api_util;
import 'package:nc_photos/app_localizations.dart';
import 'package:nc_photos/entity/album.dart';
import 'package:nc_photos/entity/album/item.dart';
import 'package:nc_photos/entity/album/provider.dart';
@ -107,8 +107,7 @@ class _AlbumViewerState extends State<AlbumViewer>
if (!SessionStorage().hasShowDragRearrangeNotification) {
SnackBarManager().showSnackBar(SnackBar(
content: Text(
AppLocalizations.of(context)!.albumEditDragRearrangeNotification),
content: Text(L10n.of(context).albumEditDragRearrangeNotification),
duration: k.snackBarDurationNormal,
));
SessionStorage().hasShowDragRearrangeNotification = true;
@ -230,14 +229,14 @@ class _AlbumViewerState extends State<AlbumViewer>
if (platform_k.isAndroid)
IconButton(
icon: const Icon(Icons.share),
tooltip: AppLocalizations.of(context)!.shareSelectedTooltip,
tooltip: L10n.of(context).shareSelectedTooltip,
onPressed: () {
_onSelectionAppBarSharePressed(context);
},
),
IconButton(
icon: const Icon(Icons.remove),
tooltip: AppLocalizations.of(context)!.removeSelectedFromAlbumTooltip,
tooltip: L10n.of(context).removeSelectedFromAlbumTooltip,
onPressed: () {
_onSelectionAppBarRemovePressed();
},
@ -249,12 +248,12 @@ class _AlbumViewerState extends State<AlbumViewer>
return buildEditAppBar(context, widget.account, widget.album, actions: [
IconButton(
icon: Icon(Icons.text_fields),
tooltip: AppLocalizations.of(context)!.albumAddTextTooltip,
tooltip: L10n.of(context).albumAddTextTooltip,
onPressed: _onEditAppBarAddTextPressed,
),
IconButton(
icon: Icon(Icons.sort_by_alpha),
tooltip: AppLocalizations.of(context)!.sortTooltip,
tooltip: L10n.of(context).sortTooltip,
onPressed: _onEditAppBarSortPressed,
),
]);
@ -282,8 +281,7 @@ class _AlbumViewerState extends State<AlbumViewer>
.toList();
if (selected.isEmpty) {
SnackBarManager().showSnackBar(SnackBar(
content:
Text(AppLocalizations.of(context)!.shareSelectedEmptyNotification),
content: Text(L10n.of(context).shareSelectedEmptyNotification),
duration: k.snackBarDurationNormal,
));
return;
@ -312,7 +310,7 @@ class _AlbumViewerState extends State<AlbumViewer>
);
UpdateAlbum(albumRepo)(widget.account, newAlbum).then((_) {
SnackBarManager().showSnackBar(SnackBar(
content: Text(AppLocalizations.of(context)!
content: Text(L10n.of(context)
.removeSelectedFromAlbumSuccessNotification(
selectedIndexes.length)),
duration: k.snackBarDurationNormal,
@ -327,7 +325,7 @@ class _AlbumViewerState extends State<AlbumViewer>
stacktrace);
SnackBarManager().showSnackBar(SnackBar(
content: Text(
"${AppLocalizations.of(context)!.removeSelectedFromAlbumFailureNotification}: "
"${L10n.of(context).removeSelectedFromAlbumFailureNotification}: "
"${exception_util.toUserString(e, context)}"),
duration: k.snackBarDurationNormal,
));
@ -342,10 +340,10 @@ class _AlbumViewerState extends State<AlbumViewer>
showDialog(
context: context,
builder: (context) => FancyOptionPicker(
title: AppLocalizations.of(context)!.sortOptionDialogTitle,
title: L10n.of(context).sortOptionDialogTitle,
items: [
FancyOptionPickerItem(
label: AppLocalizations.of(context)!.sortOptionTimeAscendingLabel,
label: L10n.of(context).sortOptionTimeAscendingLabel,
isSelected: sortProvider is AlbumTimeSortProvider &&
sortProvider.isAscending,
onSelect: () {
@ -354,7 +352,7 @@ class _AlbumViewerState extends State<AlbumViewer>
},
),
FancyOptionPickerItem(
label: AppLocalizations.of(context)!.sortOptionTimeDescendingLabel,
label: L10n.of(context).sortOptionTimeDescendingLabel,
isSelected: sortProvider is AlbumTimeSortProvider &&
!sortProvider.isAscending,
onSelect: () {
@ -878,7 +876,7 @@ class _EditLabelListItem extends _LabelListItem {
end: 0,
child: IconButton(
icon: Icon(Icons.edit),
tooltip: AppLocalizations.of(context)!.editTooltip,
tooltip: L10n.of(context).editTooltip,
onPressed: onEditPressed,
),
),

View file

@ -1,11 +1,11 @@
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:logging/logging.dart';
import 'package:nc_photos/account.dart';
import 'package:nc_photos/api/api.dart';
import 'package:nc_photos/api/api_util.dart' as api_util;
import 'package:nc_photos/app_localizations.dart';
import 'package:nc_photos/entity/album.dart';
import 'package:nc_photos/entity/file.dart';
import 'package:nc_photos/pref.dart';
@ -55,7 +55,7 @@ mixin AlbumViewerMixin<T extends StatefulWidget>
actions: [
PopupMenuButton(
icon: const Icon(Icons.photo_size_select_large),
tooltip: AppLocalizations.of(context)!.zoomTooltip,
tooltip: L10n.of(context).zoomTooltip,
itemBuilder: (context) => [
PopupMenuZoom(
initialValue: _thumbZoomLevel,
@ -76,7 +76,7 @@ mixin AlbumViewerMixin<T extends StatefulWidget>
itemBuilder: (context) => [
PopupMenuItem(
value: -1,
child: Text(AppLocalizations.of(context)!.editAlbumMenuLabel),
child: Text(L10n.of(context).editAlbumMenuLabel),
),
...(menuItemBuilder?.call(context) ?? []),
],
@ -117,8 +117,8 @@ mixin AlbumViewerMixin<T extends StatefulWidget>
});
},
),
title: Text(AppLocalizations.of(context)!
.selectionAppBarTitle(selectedListItems.length)),
title: Text(
L10n.of(context).selectionAppBarTitle(selectedListItems.length)),
actions: actions,
),
);
@ -138,13 +138,13 @@ mixin AlbumViewerMixin<T extends StatefulWidget>
background: _getAppBarCover(context, account),
title: TextFormField(
decoration: InputDecoration(
hintText: AppLocalizations.of(context)!.nameInputHint,
hintText: L10n.of(context).nameInputHint,
),
validator: (value) {
if (value?.isNotEmpty == true) {
return null;
} else {
return AppLocalizations.of(context)!.albumNameInputInvalidEmpty;
return L10n.of(context).albumNameInputInvalidEmpty;
}
},
onSaved: (value) {
@ -164,7 +164,7 @@ mixin AlbumViewerMixin<T extends StatefulWidget>
leading: IconButton(
icon: const Icon(Icons.check),
color: Theme.of(context).colorScheme.primary,
tooltip: AppLocalizations.of(context)!.doneButtonTooltip,
tooltip: L10n.of(context).doneButtonTooltip,
onPressed: () {
if (validateEditMode()) {
setState(() {

View file

@ -2,11 +2,11 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
import 'package:logging/logging.dart';
import 'package:nc_photos/account.dart';
import 'package:nc_photos/api/api_util.dart' as api_util;
import 'package:nc_photos/app_localizations.dart';
import 'package:nc_photos/bloc/scan_dir.dart';
import 'package:nc_photos/entity/file.dart';
import 'package:nc_photos/entity/file/data_source.dart';
@ -148,12 +148,12 @@ class _ArchiveViewerState extends State<ArchiveViewer>
});
},
),
title: Text(AppLocalizations.of(context)!
.selectionAppBarTitle(selectedListItems.length)),
title: Text(
L10n.of(context).selectionAppBarTitle(selectedListItems.length)),
actions: [
IconButton(
icon: const Icon(Icons.unarchive),
tooltip: AppLocalizations.of(context)!.unarchiveSelectedTooltip,
tooltip: L10n.of(context).unarchiveSelectedTooltip,
onPressed: () {
_onSelectionAppBarUnarchivePressed();
},
@ -165,12 +165,12 @@ class _ArchiveViewerState extends State<ArchiveViewer>
Widget _buildNormalAppBar(BuildContext context) {
return SliverAppBar(
title: Text(AppLocalizations.of(context)!.albumArchiveLabel),
title: Text(L10n.of(context).albumArchiveLabel),
floating: true,
actions: [
PopupMenuButton(
icon: const Icon(Icons.photo_size_select_large),
tooltip: AppLocalizations.of(context)!.zoomTooltip,
tooltip: L10n.of(context).zoomTooltip,
itemBuilder: (context) => [
PopupMenuZoom(
initialValue: _thumbZoomLevel,
@ -212,7 +212,7 @@ class _ArchiveViewerState extends State<ArchiveViewer>
Future<void> _onSelectionAppBarUnarchivePressed() async {
SnackBarManager().showSnackBar(SnackBar(
content: Text(AppLocalizations.of(context)!
content: Text(L10n.of(context)
.unarchiveSelectedProcessingNotification(selectedListItems.length)),
duration: k.snackBarDurationShort,
));
@ -240,13 +240,12 @@ class _ArchiveViewerState extends State<ArchiveViewer>
}
if (failures.isEmpty) {
SnackBarManager().showSnackBar(SnackBar(
content: Text(
AppLocalizations.of(context)!.unarchiveSelectedSuccessNotification),
content: Text(L10n.of(context).unarchiveSelectedSuccessNotification),
duration: k.snackBarDurationNormal,
));
} else {
SnackBarManager().showSnackBar(SnackBar(
content: Text(AppLocalizations.of(context)!
content: Text(L10n.of(context)
.unarchiveSelectedFailureNotification(failures.length)),
duration: k.snackBarDurationNormal,
));

View file

@ -1,10 +1,10 @@
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:nc_photos/account.dart';
import 'package:nc_photos/api/api.dart';
import 'package:nc_photos/api/api_util.dart' as api_util;
import 'package:nc_photos/app_localizations.dart';
import 'package:nc_photos/entity/album.dart';
import 'package:nc_photos/entity/album/provider.dart';
import 'package:nc_photos/theme.dart';
@ -24,7 +24,7 @@ class AlbumGridItemBuilder {
var subtitle = "";
String? subtitle2;
if (album.provider is AlbumStaticProvider) {
subtitle = AppLocalizations.of(context)!
subtitle = L10n.of(context)
.albumSize(AlbumStaticProvider.of(album).items.length);
} else if (album.provider is AlbumDirProvider) {
final provider = album.provider as AlbumDirProvider;

View file

@ -4,9 +4,9 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:logging/logging.dart';
import 'package:nc_photos/account.dart';
import 'package:nc_photos/app_localizations.dart';
import 'package:nc_photos/bloc/app_password_exchange.dart';
import 'package:nc_photos/exception.dart';
import 'package:nc_photos/exception_util.dart' as exception_util;
@ -86,8 +86,7 @@ class _ConnectState extends State<Connect> {
color: Theme.of(context).colorScheme.primary,
),
Text(
AppLocalizations.of(context)!
.connectingToServer(widget.account.url),
L10n.of(context).connectingToServer(widget.account.url),
textAlign: TextAlign.center,
style: Theme.of(context).textTheme.headline6,
)
@ -110,7 +109,7 @@ class _ConnectState extends State<Connect> {
} else if (state.exception is ApiException &&
(state.exception as ApiException).response.statusCode == 401) {
SnackBarManager().showSnackBar(SnackBar(
content: Text(AppLocalizations.of(context)!.errorWrongPassword),
content: Text(L10n.of(context).errorWrongPassword),
duration: k.snackBarDurationNormal,
));
Navigator.of(context).pop(null);
@ -128,9 +127,8 @@ class _ConnectState extends State<Connect> {
showDialog(
context: context,
builder: (context) => AlertDialog(
title: Text(AppLocalizations.of(context)!.serverCertErrorDialogTitle),
content:
Text(AppLocalizations.of(context)!.serverCertErrorDialogContent),
title: Text(L10n.of(context).serverCertErrorDialogTitle),
content: Text(L10n.of(context).serverCertErrorDialogContent),
actions: <Widget>[
TextButton(
onPressed: () {
@ -142,7 +140,7 @@ class _ConnectState extends State<Connect> {
onPressed: () {
Navigator.of(context).pop(true);
},
child: Text(AppLocalizations.of(context)!.advancedButtonLabel),
child: Text(L10n.of(context).advancedButtonLabel),
),
],
),
@ -154,11 +152,10 @@ class _ConnectState extends State<Connect> {
showDialog(
context: context,
builder: (context) => AlertDialog(
title: Text(AppLocalizations.of(context)!.whitelistCertDialogTitle),
content: Text(AppLocalizations.of(context)!
.whitelistCertDialogContent(
SelfSignedCertManager().getLastBadCertHost(),
SelfSignedCertManager().getLastBadCertFingerprint())),
title: Text(L10n.of(context).whitelistCertDialogTitle),
content: Text(L10n.of(context).whitelistCertDialogContent(
SelfSignedCertManager().getLastBadCertHost(),
SelfSignedCertManager().getLastBadCertFingerprint())),
actions: <Widget>[
TextButton(
onPressed: () {
@ -170,8 +167,7 @@ class _ConnectState extends State<Connect> {
onPressed: () {
Navigator.of(context).pop(true);
},
child:
Text(AppLocalizations.of(context)!.whitelistCertButtonLabel),
child: Text(L10n.of(context).whitelistCertButtonLabel),
),
],
),

View file

@ -4,9 +4,9 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:logging/logging.dart';
import 'package:nc_photos/account.dart';
import 'package:nc_photos/app_localizations.dart';
import 'package:nc_photos/bloc/ls_dir.dart';
import 'package:nc_photos/entity/file.dart';
import 'package:nc_photos/exception_util.dart' as exception_util;
@ -99,8 +99,7 @@ mixin DirPickerMixin<T extends StatefulWidget> on State<T> {
return ListTile(
dense: true,
leading: const SizedBox(width: 24),
title: Text(
AppLocalizations.of(context)!.rootPickerNavigateUpItemText),
title: Text(L10n.of(context).rootPickerNavigateUpItemText),
onTap: () {
try {
_navigateInto(File(path: path.dirname(_currentPath)));
@ -283,8 +282,8 @@ mixin DirPickerMixin<T extends StatefulWidget> on State<T> {
_picks.removeWhere((element) => identical(element, parent));
} catch (_) {
SnackBarManager().showSnackBar(SnackBar(
content: Text(AppLocalizations.of(context)!
.rootPickerUnpickFailureNotification)));
content:
Text(L10n.of(context).rootPickerUnpickFailureNotification)));
}
}
});

View file

@ -1,11 +1,11 @@
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
import 'package:logging/logging.dart';
import 'package:nc_photos/account.dart';
import 'package:nc_photos/api/api_util.dart' as api_util;
import 'package:nc_photos/app_localizations.dart';
import 'package:nc_photos/entity/album.dart';
import 'package:nc_photos/entity/album/cover_provider.dart';
import 'package:nc_photos/entity/album/item.dart';
@ -250,7 +250,7 @@ class _DynamicAlbumViewerState extends State<DynamicAlbumViewer>
menuItemBuilder: (context) => [
PopupMenuItem(
value: _menuValueConvertBasic,
child: Text(AppLocalizations.of(context)!.convertBasicAlbumMenuLabel),
child: Text(L10n.of(context).convertBasicAlbumMenuLabel),
),
],
onSelectedMenuItem: (option) {
@ -272,7 +272,7 @@ class _DynamicAlbumViewerState extends State<DynamicAlbumViewer>
if (platform_k.isAndroid)
IconButton(
icon: const Icon(Icons.share),
tooltip: AppLocalizations.of(context)!.shareSelectedTooltip,
tooltip: L10n.of(context).shareSelectedTooltip,
onPressed: () {
_onSelectionAppBarSharePressed(context);
},
@ -282,7 +282,7 @@ class _DynamicAlbumViewerState extends State<DynamicAlbumViewer>
itemBuilder: (context) => [
PopupMenuItem(
value: _SelectionAppBarOption.delete,
child: Text(AppLocalizations.of(context)!.deleteSelectedTooltip),
child: Text(L10n.of(context).deleteSelectedTooltip),
),
],
onSelected: (option) {
@ -298,7 +298,7 @@ class _DynamicAlbumViewerState extends State<DynamicAlbumViewer>
return buildEditAppBar(context, widget.account, widget.album, actions: [
IconButton(
icon: Icon(Icons.sort_by_alpha),
tooltip: AppLocalizations.of(context)!.sortTooltip,
tooltip: L10n.of(context).sortTooltip,
onPressed: _onEditAppBarSortPressed,
),
]);
@ -322,10 +322,9 @@ class _DynamicAlbumViewerState extends State<DynamicAlbumViewer>
showDialog(
context: context,
builder: (context) => AlertDialog(
title: Text(AppLocalizations.of(context)!
.convertBasicAlbumConfirmationDialogTitle),
content: Text(AppLocalizations.of(context)!
.convertBasicAlbumConfirmationDialogContent),
title: Text(L10n.of(context).convertBasicAlbumConfirmationDialogTitle),
content:
Text(L10n.of(context).convertBasicAlbumConfirmationDialogContent),
actions: <Widget>[
TextButton(
onPressed: () {
@ -356,8 +355,7 @@ class _DynamicAlbumViewerState extends State<DynamicAlbumViewer>
),
).then((value) {
SnackBarManager().showSnackBar(SnackBar(
content: Text(AppLocalizations.of(context)!
.convertBasicAlbumSuccessNotification),
content: Text(L10n.of(context).convertBasicAlbumSuccessNotification),
duration: k.snackBarDurationNormal,
));
if (mounted) {
@ -391,7 +389,7 @@ class _DynamicAlbumViewerState extends State<DynamicAlbumViewer>
void _onSelectionAppBarDeletePressed() async {
SnackBarManager().showSnackBar(SnackBar(
content: Text(AppLocalizations.of(context)!
content: Text(L10n.of(context)
.deleteSelectedProcessingNotification(selectedListItems.length)),
duration: k.snackBarDurationShort,
));
@ -421,13 +419,12 @@ class _DynamicAlbumViewerState extends State<DynamicAlbumViewer>
if (failures.isEmpty) {
SnackBarManager().showSnackBar(SnackBar(
content: Text(
AppLocalizations.of(context)!.deleteSelectedSuccessNotification),
content: Text(L10n.of(context).deleteSelectedSuccessNotification),
duration: k.snackBarDurationNormal,
));
} else {
SnackBarManager().showSnackBar(SnackBar(
content: Text(AppLocalizations.of(context)!
content: Text(L10n.of(context)
.deleteSelectedFailureNotification(failures.length)),
duration: k.snackBarDurationNormal,
));
@ -448,10 +445,10 @@ class _DynamicAlbumViewerState extends State<DynamicAlbumViewer>
showDialog(
context: context,
builder: (context) => FancyOptionPicker(
title: AppLocalizations.of(context)!.sortOptionDialogTitle,
title: L10n.of(context).sortOptionDialogTitle,
items: [
FancyOptionPickerItem(
label: AppLocalizations.of(context)!.sortOptionTimeAscendingLabel,
label: L10n.of(context).sortOptionTimeAscendingLabel,
isSelected: sortProvider is AlbumTimeSortProvider &&
sortProvider.isAscending,
onSelect: () {
@ -460,7 +457,7 @@ class _DynamicAlbumViewerState extends State<DynamicAlbumViewer>
},
),
FancyOptionPickerItem(
label: AppLocalizations.of(context)!.sortOptionTimeDescendingLabel,
label: L10n.of(context).sortOptionTimeDescendingLabel,
isSelected: sortProvider is AlbumTimeSortProvider &&
!sortProvider.isAscending,
onSelect: () {

View file

@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:nc_photos/account.dart';
import 'package:nc_photos/app_localizations.dart';
import 'package:nc_photos/k.dart' as k;
import 'package:nc_photos/theme.dart';
import 'package:nc_photos/widget/home_albums.dart';
@ -52,11 +52,11 @@ class _HomeState extends State<Home> {
items: <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: const Icon(Icons.photo_outlined),
label: AppLocalizations.of(context)!.photosTabLabel,
label: L10n.of(context).photosTabLabel,
),
BottomNavigationBarItem(
icon: const Icon(Icons.photo_album_outlined),
label: AppLocalizations.of(context)!.albumsTabLabel,
label: L10n.of(context).albumsTabLabel,
),
],
currentIndex: _nextPage,

View file

@ -2,11 +2,11 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
import 'package:kiwi/kiwi.dart';
import 'package:logging/logging.dart';
import 'package:nc_photos/account.dart';
import 'package:nc_photos/app_localizations.dart';
import 'package:nc_photos/bloc/list_album.dart';
import 'package:nc_photos/entity/album.dart';
import 'package:nc_photos/entity/album/provider.dart';
@ -149,12 +149,12 @@ class _HomeAlbumsState extends State<HomeAlbums>
});
},
),
title: Text(AppLocalizations.of(context)!
.selectionAppBarTitle(_selectedItems.length)),
title:
Text(L10n.of(context).selectionAppBarTitle(_selectedItems.length)),
actions: [
IconButton(
icon: const Icon(Icons.delete),
tooltip: AppLocalizations.of(context)!.deleteSelectedTooltip,
tooltip: L10n.of(context).deleteSelectedTooltip,
onPressed: () {
_onSelectionAppBarDeletePressed();
},
@ -171,13 +171,13 @@ class _HomeAlbumsState extends State<HomeAlbums>
IconButton(
onPressed: () => _onSearchPressed(context),
icon: const Icon(Icons.search),
tooltip: AppLocalizations.of(context)!.searchTooltip,
tooltip: L10n.of(context).searchTooltip,
),
],
menuActions: [
PopupMenuItem(
value: _menuValueImport,
child: Text(AppLocalizations.of(context)!.importFoldersTooltip),
child: Text(L10n.of(context).importFoldersTooltip),
),
],
onSelectedMenuActions: (option) {
@ -225,7 +225,7 @@ class _HomeAlbumsState extends State<HomeAlbums>
),
),
),
title: AppLocalizations.of(context)!.albumArchiveLabel,
title: L10n.of(context).albumArchiveLabel,
onTap: () {
Navigator.of(context).pushNamed(ArchiveViewer.routeName,
arguments: ArchiveViewerArguments(widget.account));
@ -247,7 +247,7 @@ class _HomeAlbumsState extends State<HomeAlbums>
),
),
),
title: AppLocalizations.of(context)!.createAlbumTooltip,
title: L10n.of(context).createAlbumTooltip,
onTap: () => _onNewAlbumItemTap(context),
);
}
@ -323,8 +323,7 @@ class _HomeAlbumsState extends State<HomeAlbums>
_log.severe(
"[_onNewAlbumItemTap] Failed while showDialog", e, stacktrace);
SnackBarManager().showSnackBar(SnackBar(
content:
Text(AppLocalizations.of(context)!.createAlbumFailureNotification),
content: Text(L10n.of(context).createAlbumFailureNotification),
duration: k.snackBarDurationNormal,
));
});
@ -337,7 +336,7 @@ class _HomeAlbumsState extends State<HomeAlbums>
Future<void> _onSelectionAppBarDeletePressed() async {
SnackBarManager().showSnackBar(SnackBar(
content: Text(AppLocalizations.of(context)!
content: Text(L10n.of(context)
.deleteSelectedProcessingNotification(_selectedItems.length)),
duration: k.snackBarDurationShort,
));
@ -363,13 +362,12 @@ class _HomeAlbumsState extends State<HomeAlbums>
}
if (failures.isEmpty) {
SnackBarManager().showSnackBar(SnackBar(
content: Text(
AppLocalizations.of(context)!.deleteSelectedSuccessNotification),
content: Text(L10n.of(context).deleteSelectedSuccessNotification),
duration: k.snackBarDurationNormal,
));
} else {
SnackBarManager().showSnackBar(SnackBar(
content: Text(AppLocalizations.of(context)!
content: Text(L10n.of(context)
.deleteSelectedFailureNotification(failures.length)),
duration: k.snackBarDurationNormal,
));

View file

@ -1,9 +1,9 @@
import 'package:event_bus/event_bus.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:kiwi/kiwi.dart';
import 'package:nc_photos/account.dart';
import 'package:nc_photos/app_localizations.dart';
import 'package:nc_photos/event/event.dart';
import 'package:nc_photos/pref.dart';
import 'package:nc_photos/theme.dart';
@ -97,8 +97,7 @@ class HomeSliverAppBar extends StatelessWidget {
[
PopupMenuItem(
value: _menuValueAbout,
child:
Text(AppLocalizations.of(context)!.settingsMenuLabel),
child: Text(L10n.of(context).settingsMenuLabel),
),
],
onSelected: (option) {

View file

@ -3,13 +3,13 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
import 'package:intl/intl.dart';
import 'package:kiwi/kiwi.dart';
import 'package:logging/logging.dart';
import 'package:nc_photos/account.dart';
import 'package:nc_photos/api/api_util.dart' as api_util;
import 'package:nc_photos/app_localizations.dart';
import 'package:nc_photos/bloc/scan_dir.dart';
import 'package:nc_photos/entity/album.dart';
import 'package:nc_photos/entity/album/item.dart';
@ -162,20 +162,20 @@ class _HomePhotosState extends State<HomePhotos>
});
},
),
title: Text(AppLocalizations.of(context)!
.selectionAppBarTitle(selectedListItems.length)),
title: Text(
L10n.of(context).selectionAppBarTitle(selectedListItems.length)),
actions: [
if (platform_k.isAndroid)
IconButton(
icon: const Icon(Icons.share),
tooltip: AppLocalizations.of(context)!.shareSelectedTooltip,
tooltip: L10n.of(context).shareSelectedTooltip,
onPressed: () {
_onSelectionAppBarSharePressed(context);
},
),
IconButton(
icon: const Icon(Icons.playlist_add),
tooltip: AppLocalizations.of(context)!.addSelectedToAlbumTooltip,
tooltip: L10n.of(context).addSelectedToAlbumTooltip,
onPressed: () {
_onSelectionAppBarAddToAlbumPressed(context);
},
@ -185,13 +185,11 @@ class _HomePhotosState extends State<HomePhotos>
itemBuilder: (context) => [
PopupMenuItem(
value: _SelectionAppBarMenuOption.archive,
child: Text(
AppLocalizations.of(context)!.archiveSelectedMenuLabel),
child: Text(L10n.of(context).archiveSelectedMenuLabel),
),
PopupMenuItem(
value: _SelectionAppBarMenuOption.delete,
child:
Text(AppLocalizations.of(context)!.deleteSelectedTooltip),
child: Text(L10n.of(context).deleteSelectedTooltip),
),
],
onSelected: (option) {
@ -213,7 +211,7 @@ class _HomePhotosState extends State<HomePhotos>
actions: [
PopupMenuButton(
icon: const Icon(Icons.photo_size_select_large),
tooltip: AppLocalizations.of(context)!.zoomTooltip,
tooltip: L10n.of(context).zoomTooltip,
itemBuilder: (context) => [
PopupMenuZoom(
initialValue: _thumbZoomLevel,
@ -232,7 +230,7 @@ class _HomePhotosState extends State<HomePhotos>
menuActions: [
PopupMenuItem(
value: _menuValueRefresh,
child: Text(AppLocalizations.of(context)!.refreshMenuLabel),
child: Text(L10n.of(context).refreshMenuLabel),
),
],
onSelectedMenuActions: (option) {
@ -307,15 +305,14 @@ class _HomePhotosState extends State<HomePhotos>
clearSelectedItems();
});
SnackBarManager().showSnackBar(SnackBar(
content: Text(AppLocalizations.of(context)!
content: Text(L10n.of(context)
.addSelectedToAlbumSuccessNotification(value.name)),
duration: k.snackBarDurationNormal,
));
}).catchError((_) {});
} else {
SnackBarManager().showSnackBar(SnackBar(
content: Text(AppLocalizations.of(context)!
.addSelectedToAlbumFailureNotification),
content: Text(L10n.of(context).addSelectedToAlbumFailureNotification),
duration: k.snackBarDurationNormal,
));
}
@ -325,9 +322,9 @@ class _HomePhotosState extends State<HomePhotos>
e,
stacktrace);
SnackBarManager().showSnackBar(SnackBar(
content: Text(
"${AppLocalizations.of(context)!.addSelectedToAlbumFailureNotification}: "
"${exception_util.toUserString(e, context)}"),
content:
Text("${L10n.of(context).addSelectedToAlbumFailureNotification}: "
"${exception_util.toUserString(e, context)}"),
duration: k.snackBarDurationNormal,
));
});
@ -355,9 +352,9 @@ class _HomePhotosState extends State<HomePhotos>
_log.shout(
"[_addSelectedToAlbum] Failed while updating album", e, stacktrace);
SnackBarManager().showSnackBar(SnackBar(
content: Text(
"${AppLocalizations.of(context)!.addSelectedToAlbumFailureNotification}: "
"${exception_util.toUserString(e, context)}"),
content:
Text("${L10n.of(context).addSelectedToAlbumFailureNotification}: "
"${exception_util.toUserString(e, context)}"),
duration: k.snackBarDurationNormal,
));
rethrow;
@ -366,7 +363,7 @@ class _HomePhotosState extends State<HomePhotos>
Future<void> _onSelectionAppBarDeletePressed(BuildContext context) async {
SnackBarManager().showSnackBar(SnackBar(
content: Text(AppLocalizations.of(context)!
content: Text(L10n.of(context)
.deleteSelectedProcessingNotification(selectedListItems.length)),
duration: k.snackBarDurationShort,
));
@ -394,13 +391,12 @@ class _HomePhotosState extends State<HomePhotos>
}
if (failures.isEmpty) {
SnackBarManager().showSnackBar(SnackBar(
content: Text(
AppLocalizations.of(context)!.deleteSelectedSuccessNotification),
content: Text(L10n.of(context).deleteSelectedSuccessNotification),
duration: k.snackBarDurationNormal,
));
} else {
SnackBarManager().showSnackBar(SnackBar(
content: Text(AppLocalizations.of(context)!
content: Text(L10n.of(context)
.deleteSelectedFailureNotification(failures.length)),
duration: k.snackBarDurationNormal,
));
@ -426,7 +422,7 @@ class _HomePhotosState extends State<HomePhotos>
Future<void> _onSelectionAppBarArchivePressed(BuildContext context) async {
SnackBarManager().showSnackBar(SnackBar(
content: Text(AppLocalizations.of(context)!
content: Text(L10n.of(context)
.archiveSelectedProcessingNotification(selectedListItems.length)),
duration: k.snackBarDurationShort,
));
@ -454,13 +450,12 @@ class _HomePhotosState extends State<HomePhotos>
}
if (failures.isEmpty) {
SnackBarManager().showSnackBar(SnackBar(
content: Text(
AppLocalizations.of(context)!.archiveSelectedSuccessNotification),
content: Text(L10n.of(context).archiveSelectedSuccessNotification),
duration: k.snackBarDurationNormal,
));
} else {
SnackBarManager().showSnackBar(SnackBar(
content: Text(AppLocalizations.of(context)!
content: Text(L10n.of(context)
.archiveSelectedFailureNotification(failures.length)),
duration: k.snackBarDurationNormal,
));

View file

@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:logging/logging.dart';
import 'package:nc_photos/account.dart';
import 'package:nc_photos/app_localizations.dart';
import 'package:nc_photos/event/event.dart';
import 'package:nc_photos/language_util.dart' as language_util;
import 'package:nc_photos/pref.dart';
@ -45,7 +45,7 @@ class _MyAppState extends State<MyApp> implements SnackBarHandler {
@override
build(BuildContext context) {
return MaterialApp(
onGenerateTitle: (context) => AppLocalizations.of(context)!.appTitle,
onGenerateTitle: (context) => L10n.of(context).appTitle,
theme: _getLightTheme(),
darkTheme: _getDarkTheme(),
themeMode:

View file

@ -1,8 +1,8 @@
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:logging/logging.dart';
import 'package:nc_photos/account.dart';
import 'package:nc_photos/app_localizations.dart';
import 'package:nc_photos/entity/album.dart';
import 'package:nc_photos/entity/album/cover_provider.dart';
import 'package:nc_photos/entity/album/provider.dart';
@ -40,7 +40,7 @@ class _NewAlbumDialogState extends State<NewAlbumDialog> {
return Visibility(
visible: _isVisible,
child: AlertDialog(
title: Text(AppLocalizations.of(context)!.createAlbumTooltip),
title: Text(L10n.of(context).createAlbumTooltip),
content: Form(
key: _formKey,
child: Container(
@ -51,12 +51,11 @@ class _NewAlbumDialogState extends State<NewAlbumDialog> {
children: [
TextFormField(
decoration: InputDecoration(
hintText: AppLocalizations.of(context)!.nameInputHint,
hintText: L10n.of(context).nameInputHint,
),
validator: (value) {
if (value!.isEmpty) {
return AppLocalizations.of(context)!
.albumNameInputInvalidEmpty;
return L10n.of(context).albumNameInputInvalidEmpty;
}
return null;
},
@ -188,10 +187,10 @@ extension on _Provider {
String toValueString(BuildContext context) {
switch (this) {
case _Provider.static:
return AppLocalizations.of(context)!.createAlbumDialogBasicLabel;
return L10n.of(context).createAlbumDialogBasicLabel;
case _Provider.dir:
return AppLocalizations.of(context)!.createAlbumDialogFolderBasedLabel;
return L10n.of(context).createAlbumDialogFolderBasedLabel;
default:
throw StateError("Unknown value: $this");
@ -201,11 +200,10 @@ extension on _Provider {
String toDescription(BuildContext context) {
switch (this) {
case _Provider.static:
return AppLocalizations.of(context)!.createAlbumDialogBasicDescription;
return L10n.of(context).createAlbumDialogBasicDescription;
case _Provider.dir:
return AppLocalizations.of(context)!
.createAlbumDialogFolderBasedDescription;
return L10n.of(context).createAlbumDialogFolderBasedDescription;
default:
throw StateError("Unknown value: $this");

View file

@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:logging/logging.dart';
import 'package:nc_photos/app_localizations.dart';
import 'package:nc_photos/num_extension.dart';
class PhotoDateTimeEditDialog extends StatefulWidget {
@ -20,7 +20,7 @@ class _PhotoDateTimeEditDialogState extends State<PhotoDateTimeEditDialog> {
@override
build(BuildContext context) {
return AlertDialog(
title: Text(AppLocalizations.of(context)!.updateDateTimeDialogTitle),
title: Text(L10n.of(context).updateDateTimeDialogTitle),
content: Form(
key: _formKey,
child: Container(
@ -29,7 +29,7 @@ class _PhotoDateTimeEditDialogState extends State<PhotoDateTimeEditDialog> {
mainAxisSize: MainAxisSize.min,
children: [
Text(
AppLocalizations.of(context)!.dateSubtitle,
L10n.of(context).dateSubtitle,
style: Theme.of(context).textTheme.subtitle2,
),
Row(
@ -37,8 +37,7 @@ class _PhotoDateTimeEditDialogState extends State<PhotoDateTimeEditDialog> {
Flexible(
child: TextFormField(
decoration: InputDecoration(
hintText:
AppLocalizations.of(context)!.dateYearInputHint,
hintText: L10n.of(context).dateYearInputHint,
),
keyboardType: TextInputType.number,
validator: (value) {
@ -46,8 +45,7 @@ class _PhotoDateTimeEditDialogState extends State<PhotoDateTimeEditDialog> {
int.parse(value!);
return null;
} catch (_) {
return AppLocalizations.of(context)!
.dateTimeInputInvalid;
return L10n.of(context).dateTimeInputInvalid;
}
},
onSaved: (value) {
@ -61,16 +59,14 @@ class _PhotoDateTimeEditDialogState extends State<PhotoDateTimeEditDialog> {
Flexible(
child: TextFormField(
decoration: InputDecoration(
hintText:
AppLocalizations.of(context)!.dateMonthInputHint,
hintText: L10n.of(context).dateMonthInputHint,
),
keyboardType: TextInputType.number,
validator: (value) {
if (int.tryParse(value!)?.inRange(1, 12) == true) {
return null;
}
return AppLocalizations.of(context)!
.dateTimeInputInvalid;
return L10n.of(context).dateTimeInputInvalid;
},
onSaved: (value) {
_formValue.month = int.parse(value!);
@ -85,16 +81,14 @@ class _PhotoDateTimeEditDialogState extends State<PhotoDateTimeEditDialog> {
Flexible(
child: TextFormField(
decoration: InputDecoration(
hintText:
AppLocalizations.of(context)!.dateDayInputHint,
hintText: L10n.of(context).dateDayInputHint,
),
keyboardType: TextInputType.number,
validator: (value) {
if (int.tryParse(value!)?.inRange(1, 31) == true) {
return null;
}
return AppLocalizations.of(context)!
.dateTimeInputInvalid;
return L10n.of(context).dateTimeInputInvalid;
},
onSaved: (value) {
_formValue.day = int.parse(value!);
@ -108,7 +102,7 @@ class _PhotoDateTimeEditDialogState extends State<PhotoDateTimeEditDialog> {
),
const SizedBox(height: 16),
Text(
AppLocalizations.of(context)!.timeSubtitle,
L10n.of(context).timeSubtitle,
style: Theme.of(context).textTheme.subtitle2,
),
Row(
@ -116,16 +110,14 @@ class _PhotoDateTimeEditDialogState extends State<PhotoDateTimeEditDialog> {
Flexible(
child: TextFormField(
decoration: InputDecoration(
hintText:
AppLocalizations.of(context)!.timeHourInputHint,
hintText: L10n.of(context).timeHourInputHint,
),
keyboardType: TextInputType.number,
validator: (value) {
if (int.tryParse(value!)?.inRange(0, 23) == true) {
return null;
}
return AppLocalizations.of(context)!
.dateTimeInputInvalid;
return L10n.of(context).dateTimeInputInvalid;
},
onSaved: (value) {
_formValue.hour = int.parse(value!);
@ -140,16 +132,14 @@ class _PhotoDateTimeEditDialogState extends State<PhotoDateTimeEditDialog> {
Flexible(
child: TextFormField(
decoration: InputDecoration(
hintText:
AppLocalizations.of(context)!.timeMinuteInputHint,
hintText: L10n.of(context).timeMinuteInputHint,
),
keyboardType: TextInputType.number,
validator: (value) {
if (int.tryParse(value!)?.inRange(0, 59) == true) {
return null;
}
return AppLocalizations.of(context)!
.dateTimeInputInvalid;
return L10n.of(context).dateTimeInputInvalid;
},
onSaved: (value) {
_formValue.minute = int.parse(value!);

View file

@ -2,10 +2,10 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:logging/logging.dart';
import 'package:nc_photos/account.dart';
import 'package:nc_photos/api/api_util.dart' as api_util;
import 'package:nc_photos/app_localizations.dart';
import 'package:nc_photos/entity/file.dart';
import 'package:nc_photos/entity/file/data_source.dart';
import 'package:nc_photos/exception_util.dart' as exception_util;
@ -105,7 +105,7 @@ class _RootPickerState extends State<RootPicker>
child: Column(
children: [
Text(
AppLocalizations.of(context)!.rootPickerHeaderText,
L10n.of(context).rootPickerHeaderText,
style: Theme.of(context).textTheme.headline5,
textAlign: TextAlign.center,
),
@ -113,7 +113,7 @@ class _RootPickerState extends State<RootPicker>
Align(
alignment: AlignmentDirectional.topStart,
child: Text(
AppLocalizations.of(context)!.rootPickerSubHeaderText,
L10n.of(context).rootPickerSubHeaderText,
),
),
],
@ -132,11 +132,11 @@ class _RootPickerState extends State<RootPicker>
children: [
TextButton(
onPressed: () => _onSkipPressed(context),
child: Text(AppLocalizations.of(context)!.skipButtonLabel),
child: Text(L10n.of(context).skipButtonLabel),
),
ElevatedButton(
onPressed: () => _onConfirmPressed(context),
child: Text(AppLocalizations.of(context)!.confirmButtonLabel),
child: Text(L10n.of(context).confirmButtonLabel),
),
],
),
@ -150,8 +150,8 @@ class _RootPickerState extends State<RootPicker>
showDialog(
context: context,
builder: (context) => AlertDialog(
content: Text(AppLocalizations.of(context)!
.rootPickerSkipConfirmationDialogContent),
content: Text(
L10n.of(context).rootPickerSkipConfirmationDialogContent),
actions: <Widget>[
TextButton(
onPressed: () {
@ -178,8 +178,7 @@ class _RootPickerState extends State<RootPicker>
final roots = getPickedDirs().map((e) => e.strippedPath).toList();
if (roots.isEmpty) {
SnackBarManager().showSnackBar(SnackBar(
content:
Text(AppLocalizations.of(context)!.rootPickerListEmptyNotification),
content: Text(L10n.of(context).rootPickerListEmptyNotification),
duration: k.snackBarDurationNormal,
));
return;
@ -199,7 +198,7 @@ class _RootPickerState extends State<RootPicker>
barrierDismissible: false,
context: context,
builder: (context) => ProcessingDialog(
text: AppLocalizations.of(context)!.genericProcessingDialogContent),
text: L10n.of(context).genericProcessingDialogContent),
);
});
}

View file

@ -4,9 +4,9 @@ import 'dart:math' as math;
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
import 'package:logging/logging.dart';
import 'package:nc_photos/app_localizations.dart';
import 'package:nc_photos/iterable_extension.dart';
import 'package:nc_photos/k.dart' as k;
import 'package:nc_photos/platform/k.dart' as platform_k;
@ -184,8 +184,8 @@ mixin SelectableItemStreamListMixin<T extends StatefulWidget> on State<T> {
if (!SessionStorage().hasShowRangeSelectNotification) {
SnackBarManager().showSnackBar(SnackBar(
content: Text(platform_k.isWeb
? AppLocalizations.of(context)!.webSelectRangeNotification
: AppLocalizations.of(context)!.mobileSelectRangeNotification),
? L10n.of(context).webSelectRangeNotification
: L10n.of(context).mobileSelectRangeNotification),
duration: k.snackBarDurationNormal,
));
SessionStorage().hasShowRangeSelectNotification = true;

View file

@ -1,10 +1,10 @@
import 'package:event_bus/event_bus.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:kiwi/kiwi.dart';
import 'package:logging/logging.dart';
import 'package:nc_photos/account.dart';
import 'package:nc_photos/app_localizations.dart';
import 'package:nc_photos/event/event.dart';
import 'package:nc_photos/k.dart' as k;
import 'package:nc_photos/language_util.dart' as language_util;
@ -62,57 +62,51 @@ class _SettingsState extends State<Settings> {
}
Widget _buildContent(BuildContext context) {
final translator = AppLocalizations.of(context)!.translator;
final translator = L10n.of(context).translator;
return CustomScrollView(
slivers: [
SliverAppBar(
pinned: true,
title: Text(AppLocalizations.of(context)!.settingsWidgetTitle),
title: Text(L10n.of(context).settingsWidgetTitle),
),
SliverList(
delegate: SliverChildListDelegate(
[
ListTile(
title:
Text(AppLocalizations.of(context)!.settingsLanguageTitle),
title: Text(L10n.of(context).settingsLanguageTitle),
subtitle: Text(language_util.getSelectedLanguageName(context)),
onTap: () => _onLanguageTap(context),
),
SwitchListTile(
title: Text(
AppLocalizations.of(context)!.settingsExifSupportTitle),
title: Text(L10n.of(context).settingsExifSupportTitle),
subtitle: _isEnableExif
? Text(AppLocalizations.of(context)!
.settingsExifSupportTrueSubtitle)
? Text(L10n.of(context).settingsExifSupportTrueSubtitle)
: null,
value: _isEnableExif,
onChanged: (value) => _onExifSupportChanged(context, value),
),
_buildCaption(context,
AppLocalizations.of(context)!.settingsAboutSectionTitle),
_buildCaption(
context, L10n.of(context).settingsAboutSectionTitle),
ListTile(
title: Text(AppLocalizations.of(context)!.settingsVersionTitle),
title: Text(L10n.of(context).settingsVersionTitle),
subtitle: const Text(k.versionStr),
),
ListTile(
title:
Text(AppLocalizations.of(context)!.settingsSourceCodeTitle),
title: Text(L10n.of(context).settingsSourceCodeTitle),
subtitle: Text(_sourceRepo),
onTap: () async {
await launch(_sourceRepo);
},
),
ListTile(
title:
Text(AppLocalizations.of(context)!.settingsBugReportTitle),
title: Text(L10n.of(context).settingsBugReportTitle),
onTap: () {
launch(_bugReportUrl);
},
),
if (translator.isNotEmpty)
ListTile(
title: Text(
AppLocalizations.of(context)!.settingsTranslatorTitle),
title: Text(L10n.of(context).settingsTranslatorTitle),
subtitle: Text(translator),
onTap: () {
launch(_translationUrl);
@ -176,9 +170,8 @@ class _SettingsState extends State<Settings> {
showDialog(
context: context,
builder: (context) => AlertDialog(
title: Text(
AppLocalizations.of(context)!.exifSupportConfirmationDialogTitle),
content: Text(AppLocalizations.of(context)!.exifSupportDetails),
title: Text(L10n.of(context).exifSupportConfirmationDialogTitle),
content: Text(L10n.of(context).exifSupportDetails),
actions: <Widget>[
TextButton(
onPressed: () {
@ -190,7 +183,7 @@ class _SettingsState extends State<Settings> {
onPressed: () {
Navigator.of(context).pop(true);
},
child: Text(AppLocalizations.of(context)!.enableButtonLabel),
child: Text(L10n.of(context).enableButtonLabel),
),
],
),
@ -219,8 +212,7 @@ class _SettingsState extends State<Settings> {
} else {
_log.severe("[_setExifSupport] Failed writing pref");
SnackBarManager().showSnackBar(SnackBar(
content: Text(
AppLocalizations.of(context)!.writePreferenceFailureNotification),
content: Text(L10n.of(context).writePreferenceFailureNotification),
duration: k.snackBarDurationNormal,
));
setState(() {

View file

@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:nc_photos/app_localizations.dart';
import 'package:nc_photos/k.dart' as k;
import 'package:nc_photos/pref.dart';
import 'package:nc_photos/theme.dart';
@ -31,7 +31,7 @@ class _SetupState extends State<Setup> {
PreferredSizeWidget _buildAppBar(BuildContext context) {
return AppBar(
title: Text(AppLocalizations.of(context)!.setupWidgetTitle),
title: Text(L10n.of(context).setupWidgetTitle),
elevation: 0,
);
}
@ -69,8 +69,7 @@ class _SetupState extends State<Setup> {
? [
ElevatedButton(
onPressed: _onDonePressed,
child: Text(
AppLocalizations.of(context)!.doneButtonLabel),
child: Text(L10n.of(context).doneButtonLabel),
),
]
: [
@ -83,8 +82,7 @@ class _SetupState extends State<Setup> {
.getPageId());
}
},
child: Text(
AppLocalizations.of(context)!.nextButtonLabel),
child: Text(L10n.of(context).nextButtonLabel),
),
],
),
@ -148,20 +146,19 @@ class _ExifState extends State<_Exif> {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SwitchListTile(
title: Text(AppLocalizations.of(context)!.settingsExifSupportTitle),
title: Text(L10n.of(context).settingsExifSupportTitle),
value: _isEnableExif,
onChanged: _onValueChanged,
),
const SizedBox(height: 8),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: Text(AppLocalizations.of(context)!.exifSupportDetails),
child: Text(L10n.of(context).exifSupportDetails),
),
const SizedBox(height: 16),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: Text(
AppLocalizations.of(context)!.setupSettingsModifyLaterHint,
child: Text(L10n.of(context).setupSettingsModifyLaterHint,
style: Theme.of(context)
.textTheme
.bodyText2!
@ -200,8 +197,7 @@ class _HiddenPrefDirNoticeState extends State<_HiddenPrefDirNotice> {
children: [
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: Text(
AppLocalizations.of(context)!.setupHiddenPrefDirNoticeDetail),
child: Text(L10n.of(context).setupHiddenPrefDirNoticeDetail),
),
const SizedBox(height: 24),
Align(

View file

@ -1,9 +1,9 @@
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:logging/logging.dart';
import 'package:nc_photos/account.dart';
import 'package:nc_photos/app_localizations.dart';
import 'package:nc_photos/list_extension.dart';
import 'package:nc_photos/platform/k.dart' as platform_k;
import 'package:nc_photos/pref.dart';
@ -49,7 +49,7 @@ class _SignInState extends State<SignIn> {
Padding(
padding: const EdgeInsets.all(24),
child: Text(
AppLocalizations.of(context)!.signInHeaderText,
L10n.of(context).signInHeaderText,
style: Theme.of(context).textTheme.headline5,
textAlign: TextAlign.center,
),
@ -70,7 +70,7 @@ class _SignInState extends State<SignIn> {
padding: const EdgeInsets.symmetric(
horizontal: 32, vertical: 16),
child: Text(
AppLocalizations.of(context)!.signIn2faHintText,
L10n.of(context).signIn2faHintText,
style: TextStyle(fontStyle: FontStyle.italic),
),
),
@ -98,8 +98,7 @@ class _SignInState extends State<SignIn> {
_connect();
}
},
child: Text(AppLocalizations.of(context)!
.connectButtonLabel),
child: Text(L10n.of(context).connectButtonLabel),
),
],
),
@ -159,14 +158,12 @@ class _SignInState extends State<SignIn> {
Expanded(
child: TextFormField(
decoration: InputDecoration(
hintText:
AppLocalizations.of(context)!.serverAddressInputHint,
hintText: L10n.of(context).serverAddressInputHint,
),
keyboardType: TextInputType.url,
validator: (value) {
if (value!.trim().trimRightAny("/").isEmpty) {
return AppLocalizations.of(context)!
.serverAddressInputInvalidEmpty;
return L10n.of(context).serverAddressInputInvalidEmpty;
}
return null;
},
@ -180,11 +177,11 @@ class _SignInState extends State<SignIn> {
const SizedBox(height: 8),
TextFormField(
decoration: InputDecoration(
hintText: AppLocalizations.of(context)!.usernameInputHint,
hintText: L10n.of(context).usernameInputHint,
),
validator: (value) {
if (value!.trim().isEmpty) {
return AppLocalizations.of(context)!.usernameInputInvalidEmpty;
return L10n.of(context).usernameInputInvalidEmpty;
}
return null;
},
@ -195,12 +192,12 @@ class _SignInState extends State<SignIn> {
const SizedBox(height: 8),
TextFormField(
decoration: InputDecoration(
hintText: AppLocalizations.of(context)!.passwordInputHint,
hintText: L10n.of(context).passwordInputHint,
),
obscureText: true,
validator: (value) {
if (value!.trim().isEmpty) {
return AppLocalizations.of(context)!.passwordInputInvalidEmpty;
return L10n.of(context).passwordInputInvalidEmpty;
}
return null;
},

View file

@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:logging/logging.dart';
import 'package:nc_photos/app_localizations.dart';
import 'package:nc_photos/changelog.dart' as changelog;
import 'package:nc_photos/k.dart' as k;
import 'package:nc_photos/pref.dart';
@ -56,7 +56,7 @@ class _SplashState extends State<Splash> {
),
const SizedBox(height: 8),
Text(
AppLocalizations.of(context)!.appTitle,
L10n.of(context).appTitle,
textAlign: TextAlign.center,
style: Theme.of(context).textTheme.headline4,
)
@ -94,7 +94,7 @@ class _SplashState extends State<Splash> {
showDialog(
context: context,
builder: (context) => AlertDialog(
title: Text(AppLocalizations.of(context)!.changelogTitle),
title: Text(L10n.of(context).changelogTitle),
content: SingleChildScrollView(
child: Text(change),
),

View file

@ -4,9 +4,9 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/services.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:logging/logging.dart';
import 'package:nc_photos/account.dart';
import 'package:nc_photos/app_localizations.dart';
import 'package:nc_photos/entity/album.dart';
import 'package:nc_photos/entity/file.dart';
import 'package:nc_photos/entity/file/data_source.dart';
@ -264,7 +264,7 @@ class _ViewerState extends State<Viewer> {
if (!_isDetailPaneActive && _canOpenDetailPane())
IconButton(
icon: const Icon(Icons.more_vert),
tooltip: AppLocalizations.of(context)!.detailsTooltip,
tooltip: L10n.of(context).detailsTooltip,
onPressed: _onDetailsPressed,
),
],
@ -311,7 +311,7 @@ class _ViewerState extends State<Viewer> {
Icons.share_outlined,
color: Colors.white.withOpacity(.87),
),
tooltip: AppLocalizations.of(context)!.shareTooltip,
tooltip: L10n.of(context).shareTooltip,
onPressed: () => _onSharePressed(context),
),
),
@ -322,7 +322,7 @@ class _ViewerState extends State<Viewer> {
Icons.download_outlined,
color: Colors.white.withOpacity(.87),
),
tooltip: AppLocalizations.of(context)!.downloadTooltip,
tooltip: L10n.of(context).downloadTooltip,
onPressed: () => _onDownloadPressed(context),
),
),
@ -333,7 +333,7 @@ class _ViewerState extends State<Viewer> {
Icons.delete_outlined,
color: Colors.white.withOpacity(.87),
),
tooltip: AppLocalizations.of(context)!.deleteTooltip,
tooltip: L10n.of(context).deleteTooltip,
onPressed: () => _onDeletePressed(context),
),
),
@ -571,8 +571,7 @@ class _ViewerState extends State<Viewer> {
final file = widget.streamFiles[_pageController.page!.round()];
_log.info("[_onDownloadPressed] Downloading file: ${file.path}");
var controller = SnackBarManager().showSnackBar(SnackBar(
content:
Text(AppLocalizations.of(context)!.downloadProcessingNotification),
content: Text(L10n.of(context).downloadProcessingNotification),
duration: k.snackBarDurationShort,
));
controller?.closed.whenComplete(() {
@ -586,8 +585,7 @@ class _ViewerState extends State<Viewer> {
_log.warning("[_onDownloadPressed] Permission not granted");
controller?.close();
SnackBarManager().showSnackBar(SnackBar(
content: Text(AppLocalizations.of(context)!
.downloadFailureNoPermissionNotification),
content: Text(L10n.of(context).downloadFailureNoPermissionNotification),
duration: k.snackBarDurationNormal,
));
return;
@ -596,8 +594,7 @@ class _ViewerState extends State<Viewer> {
"[_onDownloadPressed] Failed while downloadFile", e, stacktrace);
controller?.close();
SnackBarManager().showSnackBar(SnackBar(
content: Text(
"${AppLocalizations.of(context)!.downloadFailureNotification}: "
content: Text("${L10n.of(context).downloadFailureNotification}: "
"${exception_util.toUserString(e, context)}"),
duration: k.snackBarDurationNormal,
));
@ -627,7 +624,7 @@ class _ViewerState extends State<Viewer> {
// fallback
SnackBarManager().showSnackBar(SnackBar(
content: Text(AppLocalizations.of(context)!.downloadSuccessNotification),
content: Text(L10n.of(context).downloadSuccessNotification),
duration: k.snackBarDurationShort,
));
}
@ -636,7 +633,7 @@ class _ViewerState extends State<Viewer> {
final file = widget.streamFiles[_pageController.page!.round()];
_log.info("[_onDeletePressed] Removing file: ${file.path}");
var controller = SnackBarManager().showSnackBar(SnackBar(
content: Text(AppLocalizations.of(context)!.deleteProcessingNotification),
content: Text(L10n.of(context).deleteProcessingNotification),
duration: k.snackBarDurationShort,
));
controller?.closed.whenComplete(() {
@ -647,7 +644,7 @@ class _ViewerState extends State<Viewer> {
AlbumRepo(AlbumCachedDataSource()))(widget.account, file);
controller?.close();
SnackBarManager().showSnackBar(SnackBar(
content: Text(AppLocalizations.of(context)!.deleteSuccessNotification),
content: Text(L10n.of(context).deleteSuccessNotification),
duration: k.snackBarDurationNormal,
));
Navigator.of(context).pop();
@ -659,9 +656,8 @@ class _ViewerState extends State<Viewer> {
stacktrace);
controller?.close();
SnackBarManager().showSnackBar(SnackBar(
content:
Text("${AppLocalizations.of(context)!.deleteFailureNotification}: "
"${exception_util.toUserString(e, context)}"),
content: Text("${L10n.of(context).deleteFailureNotification}: "
"${exception_util.toUserString(e, context)}"),
duration: k.snackBarDurationNormal,
));
}

View file

@ -3,10 +3,10 @@ import 'package:exifdart/exifdart.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:intl/intl.dart';
import 'package:logging/logging.dart';
import 'package:nc_photos/account.dart';
import 'package:nc_photos/app_localizations.dart';
import 'package:nc_photos/double_extension.dart';
import 'package:nc_photos/entity/album.dart';
import 'package:nc_photos/entity/album/item.dart';
@ -77,8 +77,8 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
widget.file.metadata!.imageHeight!;
if (pixelCount >= 500000) {
final mpCount = pixelCount / 1000000.0;
sizeSubStr += AppLocalizations.of(context)!
.megapixelCount(mpCount.toStringAsFixed(1));
sizeSubStr +=
L10n.of(context).megapixelCount(mpCount.toStringAsFixed(1));
sizeSubStr += space;
}
sizeSubStr += _byteSizeToString(widget.file.contentLength ?? 0);
@ -89,12 +89,11 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
cameraSubStr += "f/${_fNumber!.toStringAsFixed(1)}$space";
}
if (_exposureTime != null) {
cameraSubStr +=
AppLocalizations.of(context)!.secondCountSymbol(_exposureTime!);
cameraSubStr += L10n.of(context).secondCountSymbol(_exposureTime!);
cameraSubStr += space;
}
if (_focalLength != null) {
cameraSubStr += AppLocalizations.of(context)!
cameraSubStr += L10n.of(context)
.millimeterCountSymbol(_focalLength!.toStringAsFixedTruncated(2));
cameraSubStr += space;
}
@ -112,12 +111,12 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
children: [
_DetailPaneButton(
icon: Icons.playlist_add_outlined,
label: AppLocalizations.of(context)!.addToAlbumTooltip,
label: L10n.of(context).addToAlbumTooltip,
onPressed: () => _onAddToAlbumPressed(context),
),
_DetailPaneButton(
icon: Icons.delete_outline,
label: AppLocalizations.of(context)!.deleteTooltip,
label: L10n.of(context).deleteTooltip,
onPressed: () => _onDeletePressed(context),
),
],
@ -238,15 +237,14 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
_log.info("[_onAddToAlbumPressed] Album picked: ${value.name}");
_addToAlbum(context, value).then((_) {
SnackBarManager().showSnackBar(SnackBar(
content: Text(AppLocalizations.of(context)!
.addToAlbumSuccessNotification(value.name)),
content: Text(
L10n.of(context).addToAlbumSuccessNotification(value.name)),
duration: k.snackBarDurationNormal,
));
}).catchError((_) {});
} else {
SnackBarManager().showSnackBar(SnackBar(
content:
Text(AppLocalizations.of(context)!.addToAlbumFailureNotification),
content: Text(L10n.of(context).addToAlbumFailureNotification),
duration: k.snackBarDurationNormal,
));
}
@ -254,8 +252,7 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
_log.severe(
"[_onAddToAlbumPressed] Failed while showDialog", e, stacktrace);
SnackBarManager().showSnackBar(SnackBar(
content: Text(
"${AppLocalizations.of(context)!.addToAlbumFailureNotification}: "
content: Text("${L10n.of(context).addToAlbumFailureNotification}: "
"${exception_util.toUserString(e, context)}"),
duration: k.snackBarDurationNormal,
));
@ -265,7 +262,7 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
void _onDeletePressed(BuildContext context) async {
_log.info("[_onDeletePressed] Removing file: ${widget.file.path}");
var controller = SnackBarManager().showSnackBar(SnackBar(
content: Text(AppLocalizations.of(context)!.deleteProcessingNotification),
content: Text(L10n.of(context).deleteProcessingNotification),
duration: k.snackBarDurationShort,
));
controller?.closed.whenComplete(() {
@ -276,7 +273,7 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
AlbumRepo(AlbumCachedDataSource()))(widget.account, widget.file);
controller?.close();
SnackBarManager().showSnackBar(SnackBar(
content: Text(AppLocalizations.of(context)!.deleteSuccessNotification),
content: Text(L10n.of(context).deleteSuccessNotification),
duration: k.snackBarDurationNormal,
));
Navigator.of(context).pop();
@ -288,9 +285,8 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
stacktrace);
controller?.close();
SnackBarManager().showSnackBar(SnackBar(
content:
Text("${AppLocalizations.of(context)!.deleteFailureNotification}: "
"${exception_util.toUserString(e, context)}"),
content: Text("${L10n.of(context).deleteFailureNotification}: "
"${exception_util.toUserString(e, context)}"),
duration: k.snackBarDurationNormal,
));
}
@ -328,8 +324,7 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
e,
stacktrace);
SnackBarManager().showSnackBar(SnackBar(
content: Text(
AppLocalizations.of(context)!.updateDateTimeFailureNotification),
content: Text(L10n.of(context).updateDateTimeFailureNotification),
duration: k.snackBarDurationNormal,
));
}
@ -361,8 +356,8 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
// already added, do nothing
_log.info("[_addToAlbum] File already in album: ${widget.file.path}");
SnackBarManager().showSnackBar(SnackBar(
content: Text(
"${AppLocalizations.of(context)!.addToAlbumAlreadyAddedNotification}"),
content:
Text("${L10n.of(context).addToAlbumAlreadyAddedNotification}"),
duration: k.snackBarDurationNormal,
));
return Future.error(ArgumentError("File already in album"));
@ -380,8 +375,7 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
} catch (e, stacktrace) {
_log.shout("[_addToAlbum] Failed while updating album", e, stacktrace);
SnackBarManager().showSnackBar(SnackBar(
content: Text(
"${AppLocalizations.of(context)!.addToAlbumFailureNotification}: "
content: Text("${L10n.of(context).addToAlbumFailureNotification}: "
"${exception_util.toUserString(e, context)}"),
duration: k.snackBarDurationNormal,
));