diff --git a/lib/app_localizations.dart b/lib/app_localizations.dart new file mode 100644 index 00000000..cd3adc97 --- /dev/null +++ b/lib/app_localizations.dart @@ -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)!; +} diff --git a/lib/exception_util.dart b/lib/exception_util.dart index 755eafe9..f5d636e2 100644 --- a/lib/exception_util.dart +++ b/lib/exception_util.dart @@ -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(); } diff --git a/lib/share_handler.dart b/lib/share_handler.dart index 54fa1483..e1b13051 100644 --- a/lib/share_handler.dart +++ b/lib/share_handler.dart @@ -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 = >[]; 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 diff --git a/lib/widget/account_picker_dialog.dart b/lib/widget/account_picker_dialog.dart index aac329df..7e552f63 100644 --- a/lib/widget/account_picker_dialog.dart +++ b/lib/widget/account_picker_dialog.dart @@ -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 { 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 { ..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 { 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 { _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 { // 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; diff --git a/lib/widget/album_dir_picker.dart b/lib/widget/album_dir_picker.dart index b10de3de..d6a7dcc1 100644 --- a/lib/widget/album_dir_picker.dart +++ b/lib/widget/album_dir_picker.dart @@ -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 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 Align( alignment: AlignmentDirectional.topStart, child: Text( - AppLocalizations.of(context)!.albumDirPickerSubHeaderText, + L10n.of(context).albumDirPickerSubHeaderText, ), ), ], @@ -117,7 +117,7 @@ class _AlbumDirPickerState extends State ), ElevatedButton( onPressed: () => _onConfirmPressed(context), - child: Text(AppLocalizations.of(context)!.confirmButtonLabel), + child: Text(L10n.of(context).confirmButtonLabel), ), ], ), @@ -131,8 +131,7 @@ class _AlbumDirPickerState extends State 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 { diff --git a/lib/widget/album_importer.dart b/lib/widget/album_importer.dart index 08e9d749..ed2570f3 100644 --- a/lib/widget/album_importer.dart +++ b/lib/widget/album_importer.dart @@ -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 { 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 { Align( alignment: AlignmentDirectional.topStart, child: Text( - AppLocalizations.of(context)!.albumImporterSubHeaderText, + L10n.of(context).albumImporterSubHeaderText, ), ), ], @@ -145,7 +145,7 @@ class _AlbumImporterState extends State { ), ElevatedButton( onPressed: () => _onImportPressed(context), - child: Text(AppLocalizations.of(context)!.importButtonLabel), + child: Text(L10n.of(context).importButtonLabel), ), ], ), @@ -217,8 +217,8 @@ class _AlbumImporterState extends State { 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); diff --git a/lib/widget/album_picker_dialog.dart b/lib/widget/album_picker_dialog.dart index b8069050..c0f8d4d3 100644 --- a/lib/widget/album_picker_dialog.dart +++ b/lib/widget/album_picker_dialog.dart @@ -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 { SimpleDialogOption( onPressed: () => _onNewAlbumPressed(context), child: Tooltip( - message: AppLocalizations.of(context)!.createAlbumTooltip, + message: L10n.of(context).createAlbumTooltip, child: Center( child: Icon( Icons.add, diff --git a/lib/widget/album_search_delegate.dart b/lib/widget/album_search_delegate.dart index 13fa7ae7..9db3d5ab 100644 --- a/lib/widget/album_search_delegate.dart +++ b/lib/widget/album_search_delegate.dart @@ -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), ), ], diff --git a/lib/widget/album_viewer.dart b/lib/widget/album_viewer.dart index 1060a057..8894bed9 100644 --- a/lib/widget/album_viewer.dart +++ b/lib/widget/album_viewer.dart @@ -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 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 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 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 .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 ); 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 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 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 }, ), 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, ), ), diff --git a/lib/widget/album_viewer_mixin.dart b/lib/widget/album_viewer_mixin.dart index 084965ec..965df219 100644 --- a/lib/widget/album_viewer_mixin.dart +++ b/lib/widget/album_viewer_mixin.dart @@ -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 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 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 }); }, ), - title: Text(AppLocalizations.of(context)! - .selectionAppBarTitle(selectedListItems.length)), + title: Text( + L10n.of(context).selectionAppBarTitle(selectedListItems.length)), actions: actions, ), ); @@ -138,13 +138,13 @@ mixin AlbumViewerMixin 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 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(() { diff --git a/lib/widget/archive_viewer.dart b/lib/widget/archive_viewer.dart index beadf311..b9b686e6 100644 --- a/lib/widget/archive_viewer.dart +++ b/lib/widget/archive_viewer.dart @@ -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 }); }, ), - 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 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 Future _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 } 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, )); diff --git a/lib/widget/builder/album_grid_item_builder.dart b/lib/widget/builder/album_grid_item_builder.dart index 46df84fc..81b40d10 100644 --- a/lib/widget/builder/album_grid_item_builder.dart +++ b/lib/widget/builder/album_grid_item_builder.dart @@ -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; diff --git a/lib/widget/connect.dart b/lib/widget/connect.dart index db78a13c..09969060 100644 --- a/lib/widget/connect.dart +++ b/lib/widget/connect.dart @@ -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 { 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 { } 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 { 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: [ TextButton( onPressed: () { @@ -142,7 +140,7 @@ class _ConnectState extends State { 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 { 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: [ TextButton( onPressed: () { @@ -170,8 +167,7 @@ class _ConnectState extends State { onPressed: () { Navigator.of(context).pop(true); }, - child: - Text(AppLocalizations.of(context)!.whitelistCertButtonLabel), + child: Text(L10n.of(context).whitelistCertButtonLabel), ), ], ), diff --git a/lib/widget/dir_picker_mixin.dart b/lib/widget/dir_picker_mixin.dart index 22551f03..67b05f5f 100644 --- a/lib/widget/dir_picker_mixin.dart +++ b/lib/widget/dir_picker_mixin.dart @@ -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 on State { 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 on State { _picks.removeWhere((element) => identical(element, parent)); } catch (_) { SnackBarManager().showSnackBar(SnackBar( - content: Text(AppLocalizations.of(context)! - .rootPickerUnpickFailureNotification))); + content: + Text(L10n.of(context).rootPickerUnpickFailureNotification))); } } }); diff --git a/lib/widget/dynamic_album_viewer.dart b/lib/widget/dynamic_album_viewer.dart index 69cc6ffe..1981e955 100644 --- a/lib/widget/dynamic_album_viewer.dart +++ b/lib/widget/dynamic_album_viewer.dart @@ -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 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 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 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 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 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: [ TextButton( onPressed: () { @@ -356,8 +355,7 @@ class _DynamicAlbumViewerState extends State ), ).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 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 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 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 }, ), FancyOptionPickerItem( - label: AppLocalizations.of(context)!.sortOptionTimeDescendingLabel, + label: L10n.of(context).sortOptionTimeDescendingLabel, isSelected: sortProvider is AlbumTimeSortProvider && !sortProvider.isAscending, onSelect: () { diff --git a/lib/widget/home.dart b/lib/widget/home.dart index 084d7698..98690c84 100644 --- a/lib/widget/home.dart +++ b/lib/widget/home.dart @@ -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 { items: [ 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, diff --git a/lib/widget/home_albums.dart b/lib/widget/home_albums.dart index 44107a77..15644313 100644 --- a/lib/widget/home_albums.dart +++ b/lib/widget/home_albums.dart @@ -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 }); }, ), - 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 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 ), ), ), - 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 ), ), ), - title: AppLocalizations.of(context)!.createAlbumTooltip, + title: L10n.of(context).createAlbumTooltip, onTap: () => _onNewAlbumItemTap(context), ); } @@ -323,8 +323,7 @@ class _HomeAlbumsState extends State _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 Future _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 } 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, )); diff --git a/lib/widget/home_app_bar.dart b/lib/widget/home_app_bar.dart index 8b795433..c8f6f7fb 100644 --- a/lib/widget/home_app_bar.dart +++ b/lib/widget/home_app_bar.dart @@ -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) { diff --git a/lib/widget/home_photos.dart b/lib/widget/home_photos.dart index 1253a033..95377f3b 100644 --- a/lib/widget/home_photos.dart +++ b/lib/widget/home_photos.dart @@ -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 }); }, ), - 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 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 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 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 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 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 _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 Future _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 } 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 Future _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 } 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, )); diff --git a/lib/widget/my_app.dart b/lib/widget/my_app.dart index 93e6bf0d..41e48c95 100644 --- a/lib/widget/my_app.dart +++ b/lib/widget/my_app.dart @@ -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 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: diff --git a/lib/widget/new_album_dialog.dart b/lib/widget/new_album_dialog.dart index 13f216ef..d2367d36 100644 --- a/lib/widget/new_album_dialog.dart +++ b/lib/widget/new_album_dialog.dart @@ -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 { 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 { 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"); diff --git a/lib/widget/photo_date_time_edit_dialog.dart b/lib/widget/photo_date_time_edit_dialog.dart index d7ec3eae..49ccd7f7 100644 --- a/lib/widget/photo_date_time_edit_dialog.dart +++ b/lib/widget/photo_date_time_edit_dialog.dart @@ -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 { @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 { 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 { 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 { 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 { 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 { 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 { ), 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 { 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 { 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!); diff --git a/lib/widget/root_picker.dart b/lib/widget/root_picker.dart index bfc2a3e8..a5731df0 100644 --- a/lib/widget/root_picker.dart +++ b/lib/widget/root_picker.dart @@ -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 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 Align( alignment: AlignmentDirectional.topStart, child: Text( - AppLocalizations.of(context)!.rootPickerSubHeaderText, + L10n.of(context).rootPickerSubHeaderText, ), ), ], @@ -132,11 +132,11 @@ class _RootPickerState extends State 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 showDialog( context: context, builder: (context) => AlertDialog( - content: Text(AppLocalizations.of(context)! - .rootPickerSkipConfirmationDialogContent), + content: Text( + L10n.of(context).rootPickerSkipConfirmationDialogContent), actions: [ TextButton( onPressed: () { @@ -178,8 +178,7 @@ class _RootPickerState extends State 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 barrierDismissible: false, context: context, builder: (context) => ProcessingDialog( - text: AppLocalizations.of(context)!.genericProcessingDialogContent), + text: L10n.of(context).genericProcessingDialogContent), ); }); } diff --git a/lib/widget/selectable_item_stream_list_mixin.dart b/lib/widget/selectable_item_stream_list_mixin.dart index d38d9211..8918efda 100644 --- a/lib/widget/selectable_item_stream_list_mixin.dart +++ b/lib/widget/selectable_item_stream_list_mixin.dart @@ -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 on State { 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; diff --git a/lib/widget/settings.dart b/lib/widget/settings.dart index fa4920ef..82e12ac5 100644 --- a/lib/widget/settings.dart +++ b/lib/widget/settings.dart @@ -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 { } 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 { 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: [ TextButton( onPressed: () { @@ -190,7 +183,7 @@ class _SettingsState extends State { 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 { } 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(() { diff --git a/lib/widget/setup.dart b/lib/widget/setup.dart index fcbfbda7..fac2fa45 100644 --- a/lib/widget/setup.dart +++ b/lib/widget/setup.dart @@ -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 { 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 { ? [ ElevatedButton( onPressed: _onDonePressed, - child: Text( - AppLocalizations.of(context)!.doneButtonLabel), + child: Text(L10n.of(context).doneButtonLabel), ), ] : [ @@ -83,8 +82,7 @@ class _SetupState extends State { .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( diff --git a/lib/widget/sign_in.dart b/lib/widget/sign_in.dart index 001c3d50..74639508 100644 --- a/lib/widget/sign_in.dart +++ b/lib/widget/sign_in.dart @@ -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 { 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 { 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 { _connect(); } }, - child: Text(AppLocalizations.of(context)! - .connectButtonLabel), + child: Text(L10n.of(context).connectButtonLabel), ), ], ), @@ -159,14 +158,12 @@ class _SignInState extends State { 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 { 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 { 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; }, diff --git a/lib/widget/splash.dart b/lib/widget/splash.dart index 7a7acc8a..b2294c88 100644 --- a/lib/widget/splash.dart +++ b/lib/widget/splash.dart @@ -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 { ), 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 { showDialog( context: context, builder: (context) => AlertDialog( - title: Text(AppLocalizations.of(context)!.changelogTitle), + title: Text(L10n.of(context).changelogTitle), content: SingleChildScrollView( child: Text(change), ), diff --git a/lib/widget/viewer.dart b/lib/widget/viewer.dart index 181e6852..f4615b38 100644 --- a/lib/widget/viewer.dart +++ b/lib/widget/viewer.dart @@ -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 { 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 { 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 { 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 { 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 { 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 { _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 { "[_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 { // 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 { 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 { 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 { 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, )); } diff --git a/lib/widget/viewer_detail_pane.dart b/lib/widget/viewer_detail_pane.dart index a7f679ff..3fb5db91 100644 --- a/lib/widget/viewer_detail_pane.dart +++ b/lib/widget/viewer_detail_pane.dart @@ -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 { 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 { 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 { 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 { _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 { _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 { 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 { 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 { 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 { 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 { // 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 { } 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, ));