diff --git a/.github/workflows/integrate.yaml b/.github/workflows/integrate.yaml index 2223a302..5d255916 100644 --- a/.github/workflows/integrate.yaml +++ b/.github/workflows/integrate.yaml @@ -15,23 +15,16 @@ jobs: flutter-version: ${{ env.FLUTTER_VERSION }} cache: true - run: flutter pub get - - name: workaround for https://github.com/flutter/flutter/issues/148333 - run: | - flutter gen-l10n - flutter pub get - name: Check formatting run: dart format lib/ test/ --set-exit-if-changed - name: Check import formatting run: dart run import_sorter:main --no-comments --exit-if-changed - name: Check license compliance run: dart run license_checker check-licenses -c licenses.yaml --problematic + - run: flutter gen-l10n - run: flutter analyze - name: Apply google services patch run: git apply ./scripts/enable-android-google-services.patch - - name: workaround for https://github.com/flutter/flutter/issues/148333 - run: | - flutter gen-l10n - flutter pub get - run: flutter analyze - run: flutter test diff --git a/.gitignore b/.gitignore index 0ce56e79..cbcd191e 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,8 @@ prime # libolm package /assets/js/package +/lib/l10n + # IntelliJ related *.iml *.ipr diff --git a/l10n.yaml b/l10n.yaml index f74803e6..f324e571 100644 --- a/l10n.yaml +++ b/l10n.yaml @@ -5,4 +5,5 @@ output-class: L10n preferred-supported-locales: ["en"] # Workaround from https://github.com/flutter/flutter/issues/148333#issuecomment-2122333090 synthetic-package: false +output-dir: lib/l10n nullable-getter: false diff --git a/lib/pages/archive/archive.dart b/lib/pages/archive/archive.dart index a3c35c34..580c04d0 100644 --- a/lib/pages/archive/archive.dart +++ b/lib/pages/archive/archive.dart @@ -1,10 +1,10 @@ import 'package:flutter/material.dart'; import 'package:adaptive_dialog/adaptive_dialog.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/archive/archive_view.dart'; import 'package:fluffychat/widgets/matrix.dart'; @@ -42,10 +42,10 @@ class ArchiveController extends State { if (await showOkCancelAlertDialog( useRootNavigator: false, context: context, - title: L10n.of(context)!.areYouSure, - okLabel: L10n.of(context)!.yes, - cancelLabel: L10n.of(context)!.cancel, - message: L10n.of(context)!.clearArchive, + title: L10n.of(context).areYouSure, + okLabel: L10n.of(context).yes, + cancelLabel: L10n.of(context).cancel, + message: L10n.of(context).clearArchive, ) != OkCancelResult.ok) { return; diff --git a/lib/pages/archive/archive_view.dart b/lib/pages/archive/archive_view.dart index dc73addb..f9446c26 100644 --- a/lib/pages/archive/archive_view.dart +++ b/lib/pages/archive/archive_view.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/archive/archive.dart'; import 'package:fluffychat/pages/chat_list/chat_list_item.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; @@ -20,14 +20,14 @@ class ArchiveView extends StatelessWidget { builder: (BuildContext context, snapshot) => Scaffold( appBar: AppBar( leading: const Center(child: BackButton()), - title: Text(L10n.of(context)!.archive), + title: Text(L10n.of(context).archive), actions: [ if (snapshot.data?.isNotEmpty ?? false) Padding( padding: const EdgeInsets.all(8.0), child: TextButton.icon( onPressed: controller.forgetAllAction, - label: Text(L10n.of(context)!.clearArchive), + label: Text(L10n.of(context).clearArchive), icon: const Icon(Icons.cleaning_services_outlined), ), ), @@ -40,7 +40,7 @@ class ArchiveView extends StatelessWidget { if (snapshot.hasError) { return Center( child: Text( - L10n.of(context)!.oopsSomethingWentWrong, + L10n.of(context).oopsSomethingWentWrong, textAlign: TextAlign.center, ), ); diff --git a/lib/pages/bootstrap/bootstrap_dialog.dart b/lib/pages/bootstrap/bootstrap_dialog.dart index e1c4cde7..ec2ac2cd 100644 --- a/lib/pages/bootstrap/bootstrap_dialog.dart +++ b/lib/pages/bootstrap/bootstrap_dialog.dart @@ -1,13 +1,13 @@ import 'package:flutter/material.dart'; import 'package:adaptive_dialog/adaptive_dialog.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:matrix/encryption.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/themes.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/error_reporter.dart'; import 'package:fluffychat/utils/fluffy_share.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; @@ -61,12 +61,12 @@ class BootstrapDialogState extends State { String _getSecureStorageLocalizedName() { if (PlatformInfos.isAndroid) { - return L10n.of(context)!.storeInAndroidKeystore; + return L10n.of(context).storeInAndroidKeystore; } if (PlatformInfos.isIOS || PlatformInfos.isMacOS) { - return L10n.of(context)!.storeInAppleKeyChain; + return L10n.of(context).storeInAppleKeyChain; } - return L10n.of(context)!.storeSecurlyOnThisDevice; + return L10n.of(context).storeSecurlyOnThisDevice; } @override @@ -91,12 +91,12 @@ class BootstrapDialogState extends State { _wipe ??= widget.wipe; final buttons = []; Widget body = const CircularProgressIndicator.adaptive(); - titleText = L10n.of(context)!.loadingPleaseWait; + titleText = L10n.of(context).loadingPleaseWait; if (bootstrap.newSsssKey?.recoveryKey != null && _recoveryKeyStored == false) { final key = bootstrap.newSsssKey!.recoveryKey; - titleText = L10n.of(context)!.recoveryKey; + titleText = L10n.of(context).recoveryKey; return Scaffold( appBar: AppBar( centerTitle: true, @@ -104,7 +104,7 @@ class BootstrapDialogState extends State { icon: const Icon(Icons.close), onPressed: Navigator.of(context).pop, ), - title: Text(L10n.of(context)!.recoveryKey), + title: Text(L10n.of(context).recoveryKey), ), body: Center( child: ConstrainedBox( @@ -122,7 +122,7 @@ class BootstrapDialogState extends State { color: Theme.of(context).colorScheme.primary, ), ), - subtitle: Text(L10n.of(context)!.chatBackupDescription), + subtitle: Text(L10n.of(context).chatBackupDescription), ), const Divider( height: 32, @@ -152,7 +152,7 @@ class BootstrapDialogState extends State { }, title: Text(_getSecureStorageLocalizedName()), subtitle: - Text(L10n.of(context)!.storeInSecureStorageDescription), + Text(L10n.of(context).storeInSecureStorageDescription), ), const SizedBox(height: 16), CheckboxListTile.adaptive( @@ -163,13 +163,13 @@ class BootstrapDialogState extends State { FluffyShare.share(key!, context); setState(() => _recoveryKeyCopied = true); }, - title: Text(L10n.of(context)!.copyToClipboard), - subtitle: Text(L10n.of(context)!.saveKeyManuallyDescription), + title: Text(L10n.of(context).copyToClipboard), + subtitle: Text(L10n.of(context).saveKeyManuallyDescription), ), const SizedBox(height: 16), ElevatedButton.icon( icon: const Icon(Icons.check_outlined), - label: Text(L10n.of(context)!.next), + label: Text(L10n.of(context).next), onPressed: (_recoveryKeyCopied || _storeInSecureStorage == true) ? () { @@ -226,7 +226,7 @@ class BootstrapDialogState extends State { icon: const Icon(Icons.close), onPressed: Navigator.of(context).pop, ), - title: Text(L10n.of(context)!.chatBackup), + title: Text(L10n.of(context).chatBackup), ), body: Center( child: ConstrainedBox( @@ -244,7 +244,7 @@ class BootstrapDialogState extends State { color: Theme.of(context).colorScheme.primary, ), subtitle: Text( - L10n.of(context)!.pleaseEnterRecoveryKeyDescription, + L10n.of(context).pleaseEnterRecoveryKeyDescription, ), ), const Divider(height: 32), @@ -264,7 +264,7 @@ class BootstrapDialogState extends State { fontFamily: Theme.of(context).textTheme.bodyLarge?.fontFamily, ), - hintText: L10n.of(context)!.recoveryKey, + hintText: L10n.of(context).recoveryKey, errorText: _recoveryKeyInputError, errorMaxLines: 2, ), @@ -279,7 +279,7 @@ class BootstrapDialogState extends State { icon: _recoveryKeyInputLoading ? const CircularProgressIndicator.adaptive() : const Icon(Icons.lock_open_outlined), - label: Text(L10n.of(context)!.unlockOldMessages), + label: Text(L10n.of(context).unlockOldMessages), onPressed: _recoveryKeyInputLoading ? null : () async { @@ -322,7 +322,7 @@ class BootstrapDialogState extends State { } on FormatException catch (_) { setState( () => _recoveryKeyInputError = - L10n.of(context)!.wrongRecoveryKey, + L10n.of(context).wrongRecoveryKey, ); } catch (e, s) { ErrorReporter( @@ -346,7 +346,7 @@ class BootstrapDialogState extends State { const Expanded(child: Divider()), Padding( padding: const EdgeInsets.all(12.0), - child: Text(L10n.of(context)!.or), + child: Text(L10n.of(context).or), ), const Expanded(child: Divider()), ], @@ -354,17 +354,17 @@ class BootstrapDialogState extends State { const SizedBox(height: 16), ElevatedButton.icon( icon: const Icon(Icons.cast_connected_outlined), - label: Text(L10n.of(context)!.transferFromAnotherDevice), + label: Text(L10n.of(context).transferFromAnotherDevice), onPressed: _recoveryKeyInputLoading ? null : () async { final consent = await showOkCancelAlertDialog( context: context, - title: L10n.of(context)!.verifyOtherDevice, - message: L10n.of(context)! + title: L10n.of(context).verifyOtherDevice, + message: L10n.of(context) .verifyOtherDeviceDescription, - okLabel: L10n.of(context)!.ok, - cancelLabel: L10n.of(context)!.cancel, + okLabel: L10n.of(context).ok, + cancelLabel: L10n.of(context).cancel, fullyCapitalizedForMaterial: false, ); if (consent != OkCancelResult.ok) return; @@ -392,7 +392,7 @@ class BootstrapDialogState extends State { Theme.of(context).colorScheme.onErrorContainer, ), icon: const Icon(Icons.delete_outlined), - label: Text(L10n.of(context)!.recoveryKeyLost), + label: Text(L10n.of(context).recoveryKeyLost), onPressed: _recoveryKeyInputLoading ? null : () async { @@ -400,10 +400,10 @@ class BootstrapDialogState extends State { await showOkCancelAlertDialog( useRootNavigator: false, context: context, - title: L10n.of(context)!.recoveryKeyLost, - message: L10n.of(context)!.wipeChatBackup, - okLabel: L10n.of(context)!.ok, - cancelLabel: L10n.of(context)!.cancel, + title: L10n.of(context).recoveryKeyLost, + message: L10n.of(context).wipeChatBackup, + okLabel: L10n.of(context).ok, + cancelLabel: L10n.of(context).cancel, isDestructiveAction: true, )) { setState(() => _createBootstrap(true)); @@ -441,18 +441,18 @@ class BootstrapDialogState extends State { ); break; case BootstrapState.error: - titleText = L10n.of(context)!.oopsSomethingWentWrong; + titleText = L10n.of(context).oopsSomethingWentWrong; body = const Icon(Icons.error_outline, color: Colors.red, size: 80); buttons.add( OutlinedButton( onPressed: () => Navigator.of(context, rootNavigator: false).pop(false), - child: Text(L10n.of(context)!.close), + child: Text(L10n.of(context).close), ), ); break; case BootstrapState.done: - titleText = L10n.of(context)!.everythingReady; + titleText = L10n.of(context).everythingReady; body = Column( mainAxisSize: MainAxisSize.min, children: [ @@ -463,7 +463,7 @@ class BootstrapDialogState extends State { ), const SizedBox(height: 16), Text( - L10n.of(context)!.yourChatBackupHasBeenSetUp, + L10n.of(context).yourChatBackupHasBeenSetUp, style: const TextStyle(fontSize: 20), ), const SizedBox(height: 16), @@ -473,7 +473,7 @@ class BootstrapDialogState extends State { OutlinedButton( onPressed: () => Navigator.of(context, rootNavigator: false).pop(false), - child: Text(L10n.of(context)!.close), + child: Text(L10n.of(context).close), ), ); break; @@ -488,7 +488,7 @@ class BootstrapDialogState extends State { Navigator.of(context, rootNavigator: false).pop(true), ), ), - title: Text(titleText ?? L10n.of(context)!.loadingPleaseWait), + title: Text(titleText ?? L10n.of(context).loadingPleaseWait), ), body: Center( child: Column( diff --git a/lib/pages/chat/add_widget_tile.dart b/lib/pages/chat/add_widget_tile.dart index 11e3cce5..88a4022d 100644 --- a/lib/pages/chat/add_widget_tile.dart +++ b/lib/pages/chat/add_widget_tile.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat/add_widget_tile_view.dart'; class AddWidgetTile extends StatefulWidget { @@ -43,14 +43,14 @@ class AddWidgetTileState extends State { if (name.length < 3) { setState(() { - nameError = L10n.of(context)!.widgetNameError; + nameError = L10n.of(context).widgetNameError; }); return; } if (uri == null || uri.scheme != 'https') { setState(() { - urlError = L10n.of(context)!.widgetUrlError; + urlError = L10n.of(context).widgetUrlError; }); return; } @@ -75,7 +75,7 @@ class AddWidgetTileState extends State { Navigator.of(context).pop(); } catch (e) { ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(L10n.of(context)!.errorAddingWidget)), + SnackBar(content: Text(L10n.of(context).errorAddingWidget)), ); } } diff --git a/lib/pages/chat/add_widget_tile_view.dart b/lib/pages/chat/add_widget_tile_view.dart index d7ac53ef..3def5030 100644 --- a/lib/pages/chat/add_widget_tile_view.dart +++ b/lib/pages/chat/add_widget_tile_view.dart @@ -1,8 +1,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; - +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat/add_widget_tile.dart'; class AddWidgetTileView extends StatelessWidget { @@ -13,7 +12,7 @@ class AddWidgetTileView extends StatelessWidget { @override Widget build(BuildContext context) { return ExpansionTile( - title: Text(L10n.of(context)!.addWidget), + title: Text(L10n.of(context).addWidget), leading: const Icon(Icons.add), initiallyExpanded: controller.initiallyExpanded, children: [ @@ -21,10 +20,10 @@ class AddWidgetTileView extends StatelessWidget { groupValue: controller.widgetType, padding: const EdgeInsets.all(8), children: { - 'm.etherpad': Text(L10n.of(context)!.widgetEtherpad), - 'm.jitsi': Text(L10n.of(context)!.widgetJitsi), - 'm.video': Text(L10n.of(context)!.widgetVideo), - 'm.custom': Text(L10n.of(context)!.widgetCustom), + 'm.etherpad': Text(L10n.of(context).widgetEtherpad), + 'm.jitsi': Text(L10n.of(context).widgetJitsi), + 'm.video': Text(L10n.of(context).widgetVideo), + 'm.custom': Text(L10n.of(context).widgetCustom), }.map( (key, value) => MapEntry( key, @@ -43,7 +42,7 @@ class AddWidgetTileView extends StatelessWidget { autofocus: true, decoration: InputDecoration( prefixIcon: const Icon(Icons.label), - label: Text(L10n.of(context)!.widgetName), + label: Text(L10n.of(context).widgetName), errorText: controller.nameError, ), ), @@ -54,7 +53,7 @@ class AddWidgetTileView extends StatelessWidget { controller: controller.urlController, decoration: InputDecoration( prefixIcon: const Icon(Icons.add_link), - label: Text(L10n.of(context)!.link), + label: Text(L10n.of(context).link), errorText: controller.urlError, ), ), @@ -63,7 +62,7 @@ class AddWidgetTileView extends StatelessWidget { children: [ TextButton( onPressed: controller.addWidget, - child: Text(L10n.of(context)!.addWidget), + child: Text(L10n.of(context).addWidget), ), ], ), diff --git a/lib/pages/chat/chat.dart b/lib/pages/chat/chat.dart index 2872f9b1..c84a53c5 100644 --- a/lib/pages/chat/chat.dart +++ b/lib/pages/chat/chat.dart @@ -10,7 +10,6 @@ import 'package:desktop_drop/desktop_drop.dart'; import 'package:device_info_plus/device_info_plus.dart'; import 'package:emoji_picker_flutter/emoji_picker_flutter.dart'; import 'package:file_picker/file_picker.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:go_router/go_router.dart'; import 'package:image_picker/image_picker.dart'; @@ -23,6 +22,7 @@ import 'package:universal_html/html.dart' as html; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/config/themes.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat/chat_view.dart'; import 'package:fluffychat/pages/chat/event_info_dialog.dart'; import 'package:fluffychat/pages/chat/recording_dialog.dart'; @@ -56,12 +56,11 @@ class ChatPage extends StatelessWidget { final room = Matrix.of(context).client.getRoomById(roomId); if (room == null) { return Scaffold( - appBar: AppBar(title: Text(L10n.of(context)!.oopsSomethingWentWrong)), + appBar: AppBar(title: Text(L10n.of(context).oopsSomethingWentWrong)), body: Center( child: Padding( padding: const EdgeInsets.all(16), - child: - Text(L10n.of(context)!.youAreNoLongerParticipatingInThisChat), + child: Text(L10n.of(context).youAreNoLongerParticipatingInThisChat), ), ), ); @@ -454,7 +453,7 @@ class ChatController extends State final commandMatch = RegExp(r'^\/(\w+)').firstMatch(sendController.text); if (commandMatch != null && !sendingClient.commands.keys.contains(commandMatch[1]!.toLowerCase())) { - final l10n = L10n.of(context)!; + final l10n = L10n.of(context); final dialogResult = await showOkCancelAlertDialog( context: context, title: l10n.commandInvalid, @@ -602,9 +601,9 @@ class ChatController extends State if (info.version.sdkInt < 19) { showOkAlertDialog( context: context, - title: L10n.of(context)!.unsupportedAndroidVersion, - message: L10n.of(context)!.unsupportedAndroidVersionLong, - okLabel: L10n.of(context)!.close, + title: L10n.of(context).unsupportedAndroidVersion, + message: L10n.of(context).unsupportedAndroidVersionLong, + okLabel: L10n.of(context).close, ); return; } @@ -684,12 +683,12 @@ class ChatController extends State if (selectedEvents.length == 1) { return selectedEvents.first .getDisplayEvent(timeline!) - .calcLocalizedBodyFallback(MatrixLocals(L10n.of(context)!)); + .calcLocalizedBodyFallback(MatrixLocals(L10n.of(context))); } for (final event in selectedEvents) { if (copyString.isNotEmpty) copyString += '\n\n'; copyString += event.getDisplayEvent(timeline!).calcLocalizedBodyFallback( - MatrixLocals(L10n.of(context)!), + MatrixLocals(L10n.of(context)), withSenderNamePrefix: true, ); } @@ -708,32 +707,32 @@ class ChatController extends State final event = selectedEvents.single; final score = await showConfirmationDialog( context: context, - title: L10n.of(context)!.reportMessage, - message: L10n.of(context)!.howOffensiveIsThisContent, - cancelLabel: L10n.of(context)!.cancel, - okLabel: L10n.of(context)!.ok, + title: L10n.of(context).reportMessage, + message: L10n.of(context).howOffensiveIsThisContent, + cancelLabel: L10n.of(context).cancel, + okLabel: L10n.of(context).ok, actions: [ AlertDialogAction( key: -100, - label: L10n.of(context)!.extremeOffensive, + label: L10n.of(context).extremeOffensive, ), AlertDialogAction( key: -50, - label: L10n.of(context)!.offensive, + label: L10n.of(context).offensive, ), AlertDialogAction( key: 0, - label: L10n.of(context)!.inoffensive, + label: L10n.of(context).inoffensive, ), ], ); if (score == null) return; final reason = await showTextInputDialog( context: context, - title: L10n.of(context)!.whyDoYouWantToReportThis, - okLabel: L10n.of(context)!.ok, - cancelLabel: L10n.of(context)!.cancel, - textFields: [DialogTextField(hintText: L10n.of(context)!.reason)], + title: L10n.of(context).whyDoYouWantToReportThis, + okLabel: L10n.of(context).ok, + cancelLabel: L10n.of(context).cancel, + textFields: [DialogTextField(hintText: L10n.of(context).reason)], ); if (reason == null || reason.single.isEmpty) return; final result = await showFutureLoadingDialog( @@ -751,7 +750,7 @@ class ChatController extends State selectedEvents.clear(); }); ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(L10n.of(context)!.contentHasBeenReported)), + SnackBar(content: Text(L10n.of(context).contentHasBeenReported)), ); } @@ -778,16 +777,16 @@ class ChatController extends State final reasonInput = selectedEvents.any((event) => event.status.isSent) ? await showTextInputDialog( context: context, - title: L10n.of(context)!.redactMessage, - message: L10n.of(context)!.redactMessageDescription, + title: L10n.of(context).redactMessage, + message: L10n.of(context).redactMessageDescription, isDestructiveAction: true, textFields: [ DialogTextField( - hintText: L10n.of(context)!.optionalRedactReason, + hintText: L10n.of(context).optionalRedactReason, ), ], - okLabel: L10n.of(context)!.remove, - cancelLabel: L10n.of(context)!.cancel, + okLabel: L10n.of(context).remove, + cancelLabel: L10n.of(context).cancel, ) : []; if (reasonInput == null) return; @@ -1038,7 +1037,7 @@ class ChatController extends State editEvent = selectedEvents.first; sendController.text = editEvent!.getDisplayEvent(timeline!).calcLocalizedBodyFallback( - MatrixLocals(L10n.of(context)!), + MatrixLocals(L10n.of(context)), withSenderNamePrefix: false, hideReply: true, ); @@ -1051,13 +1050,13 @@ class ChatController extends State if (OkCancelResult.ok != await showOkCancelAlertDialog( context: context, - title: L10n.of(context)!.goToTheNewRoom, + title: L10n.of(context).goToTheNewRoom, message: room .getState(EventTypes.RoomTombstone)! .parsedTombstoneContent .body, - okLabel: L10n.of(context)!.ok, - cancelLabel: L10n.of(context)!.cancel, + okLabel: L10n.of(context).ok, + cancelLabel: L10n.of(context).cancel, )) { return; } @@ -1140,10 +1139,10 @@ class ChatController extends State unpinEvent(String eventId) async { final response = await showOkCancelAlertDialog( context: context, - title: L10n.of(context)!.unpin, - message: L10n.of(context)!.confirmEventUnpin, - okLabel: L10n.of(context)!.unpin, - cancelLabel: L10n.of(context)!.cancel, + title: L10n.of(context).unpin, + message: L10n.of(context).confirmEventUnpin, + okLabel: L10n.of(context).unpin, + cancelLabel: L10n.of(context).cancel, ); if (response == OkCancelResult.ok) { final events = room.pinnedEventIds @@ -1237,26 +1236,26 @@ class ChatController extends State Navigator.pop(context); showOkAlertDialog( context: context, - title: L10n.of(context)!.unsupportedAndroidVersion, - message: L10n.of(context)!.unsupportedAndroidVersionLong, - okLabel: L10n.of(context)!.close, + title: L10n.of(context).unsupportedAndroidVersion, + message: L10n.of(context).unsupportedAndroidVersionLong, + okLabel: L10n.of(context).close, ); } }); } final callType = await showModalActionSheet( context: context, - title: L10n.of(context)!.warning, - message: L10n.of(context)!.videoCallsBetaWarning, - cancelLabel: L10n.of(context)!.cancel, + title: L10n.of(context).warning, + message: L10n.of(context).videoCallsBetaWarning, + cancelLabel: L10n.of(context).cancel, actions: [ SheetAction( - label: L10n.of(context)!.voiceCall, + label: L10n.of(context).voiceCall, icon: Icons.phone_outlined, key: CallType.kVoice, ), SheetAction( - label: L10n.of(context)!.videoCall, + label: L10n.of(context).videoCall, icon: Icons.video_call_outlined, key: CallType.kVideo, ), diff --git a/lib/pages/chat/chat_app_bar_title.dart b/lib/pages/chat/chat_app_bar_title.dart index 5d3f3445..4ffe2fd8 100644 --- a/lib/pages/chat/chat_app_bar_title.dart +++ b/lib/pages/chat/chat_app_bar_title.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:go_router/go_router.dart'; import 'package:fluffychat/config/themes.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat/chat.dart'; import 'package:fluffychat/utils/date_time_extension.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; @@ -36,7 +36,7 @@ class ChatAppBarTitle extends StatelessWidget { child: Avatar( mxContent: room.avatar, name: room.getLocalizedDisplayname( - MatrixLocals(L10n.of(context)!), + MatrixLocals(L10n.of(context)), ), size: 32, ), @@ -47,7 +47,7 @@ class ChatAppBarTitle extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - room.getLocalizedDisplayname(MatrixLocals(L10n.of(context)!)), + room.getLocalizedDisplayname(MatrixLocals(L10n.of(context))), maxLines: 1, overflow: TextOverflow.ellipsis, style: const TextStyle( @@ -63,13 +63,13 @@ class ChatAppBarTitle extends StatelessWidget { final style = Theme.of(context).textTheme.bodySmall; if (presence?.currentlyActive == true) { return Text( - L10n.of(context)!.currentlyActive, + L10n.of(context).currentlyActive, style: style, ); } if (lastActiveTimestamp != null) { return Text( - L10n.of(context)!.lastActiveAgo( + L10n.of(context).lastActiveAgo( lastActiveTimestamp.localizedTimeShort(context), ), style: style, diff --git a/lib/pages/chat/chat_emoji_picker.dart b/lib/pages/chat/chat_emoji_picker.dart index 153abad6..6c53583a 100644 --- a/lib/pages/chat/chat_emoji_picker.dart +++ b/lib/pages/chat/chat_emoji_picker.dart @@ -1,10 +1,10 @@ import 'package:flutter/material.dart'; import 'package:emoji_picker_flutter/emoji_picker_flutter.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/themes.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat/sticker_picker_dialog.dart'; import 'chat.dart'; @@ -30,8 +30,8 @@ class ChatEmojiPicker extends StatelessWidget { children: [ TabBar( tabs: [ - Tab(text: L10n.of(context)!.emojis), - Tab(text: L10n.of(context)!.stickers), + Tab(text: L10n.of(context).emojis), + Tab(text: L10n.of(context).stickers), ], ), Expanded( @@ -98,7 +98,7 @@ class NoRecent extends StatelessWidget { @override Widget build(BuildContext context) { return Text( - L10n.of(context)!.emoteKeyboardNoRecents, + L10n.of(context).emoteKeyboardNoRecents, style: Theme.of(context).textTheme.bodyLarge, ); } diff --git a/lib/pages/chat/chat_input_row.dart b/lib/pages/chat/chat_input_row.dart index b548c606..37867b66 100644 --- a/lib/pages/chat/chat_input_row.dart +++ b/lib/pages/chat/chat_input_row.dart @@ -2,11 +2,11 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:animations/animations.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:keyboard_shortcuts/keyboard_shortcuts.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/matrix.dart'; @@ -43,7 +43,7 @@ class ChatInputRow extends StatelessWidget { child: Row( children: [ const Icon(Icons.delete), - Text(L10n.of(context)!.delete), + Text(L10n.of(context).delete), ], ), ), @@ -56,7 +56,7 @@ class ChatInputRow extends StatelessWidget { child: Row( children: [ const Icon(Icons.keyboard_arrow_left_outlined), - Text(L10n.of(context)!.forward), + Text(L10n.of(context).forward), ], ), ), @@ -72,7 +72,7 @@ class ChatInputRow extends StatelessWidget { onPressed: controller.replyAction, child: Row( children: [ - Text(L10n.of(context)!.reply), + Text(L10n.of(context).reply), const Icon(Icons.keyboard_arrow_right), ], ), @@ -84,7 +84,7 @@ class ChatInputRow extends StatelessWidget { onPressed: controller.sendAgainAction, child: Row( children: [ - Text(L10n.of(context)!.tryToSendAgain), + Text(L10n.of(context).tryToSendAgain), const SizedBox(width: 4), const Icon(Icons.send_outlined, size: 16), ], @@ -102,7 +102,7 @@ class ChatInputRow extends StatelessWidget { }, onKeysPressed: () => controller.onAddPopupMenuButtonSelected('file'), - helpLabel: L10n.of(context)!.sendFile, + helpLabel: L10n.of(context).sendFile, child: AnimatedContainer( duration: FluffyThemes.animationDuration, curve: FluffyThemes.animationCurve, @@ -124,7 +124,7 @@ class ChatInputRow extends StatelessWidget { foregroundColor: Colors.white, child: Icon(Icons.attachment_outlined), ), - title: Text(L10n.of(context)!.sendFile), + title: Text(L10n.of(context).sendFile), contentPadding: const EdgeInsets.all(0), ), ), @@ -136,7 +136,7 @@ class ChatInputRow extends StatelessWidget { foregroundColor: Colors.white, child: Icon(Icons.image_outlined), ), - title: Text(L10n.of(context)!.sendImage), + title: Text(L10n.of(context).sendImage), contentPadding: const EdgeInsets.all(0), ), ), @@ -149,7 +149,7 @@ class ChatInputRow extends StatelessWidget { foregroundColor: Colors.white, child: Icon(Icons.camera_alt_outlined), ), - title: Text(L10n.of(context)!.openCamera), + title: Text(L10n.of(context).openCamera), contentPadding: const EdgeInsets.all(0), ), ), @@ -162,7 +162,7 @@ class ChatInputRow extends StatelessWidget { foregroundColor: Colors.white, child: Icon(Icons.videocam_outlined), ), - title: Text(L10n.of(context)!.openVideoCamera), + title: Text(L10n.of(context).openVideoCamera), contentPadding: const EdgeInsets.all(0), ), ), @@ -175,7 +175,7 @@ class ChatInputRow extends StatelessWidget { foregroundColor: Colors.white, child: Icon(Icons.gps_fixed_outlined), ), - title: Text(L10n.of(context)!.shareLocation), + title: Text(L10n.of(context).shareLocation), contentPadding: const EdgeInsets.all(0), ), ), @@ -193,9 +193,9 @@ class ChatInputRow extends StatelessWidget { LogicalKeyboardKey.keyE, }, onKeysPressed: controller.emojiPickerAction, - helpLabel: L10n.of(context)!.emojis, + helpLabel: L10n.of(context).emojis, child: IconButton( - tooltip: L10n.of(context)!.emojis, + tooltip: L10n.of(context).emojis, icon: PageTransitionSwitcher( transitionBuilder: ( Widget child, @@ -254,7 +254,7 @@ class ChatInputRow extends StatelessWidget { bottom: 6.0, top: 3.0, ), - hintText: L10n.of(context)!.writeAMessage, + hintText: L10n.of(context).writeAMessage, hintMaxLines: 1, border: InputBorder.none, enabledBorder: InputBorder.none, @@ -271,7 +271,7 @@ class ChatInputRow extends StatelessWidget { child: PlatformInfos.platformCanRecord && controller.sendController.text.isEmpty ? FloatingActionButton.small( - tooltip: L10n.of(context)!.voiceMessage, + tooltip: L10n.of(context).voiceMessage, onPressed: controller.voiceMessageAction, elevation: 0, heroTag: null, @@ -284,7 +284,7 @@ class ChatInputRow extends StatelessWidget { child: const Icon(Icons.mic_none_outlined), ) : FloatingActionButton.small( - tooltip: L10n.of(context)!.send, + tooltip: L10n.of(context).send, onPressed: controller.send, elevation: 0, heroTag: null, diff --git a/lib/pages/chat/chat_view.dart b/lib/pages/chat/chat_view.dart index 9bf4932a..1020c3a3 100644 --- a/lib/pages/chat/chat_view.dart +++ b/lib/pages/chat/chat_view.dart @@ -2,11 +2,11 @@ import 'package:flutter/material.dart'; import 'package:badges/badges.dart'; import 'package:desktop_drop/desktop_drop.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/themes.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat/chat.dart'; import 'package:fluffychat/pages/chat/chat_app_bar_list_tile.dart'; import 'package:fluffychat/pages/chat/chat_app_bar_title.dart'; @@ -38,12 +38,12 @@ class ChatView extends StatelessWidget { if (controller.canEditSelectedEvents) IconButton( icon: const Icon(Icons.edit_outlined), - tooltip: L10n.of(context)!.edit, + tooltip: L10n.of(context).edit, onPressed: controller.editSelectedEventAction, ), IconButton( icon: const Icon(Icons.copy_outlined), - tooltip: L10n.of(context)!.copy, + tooltip: L10n.of(context).copy, onPressed: controller.copyEventsAction, ), if (controller.canSaveSelectedEvent) @@ -51,7 +51,7 @@ class ChatView extends StatelessWidget { Builder( builder: (context) => IconButton( icon: Icon(Icons.adaptive.share), - tooltip: L10n.of(context)!.share, + tooltip: L10n.of(context).share, onPressed: () => controller.saveSelectedEvent(context), ), ), @@ -59,12 +59,12 @@ class ChatView extends StatelessWidget { IconButton( icon: const Icon(Icons.push_pin_outlined), onPressed: controller.pinEvent, - tooltip: L10n.of(context)!.pinMessage, + tooltip: L10n.of(context).pinMessage, ), if (controller.canRedactSelectedEvents) IconButton( icon: const Icon(Icons.delete_outlined), - tooltip: L10n.of(context)!.redactMessage, + tooltip: L10n.of(context).redactMessage, onPressed: controller.redactEventsAction, ), if (controller.selectedEvents.length == 1) @@ -88,7 +88,7 @@ class ChatView extends StatelessWidget { children: [ const Icon(Icons.info_outlined), const SizedBox(width: 12), - Text(L10n.of(context)!.messageInfo), + Text(L10n.of(context).messageInfo), ], ), ), @@ -103,7 +103,7 @@ class ChatView extends StatelessWidget { color: Colors.red, ), const SizedBox(width: 12), - Text(L10n.of(context)!.reportMessage), + Text(L10n.of(context).reportMessage), ], ), ), @@ -117,7 +117,7 @@ class ChatView extends StatelessWidget { IconButton( onPressed: controller.onPhoneButtonTap, icon: const Icon(Icons.call_outlined), - tooltip: L10n.of(context)!.placeCall, + tooltip: L10n.of(context).placeCall, ), EncryptionButton(controller.room), ChatSettingsPopupMenu(controller.room, true), @@ -179,7 +179,7 @@ class ChatView extends StatelessWidget { ? IconButton( icon: const Icon(Icons.close), onPressed: controller.clearSelectedEvents, - tooltip: L10n.of(context)!.close, + tooltip: L10n.of(context).close, color: Theme.of(context).colorScheme.primary, ) : UnreadRoomsBadge( @@ -205,7 +205,7 @@ class ChatView extends StatelessWidget { ), trailing: TextButton( onPressed: controller.goToNewRoomAction, - child: Text(L10n.of(context)!.goToTheNewRoom), + child: Text(L10n.of(context).goToTheNewRoom), ), ), if (scrollUpBannerEventId != null) @@ -214,13 +214,13 @@ class ChatView extends StatelessWidget { color: Theme.of(context).colorScheme.onSurfaceVariant, icon: const Icon(Icons.close), - tooltip: L10n.of(context)!.close, + tooltip: L10n.of(context).close, onPressed: () { controller.discardScrollUpBannerEventId(); controller.setReadMarker(); }, ), - title: L10n.of(context)!.jumpToLastReadMessage, + title: L10n.of(context).jumpToLastReadMessage, trailing: TextButton( onPressed: () { controller.scrollToEventId( @@ -228,7 +228,7 @@ class ChatView extends StatelessWidget { ); controller.discardScrollUpBannerEventId(); }, - child: Text(L10n.of(context)!.jump), + child: Text(L10n.of(context).jump), ), ), ], @@ -326,7 +326,7 @@ class ChatView extends StatelessWidget { ), onPressed: controller.leaveChat, label: Text( - L10n.of(context)!.leave, + L10n.of(context).leave, ), ), TextButton.icon( @@ -340,7 +340,7 @@ class ChatView extends StatelessWidget { ), onPressed: controller.recreateChat, label: Text( - L10n.of(context)!.reopenChat, + L10n.of(context).reopenChat, ), ), ], diff --git a/lib/pages/chat/command_hints.dart b/lib/pages/chat/command_hints.dart index ccc405aa..0ef5c19a 100644 --- a/lib/pages/chat/command_hints.dart +++ b/lib/pages/chat/command_hints.dart @@ -1,6 +1,6 @@ // This file is auto-generated using scripts/generate_command_hints_glue.sh. -import 'package:flutter_gen/gen_l10n/l10n.dart'; +import 'package:fluffychat/l10n/l10n.dart'; String commandExample(String command) { switch (command) { diff --git a/lib/pages/chat/encryption_button.dart b/lib/pages/chat/encryption_button.dart index c68a1c97..652d9f1c 100644 --- a/lib/pages/chat/encryption_button.dart +++ b/lib/pages/chat/encryption_button.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import '../../widgets/matrix.dart'; class EncryptionButton extends StatelessWidget { @@ -25,8 +25,8 @@ class EncryptionButton extends StatelessWidget { : Future.value(EncryptionHealthState.allVerified), builder: (BuildContext context, snapshot) => IconButton( tooltip: room.encrypted - ? L10n.of(context)!.encrypted - : L10n.of(context)!.encryptionNotEnabled, + ? L10n.of(context).encrypted + : L10n.of(context).encryptionNotEnabled, icon: Icon( room.encrypted ? Icons.lock_outlined : Icons.lock_open_outlined, size: 20, diff --git a/lib/pages/chat/event_info_dialog.dart b/lib/pages/chat/event_info_dialog.dart index 38acdc84..d6c9da8c 100644 --- a/lib/pages/chat/event_info_dialog.dart +++ b/lib/pages/chat/event_info_dialog.dart @@ -2,10 +2,10 @@ import 'dart:convert'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/adaptive_bottom_sheet.dart'; import 'package:fluffychat/utils/date_time_extension.dart'; import 'package:fluffychat/widgets/avatar.dart'; @@ -14,7 +14,7 @@ extension EventInfoDialogExtension on Event { void showInfoDialog(BuildContext context) => showAdaptiveBottomSheet( context: context, builder: (context) => - EventInfoDialog(l10n: L10n.of(context)!, event: this), + EventInfoDialog(l10n: L10n.of(context), event: this), ); } @@ -38,11 +38,11 @@ class EventInfoDialog extends StatelessWidget { Widget build(BuildContext context) { return Scaffold( appBar: AppBar( - title: Text(L10n.of(context)!.messageInfo), + title: Text(L10n.of(context).messageInfo), leading: IconButton( icon: const Icon(Icons.arrow_downward_outlined), onPressed: Navigator.of(context, rootNavigator: false).pop, - tooltip: L10n.of(context)!.close, + tooltip: L10n.of(context).close, ), ), body: ListView( @@ -54,20 +54,20 @@ class EventInfoDialog extends StatelessWidget { client: event.room.client, presenceUserId: event.senderId, ), - title: Text(L10n.of(context)!.sender), + title: Text(L10n.of(context).sender), subtitle: Text( '${event.senderFromMemoryOrFallback.calcDisplayname()} [${event.senderId}]', ), ), ListTile( - title: Text(L10n.of(context)!.time), + title: Text(L10n.of(context).time), subtitle: Text(event.originServerTs.localizedTime(context)), ), ListTile( - title: Text(L10n.of(context)!.messageType), + title: Text(L10n.of(context).messageType), subtitle: Text(event.humanreadableType), ), - ListTile(title: Text('${L10n.of(context)!.sourceCode}:')), + ListTile(title: Text('${L10n.of(context).sourceCode}:')), Padding( padding: const EdgeInsets.all(12.0), child: Material( diff --git a/lib/pages/chat/events/cute_events.dart b/lib/pages/chat/events/cute_events.dart index 6a942481..bb675e64 100644 --- a/lib/pages/chat/events/cute_events.dart +++ b/lib/pages/chat/events/cute_events.dart @@ -2,10 +2,10 @@ import 'dart:math'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/l10n/l10n.dart'; class CuteContent extends StatefulWidget { final Event event; @@ -72,19 +72,19 @@ class _CuteContentState extends State { generateLabel(User? user) { switch (widget.event.content['cute_type']) { case 'googly_eyes': - return L10n.of(context)?.googlyEyesContent( + return L10n.of(context).googlyEyesContent( user?.displayName ?? widget.event.senderFromMemoryOrFallback.displayName ?? '', ); case 'cuddle': - return L10n.of(context)?.cuddleContent( + return L10n.of(context).cuddleContent( user?.displayName ?? widget.event.senderFromMemoryOrFallback.displayName ?? '', ); case 'hug': - return L10n.of(context)?.hugContent( + return L10n.of(context).hugContent( user?.displayName ?? widget.event.senderFromMemoryOrFallback.displayName ?? '', diff --git a/lib/pages/chat/events/message.dart b/lib/pages/chat/events/message.dart index 236bcbb5..2b44fd30 100644 --- a/lib/pages/chat/events/message.dart +++ b/lib/pages/chat/events/message.dart @@ -1,11 +1,11 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; import 'package:swipe_to_action/swipe_to_action.dart'; import 'package:fluffychat/config/themes.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/date_time_extension.dart'; import 'package:fluffychat/utils/string_color.dart'; import 'package:fluffychat/widgets/avatar.dart'; @@ -236,7 +236,9 @@ class Message extends StatelessWidget { if (!nextEventSameSender) Padding( padding: const EdgeInsets.only( - left: 8.0, bottom: 4), + left: 8.0, + bottom: 4, + ), child: ownMessage || event.room.isDirectChat ? const SizedBox(height: 12) : FutureBuilder( @@ -315,8 +317,10 @@ class Message extends StatelessWidget { FutureBuilder( future: event .getReplyEvent(timeline), - builder: (BuildContext context, - snapshot) { + builder: ( + BuildContext context, + snapshot, + ) { final replyEvent = snapshot .hasData ? snapshot.data! @@ -483,7 +487,7 @@ class Message extends StatelessWidget { horizontal: 8, ), child: Text( - L10n.of(context)!.readUpToHere, + L10n.of(context).readUpToHere, style: TextStyle(color: Theme.of(context).colorScheme.primary), ), diff --git a/lib/pages/chat/events/message_content.dart b/lib/pages/chat/events/message_content.dart index 5aeb650a..88fc0c91 100644 --- a/lib/pages/chat/events/message_content.dart +++ b/lib/pages/chat/events/message_content.dart @@ -2,10 +2,10 @@ import 'dart:math'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:flutter_linkify/flutter_linkify.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat/events/video_player.dart'; import 'package:fluffychat/utils/adaptive_bottom_sheet.dart'; import 'package:fluffychat/utils/date_time_extension.dart'; @@ -38,7 +38,7 @@ class MessageContent extends StatelessWidget { }); void _verifyOrRequestKey(BuildContext context) async { - final l10n = L10n.of(context)!; + final l10n = L10n.of(context); if (event.content['can_request_session'] != true) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( @@ -183,7 +183,7 @@ class MessageContent extends StatelessWidget { textColor: buttonTextColor, onPressed: () => _verifyOrRequestKey(context), icon: '🔒', - label: L10n.of(context)!.encrypted, + label: L10n.of(context).encrypted, fontSize: fontSize, ); case MessageTypes.Location: @@ -212,7 +212,7 @@ class MessageContent extends StatelessWidget { onPressed: UrlLauncher(context, geoUri.toString()).launchUrl, label: Text( - L10n.of(context)!.openInMaps, + L10n.of(context).openInMaps, style: TextStyle(color: textColor), ), ), @@ -232,11 +232,11 @@ class MessageContent extends StatelessWidget { event.redactedBecause?.content.tryGet('reason'); final redactedBy = snapshot.data?.calcDisplayname() ?? event.redactedBecause?.senderId.localpart ?? - L10n.of(context)!.user; + L10n.of(context).user; return _ButtonContent( label: reason == null - ? L10n.of(context)!.redactedBy(redactedBy) - : L10n.of(context)!.redactedByBecause( + ? L10n.of(context).redactedBy(redactedBy) + : L10n.of(context).redactedByBecause( redactedBy, reason, ), @@ -253,7 +253,7 @@ class MessageContent extends StatelessWidget { event.numberEmotes <= 10; return Linkify( text: event.calcLocalizedBodyFallback( - MatrixLocals(L10n.of(context)!), + MatrixLocals(L10n.of(context)), hideReply: true, ), style: TextStyle( @@ -276,7 +276,7 @@ class MessageContent extends StatelessWidget { future: event.fetchSenderUser(), builder: (context, snapshot) { return _ButtonContent( - label: L10n.of(context)!.startedACall( + label: L10n.of(context).startedACall( snapshot.data?.calcDisplayname() ?? event.senderFromMemoryOrFallback.calcDisplayname(), ), @@ -292,7 +292,7 @@ class MessageContent extends StatelessWidget { future: event.fetchSenderUser(), builder: (context, snapshot) { return _ButtonContent( - label: L10n.of(context)!.userSentUnknownEvent( + label: L10n.of(context).userSentUnknownEvent( snapshot.data?.calcDisplayname() ?? event.senderFromMemoryOrFallback.calcDisplayname(), event.type, diff --git a/lib/pages/chat/events/reply_content.dart b/lib/pages/chat/events/reply_content.dart index 945ae22a..77972eb0 100644 --- a/lib/pages/chat/events/reply_content.dart +++ b/lib/pages/chat/events/reply_content.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import '../../../config/app_config.dart'; @@ -73,7 +73,7 @@ class ReplyContent extends StatelessWidget { ), Text( displayEvent.calcLocalizedBodyFallback( - MatrixLocals(L10n.of(context)!), + MatrixLocals(L10n.of(context)), withSenderNamePrefix: false, hideReply: true, ), diff --git a/lib/pages/chat/events/state_message.dart b/lib/pages/chat/events/state_message.dart index 0aa5d9dc..3226bfbf 100644 --- a/lib/pages/chat/events/state_message.dart +++ b/lib/pages/chat/events/state_message.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import '../../../config/app_config.dart'; @@ -23,7 +23,7 @@ class StateMessage extends StatelessWidget { ), child: Text( event.calcLocalizedBodyFallback( - MatrixLocals(L10n.of(context)!), + MatrixLocals(L10n.of(context)), ), textAlign: TextAlign.center, style: TextStyle( diff --git a/lib/pages/chat/events/verification_request_content.dart b/lib/pages/chat/events/verification_request_content.dart index b6ec3fd0..22de55da 100644 --- a/lib/pages/chat/events/verification_request_content.dart +++ b/lib/pages/chat/events/verification_request_content.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import '../../../config/app_config.dart'; class VerificationRequestContent extends StatelessWidget { @@ -56,10 +56,10 @@ class VerificationRequestContent extends StatelessWidget { canceled ? 'Error ${cancel.first.content.tryGet('code')}: ${cancel.first.content.tryGet('reason')}' : (fullyDone - ? L10n.of(context)!.verifySuccess + ? L10n.of(context).verifySuccess : (started - ? L10n.of(context)!.loadingPleaseWait - : L10n.of(context)!.newVerificationRequest)), + ? L10n.of(context).loadingPleaseWait + : L10n.of(context).newVerificationRequest)), ), ], ), diff --git a/lib/pages/chat/events/video_player.dart b/lib/pages/chat/events/video_player.dart index 1b0983bd..352e1f98 100644 --- a/lib/pages/chat/events/video_player.dart +++ b/lib/pages/chat/events/video_player.dart @@ -4,13 +4,13 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:chewie/chewie.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; import 'package:path_provider/path_provider.dart'; import 'package:universal_html/html.dart' as html; import 'package:video_player/video_player.dart'; import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat/events/image_bubble.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/event_extension.dart'; @@ -135,8 +135,8 @@ class EventVideoPlayerState extends State { ) : const Icon(Icons.play_circle_outlined), tooltip: _isDownloading - ? L10n.of(context)!.loadingPleaseWait - : L10n.of(context)!.videoWithSize( + ? L10n.of(context).loadingPleaseWait + : L10n.of(context).videoWithSize( widget.event.sizeString ?? '?MB', ), onPressed: _isDownloading ? null : _downloadAction, diff --git a/lib/pages/chat/input_bar.dart b/lib/pages/chat/input_bar.dart index 26a8d7e3..beb84211 100644 --- a/lib/pages/chat/input_bar.dart +++ b/lib/pages/chat/input_bar.dart @@ -2,13 +2,13 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:emojis/emoji.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:flutter_typeahead/flutter_typeahead.dart'; import 'package:matrix/matrix.dart'; import 'package:pasteboard/pasteboard.dart'; import 'package:slugify/slugify.dart'; import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_file_extension.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/mxc_image.dart'; @@ -226,7 +226,7 @@ class InputBar extends StatelessWidget { const padding = EdgeInsets.all(4.0); if (suggestion['type'] == 'command') { final command = suggestion['name']!; - final hint = commandHint(L10n.of(context)!, command); + final hint = commandHint(L10n.of(context), command); return Tooltip( message: hint, waitDuration: const Duration(days: 1), // don't show on hover diff --git a/lib/pages/chat/pinned_events.dart b/lib/pages/chat/pinned_events.dart index 0940a786..60c325d8 100644 --- a/lib/pages/chat/pinned_events.dart +++ b/lib/pages/chat/pinned_events.dart @@ -3,10 +3,10 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:adaptive_dialog/adaptive_dialog.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat/chat.dart'; import 'package:fluffychat/pages/chat/chat_app_bar_list_tile.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; @@ -32,13 +32,13 @@ class PinnedEvents extends StatelessWidget { ? events.single?.eventId : await showConfirmationDialog( context: context, - title: L10n.of(context)!.pinMessage, + title: L10n.of(context).pinMessage, actions: events .map( (event) => AlertDialogAction( key: event?.eventId ?? '', label: event?.calcLocalizedBodyFallback( - MatrixLocals(L10n.of(context)!), + MatrixLocals(L10n.of(context)), withSenderNamePrefix: true, hideReply: true, ) ?? @@ -65,17 +65,17 @@ class PinnedEvents extends StatelessWidget { final event = snapshot.data; return ChatAppBarListTile( title: event?.calcLocalizedBodyFallback( - MatrixLocals(L10n.of(context)!), + MatrixLocals(L10n.of(context)), withSenderNamePrefix: true, hideReply: true, ) ?? - L10n.of(context)!.loadingPleaseWait, + L10n.of(context).loadingPleaseWait, leading: IconButton( splashRadius: 20, iconSize: 20, color: Theme.of(context).colorScheme.onSurfaceVariant, icon: const Icon(Icons.push_pin), - tooltip: L10n.of(context)!.unpin, + tooltip: L10n.of(context).unpin, onPressed: controller.room.canSendEvent(EventTypes.RoomPinnedEvents) ? () => controller.unpinEvent(event!.eventId) : null, diff --git a/lib/pages/chat/recording_dialog.dart b/lib/pages/chat/recording_dialog.dart index bc92f3ff..b9d22a28 100644 --- a/lib/pages/chat/recording_dialog.dart +++ b/lib/pages/chat/recording_dialog.dart @@ -3,12 +3,12 @@ import 'dart:async'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:path_provider/path_provider.dart'; import 'package:record/record.dart'; import 'package:wakelock_plus/wakelock_plus.dart'; import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'events/audio_player.dart'; @@ -117,7 +117,7 @@ class RecordingDialogState extends State { final time = '${_duration.inMinutes.toString().padLeft(2, '0')}:${(_duration.inSeconds % 60).toString().padLeft(2, '0')}'; final content = error - ? Text(L10n.of(context)!.oopsSomethingWentWrong) + ? Text(L10n.of(context).oopsSomethingWentWrong) : Row( children: [ Container( @@ -165,7 +165,7 @@ class RecordingDialogState extends State { CupertinoDialogAction( onPressed: () => Navigator.of(context, rootNavigator: false).pop(), child: Text( - L10n.of(context)!.cancel.toUpperCase(), + L10n.of(context).cancel.toUpperCase(), style: TextStyle( color: Theme.of(context) .textTheme @@ -178,7 +178,7 @@ class RecordingDialogState extends State { if (error != true) CupertinoDialogAction( onPressed: _stopAndSend, - child: Text(L10n.of(context)!.send.toUpperCase()), + child: Text(L10n.of(context).send.toUpperCase()), ), ], ); @@ -189,7 +189,7 @@ class RecordingDialogState extends State { TextButton( onPressed: () => Navigator.of(context, rootNavigator: false).pop(), child: Text( - L10n.of(context)!.cancel.toUpperCase(), + L10n.of(context).cancel.toUpperCase(), style: TextStyle( color: Theme.of(context).textTheme.bodyMedium?.color?.withAlpha(150), @@ -202,7 +202,7 @@ class RecordingDialogState extends State { child: Row( mainAxisSize: MainAxisSize.min, children: [ - Text(L10n.of(context)!.send.toUpperCase()), + Text(L10n.of(context).send.toUpperCase()), const SizedBox(width: 4), const Icon(Icons.send_outlined, size: 15), ], diff --git a/lib/pages/chat/reply_display.dart b/lib/pages/chat/reply_display.dart index 03acd269..1470a1c6 100644 --- a/lib/pages/chat/reply_display.dart +++ b/lib/pages/chat/reply_display.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import '../../config/themes.dart'; import 'chat.dart'; @@ -27,7 +27,7 @@ class ReplyDisplay extends StatelessWidget { child: Row( children: [ IconButton( - tooltip: L10n.of(context)!.close, + tooltip: L10n.of(context).close, icon: const Icon(Icons.close), onPressed: controller.cancelReplyEventAction, ), @@ -68,7 +68,7 @@ class _EditContent extends StatelessWidget { Container(width: 15.0), Text( event.calcLocalizedBodyFallback( - MatrixLocals(L10n.of(context)!), + MatrixLocals(L10n.of(context)), withSenderNamePrefix: false, hideReply: true, ), diff --git a/lib/pages/chat/send_file_dialog.dart b/lib/pages/chat/send_file_dialog.dart index b2885a63..d4501d8f 100644 --- a/lib/pages/chat/send_file_dialog.dart +++ b/lib/pages/chat/send_file_dialog.dart @@ -1,11 +1,11 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; import 'package:fluffychat/utils/size_string.dart'; import '../../utils/resize_image.dart'; @@ -63,7 +63,7 @@ class SendFileDialogState extends State { @override Widget build(BuildContext context) { - var sendStr = L10n.of(context)!.sendFile; + var sendStr = L10n.of(context).sendFile; final bool allFilesAreImages = widget.files.every((file) => file is MatrixImageFile); final sizeString = widget.files @@ -71,14 +71,14 @@ class SendFileDialogState extends State { .sizeString; final fileName = widget.files.length == 1 ? widget.files.single.name - : L10n.of(context)!.countFiles(widget.files.length.toString()); + : L10n.of(context).countFiles(widget.files.length.toString()); if (allFilesAreImages) { - sendStr = L10n.of(context)!.sendImage; + sendStr = L10n.of(context).sendImage; } else if (widget.files.every((file) => file is MatrixAudioFile)) { - sendStr = L10n.of(context)!.sendAudio; + sendStr = L10n.of(context).sendAudio; } else if (widget.files.every((file) => file is MatrixVideoFile)) { - sendStr = L10n.of(context)!.sendVideo; + sendStr = L10n.of(context).sendVideo; } Widget contentWidget; if (allFilesAreImages) { @@ -115,7 +115,7 @@ class SendFileDialogState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - L10n.of(context)!.sendOriginal, + L10n.of(context).sendOriginal, style: const TextStyle(fontWeight: FontWeight.bold), ), Text(sizeString), @@ -147,7 +147,7 @@ class SendFileDialogState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - L10n.of(context)!.sendOriginal, + L10n.of(context).sendOriginal, style: const TextStyle(fontWeight: FontWeight.bold), ), Text(sizeString), @@ -170,11 +170,11 @@ class SendFileDialogState extends State { // just close the dialog Navigator.of(context, rootNavigator: false).pop(); }, - child: Text(L10n.of(context)!.cancel), + child: Text(L10n.of(context).cancel), ), TextButton( onPressed: _send, - child: Text(L10n.of(context)!.send), + child: Text(L10n.of(context).send), ), ], ); diff --git a/lib/pages/chat/send_location_dialog.dart b/lib/pages/chat/send_location_dialog.dart index b2a99004..724c1912 100644 --- a/lib/pages/chat/send_location_dialog.dart +++ b/lib/pages/chat/send_location_dialog.dart @@ -3,11 +3,11 @@ import 'dart:async'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:geolocator/geolocator.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat/events/map_bubble.dart'; class SendLocationDialog extends StatefulWidget { @@ -93,12 +93,12 @@ class SendLocationDialogState extends State { longitude: position!.longitude, ); } else if (disabled) { - contentWidget = Text(L10n.of(context)!.locationDisabledNotice); + contentWidget = Text(L10n.of(context).locationDisabledNotice); } else if (denied) { - contentWidget = Text(L10n.of(context)!.locationPermissionDeniedNotice); + contentWidget = Text(L10n.of(context).locationPermissionDeniedNotice); } else if (error != null) { contentWidget = - Text(L10n.of(context)!.errorObtainingLocation(error.toString())); + Text(L10n.of(context).errorObtainingLocation(error.toString())); } else { contentWidget = Row( mainAxisSize: MainAxisSize.min, @@ -106,22 +106,22 @@ class SendLocationDialogState extends State { children: [ const CupertinoActivityIndicator(), const SizedBox(width: 12), - Text(L10n.of(context)!.obtainingLocation), + Text(L10n.of(context).obtainingLocation), ], ); } return AlertDialog.adaptive( - title: Text(L10n.of(context)!.shareLocation), + title: Text(L10n.of(context).shareLocation), content: contentWidget, actions: [ TextButton( onPressed: Navigator.of(context, rootNavigator: false).pop, - child: Text(L10n.of(context)!.cancel), + child: Text(L10n.of(context).cancel), ), if (position != null) TextButton( onPressed: isSending ? null : sendAction, - child: Text(L10n.of(context)!.send), + child: Text(L10n.of(context).send), ), ], ); diff --git a/lib/pages/chat/sticker_picker_dialog.dart b/lib/pages/chat/sticker_picker_dialog.dart index c0a6ec76..4937b174 100644 --- a/lib/pages/chat/sticker_picker_dialog.dart +++ b/lib/pages/chat/sticker_picker_dialog.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/url_launcher.dart'; import 'package:fluffychat/widgets/mxc_image.dart'; import '../../widgets/avatar.dart'; @@ -115,7 +115,7 @@ class StickerPickerDialogState extends State { child: TextField( autofocus: false, decoration: InputDecoration( - hintText: L10n.of(context)!.search, + hintText: L10n.of(context).search, prefixIcon: const Icon(Icons.search_outlined), contentPadding: EdgeInsets.zero, ), @@ -129,7 +129,7 @@ class StickerPickerDialogState extends State { child: Column( mainAxisSize: MainAxisSize.min, children: [ - Text(L10n.of(context)!.noEmotesFound), + Text(L10n.of(context).noEmotesFound), const SizedBox(height: 12), OutlinedButton.icon( onPressed: () => UrlLauncher( @@ -137,7 +137,7 @@ class StickerPickerDialogState extends State { 'https://matrix.to/#/#fluffychat-stickers:janian.de', ).launchUrl(), icon: const Icon(Icons.explore_outlined), - label: Text(L10n.of(context)!.discover), + label: Text(L10n.of(context).discover), ), ], ), diff --git a/lib/pages/chat_access_settings/chat_access_settings_controller.dart b/lib/pages/chat_access_settings/chat_access_settings_controller.dart index c0ab1fa7..104c0896 100644 --- a/lib/pages/chat_access_settings/chat_access_settings_controller.dart +++ b/lib/pages/chat_access_settings/chat_access_settings_controller.dart @@ -1,10 +1,10 @@ import 'package:flutter/material.dart' hide Visibility; import 'package:adaptive_dialog/adaptive_dialog.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat_access_settings/chat_access_settings_page.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; import 'package:fluffychat/widgets/matrix.dart'; @@ -121,7 +121,7 @@ class ChatAccessSettingsController extends State { if (capabilities == null) return; final newVersion = await showConfirmationDialog( context: context, - title: L10n.of(context)!.replaceRoomWithNewerVersion, + title: L10n.of(context).replaceRoomWithNewerVersion, actions: capabilities.mRoomVersions!.available.entries .where((r) => r.key != roomVersion) .map( @@ -138,10 +138,10 @@ class ChatAccessSettingsController extends State { await showOkCancelAlertDialog( useRootNavigator: false, context: context, - okLabel: L10n.of(context)!.yes, - cancelLabel: L10n.of(context)!.cancel, - title: L10n.of(context)!.areYouSure, - message: L10n.of(context)!.roomUpgradeDescription, + okLabel: L10n.of(context).yes, + cancelLabel: L10n.of(context).cancel, + title: L10n.of(context).areYouSure, + message: L10n.of(context).roomUpgradeDescription, isDestructiveAction: true, )) { return; @@ -160,12 +160,12 @@ class ChatAccessSettingsController extends State { final input = await showTextInputDialog( context: context, - title: L10n.of(context)!.editRoomAliases, + title: L10n.of(context).editRoomAliases, textFields: [ DialogTextField( prefixText: '#', suffixText: domain, - hintText: L10n.of(context)!.alias, + hintText: L10n.of(context).alias, ), ], ); @@ -184,10 +184,10 @@ class ChatAccessSettingsController extends State { final canonicalAliasConsent = await showOkCancelAlertDialog( context: context, - title: L10n.of(context)!.setAsCanonicalAlias, + title: L10n.of(context).setAsCanonicalAlias, message: alias, - okLabel: L10n.of(context)!.yes, - cancelLabel: L10n.of(context)!.no, + okLabel: L10n.of(context).yes, + cancelLabel: L10n.of(context).no, ); final altAliases = room diff --git a/lib/pages/chat_access_settings/chat_access_settings_page.dart b/lib/pages/chat_access_settings/chat_access_settings_page.dart index 48d2d950..f6797d9d 100644 --- a/lib/pages/chat_access_settings/chat_access_settings_page.dart +++ b/lib/pages/chat_access_settings/chat_access_settings_page.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart' hide Visibility; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat_access_settings/chat_access_settings_controller.dart'; import 'package:fluffychat/utils/fluffy_share.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; @@ -18,7 +18,7 @@ class ChatAccessSettingsPageView extends StatelessWidget { return Scaffold( appBar: AppBar( leading: const Center(child: BackButton()), - title: Text(L10n.of(context)!.accessAndVisibility), + title: Text(L10n.of(context).accessAndVisibility), ), body: MaxWidthBody( child: StreamBuilder( @@ -36,7 +36,7 @@ class ChatAccessSettingsPageView extends StatelessWidget { children: [ ListTile( title: Text( - L10n.of(context)!.visibilityOfTheChatHistory, + L10n.of(context).visibilityOfTheChatHistory, style: TextStyle( color: Theme.of(context).colorScheme.secondary, fontWeight: FontWeight.bold, @@ -47,7 +47,7 @@ class ChatAccessSettingsPageView extends StatelessWidget { RadioListTile.adaptive( title: Text( historyVisibility - .getLocalizedString(MatrixLocals(L10n.of(context)!)), + .getLocalizedString(MatrixLocals(L10n.of(context))), ), value: historyVisibility, groupValue: room.historyVisibility, @@ -59,7 +59,7 @@ class ChatAccessSettingsPageView extends StatelessWidget { Divider(color: Theme.of(context).dividerColor), ListTile( title: Text( - L10n.of(context)!.whoIsAllowedToJoinThisGroup, + L10n.of(context).whoIsAllowedToJoinThisGroup, style: TextStyle( color: Theme.of(context).colorScheme.secondary, fontWeight: FontWeight.bold, @@ -70,7 +70,7 @@ class ChatAccessSettingsPageView extends StatelessWidget { if (joinRule != JoinRules.private) RadioListTile.adaptive( title: Text( - joinRule.localizedString(L10n.of(context)!), + joinRule.localizedString(L10n.of(context)), ), value: joinRule, groupValue: room.joinRules, @@ -84,7 +84,7 @@ class ChatAccessSettingsPageView extends StatelessWidget { .contains(room.joinRules)) ...[ ListTile( title: Text( - L10n.of(context)!.areGuestsAllowedToJoin, + L10n.of(context).areGuestsAllowedToJoin, style: TextStyle( color: Theme.of(context).colorScheme.secondary, fontWeight: FontWeight.bold, @@ -95,7 +95,7 @@ class ChatAccessSettingsPageView extends StatelessWidget { RadioListTile.adaptive( title: Text( guestAccess.getLocalizedString( - MatrixLocals(L10n.of(context)!), + MatrixLocals(L10n.of(context)), ), ), value: guestAccess, @@ -108,7 +108,7 @@ class ChatAccessSettingsPageView extends StatelessWidget { Divider(color: Theme.of(context).dividerColor), ListTile( title: Text( - L10n.of(context)!.publicChatAddresses, + L10n.of(context).publicChatAddresses, style: TextStyle( color: Theme.of(context).colorScheme.secondary, fontWeight: FontWeight.bold, @@ -116,7 +116,7 @@ class ChatAccessSettingsPageView extends StatelessWidget { ), trailing: IconButton( icon: const Icon(Icons.add_outlined), - tooltip: L10n.of(context)!.createNewAddress, + tooltip: L10n.of(context).createNewAddress, onPressed: controller.addAlias, ), ), @@ -169,7 +169,7 @@ class ChatAccessSettingsPageView extends StatelessWidget { builder: (context, snapshot) => SwitchListTile.adaptive( value: snapshot.data == Visibility.public, title: Text( - L10n.of(context)!.chatCanBeDiscoveredViaSearchOnServer( + L10n.of(context).chatCanBeDiscoveredViaSearchOnServer( room.client.userID!.domain!, ), ), @@ -178,7 +178,7 @@ class ChatAccessSettingsPageView extends StatelessWidget { ), ], ListTile( - title: Text(L10n.of(context)!.globalChatId), + title: Text(L10n.of(context).globalChatId), subtitle: SelectableText(room.id), trailing: IconButton( icon: const Icon(Icons.copy_outlined), @@ -186,7 +186,7 @@ class ChatAccessSettingsPageView extends StatelessWidget { ), ), ListTile( - title: Text(L10n.of(context)!.roomVersion), + title: Text(L10n.of(context).roomVersion), subtitle: SelectableText( room .getState(EventTypes.RoomCreate)! diff --git a/lib/pages/chat_details/chat_details.dart b/lib/pages/chat_details/chat_details.dart index 6c78adda..dd011055 100644 --- a/lib/pages/chat_details/chat_details.dart +++ b/lib/pages/chat_details/chat_details.dart @@ -3,12 +3,12 @@ import 'package:flutter/material.dart'; import 'package:adaptive_dialog/adaptive_dialog.dart'; import 'package:collection/collection.dart'; import 'package:file_picker/file_picker.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:go_router/go_router.dart'; import 'package:image_picker/image_picker.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat_details/chat_details_view.dart'; import 'package:fluffychat/pages/settings/settings.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; @@ -44,14 +44,14 @@ class ChatDetailsController extends State { final room = Matrix.of(context).client.getRoomById(roomId!)!; final input = await showTextInputDialog( context: context, - title: L10n.of(context)!.changeTheNameOfTheGroup, - okLabel: L10n.of(context)!.ok, - cancelLabel: L10n.of(context)!.cancel, + title: L10n.of(context).changeTheNameOfTheGroup, + okLabel: L10n.of(context).ok, + cancelLabel: L10n.of(context).cancel, textFields: [ DialogTextField( initialText: room.getLocalizedDisplayname( MatrixLocals( - L10n.of(context)!, + L10n.of(context), ), ), ), @@ -64,7 +64,7 @@ class ChatDetailsController extends State { ); if (success.error == null) { ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(L10n.of(context)!.displaynameHasBeenChanged)), + SnackBar(content: Text(L10n.of(context).displaynameHasBeenChanged)), ); } } @@ -73,12 +73,12 @@ class ChatDetailsController extends State { final room = Matrix.of(context).client.getRoomById(roomId!)!; final input = await showTextInputDialog( context: context, - title: L10n.of(context)!.setChatDescription, - okLabel: L10n.of(context)!.ok, - cancelLabel: L10n.of(context)!.cancel, + title: L10n.of(context).setChatDescription, + okLabel: L10n.of(context).ok, + cancelLabel: L10n.of(context).cancel, textFields: [ DialogTextField( - hintText: L10n.of(context)!.noChatDescriptionYet, + hintText: L10n.of(context).noChatDescriptionYet, initialText: room.topic, minLines: 4, maxLines: 8, @@ -93,7 +93,7 @@ class ChatDetailsController extends State { if (success.error == null) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( - content: Text(L10n.of(context)!.chatDescriptionHasBeenChanged), + content: Text(L10n.of(context).chatDescriptionHasBeenChanged), ), ); } @@ -119,19 +119,19 @@ class ChatDetailsController extends State { if (PlatformInfos.isMobile) SheetAction( key: AvatarAction.camera, - label: L10n.of(context)!.openCamera, + label: L10n.of(context).openCamera, isDefaultAction: true, icon: Icons.camera_alt_outlined, ), SheetAction( key: AvatarAction.file, - label: L10n.of(context)!.openGallery, + label: L10n.of(context).openGallery, icon: Icons.photo_outlined, ), if (room?.avatar != null) SheetAction( key: AvatarAction.remove, - label: L10n.of(context)!.delete, + label: L10n.of(context).delete, isDestructiveAction: true, icon: Icons.delete_outlined, ), @@ -140,7 +140,7 @@ class ChatDetailsController extends State { ? actions.single.key : await showModalActionSheet( context: context, - title: L10n.of(context)!.editRoomAvatar, + title: L10n.of(context).editRoomAvatar, actions: actions, ); if (action == null) return; diff --git a/lib/pages/chat_details/chat_details_view.dart b/lib/pages/chat_details/chat_details_view.dart index 5b9324d0..f430f59f 100644 --- a/lib/pages/chat_details/chat_details_view.dart +++ b/lib/pages/chat_details/chat_details_view.dart @@ -1,11 +1,11 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:flutter_linkify/flutter_linkify.dart'; import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat_details/chat_details.dart'; import 'package:fluffychat/pages/chat_details/participant_list_item.dart'; import 'package:fluffychat/utils/fluffy_share.dart'; @@ -27,10 +27,10 @@ class ChatDetailsView extends StatelessWidget { if (room == null) { return Scaffold( appBar: AppBar( - title: Text(L10n.of(context)!.oopsSomethingWentWrong), + title: Text(L10n.of(context).oopsSomethingWentWrong), ), body: Center( - child: Text(L10n.of(context)!.youAreNoLongerParticipatingInThisChat), + child: Text(L10n.of(context).youAreNoLongerParticipatingInThisChat), ), ); } @@ -47,7 +47,7 @@ class ChatDetailsView extends StatelessWidget { final canRequestMoreMembers = members.length < actualMembersCount; final iconColor = Theme.of(context).textTheme.bodyLarge!.color; final displayname = room.getLocalizedDisplayname( - MatrixLocals(L10n.of(context)!), + MatrixLocals(L10n.of(context)), ); return Scaffold( appBar: AppBar( @@ -57,7 +57,7 @@ class ChatDetailsView extends StatelessWidget { actions: [ if (room.canonicalAlias.isNotEmpty) IconButton( - tooltip: L10n.of(context)!.share, + tooltip: L10n.of(context).share, icon: Icon(Icons.adaptive.share_outlined), onPressed: () => FluffyShare.share( AppConfig.inviteLinkPrefix + room.canonicalAlias, @@ -67,7 +67,7 @@ class ChatDetailsView extends StatelessWidget { if (controller.widget.embeddedCloseButton == null) ChatSettingsPopupMenu(room, false), ], - title: Text(L10n.of(context)!.chatDetails), + title: Text(L10n.of(context).chatDetails), backgroundColor: Theme.of(context).appBarTheme.backgroundColor, ), body: MaxWidthBody( @@ -167,7 +167,7 @@ class ChatDetailsView extends StatelessWidget { ), label: Text( room.isDirectChat - ? L10n.of(context)!.directChat + ? L10n.of(context).directChat : displayname, maxLines: 1, overflow: TextOverflow.ellipsis, @@ -190,7 +190,7 @@ class ChatDetailsView extends StatelessWidget { .secondary, ), label: Text( - L10n.of(context)!.countParticipants( + L10n.of(context).countParticipants( actualMembersCount, ), maxLines: 1, @@ -210,7 +210,7 @@ class ChatDetailsView extends StatelessWidget { if (!room.canChangeStateEvent(EventTypes.RoomTopic)) ListTile( title: Text( - L10n.of(context)!.chatDescription, + L10n.of(context).chatDescription, style: TextStyle( color: Theme.of(context).colorScheme.secondary, fontWeight: FontWeight.bold, @@ -222,7 +222,7 @@ class ChatDetailsView extends StatelessWidget { padding: const EdgeInsets.all(16.0), child: TextButton.icon( onPressed: controller.setTopicAction, - label: Text(L10n.of(context)!.setChatDescription), + label: Text(L10n.of(context).setChatDescription), icon: const Icon(Icons.edit_outlined), style: TextButton.styleFrom( backgroundColor: Theme.of(context) @@ -240,7 +240,7 @@ class ChatDetailsView extends StatelessWidget { ), child: SelectableLinkify( text: room.topic.isEmpty - ? L10n.of(context)!.noChatDescriptionYet + ? L10n.of(context).noChatDescriptionYet : room.topic, options: const LinkifyOptions(humanize: false), linkStyle: const TextStyle( @@ -275,9 +275,8 @@ class ChatDetailsView extends StatelessWidget { Icons.insert_emoticon_outlined, ), ), - title: - Text(L10n.of(context)!.customEmojisAndStickers), - subtitle: Text(L10n.of(context)!.setCustomEmotes), + title: Text(L10n.of(context).customEmojisAndStickers), + subtitle: Text(L10n.of(context).setCustomEmotes), onTap: controller.goToEmoteSettings, trailing: const Icon(Icons.chevron_right_outlined), ), @@ -290,10 +289,10 @@ class ChatDetailsView extends StatelessWidget { child: const Icon(Icons.shield_outlined), ), title: Text( - L10n.of(context)!.accessAndVisibility, + L10n.of(context).accessAndVisibility, ), subtitle: Text( - L10n.of(context)!.accessAndVisibilityDescription, + L10n.of(context).accessAndVisibilityDescription, ), onTap: () => context .push('/rooms/${room.id}/details/access'), @@ -301,9 +300,9 @@ class ChatDetailsView extends StatelessWidget { ), if (!room.isDirectChat) ListTile( - title: Text(L10n.of(context)!.chatPermissions), + title: Text(L10n.of(context).chatPermissions), subtitle: Text( - L10n.of(context)!.whoCanPerformWhichAction, + L10n.of(context).whoCanPerformWhichAction, ), leading: CircleAvatar( backgroundColor: @@ -323,7 +322,7 @@ class ChatDetailsView extends StatelessWidget { ), ListTile( title: Text( - L10n.of(context)!.countParticipants( + L10n.of(context).countParticipants( actualMembersCount.toString(), ), style: TextStyle( @@ -334,7 +333,7 @@ class ChatDetailsView extends StatelessWidget { ), if (!room.isDirectChat && room.canInvite) ListTile( - title: Text(L10n.of(context)!.inviteContact), + title: Text(L10n.of(context).inviteContact), leading: CircleAvatar( backgroundColor: Theme.of(context) .colorScheme @@ -354,7 +353,7 @@ class ChatDetailsView extends StatelessWidget { ? ParticipantListItem(members[i - 1]) : ListTile( title: Text( - L10n.of(context)!.loadCountMoreParticipants( + L10n.of(context).loadCountMoreParticipants( (actualMembersCount - members.length).toString(), ), ), diff --git a/lib/pages/chat_details/participant_list_item.dart b/lib/pages/chat_details/participant_list_item.dart index 66115363..c810f75f 100644 --- a/lib/pages/chat_details/participant_list_item.dart +++ b/lib/pages/chat_details/participant_list_item.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/adaptive_bottom_sheet.dart'; import '../../widgets/avatar.dart'; import '../user_bottom_sheet/user_bottom_sheet.dart'; @@ -15,17 +15,17 @@ class ParticipantListItem extends StatelessWidget { @override Widget build(BuildContext context) { final membershipBatch = switch (user.membership) { - Membership.ban => L10n.of(context)!.banned, - Membership.invite => L10n.of(context)!.invited, + Membership.ban => L10n.of(context).banned, + Membership.invite => L10n.of(context).invited, Membership.join => null, - Membership.knock => L10n.of(context)!.knocking, - Membership.leave => L10n.of(context)!.leftTheChat, + Membership.knock => L10n.of(context).knocking, + Membership.leave => L10n.of(context).leftTheChat, }; final permissionBatch = user.powerLevel == 100 - ? L10n.of(context)!.admin + ? L10n.of(context).admin : user.powerLevel >= 50 - ? L10n.of(context)!.moderator + ? L10n.of(context).moderator : ''; return Opacity( diff --git a/lib/pages/chat_encryption_settings/chat_encryption_settings.dart b/lib/pages/chat_encryption_settings/chat_encryption_settings.dart index 559aa206..a1c9818f 100644 --- a/lib/pages/chat_encryption_settings/chat_encryption_settings.dart +++ b/lib/pages/chat_encryption_settings/chat_encryption_settings.dart @@ -1,12 +1,12 @@ import 'package:flutter/material.dart'; import 'package:adaptive_dialog/adaptive_dialog.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:go_router/go_router.dart'; import 'package:matrix/encryption.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat_encryption_settings/chat_encryption_settings_view.dart'; import 'package:fluffychat/widgets/matrix.dart'; import '../key_verification/key_verification_dialog.dart'; @@ -34,33 +34,33 @@ class ChatEncryptionSettingsController extends State { if (room.encrypted) { showOkAlertDialog( context: context, - title: L10n.of(context)!.sorryThatsNotPossible, - message: L10n.of(context)!.disableEncryptionWarning, + title: L10n.of(context).sorryThatsNotPossible, + message: L10n.of(context).disableEncryptionWarning, ); return; } if (room.joinRules == JoinRules.public) { showOkAlertDialog( context: context, - title: L10n.of(context)!.sorryThatsNotPossible, - message: L10n.of(context)!.noEncryptionForPublicRooms, + title: L10n.of(context).sorryThatsNotPossible, + message: L10n.of(context).noEncryptionForPublicRooms, ); return; } if (!room.canChangeStateEvent(EventTypes.Encryption)) { showOkAlertDialog( context: context, - title: L10n.of(context)!.sorryThatsNotPossible, - message: L10n.of(context)!.noPermission, + title: L10n.of(context).sorryThatsNotPossible, + message: L10n.of(context).noPermission, ); return; } final consent = await showOkCancelAlertDialog( context: context, - title: L10n.of(context)!.areYouSure, - message: L10n.of(context)!.enableEncryptionWarning, - okLabel: L10n.of(context)!.yes, - cancelLabel: L10n.of(context)!.cancel, + title: L10n.of(context).areYouSure, + message: L10n.of(context).enableEncryptionWarning, + okLabel: L10n.of(context).yes, + cancelLabel: L10n.of(context).cancel, ); if (consent != OkCancelResult.ok) return; await showFutureLoadingDialog( @@ -72,10 +72,10 @@ class ChatEncryptionSettingsController extends State { void startVerification() async { final consent = await showOkCancelAlertDialog( context: context, - title: L10n.of(context)!.verifyOtherUser, - message: L10n.of(context)!.verifyOtherUserDescription, - okLabel: L10n.of(context)!.ok, - cancelLabel: L10n.of(context)!.cancel, + title: L10n.of(context).verifyOtherUser, + message: L10n.of(context).verifyOtherUserDescription, + okLabel: L10n.of(context).ok, + cancelLabel: L10n.of(context).cancel, fullyCapitalizedForMaterial: false, ); if (consent != OkCancelResult.ok) return; diff --git a/lib/pages/chat_encryption_settings/chat_encryption_settings_view.dart b/lib/pages/chat_encryption_settings/chat_encryption_settings_view.dart index d1be4e7d..156a7f65 100644 --- a/lib/pages/chat_encryption_settings/chat_encryption_settings_view.dart +++ b/lib/pages/chat_encryption_settings/chat_encryption_settings_view.dart @@ -1,12 +1,12 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; import 'package:url_launcher/url_launcher_string.dart'; import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat_encryption_settings/chat_encryption_settings.dart'; import 'package:fluffychat/utils/beautify_string_extension.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; @@ -29,11 +29,11 @@ class ChatEncryptionSettingsView extends StatelessWidget { icon: const Icon(Icons.close_outlined), onPressed: () => context.go('/rooms/${controller.roomId!}'), ), - title: Text(L10n.of(context)!.encryption), + title: Text(L10n.of(context).encryption), actions: [ TextButton( onPressed: () => launchUrlString(AppConfig.encryptionTutorial), - child: Text(L10n.of(context)!.help), + child: Text(L10n.of(context).help), ), ], ), @@ -49,7 +49,7 @@ class ChatEncryptionSettingsView extends StatelessWidget { Theme.of(context).colorScheme.primaryContainer, child: const Icon(Icons.lock_outlined), ), - title: Text(L10n.of(context)!.encryptThisChat), + title: Text(L10n.of(context).encryptThisChat), value: room.encrypted, onChanged: controller.enableEncryption, ), @@ -67,7 +67,7 @@ class ChatEncryptionSettingsView extends StatelessWidget { child: ElevatedButton.icon( onPressed: controller.startVerification, icon: const Icon(Icons.verified_outlined), - label: Text(L10n.of(context)!.verifyStart), + label: Text(L10n.of(context).verifyStart), ), ), ), @@ -75,7 +75,7 @@ class ChatEncryptionSettingsView extends StatelessWidget { const SizedBox(height: 16), ListTile( title: Text( - L10n.of(context)!.deviceKeys, + L10n.of(context).deviceKeys, style: const TextStyle( fontWeight: FontWeight.bold, ), @@ -91,7 +91,7 @@ class ChatEncryptionSettingsView extends StatelessWidget { if (snapshot.hasError) { return Center( child: Text( - '${L10n.of(context)!.oopsSomethingWentWrong}: ${snapshot.error}', + '${L10n.of(context).oopsSomethingWentWrong}: ${snapshot.error}', ), ); } @@ -133,7 +133,7 @@ class ChatEncryptionSettingsView extends StatelessWidget { const SizedBox(width: 4), Text( deviceKeys[i].deviceId ?? - L10n.of(context)!.unknownDevice, + L10n.of(context).unknownDevice, ), const SizedBox(width: 4), Flexible( @@ -172,7 +172,7 @@ class ChatEncryptionSettingsView extends StatelessWidget { ), subtitle: Text( deviceKeys[i].ed25519Key?.beautified ?? - L10n.of(context)!.unknownEncryptionAlgorithm, + L10n.of(context).unknownEncryptionAlgorithm, style: TextStyle( fontFamily: 'RobotoMono', color: Theme.of(context).colorScheme.secondary, @@ -188,7 +188,7 @@ class ChatEncryptionSettingsView extends StatelessWidget { padding: const EdgeInsets.all(16.0), child: Center( child: Text( - L10n.of(context)!.encryptionNotEnabled, + L10n.of(context).encryptionNotEnabled, style: const TextStyle( fontStyle: FontStyle.italic, ), diff --git a/lib/pages/chat_list/chat_list.dart b/lib/pages/chat_list/chat_list.dart index 93f8d4ad..139b1e56 100644 --- a/lib/pages/chat_list/chat_list.dart +++ b/lib/pages/chat_list/chat_list.dart @@ -6,7 +6,6 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:adaptive_dialog/adaptive_dialog.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:flutter_shortcuts/flutter_shortcuts.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:go_router/go_router.dart'; @@ -16,6 +15,7 @@ import 'package:uni_links/uni_links.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat_list/chat_list_view.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; @@ -178,10 +178,10 @@ class ChatListController extends State void setServer() async { final newServer = await showTextInputDialog( useRootNavigator: false, - title: L10n.of(context)!.changeTheHomeserver, + title: L10n.of(context).changeTheHomeserver, context: context, - okLabel: L10n.of(context)!.ok, - cancelLabel: L10n.of(context)!.cancel, + okLabel: L10n.of(context).ok, + cancelLabel: L10n.of(context).cancel, textFields: [ DialogTextField( prefixText: 'https://', @@ -191,7 +191,7 @@ class ChatListController extends State autocorrect: false, validator: (server) => server?.contains('.') == true ? null - : L10n.of(context)!.invalidServerName, + : L10n.of(context).invalidServerName, ), ], ); @@ -510,10 +510,10 @@ class ChatListController extends State final confirmed = await showOkCancelAlertDialog( useRootNavigator: false, context: context, - title: L10n.of(context)!.areYouSure, - okLabel: L10n.of(context)!.yes, - cancelLabel: L10n.of(context)!.cancel, - message: L10n.of(context)!.archiveRoomDescription, + title: L10n.of(context).areYouSure, + okLabel: L10n.of(context).yes, + cancelLabel: L10n.of(context).cancel, + message: L10n.of(context).archiveRoomDescription, ) == OkCancelResult.ok; if (!confirmed) return; @@ -526,7 +526,7 @@ class ChatListController extends State void dismissStatusList() async { final result = await showOkCancelAlertDialog( - title: L10n.of(context)!.hidePresences, + title: L10n.of(context).hidePresences, context: context, ); if (result == OkCancelResult.ok) { @@ -542,13 +542,13 @@ class ChatListController extends State final input = await showTextInputDialog( useRootNavigator: false, context: context, - title: L10n.of(context)!.setStatus, - message: L10n.of(context)!.leaveEmptyToClearStatus, - okLabel: L10n.of(context)!.ok, - cancelLabel: L10n.of(context)!.cancel, + title: L10n.of(context).setStatus, + message: L10n.of(context).leaveEmptyToClearStatus, + okLabel: L10n.of(context).ok, + cancelLabel: L10n.of(context).cancel, textFields: [ DialogTextField( - hintText: L10n.of(context)!.statusExampleMessage, + hintText: L10n.of(context).statusExampleMessage, maxLines: 6, minLines: 1, maxLength: 255, @@ -583,8 +583,8 @@ class ChatListController extends State Future addToSpace() async { final selectedSpace = await showConfirmationDialog( context: context, - title: L10n.of(context)!.addToSpace, - message: L10n.of(context)!.addToSpaceDescription, + title: L10n.of(context).addToSpace, + message: L10n.of(context).addToSpaceDescription, fullyCapitalizedForMaterial: false, actions: Matrix.of(context) .client @@ -593,8 +593,8 @@ class ChatListController extends State .map( (space) => AlertDialogAction( key: space.id, - label: space - .getLocalizedDisplayname(MatrixLocals(L10n.of(context)!)), + label: + space.getLocalizedDisplayname(MatrixLocals(L10n.of(context))), ), ) .toList(), @@ -615,7 +615,7 @@ class ChatListController extends State if (!mounted) return; ScaffoldMessenger.of(context).showSnackBar( SnackBar( - content: Text(L10n.of(context)!.chatHasBeenAddedToThisSpace), + content: Text(L10n.of(context).chatHasBeenAddedToThisSpace), ), ); } @@ -699,22 +699,22 @@ class ChatListController extends State } void editBundlesForAccount(String? userId, String? activeBundle) async { - final l10n = L10n.of(context)!; + final l10n = L10n.of(context); final client = Matrix.of(context) .widget .clients[Matrix.of(context).getClientIndexByMatrixId(userId!)]; final action = await showConfirmationDialog( context: context, - title: L10n.of(context)!.editBundlesForAccount, + title: L10n.of(context).editBundlesForAccount, actions: [ AlertDialogAction( key: EditBundleAction.addToBundle, - label: L10n.of(context)!.addToBundle, + label: L10n.of(context).addToBundle, ), if (activeBundle != client.userID) AlertDialogAction( key: EditBundleAction.removeFromBundle, - label: L10n.of(context)!.removeFromBundle, + label: L10n.of(context).removeFromBundle, ), ], ); diff --git a/lib/pages/chat_list/chat_list_body.dart b/lib/pages/chat_list/chat_list_body.dart index eeb6bb65..354d962b 100644 --- a/lib/pages/chat_list/chat_list_body.dart +++ b/lib/pages/chat_list/chat_list_body.dart @@ -2,10 +2,10 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:animations/animations.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat_list/chat_list.dart'; import 'package:fluffychat/pages/chat_list/chat_list_item.dart'; import 'package:fluffychat/pages/chat_list/search_title.dart'; @@ -85,17 +85,17 @@ class ChatListViewBody extends StatelessWidget { [ if (controller.isSearchMode) ...[ SearchTitle( - title: L10n.of(context)!.publicRooms, + title: L10n.of(context).publicRooms, icon: const Icon(Icons.explore_outlined), ), PublicRoomsHorizontalList(publicRooms: publicRooms), SearchTitle( - title: L10n.of(context)!.publicSpaces, + title: L10n.of(context).publicSpaces, icon: const Icon(Icons.workspaces_outlined), ), PublicRoomsHorizontalList(publicRooms: publicSpaces), SearchTitle( - title: L10n.of(context)!.users, + title: L10n.of(context).users, icon: const Icon(Icons.group_outlined), ), AnimatedContainer( @@ -117,7 +117,7 @@ class ChatListViewBody extends StatelessWidget { .results[i].displayName ?? userSearchResult .results[i].userId.localpart ?? - L10n.of(context)!.unknownDevice, + L10n.of(context).unknownDevice, avatar: userSearchResult.results[i].avatarUrl, onPressed: () => showAdaptiveBottomSheet( @@ -151,8 +151,8 @@ class ChatListViewBody extends StatelessWidget { color: Theme.of(context).colorScheme.surface, child: ListTile( leading: const Icon(Icons.vpn_key), - title: Text(L10n.of(context)!.dehydrateTor), - subtitle: Text(L10n.of(context)!.dehydrateTorLong), + title: Text(L10n.of(context).dehydrateTor), + subtitle: Text(L10n.of(context).dehydrateTorLong), trailing: const Icon(Icons.chevron_right_outlined), onTap: controller.dehydrate, ), @@ -160,7 +160,7 @@ class ChatListViewBody extends StatelessWidget { ), if (controller.isSearchMode) SearchTitle( - title: L10n.of(context)!.chats, + title: L10n.of(context).chats, icon: const Icon(Icons.forum_outlined), ), if (client.prevBatch != null && @@ -290,7 +290,7 @@ class PublicRoomsHorizontalList extends StatelessWidget { itemBuilder: (context, i) => _SearchItem( title: publicRooms[i].name ?? publicRooms[i].canonicalAlias?.localpart ?? - L10n.of(context)!.group, + L10n.of(context).group, avatar: publicRooms[i].avatarUrl, onPressed: () => showAdaptiveBottomSheet( context: context, diff --git a/lib/pages/chat_list/chat_list_header.dart b/lib/pages/chat_list/chat_list_header.dart index 5e76e780..a36a7f59 100644 --- a/lib/pages/chat_list/chat_list_header.dart +++ b/lib/pages/chat_list/chat_list_header.dart @@ -1,8 +1,7 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; - import 'package:fluffychat/config/themes.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat_list/chat_list.dart'; import 'package:fluffychat/pages/chat_list/client_chooser_button.dart'; import '../../widgets/matrix.dart'; @@ -33,14 +32,14 @@ class ChatListHeader extends StatelessWidget implements PreferredSizeWidget { leading: selectMode == SelectMode.normal ? null : IconButton( - tooltip: L10n.of(context)!.cancel, + tooltip: L10n.of(context).cancel, icon: const Icon(Icons.close_outlined), onPressed: controller.cancelAction, color: Theme.of(context).colorScheme.primary, ), title: selectMode == SelectMode.share ? Text( - L10n.of(context)!.share, + L10n.of(context).share, key: const ValueKey(SelectMode.share), ) : selectMode == SelectMode.select @@ -63,7 +62,7 @@ class ChatListHeader extends StatelessWidget implements PreferredSizeWidget { borderRadius: BorderRadius.circular(99), ), contentPadding: EdgeInsets.zero, - hintText: L10n.of(context)!.searchChatsRooms, + hintText: L10n.of(context).searchChatsRooms, hintStyle: TextStyle( color: Theme.of(context).colorScheme.onPrimaryContainer, fontWeight: FontWeight.normal, @@ -71,7 +70,7 @@ class ChatListHeader extends StatelessWidget implements PreferredSizeWidget { floatingLabelBehavior: FloatingLabelBehavior.never, prefixIcon: controller.isSearchMode ? IconButton( - tooltip: L10n.of(context)!.cancel, + tooltip: L10n.of(context).cancel, icon: const Icon(Icons.close_outlined), onPressed: controller.cancelSearch, color: Theme.of(context) @@ -139,12 +138,12 @@ class ChatListHeader extends StatelessWidget implements PreferredSizeWidget { ? [ if (controller.spaces.isNotEmpty) IconButton( - tooltip: L10n.of(context)!.addToSpace, + tooltip: L10n.of(context).addToSpace, icon: const Icon(Icons.workspaces_outlined), onPressed: controller.addToSpace, ), IconButton( - tooltip: L10n.of(context)!.toggleUnread, + tooltip: L10n.of(context).toggleUnread, icon: Icon( controller.anySelectedRoomNotMarkedUnread ? Icons.mark_chat_unread_outlined @@ -153,7 +152,7 @@ class ChatListHeader extends StatelessWidget implements PreferredSizeWidget { onPressed: controller.toggleUnread, ), IconButton( - tooltip: L10n.of(context)!.toggleFavorite, + tooltip: L10n.of(context).toggleFavorite, icon: Icon( controller.anySelectedRoomNotFavorite ? Icons.push_pin @@ -167,12 +166,12 @@ class ChatListHeader extends StatelessWidget implements PreferredSizeWidget { ? Icons.notifications_off_outlined : Icons.notifications_outlined, ), - tooltip: L10n.of(context)!.toggleMuted, + tooltip: L10n.of(context).toggleMuted, onPressed: controller.toggleMuted, ), IconButton( icon: const Icon(Icons.delete_outlined), - tooltip: L10n.of(context)!.archive, + tooltip: L10n.of(context).archive, onPressed: controller.archiveAction, ), ] diff --git a/lib/pages/chat_list/chat_list_item.dart b/lib/pages/chat_list/chat_list_item.dart index 4b2573a6..c0dd71e7 100644 --- a/lib/pages/chat_list/chat_list_item.dart +++ b/lib/pages/chat_list/chat_list_item.dart @@ -1,11 +1,11 @@ import 'package:flutter/material.dart'; import 'package:adaptive_dialog/adaptive_dialog.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/utils/room_status_extension.dart'; import 'package:fluffychat/widgets/hover_builder.dart'; @@ -47,10 +47,10 @@ class ChatListItem extends StatelessWidget { final confirmed = await showOkCancelAlertDialog( useRootNavigator: false, context: context, - title: L10n.of(context)!.areYouSure, - okLabel: L10n.of(context)!.yes, - cancelLabel: L10n.of(context)!.no, - message: L10n.of(context)!.archiveRoomDescription, + title: L10n.of(context).areYouSure, + okLabel: L10n.of(context).yes, + cancelLabel: L10n.of(context).no, + message: L10n.of(context).archiveRoomDescription, ); if (confirmed == OkCancelResult.cancel) return; await showFutureLoadingDialog( @@ -83,7 +83,7 @@ class ChatListItem extends StatelessWidget { ? theme.colorScheme.secondaryContainer : null; final displayname = room.getLocalizedDisplayname( - MatrixLocals(L10n.of(context)!), + MatrixLocals(L10n.of(context)), ); final filter = this.filter; if (filter != null && !displayname.toLowerCase().contains(filter)) { @@ -229,10 +229,10 @@ class ChatListItem extends StatelessWidget { : Text( room.membership == Membership.invite ? isDirectChat - ? L10n.of(context)!.invitePrivateChat - : L10n.of(context)!.inviteGroupChat + ? L10n.of(context).invitePrivateChat + : L10n.of(context).inviteGroupChat : room.lastEvent?.calcLocalizedBodyFallback( - MatrixLocals(L10n.of(context)!), + MatrixLocals(L10n.of(context)), hideReply: true, hideEdit: true, plaintextBody: true, @@ -241,7 +241,7 @@ class ChatListItem extends StatelessWidget { directChatMatrixId != room.lastEvent?.senderId, ) ?? - L10n.of(context)!.emptyChat, + L10n.of(context).emptyChat, softWrap: false, maxLines: 1, overflow: TextOverflow.ellipsis, diff --git a/lib/pages/chat_list/chat_list_view.dart b/lib/pages/chat_list/chat_list_view.dart index 163a7fc7..cff94b32 100644 --- a/lib/pages/chat_list/chat_list_view.dart +++ b/lib/pages/chat_list/chat_list_view.dart @@ -2,12 +2,12 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:badges/badges.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:go_router/go_router.dart'; import 'package:keyboard_shortcuts/keyboard_shortcuts.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat_list/chat_list.dart'; import 'package:fluffychat/pages/chat_list/navi_rail_item.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; @@ -39,7 +39,7 @@ class ChatListView extends StatelessWidget { controller.getRoomFilterByActiveFilter(ActiveFilter.messages), child: const Icon(Icons.chat), ), - label: L10n.of(context)!.messages, + label: L10n.of(context).messages, ), NavigationDestination( icon: UnreadRoomsBadge( @@ -52,7 +52,7 @@ class ChatListView extends StatelessWidget { filter: controller.getRoomFilterByActiveFilter(ActiveFilter.groups), child: const Icon(Icons.group), ), - label: L10n.of(context)!.groups, + label: L10n.of(context).groups, ), ] else NavigationDestination( @@ -68,7 +68,7 @@ class ChatListView extends StatelessWidget { controller.getRoomFilterByActiveFilter(ActiveFilter.allChats), child: const Icon(Icons.chat), ), - label: L10n.of(context)!.chats, + label: L10n.of(context).chats, ), if (controller.spaces.isNotEmpty) const NavigationDestination( @@ -152,7 +152,7 @@ class ChatListView extends StatelessWidget { rootSpaces[i].id == controller.activeSpaceId; return NaviRailItem( toolTip: rootSpaces[i].getLocalizedDisplayname( - MatrixLocals(L10n.of(context)!), + MatrixLocals(L10n.of(context)), ), isSelected: isSelected, onTap: () => @@ -160,7 +160,7 @@ class ChatListView extends StatelessWidget { icon: Avatar( mxContent: rootSpaces[i].avatar, name: rootSpaces[i].getLocalizedDisplayname( - MatrixLocals(L10n.of(context)!), + MatrixLocals(L10n.of(context)), ), size: 32, fontSize: 12, @@ -204,7 +204,7 @@ class ChatListView extends StatelessWidget { LogicalKeyboardKey.keyN, }, onKeysPressed: () => context.go('/rooms/newprivatechat'), - helpLabel: L10n.of(context)!.newChat, + helpLabel: L10n.of(context).newChat, child: selectMode == SelectMode.normal && !controller.isSearchMode ? StartChatFloatingActionButton( diff --git a/lib/pages/chat_list/client_chooser_button.dart b/lib/pages/chat_list/client_chooser_button.dart index e533d37f..ef057b85 100644 --- a/lib/pages/chat_list/client_chooser_button.dart +++ b/lib/pages/chat_list/client_chooser_button.dart @@ -2,11 +2,11 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:adaptive_dialog/adaptive_dialog.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:go_router/go_router.dart'; import 'package:keyboard_shortcuts/keyboard_shortcuts.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/matrix.dart'; import '../../utils/fluffy_share.dart'; @@ -34,7 +34,7 @@ class ClientChooserButton extends StatelessWidget { children: [ const Icon(Icons.group_add_outlined), const SizedBox(width: 18), - Text(L10n.of(context)!.createGroup), + Text(L10n.of(context).createGroup), ], ), ), @@ -44,7 +44,7 @@ class ClientChooserButton extends StatelessWidget { children: [ const Icon(Icons.workspaces_outlined), const SizedBox(width: 18), - Text(L10n.of(context)!.createNewSpace), + Text(L10n.of(context).createNewSpace), ], ), ), @@ -54,7 +54,7 @@ class ClientChooserButton extends StatelessWidget { children: [ const Icon(Icons.edit_outlined), const SizedBox(width: 18), - Text(L10n.of(context)!.setStatus), + Text(L10n.of(context).setStatus), ], ), ), @@ -64,7 +64,7 @@ class ClientChooserButton extends StatelessWidget { children: [ Icon(Icons.adaptive.share_outlined), const SizedBox(width: 18), - Text(L10n.of(context)!.inviteContact), + Text(L10n.of(context).inviteContact), ], ), ), @@ -74,7 +74,7 @@ class ClientChooserButton extends StatelessWidget { children: [ const Icon(Icons.archive_outlined), const SizedBox(width: 18), - Text(L10n.of(context)!.archive), + Text(L10n.of(context).archive), ], ), ), @@ -84,7 +84,7 @@ class ClientChooserButton extends StatelessWidget { children: [ const Icon(Icons.settings_outlined), const SizedBox(width: 18), - Text(L10n.of(context)!.settings), + Text(L10n.of(context).settings), ], ), ), @@ -155,7 +155,7 @@ class ClientChooserButton extends StatelessWidget { children: [ const Icon(Icons.person_add_outlined), const SizedBox(width: 18), - Text(L10n.of(context)!.addAccount), + Text(L10n.of(context).addAccount), ], ), ), @@ -177,7 +177,7 @@ class ClientChooserButton extends StatelessWidget { clientCount, (index) => KeyBoardShortcuts( keysToPress: _buildKeyboardShortcut(index + 1), - helpLabel: L10n.of(context)!.switchToAccount(index + 1), + helpLabel: L10n.of(context).switchToAccount(index + 1), onKeysPressed: () => _handleKeyboardShortcut( matrix, index, @@ -191,7 +191,7 @@ class ClientChooserButton extends StatelessWidget { LogicalKeyboardKey.controlLeft, LogicalKeyboardKey.tab, }, - helpLabel: L10n.of(context)!.nextAccount, + helpLabel: L10n.of(context).nextAccount, onKeysPressed: () => _nextAccount(matrix, context), child: const SizedBox.shrink(), ), @@ -201,7 +201,7 @@ class ClientChooserButton extends StatelessWidget { LogicalKeyboardKey.shiftLeft, LogicalKeyboardKey.tab, }, - helpLabel: L10n.of(context)!.previousAccount, + helpLabel: L10n.of(context).previousAccount, onKeysPressed: () => _previousAccount(matrix, context), child: const SizedBox.shrink(), ), @@ -249,10 +249,10 @@ class ClientChooserButton extends StatelessWidget { case SettingsAction.addAccount: final consent = await showOkCancelAlertDialog( context: context, - title: L10n.of(context)!.addAccount, - message: L10n.of(context)!.enableMultiAccounts, - okLabel: L10n.of(context)!.next, - cancelLabel: L10n.of(context)!.cancel, + title: L10n.of(context).addAccount, + message: L10n.of(context).enableMultiAccounts, + okLabel: L10n.of(context).next, + cancelLabel: L10n.of(context).cancel, ); if (consent != OkCancelResult.ok) return; context.go('/rooms/settings/addaccount'); diff --git a/lib/pages/chat_list/space_view.dart b/lib/pages/chat_list/space_view.dart index 40ad71c4..aa450b80 100644 --- a/lib/pages/chat_list/space_view.dart +++ b/lib/pages/chat_list/space_view.dart @@ -2,12 +2,12 @@ import 'package:flutter/material.dart'; import 'package:adaptive_dialog/adaptive_dialog.dart'; import 'package:collection/collection.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart' as sdk; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat_list/chat_list.dart'; import 'package:fluffychat/pages/chat_list/chat_list_item.dart'; import 'package:fluffychat/pages/chat_list/search_title.dart'; @@ -135,27 +135,27 @@ class _SpaceViewState extends State { context: context, title: spaceChild?.name ?? room?.getLocalizedDisplayname( - MatrixLocals(L10n.of(context)!), + MatrixLocals(L10n.of(context)), ), message: spaceChild?.topic ?? room?.topic, actions: [ if (room == null) SheetAction( key: SpaceChildContextAction.join, - label: L10n.of(context)!.joinRoom, + label: L10n.of(context).joinRoom, icon: Icons.send_outlined, ), if (spaceChild != null && (activeSpace?.canChangeStateEvent(EventTypes.SpaceChild) ?? false)) SheetAction( key: SpaceChildContextAction.removeFromSpace, - label: L10n.of(context)!.removeFromSpace, + label: L10n.of(context).removeFromSpace, icon: Icons.delete_sweep_outlined, ), if (room != null) SheetAction( key: SpaceChildContextAction.leave, - label: L10n.of(context)!.leave, + label: L10n.of(context).leave, icon: Icons.delete_outlined, isDestructiveAction: true, ), @@ -185,15 +185,15 @@ class _SpaceViewState extends State { void _addChatOrSubSpace() async { final roomType = await showConfirmationDialog( context: context, - title: L10n.of(context)!.addChatOrSubSpace, + title: L10n.of(context).addChatOrSubSpace, actions: [ AlertDialogAction( key: AddRoomType.subspace, - label: L10n.of(context)!.createNewSpace, + label: L10n.of(context).createNewSpace, ), AlertDialogAction( key: AddRoomType.chat, - label: L10n.of(context)!.createGroup, + label: L10n.of(context).createGroup, ), ], ); @@ -202,32 +202,32 @@ class _SpaceViewState extends State { final names = await showTextInputDialog( context: context, title: roomType == AddRoomType.subspace - ? L10n.of(context)!.createNewSpace - : L10n.of(context)!.createGroup, + ? L10n.of(context).createNewSpace + : L10n.of(context).createGroup, textFields: [ DialogTextField( hintText: roomType == AddRoomType.subspace - ? L10n.of(context)!.spaceName - : L10n.of(context)!.groupName, + ? L10n.of(context).spaceName + : L10n.of(context).groupName, minLines: 1, maxLines: 1, maxLength: 64, validator: (text) { if (text == null || text.isEmpty) { - return L10n.of(context)!.pleaseChoose; + return L10n.of(context).pleaseChoose; } return null; }, ), DialogTextField( - hintText: L10n.of(context)!.chatDescription, + hintText: L10n.of(context).chatDescription, minLines: 4, maxLines: 8, maxLength: 255, ), ], - okLabel: L10n.of(context)!.create, - cancelLabel: L10n.of(context)!.cancel, + okLabel: L10n.of(context).create, + cancelLabel: L10n.of(context).cancel, ); if (names == null) return; final client = Matrix.of(context).client; @@ -286,7 +286,7 @@ class _SpaceViewState extends State { .any((child) => child.roomId == space.id), ) && space - .getLocalizedDisplayname(MatrixLocals(L10n.of(context)!)) + .getLocalizedDisplayname(MatrixLocals(L10n.of(context))) .toLowerCase() .contains( widget.controller.searchController.text.toLowerCase(), @@ -304,7 +304,7 @@ class _SpaceViewState extends State { (context, i) { final rootSpace = rootSpaces[i]; final displayname = rootSpace.getLocalizedDisplayname( - MatrixLocals(L10n.of(context)!), + MatrixLocals(L10n.of(context)), ); return Material( color: Theme.of(context).colorScheme.surface, @@ -319,7 +319,7 @@ class _SpaceViewState extends State { overflow: TextOverflow.ellipsis, ), subtitle: Text( - L10n.of(context)!.numChats( + L10n.of(context).numChats( rootSpace.spaceChildren.length.toString(), ), ), @@ -367,9 +367,9 @@ class _SpaceViewState extends State { ), title: Text( parentSpace == null - ? L10n.of(context)!.allSpaces + ? L10n.of(context).allSpaces : parentSpace.getLocalizedDisplayname( - MatrixLocals(L10n.of(context)!), + MatrixLocals(L10n.of(context)), ), ), trailing: IconButton( @@ -405,7 +405,7 @@ class _SpaceViewState extends State { if (response == null) { return SliverFillRemaining( child: Center( - child: Text(L10n.of(context)!.loadingPleaseWait), + child: Text(L10n.of(context).loadingPleaseWait), ), ); } @@ -420,7 +420,7 @@ class _SpaceViewState extends State { child: OutlinedButton.icon( label: loading ? const LinearProgressIndicator() - : Text(L10n.of(context)!.loadMore), + : Text(L10n.of(context).loadMore), icon: const Icon(Icons.chevron_right_outlined), onPressed: loading ? null @@ -484,7 +484,7 @@ class _SpaceViewState extends State { child: Icon(Icons.group_add_outlined), ), title: - Text(L10n.of(context)!.addChatOrSubSpace), + Text(L10n.of(context).addChatOrSubSpace), trailing: const Icon(Icons.chevron_right_outlined), onTap: _addChatOrSubSpace, @@ -495,7 +495,7 @@ class _SpaceViewState extends State { } final name = spaceChild.name ?? spaceChild.canonicalAlias ?? - L10n.of(context)!.chat; + L10n.of(context).chat; if (widget.controller.isSearchMode && !name.toLowerCase().contains( widget.controller.searchController.text @@ -541,8 +541,8 @@ class _SpaceViewState extends State { subtitle: Text( topic ?? (isSpace - ? L10n.of(context)!.enterSpace - : L10n.of(context)!.enterRoom), + ? L10n.of(context).enterSpace + : L10n.of(context).enterRoom), maxLines: 1, style: TextStyle( color: Theme.of(context).colorScheme.onSurface, diff --git a/lib/pages/chat_list/start_chat_fab.dart b/lib/pages/chat_list/start_chat_fab.dart index c6a74c0f..7c1da37d 100644 --- a/lib/pages/chat_list/start_chat_fab.dart +++ b/lib/pages/chat_list/start_chat_fab.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:go_router/go_router.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import '../../config/themes.dart'; import 'chat_list.dart'; @@ -52,12 +52,12 @@ class StartChatFloatingActionButton extends StatelessWidget { case ActiveFilter.allChats: case ActiveFilter.messages: return roomsIsEmpty - ? L10n.of(context)!.startFirstChat - : L10n.of(context)!.newChat; + ? L10n.of(context).startFirstChat + : L10n.of(context).newChat; case ActiveFilter.groups: - return L10n.of(context)!.newGroup; + return L10n.of(context).newGroup; case ActiveFilter.spaces: - return L10n.of(context)!.newSpace; + return L10n.of(context).newSpace; } } diff --git a/lib/pages/chat_list/utils/on_chat_tap.dart b/lib/pages/chat_list/utils/on_chat_tap.dart index d24af1fb..624bf605 100644 --- a/lib/pages/chat_list/utils/on_chat_tap.dart +++ b/lib/pages/chat_list/utils/on_chat_tap.dart @@ -1,11 +1,11 @@ import 'package:flutter/material.dart'; import 'package:adaptive_dialog/adaptive_dialog.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat/send_file_dialog.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/widgets/matrix.dart'; @@ -17,25 +17,25 @@ void onChatTap(Room room, BuildContext context) async { final inviteAction = await showModalActionSheet( context: context, message: room.isDirectChat - ? L10n.of(context)!.invitePrivateChat - : L10n.of(context)!.inviteGroupChat, - title: room.getLocalizedDisplayname(MatrixLocals(L10n.of(context)!)), + ? L10n.of(context).invitePrivateChat + : L10n.of(context).inviteGroupChat, + title: room.getLocalizedDisplayname(MatrixLocals(L10n.of(context))), actions: [ SheetAction( key: InviteActions.accept, - label: L10n.of(context)!.accept, + label: L10n.of(context).accept, icon: Icons.check_outlined, isDefaultAction: true, ), SheetAction( key: InviteActions.decline, - label: L10n.of(context)!.decline, + label: L10n.of(context).decline, icon: Icons.close_outlined, isDestructiveAction: true, ), SheetAction( key: InviteActions.block, - label: L10n.of(context)!.block, + label: L10n.of(context).block, icon: Icons.block_outlined, isDestructiveAction: true, ), @@ -70,7 +70,7 @@ void onChatTap(Room room, BuildContext context) async { if (room.membership == Membership.ban) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( - content: Text(L10n.of(context)!.youHaveBeenBannedFromThisChat), + content: Text(L10n.of(context).youHaveBeenBannedFromThisChat), ), ); return; @@ -99,12 +99,12 @@ void onChatTap(Room room, BuildContext context) async { } else { final consent = await showOkCancelAlertDialog( context: context, - title: L10n.of(context)!.forward, - message: L10n.of(context)!.forwardMessageTo( - room.getLocalizedDisplayname(MatrixLocals(L10n.of(context)!)), + title: L10n.of(context).forward, + message: L10n.of(context).forwardMessageTo( + room.getLocalizedDisplayname(MatrixLocals(L10n.of(context))), ), - okLabel: L10n.of(context)!.forward, - cancelLabel: L10n.of(context)!.cancel, + okLabel: L10n.of(context).forward, + cancelLabel: L10n.of(context).cancel, ); if (consent == OkCancelResult.cancel) { Matrix.of(context).shareContent = null; diff --git a/lib/pages/chat_members/chat_members_view.dart b/lib/pages/chat_members/chat_members_view.dart index b699fcef..4f64a578 100644 --- a/lib/pages/chat_members/chat_members_view.dart +++ b/lib/pages/chat_members/chat_members_view.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:go_router/go_router.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; import '../../widgets/layouts/max_width_body.dart'; import '../../widgets/matrix.dart'; @@ -20,10 +20,10 @@ class ChatMembersView extends StatelessWidget { if (room == null) { return Scaffold( appBar: AppBar( - title: Text(L10n.of(context)!.oopsSomethingWentWrong), + title: Text(L10n.of(context).oopsSomethingWentWrong), ), body: Center( - child: Text(L10n.of(context)!.youAreNoLongerParticipatingInThisChat), + child: Text(L10n.of(context).youAreNoLongerParticipatingInThisChat), ), ); } @@ -39,7 +39,7 @@ class ChatMembersView extends StatelessWidget { appBar: AppBar( leading: const Center(child: BackButton()), title: Text( - L10n.of(context)!.countParticipants(roomCount), + L10n.of(context).countParticipants(roomCount), ), actions: [ if (room.canInvite) @@ -67,7 +67,7 @@ class ChatMembersView extends StatelessWidget { OutlinedButton.icon( onPressed: controller.refreshMembers, icon: const Icon(Icons.refresh_outlined), - label: Text(L10n.of(context)!.tryAgain), + label: Text(L10n.of(context).tryAgain), ), ], ), @@ -91,7 +91,7 @@ class ChatMembersView extends StatelessWidget { onChanged: controller.setFilter, decoration: InputDecoration( prefixIcon: const Icon(Icons.search_outlined), - hintText: L10n.of(context)!.search, + hintText: L10n.of(context).search, ), ), ) diff --git a/lib/pages/chat_permissions_settings/chat_permissions_settings.dart b/lib/pages/chat_permissions_settings/chat_permissions_settings.dart index 6ea94c10..46779e2a 100644 --- a/lib/pages/chat_permissions_settings/chat_permissions_settings.dart +++ b/lib/pages/chat_permissions_settings/chat_permissions_settings.dart @@ -2,11 +2,11 @@ import 'dart:developer'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat_permissions_settings/chat_permissions_settings_view.dart'; import 'package:fluffychat/widgets/matrix.dart'; import 'package:fluffychat/widgets/permission_slider_dialog.dart'; @@ -31,7 +31,7 @@ class ChatPermissionsSettingsController extends State { final room = Matrix.of(context).client.getRoomById(roomId!)!; if (!room.canSendEvent(EventTypes.RoomPowerLevels)) { ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(L10n.of(context)!.noPermission)), + SnackBar(content: Text(L10n.of(context).noPermission)), ); return; } diff --git a/lib/pages/chat_permissions_settings/chat_permissions_settings_view.dart b/lib/pages/chat_permissions_settings/chat_permissions_settings_view.dart index 50d46c08..211394ae 100644 --- a/lib/pages/chat_permissions_settings/chat_permissions_settings_view.dart +++ b/lib/pages/chat_permissions_settings/chat_permissions_settings_view.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat_permissions_settings/chat_permissions_settings.dart'; import 'package:fluffychat/pages/chat_permissions_settings/permission_list_tile.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; @@ -18,7 +18,7 @@ class ChatPermissionsSettingsView extends StatelessWidget { return Scaffold( appBar: AppBar( leading: const Center(child: BackButton()), - title: Text(L10n.of(context)!.chatPermissions), + title: Text(L10n.of(context).chatPermissions), ), body: MaxWidthBody( child: StreamBuilder( @@ -29,7 +29,7 @@ class ChatPermissionsSettingsView extends StatelessWidget { ? null : Matrix.of(context).client.getRoomById(roomId); if (room == null) { - return Center(child: Text(L10n.of(context)!.noRoomsFound)); + return Center(child: Text(L10n.of(context).noRoomsFound)); } final powerLevelsContent = Map.from( room.getState(EventTypes.RoomPowerLevels)?.content ?? {}, @@ -59,7 +59,7 @@ class ChatPermissionsSettingsView extends StatelessWidget { Divider(color: Theme.of(context).dividerColor), ListTile( title: Text( - L10n.of(context)!.notifications, + L10n.of(context).notifications, style: TextStyle( color: Theme.of(context).colorScheme.primary, fontWeight: FontWeight.bold, @@ -94,7 +94,7 @@ class ChatPermissionsSettingsView extends StatelessWidget { Divider(color: Theme.of(context).dividerColor), ListTile( title: Text( - L10n.of(context)!.configureChat, + L10n.of(context).configureChat, style: TextStyle( color: Theme.of(context).colorScheme.primary, fontWeight: FontWeight.bold, diff --git a/lib/pages/chat_permissions_settings/permission_list_tile.dart b/lib/pages/chat_permissions_settings/permission_list_tile.dart index af447cbe..336ab31f 100644 --- a/lib/pages/chat_permissions_settings/permission_list_tile.dart +++ b/lib/pages/chat_permissions_settings/permission_list_tile.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/l10n/l10n.dart'; class PermissionsListTile extends StatelessWidget { final String permissionKey; @@ -25,43 +25,43 @@ class PermissionsListTile extends StatelessWidget { if (category == null) { switch (permissionKey) { case 'users_default': - return L10n.of(context)!.defaultPermissionLevel; + return L10n.of(context).defaultPermissionLevel; case 'events_default': - return L10n.of(context)!.sendMessages; + return L10n.of(context).sendMessages; case 'state_default': - return L10n.of(context)!.configureChat; + return L10n.of(context).configureChat; case 'ban': - return L10n.of(context)!.banFromChat; + return L10n.of(context).banFromChat; case 'kick': - return L10n.of(context)!.kickFromChat; + return L10n.of(context).kickFromChat; case 'redact': - return L10n.of(context)!.deleteMessage; + return L10n.of(context).deleteMessage; case 'invite': - return L10n.of(context)!.inviteContact; + return L10n.of(context).inviteContact; } } else if (category == 'notifications') { switch (permissionKey) { case 'rooms': - return L10n.of(context)!.notifications; + return L10n.of(context).notifications; } } else if (category == 'events') { switch (permissionKey) { case EventTypes.RoomName: - return L10n.of(context)!.changeTheNameOfTheGroup; + return L10n.of(context).changeTheNameOfTheGroup; case EventTypes.RoomPowerLevels: - return L10n.of(context)!.chatPermissions; + return L10n.of(context).chatPermissions; case EventTypes.HistoryVisibility: - return L10n.of(context)!.visibilityOfTheChatHistory; + return L10n.of(context).visibilityOfTheChatHistory; case EventTypes.RoomCanonicalAlias: - return L10n.of(context)!.setInvitationLink; + return L10n.of(context).setInvitationLink; case EventTypes.RoomAvatar: - return L10n.of(context)!.editRoomAvatar; + return L10n.of(context).editRoomAvatar; case EventTypes.RoomTombstone: - return L10n.of(context)!.replaceRoomWithNewerVersion; + return L10n.of(context).replaceRoomWithNewerVersion; case EventTypes.Encryption: - return L10n.of(context)!.enableEncryption; + return L10n.of(context).enableEncryption; case 'm.room.server_acl': - return L10n.of(context)!.editBlockedServers; + return L10n.of(context).editBlockedServers; } } return permissionKey; @@ -72,7 +72,7 @@ class PermissionsListTile extends StatelessWidget { return ListTile( title: Text(getLocalizedPowerLevelString(context)), subtitle: Text( - L10n.of(context)!.minimumPowerLevel(permission.toString()), + L10n.of(context).minimumPowerLevel(permission.toString()), ), trailing: Material( borderRadius: BorderRadius.circular(AppConfig.borderRadius / 2), @@ -86,19 +86,19 @@ class PermissionsListTile extends StatelessWidget { items: [ DropdownMenuItem( value: 0, - child: Text(L10n.of(context)!.user), + child: Text(L10n.of(context).user), ), DropdownMenuItem( value: 50, - child: Text(L10n.of(context)!.moderator), + child: Text(L10n.of(context).moderator), ), DropdownMenuItem( value: 100, - child: Text(L10n.of(context)!.admin), + child: Text(L10n.of(context).admin), ), DropdownMenuItem( value: null, - child: Text(L10n.of(context)!.custom), + child: Text(L10n.of(context).custom), ), ], ), diff --git a/lib/pages/chat_search/chat_search_files_tab.dart b/lib/pages/chat_search/chat_search_files_tab.dart index 85525ab6..f7492cac 100644 --- a/lib/pages/chat_search/chat_search_files_tab.dart +++ b/lib/pages/chat_search/chat_search_files_tab.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/date_time_extension.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/event_extension.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; @@ -36,9 +36,9 @@ class ChatSearchFilesTab extends StatelessWidget { const CircularProgressIndicator.adaptive(strokeWidth: 2), const SizedBox(height: 8), Text( - L10n.of(context)!.searchIn( + L10n.of(context).searchIn( room.getLocalizedDisplayname( - MatrixLocals(L10n.of(context)!), + MatrixLocals(L10n.of(context)), ), ), ), @@ -52,7 +52,7 @@ class ChatSearchFilesTab extends StatelessWidget { children: [ const Icon(Icons.file_present_outlined, size: 64), const SizedBox(height: 8), - Text(L10n.of(context)!.nothingFound), + Text(L10n.of(context).nothingFound), ], ); } @@ -94,7 +94,7 @@ class ChatSearchFilesTab extends StatelessWidget { icon: const Icon( Icons.arrow_downward_outlined, ), - label: Text(L10n.of(context)!.searchMore), + label: Text(L10n.of(context).searchMore), ), ), ); @@ -102,7 +102,7 @@ class ChatSearchFilesTab extends StatelessWidget { final event = events[i]; final filename = event.content.tryGet('filename') ?? event.content.tryGet('body') ?? - L10n.of(context)!.unknownEvent('File'); + L10n.of(context).unknownEvent('File'); final filetype = (filename.contains('.') ? filename.split('.').last.toUpperCase() : event.content diff --git a/lib/pages/chat_search/chat_search_images_tab.dart b/lib/pages/chat_search/chat_search_images_tab.dart index 9f8c1f0c..3117896e 100644 --- a/lib/pages/chat_search/chat_search_images_tab.dart +++ b/lib/pages/chat_search/chat_search_images_tab.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:intl/intl.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat/events/image_bubble.dart'; import 'package:fluffychat/pages/chat/events/video_player.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; @@ -36,9 +36,9 @@ class ChatSearchImagesTab extends StatelessWidget { const CircularProgressIndicator.adaptive(strokeWidth: 2), const SizedBox(height: 8), Text( - L10n.of(context)!.searchIn( + L10n.of(context).searchIn( room.getLocalizedDisplayname( - MatrixLocals(L10n.of(context)!), + MatrixLocals(L10n.of(context)), ), ), ), @@ -51,7 +51,7 @@ class ChatSearchImagesTab extends StatelessWidget { children: [ const Icon(Icons.photo_outlined, size: 64), const SizedBox(height: 8), - Text(L10n.of(context)!.nothingFound), + Text(L10n.of(context).nothingFound), ], ); } @@ -103,7 +103,7 @@ class ChatSearchImagesTab extends StatelessWidget { icon: const Icon( Icons.arrow_downward_outlined, ), - label: Text(L10n.of(context)!.searchMore), + label: Text(L10n.of(context).searchMore), ), ), ); diff --git a/lib/pages/chat_search/chat_search_message_tab.dart b/lib/pages/chat_search/chat_search_message_tab.dart index 7542d6ae..f1f8a69f 100644 --- a/lib/pages/chat_search/chat_search_message_tab.dart +++ b/lib/pages/chat_search/chat_search_message_tab.dart @@ -1,10 +1,10 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:flutter_linkify/flutter_linkify.dart'; import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/date_time_extension.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/utils/url_launcher.dart'; @@ -40,9 +40,9 @@ class ChatSearchMessageTab extends StatelessWidget { const Icon(Icons.search_outlined, size: 64), const SizedBox(height: 8), Text( - L10n.of(context)!.searchIn( + L10n.of(context).searchIn( room.getLocalizedDisplayname( - MatrixLocals(L10n.of(context)!), + MatrixLocals(L10n.of(context)), ), ), ), @@ -91,7 +91,7 @@ class ChatSearchMessageTab extends StatelessWidget { icon: const Icon( Icons.arrow_downward_outlined, ), - label: Text(L10n.of(context)!.searchMore), + label: Text(L10n.of(context).searchMore), ), ), ); @@ -99,7 +99,7 @@ class ChatSearchMessageTab extends StatelessWidget { final event = events[i]; final sender = event.senderFromMemoryOrFallback; final displayname = sender.calcDisplayname( - i18n: MatrixLocals(L10n.of(context)!), + i18n: MatrixLocals(L10n.of(context)), ); return _MessageSearchResultListTile( sender: sender, @@ -163,7 +163,7 @@ class _MessageSearchResultListTile extends StatelessWidget { plaintextBody: true, removeMarkdown: true, MatrixLocals( - L10n.of(context)!, + L10n.of(context), ), ) .trim(), diff --git a/lib/pages/chat_search/chat_search_view.dart b/lib/pages/chat_search/chat_search_view.dart index e08f25a2..f8f98beb 100644 --- a/lib/pages/chat_search/chat_search_view.dart +++ b/lib/pages/chat_search/chat_search_view.dart @@ -1,8 +1,7 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; - import 'package:fluffychat/config/themes.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat_search/chat_search_files_tab.dart'; import 'package:fluffychat/pages/chat_search/chat_search_images_tab.dart'; import 'package:fluffychat/pages/chat_search/chat_search_message_tab.dart'; @@ -20,12 +19,11 @@ class ChatSearchView extends StatelessWidget { final room = controller.room; if (room == null) { return Scaffold( - appBar: AppBar(title: Text(L10n.of(context)!.oopsSomethingWentWrong)), + appBar: AppBar(title: Text(L10n.of(context).oopsSomethingWentWrong)), body: Center( child: Padding( padding: const EdgeInsets.all(16), - child: - Text(L10n.of(context)!.youAreNoLongerParticipatingInThisChat), + child: Text(L10n.of(context).youAreNoLongerParticipatingInThisChat), ), ), ); @@ -36,8 +34,8 @@ class ChatSearchView extends StatelessWidget { leading: const Center(child: BackButton()), titleSpacing: 0, title: Text( - L10n.of(context)!.searchIn( - room.getLocalizedDisplayname(MatrixLocals(L10n.of(context)!)), + L10n.of(context).searchIn( + room.getLocalizedDisplayname(MatrixLocals(L10n.of(context))), ), ), ), @@ -57,7 +55,7 @@ class ChatSearchView extends StatelessWidget { autofocus: true, enabled: controller.tabController.index == 0, decoration: InputDecoration( - hintText: L10n.of(context)!.search, + hintText: L10n.of(context).search, suffixIcon: const Icon(Icons.search_outlined), ), ), @@ -65,9 +63,9 @@ class ChatSearchView extends StatelessWidget { TabBar( controller: controller.tabController, tabs: [ - Tab(child: Text(L10n.of(context)!.messages)), - Tab(child: Text(L10n.of(context)!.gallery)), - Tab(child: Text(L10n.of(context)!.files)), + Tab(child: Text(L10n.of(context).messages)), + Tab(child: Text(L10n.of(context).gallery)), + Tab(child: Text(L10n.of(context).files)), ], ), Expanded( diff --git a/lib/pages/device_settings/device_settings.dart b/lib/pages/device_settings/device_settings.dart index d2eb96a4..9c5a8185 100644 --- a/lib/pages/device_settings/device_settings.dart +++ b/lib/pages/device_settings/device_settings.dart @@ -2,11 +2,11 @@ import 'package:flutter/material.dart'; import 'package:adaptive_dialog/adaptive_dialog.dart'; import 'package:collection/collection.dart' show IterableExtension; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:matrix/encryption/utils/key_verification.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/device_settings/device_settings_view.dart'; import 'package:fluffychat/pages/key_verification/key_verification_dialog.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; @@ -35,10 +35,10 @@ class DevicesSettingsController extends State { void removeDevicesAction(List devices) async { if (await showOkCancelAlertDialog( context: context, - title: L10n.of(context)!.areYouSure, - okLabel: L10n.of(context)!.yes, - cancelLabel: L10n.of(context)!.cancel, - message: L10n.of(context)!.removeDevicesDescription, + title: L10n.of(context).areYouSure, + okLabel: L10n.of(context).yes, + cancelLabel: L10n.of(context).cancel, + message: L10n.of(context).removeDevicesDescription, ) == OkCancelResult.cancel) return; final matrix = Matrix.of(context); @@ -70,9 +70,9 @@ class DevicesSettingsController extends State { void renameDeviceAction(Device device) async { final displayName = await showTextInputDialog( context: context, - title: L10n.of(context)!.changeDeviceName, - okLabel: L10n.of(context)!.ok, - cancelLabel: L10n.of(context)!.cancel, + title: L10n.of(context).changeDeviceName, + okLabel: L10n.of(context).ok, + cancelLabel: L10n.of(context).cancel, textFields: [ DialogTextField( hintText: device.displayName, @@ -94,10 +94,10 @@ class DevicesSettingsController extends State { void verifyDeviceAction(Device device) async { final consent = await showOkCancelAlertDialog( context: context, - title: L10n.of(context)!.verifyOtherDevice, - message: L10n.of(context)!.verifyOtherDeviceDescription, - okLabel: L10n.of(context)!.ok, - cancelLabel: L10n.of(context)!.cancel, + title: L10n.of(context).verifyOtherDevice, + message: L10n.of(context).verifyOtherDeviceDescription, + okLabel: L10n.of(context).ok, + cancelLabel: L10n.of(context).cancel, fullyCapitalizedForMaterial: false, ); if (consent != OkCancelResult.ok) return; diff --git a/lib/pages/device_settings/device_settings_view.dart b/lib/pages/device_settings/device_settings_view.dart index e107d30c..9693e259 100644 --- a/lib/pages/device_settings/device_settings_view.dart +++ b/lib/pages/device_settings/device_settings_view.dart @@ -1,7 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; - +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/device_settings/device_settings.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; import 'user_device_list_item.dart'; @@ -16,7 +15,7 @@ class DevicesSettingsView extends StatelessWidget { return Scaffold( appBar: AppBar( leading: const Center(child: BackButton()), - title: Text(L10n.of(context)!.devices), + title: Text(L10n.of(context).devices), ), body: MaxWidthBody( child: FutureBuilder( @@ -55,7 +54,7 @@ class DevicesSettingsView extends StatelessWidget { ), alignment: Alignment.centerLeft, child: Text( - L10n.of(context)!.thisDevice, + L10n.of(context).thisDevice, style: TextStyle( fontWeight: FontWeight.bold, color: Theme.of(context).colorScheme.primary, @@ -83,7 +82,7 @@ class DevicesSettingsView extends StatelessWidget { child: TextButton.icon( label: Text( controller.errorDeletingDevices ?? - L10n.of(context)!.removeAllOtherDevices, + L10n.of(context).removeAllOtherDevices, ), style: TextButton.styleFrom( foregroundColor: Theme.of(context) @@ -110,7 +109,7 @@ class DevicesSettingsView extends StatelessWidget { Center( child: Padding( padding: const EdgeInsets.all(16.0), - child: Text(L10n.of(context)!.noOtherDevicesFound), + child: Text(L10n.of(context).noOtherDevicesFound), ), ), ], diff --git a/lib/pages/device_settings/user_device_list_item.dart b/lib/pages/device_settings/user_device_list_item.dart index cf3acd6c..d9d3b9ad 100644 --- a/lib/pages/device_settings/user_device_list_item.dart +++ b/lib/pages/device_settings/user_device_list_item.dart @@ -1,10 +1,10 @@ import 'package:flutter/material.dart'; import 'package:adaptive_dialog/adaptive_dialog.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import '../../utils/date_time_extension.dart'; import '../../utils/matrix_sdk_extensions/device_extension.dart'; import '../../widgets/matrix.dart'; @@ -55,30 +55,30 @@ class UserDeviceListItem extends StatelessWidget { actions: [ SheetAction( key: UserDeviceListItemAction.rename, - label: L10n.of(context)!.changeDeviceName, + label: L10n.of(context).changeDeviceName, ), if (!isOwnDevice && keys != null) ...{ SheetAction( key: UserDeviceListItemAction.verify, - label: L10n.of(context)!.verifyStart, + label: L10n.of(context).verifyStart, ), if (!keys.blocked) SheetAction( key: UserDeviceListItemAction.block, - label: L10n.of(context)!.blockDevice, + label: L10n.of(context).blockDevice, isDestructiveAction: true, ), if (keys.blocked) SheetAction( key: UserDeviceListItemAction.unblock, - label: L10n.of(context)!.unblockDevice, + label: L10n.of(context).unblockDevice, isDestructiveAction: true, ), }, if (!isOwnDevice) SheetAction( key: UserDeviceListItemAction.remove, - label: L10n.of(context)!.delete, + label: L10n.of(context).delete, isDestructiveAction: true, ), ], @@ -119,7 +119,7 @@ class UserDeviceListItem extends StatelessWidget { overflow: TextOverflow.ellipsis, ), subtitle: Text( - L10n.of(context)!.lastActiveAgo( + L10n.of(context).lastActiveAgo( DateTime.fromMillisecondsSinceEpoch(userDevice.lastSeenTs ?? 0) .localizedTimeShort(context), ), @@ -129,10 +129,10 @@ class UserDeviceListItem extends StatelessWidget { ? null : Text( keys.blocked - ? L10n.of(context)!.blocked + ? L10n.of(context).blocked : keys.verified - ? L10n.of(context)!.verified - : L10n.of(context)!.unverified, + ? L10n.of(context).verified + : L10n.of(context).unverified, style: TextStyle( color: keys.blocked ? Colors.red diff --git a/lib/pages/dialer/dialer.dart b/lib/pages/dialer/dialer.dart index 84e6fe92..9ff54030 100644 --- a/lib/pages/dialer/dialer.dart +++ b/lib/pages/dialer/dialer.dart @@ -24,12 +24,12 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_foreground_task/flutter_foreground_task.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:flutter_webrtc/flutter_webrtc.dart' hide VideoRenderer; import 'package:just_audio/just_audio.dart'; import 'package:matrix/matrix.dart'; import 'package:wakelock_plus/wakelock_plus.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/utils/voip/video_renderer.dart'; @@ -134,7 +134,7 @@ class MyCallingPage extends State { Room? get room => call.room; String get displayName => call.room.getLocalizedDisplayname( - MatrixLocals(L10n.of(widget.context)!), + MatrixLocals(L10n.of(widget.context)), ); String get callId => widget.callId; @@ -296,14 +296,14 @@ class MyCallingPage extends State { channelId: 'notification_channel_id', channelName: 'Foreground Notification', channelDescription: - L10n.of(widget.context)!.foregroundServiceRunning, + L10n.of(widget.context).foregroundServiceRunning, ), iosNotificationOptions: const IOSNotificationOptions(), foregroundTaskOptions: const ForegroundTaskOptions(), ); FlutterForegroundTask.startService( - notificationTitle: L10n.of(widget.context)!.screenSharingTitle, - notificationText: L10n.of(widget.context)!.screenSharingDetail, + notificationTitle: L10n.of(widget.context).screenSharingTitle, + notificationText: L10n.of(widget.context).screenSharingDetail, ); } else { FlutterForegroundTask.stopService(); @@ -457,7 +457,7 @@ class MyCallingPage extends State { var title = ''; if (call.localHold) { title = '${call.room.getLocalizedDisplayname( - MatrixLocals(L10n.of(widget.context)!), + MatrixLocals(L10n.of(widget.context)), )} held the call.'; } else if (call.remoteOnHold) { title = 'You held the call.'; diff --git a/lib/pages/homeserver_picker/homeserver_app_bar.dart b/lib/pages/homeserver_picker/homeserver_app_bar.dart index c5f3f6b0..dee00275 100644 --- a/lib/pages/homeserver_picker/homeserver_app_bar.dart +++ b/lib/pages/homeserver_picker/homeserver_app_bar.dart @@ -1,10 +1,10 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:flutter_typeahead/flutter_typeahead.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/homeserver_picker/public_homeserver.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; import 'homeserver_bottom_sheet.dart'; @@ -30,11 +30,11 @@ class HomeserverAppBar extends StatelessWidget { ), emptyBuilder: (context) => ListTile( leading: const Icon(Icons.search_outlined), - title: Text(L10n.of(context)!.nothingFound), + title: Text(L10n.of(context).nothingFound), ), loadingBuilder: (context) => ListTile( leading: const CircularProgressIndicator.adaptive(strokeWidth: 2), - title: Text(L10n.of(context)!.loadingPleaseWait), + title: Text(L10n.of(context).loadingPleaseWait), ), errorBuilder: (context, error) => ListTile( leading: const Icon(Icons.error_outlined), @@ -94,8 +94,8 @@ class HomeserverAppBar extends StatelessWidget { fillColor: FluffyThemes.isColumnMode(context) ? Theme.of(context).colorScheme.surface : Theme.of(context).colorScheme.surfaceContainerHighest, - prefixText: '${L10n.of(context)!.homeserver}: ', - hintText: L10n.of(context)!.enterYourHomeserver, + prefixText: '${L10n.of(context).homeserver}: ', + hintText: L10n.of(context).enterYourHomeserver, suffixIcon: const Icon(Icons.search), ), textInputAction: TextInputAction.search, diff --git a/lib/pages/homeserver_picker/homeserver_picker.dart b/lib/pages/homeserver_picker/homeserver_picker.dart index 7ffe089a..70b1329d 100644 --- a/lib/pages/homeserver_picker/homeserver_picker.dart +++ b/lib/pages/homeserver_picker/homeserver_picker.dart @@ -7,7 +7,6 @@ import 'package:flutter/material.dart'; import 'package:adaptive_dialog/adaptive_dialog.dart'; import 'package:collection/collection.dart'; import 'package:file_picker/file_picker.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:flutter_web_auth_2/flutter_web_auth_2.dart'; import 'package:go_router/go_router.dart'; import 'package:hive_flutter/hive_flutter.dart'; @@ -15,6 +14,7 @@ import 'package:matrix/matrix.dart'; import 'package:universal_html/html.dart' as html; import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/homeserver_picker/homeserver_picker_view.dart'; import 'package:fluffychat/pages/homeserver_picker/public_homeserver.dart'; import 'package:fluffychat/utils/platform_infos.dart'; @@ -51,8 +51,8 @@ class HomeserverPickerController extends State { (e, s) async { await showOkAlertDialog( context: context, - title: L10n.of(context)!.indexedDbErrorTitle, - message: L10n.of(context)!.indexedDbErrorLong, + title: L10n.of(context).indexedDbErrorTitle, + message: L10n.of(context).indexedDbErrorLong, ); _checkTorBrowser(); }, diff --git a/lib/pages/homeserver_picker/homeserver_picker_view.dart b/lib/pages/homeserver_picker/homeserver_picker_view.dart index ce86abec..b237ee7c 100644 --- a/lib/pages/homeserver_picker/homeserver_picker_view.dart +++ b/lib/pages/homeserver_picker/homeserver_picker_view.dart @@ -1,10 +1,10 @@ import 'package:flutter/material.dart'; import 'package:collection/collection.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:url_launcher/url_launcher_string.dart'; import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/widgets/layouts/login_scaffold.dart'; import 'package:fluffychat/widgets/matrix.dart'; import '../../config/themes.dart'; @@ -53,8 +53,8 @@ class HomeserverPickerView extends StatelessWidget { color: Theme.of(context).colorScheme.surface, child: ListTile( leading: const Icon(Icons.vpn_key), - title: Text(L10n.of(context)!.hydrateTor), - subtitle: Text(L10n.of(context)!.hydrateTorLong), + title: Text(L10n.of(context).hydrateTor), + subtitle: Text(L10n.of(context).hydrateTorLong), trailing: const Icon(Icons.chevron_right_outlined), onTap: controller.restoreBackup, ), @@ -87,7 +87,7 @@ class HomeserverPickerView extends StatelessWidget { ), Center( child: Text( - L10n.of(context)! + L10n.of(context) .pleaseTryAgainLaterOrChooseDifferentServer, textAlign: TextAlign.center, style: TextStyle( @@ -134,10 +134,10 @@ class HomeserverPickerView extends StatelessWidget { //isThumbnail: false, ), ), - label: L10n.of(context)!.signInWith( + label: L10n.of(context).signInWith( provider.name ?? provider.brand ?? - L10n.of(context)!.singlesignon, + L10n.of(context).singlesignon, ), onPressed: () => controller.ssoLoginAction(provider.id), @@ -147,7 +147,7 @@ class HomeserverPickerView extends StatelessWidget { if (controller.supportsPasswordLogin) _LoginButton( onPressed: controller.login, - label: L10n.of(context)!.signInWithPassword, + label: L10n.of(context).signInWithPassword, icon: const Icon(Icons.lock_open_outlined, size: 16), ), if (regLink != null) @@ -157,11 +157,11 @@ class HomeserverPickerView extends StatelessWidget { Icons.open_in_new_outlined, size: 16, ), - label: L10n.of(context)!.register, + label: L10n.of(context).register, ), _LoginButton( onPressed: controller.restoreBackup, - label: L10n.of(context)!.hydrate, + label: L10n.of(context).hydrate, withBorder: false, ), const SizedBox(height: 16), diff --git a/lib/pages/image_viewer/image_viewer_view.dart b/lib/pages/image_viewer/image_viewer_view.dart index e4352864..226e8777 100644 --- a/lib/pages/image_viewer/image_viewer_view.dart +++ b/lib/pages/image_viewer/image_viewer_view.dart @@ -1,7 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; - +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/mxc_image.dart'; import 'image_viewer.dart'; @@ -22,7 +21,7 @@ class ImageViewerView extends StatelessWidget { icon: const Icon(Icons.close), onPressed: Navigator.of(context).pop, color: Colors.white, - tooltip: L10n.of(context)!.close, + tooltip: L10n.of(context).close, ), backgroundColor: const Color(0x44000000), actions: [ @@ -30,20 +29,20 @@ class ImageViewerView extends StatelessWidget { icon: const Icon(Icons.reply_outlined), onPressed: controller.forwardAction, color: Colors.white, - tooltip: L10n.of(context)!.share, + tooltip: L10n.of(context).share, ), IconButton( icon: const Icon(Icons.download_outlined), onPressed: () => controller.saveFileAction(context), color: Colors.white, - tooltip: L10n.of(context)!.downloadFile, + tooltip: L10n.of(context).downloadFile, ), if (PlatformInfos.isMobile) // Use builder context to correctly position the share dialog on iPad Builder( builder: (context) => IconButton( onPressed: () => controller.shareFileAction(context), - tooltip: L10n.of(context)!.share, + tooltip: L10n.of(context).share, color: Colors.white, icon: Icon(Icons.adaptive.share_outlined), ), diff --git a/lib/pages/invitation_selection/invitation_selection.dart b/lib/pages/invitation_selection/invitation_selection.dart index 15078735..d0d3eb4b 100644 --- a/lib/pages/invitation_selection/invitation_selection.dart +++ b/lib/pages/invitation_selection/invitation_selection.dart @@ -3,10 +3,10 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:adaptive_dialog/adaptive_dialog.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/invitation_selection/invitation_selection_view.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/widgets/matrix.dart'; @@ -57,15 +57,15 @@ class InvitationSelectionController extends State { if (OkCancelResult.ok != await showOkCancelAlertDialog( context: context, - title: L10n.of(context)!.inviteContact, - message: L10n.of(context)!.inviteContactToGroupQuestion( + title: L10n.of(context).inviteContact, + message: L10n.of(context).inviteContactToGroupQuestion( displayname, room.getLocalizedDisplayname( - MatrixLocals(L10n.of(context)!), + MatrixLocals(L10n.of(context)), ), ), - okLabel: L10n.of(context)!.invite, - cancelLabel: L10n.of(context)!.cancel, + okLabel: L10n.of(context).invite, + cancelLabel: L10n.of(context).cancel, )) { return; } @@ -76,7 +76,7 @@ class InvitationSelectionController extends State { if (success.error == null) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( - content: Text(L10n.of(context)!.contactHasBeenInvitedToTheGroup), + content: Text(L10n.of(context).contactHasBeenInvitedToTheGroup), ), ); } diff --git a/lib/pages/invitation_selection/invitation_selection_view.dart b/lib/pages/invitation_selection/invitation_selection_view.dart index 92596e89..9f7a959c 100644 --- a/lib/pages/invitation_selection/invitation_selection_view.dart +++ b/lib/pages/invitation_selection/invitation_selection_view.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/invitation_selection/invitation_selection.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; @@ -20,20 +20,20 @@ class InvitationSelectionView extends StatelessWidget { if (room == null) { return Scaffold( appBar: AppBar( - title: Text(L10n.of(context)!.oopsSomethingWentWrong), + title: Text(L10n.of(context).oopsSomethingWentWrong), ), body: Center( - child: Text(L10n.of(context)!.youAreNoLongerParticipatingInThisChat), + child: Text(L10n.of(context).youAreNoLongerParticipatingInThisChat), ), ); } - final groupName = room.name.isEmpty ? L10n.of(context)!.group : room.name; + final groupName = room.name.isEmpty ? L10n.of(context).group : room.name; return Scaffold( appBar: AppBar( leading: const Center(child: BackButton()), titleSpacing: 0, - title: Text(L10n.of(context)!.inviteContact), + title: Text(L10n.of(context).inviteContact), ), body: MaxWidthBody( innerPadding: const EdgeInsets.symmetric(vertical: 8), @@ -44,7 +44,7 @@ class InvitationSelectionView extends StatelessWidget { child: TextField( textInputAction: TextInputAction.search, decoration: InputDecoration( - hintText: L10n.of(context)!.inviteContactToGroup(groupName), + hintText: L10n.of(context).inviteContactToGroup(groupName), prefixIcon: controller.loading ? const Padding( padding: EdgeInsets.symmetric( @@ -80,7 +80,7 @@ class InvitationSelectionView extends StatelessWidget { displayname: controller .foundProfiles[i].displayName ?? controller.foundProfiles[i].userId.localpart ?? - L10n.of(context)!.user, + L10n.of(context).user, userId: controller.foundProfiles[i].userId, isMember: participants .contains(controller.foundProfiles[i].userId), @@ -89,7 +89,7 @@ class InvitationSelectionView extends StatelessWidget { controller.foundProfiles[i].userId, controller.foundProfiles[i].displayName ?? controller.foundProfiles[i].userId.localpart ?? - L10n.of(context)!.user, + L10n.of(context).user, ), ), ) @@ -113,7 +113,7 @@ class InvitationSelectionView extends StatelessWidget { avatarUrl: contacts[i].avatarUrl, displayname: contacts[i].displayName ?? contacts[i].id.localpart ?? - L10n.of(context)!.user, + L10n.of(context).user, userId: contacts[i].id, isMember: participants.contains(contacts[i].id), onTap: () => controller.inviteAction( @@ -121,7 +121,7 @@ class InvitationSelectionView extends StatelessWidget { contacts[i].id, contacts[i].displayName ?? contacts[i].id.localpart ?? - L10n.of(context)!.user, + L10n.of(context).user, ), ), ); @@ -176,7 +176,7 @@ class _InviteContactListTile extends StatelessWidget { ), onTap: isMember ? null : onTap, trailing: isMember - ? Text(L10n.of(context)!.participant) + ? Text(L10n.of(context).participant) : const Icon(Icons.person_add_outlined), ), ); diff --git a/lib/pages/key_verification/key_verification_dialog.dart b/lib/pages/key_verification/key_verification_dialog.dart index 99d082a7..7cfd89e2 100644 --- a/lib/pages/key_verification/key_verification_dialog.dart +++ b/lib/pages/key_verification/key_verification_dialog.dart @@ -5,11 +5,11 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:adaptive_dialog/adaptive_dialog.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:matrix/encryption.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/widgets/avatar.dart'; class KeyVerificationDialog extends StatefulWidget { @@ -87,7 +87,7 @@ class KeyVerificationPageState extends State { await showOkAlertDialog( useRootNavigator: false, context: context, - message: L10n.of(context)!.incorrectPassphraseOrKey, + message: L10n.of(context).incorrectPassphraseOrKey, ); } } @@ -104,7 +104,7 @@ class KeyVerificationPageState extends State { } final displayName = user?.calcDisplayname() ?? widget.request.userId.localpart!; - var title = Text(L10n.of(context)!.verifyTitle); + var title = Text(L10n.of(context).verifyTitle); Widget body; final buttons = []; @@ -122,7 +122,7 @@ class KeyVerificationPageState extends State { mainAxisSize: MainAxisSize.min, children: [ Text( - L10n.of(context)!.askSSSSSign, + L10n.of(context).askSSSSSign, style: const TextStyle(fontSize: 20), ), Container(height: 10), @@ -138,7 +138,7 @@ class KeyVerificationPageState extends State { maxLines: 1, obscureText: true, decoration: InputDecoration( - hintText: L10n.of(context)!.passphraseOrKey, + hintText: L10n.of(context).passphraseOrKey, prefixStyle: TextStyle(color: Theme.of(context).colorScheme.primary), suffixStyle: @@ -152,7 +152,7 @@ class KeyVerificationPageState extends State { buttons.add( TextButton( child: Text( - L10n.of(context)!.submit, + L10n.of(context).submit, ), onPressed: () => checkInput(textEditingController.text), ), @@ -160,14 +160,14 @@ class KeyVerificationPageState extends State { buttons.add( TextButton( child: Text( - L10n.of(context)!.skip, + L10n.of(context).skip, ), onPressed: () => widget.request.openSSSS(skip: true), ), ); break; case KeyVerificationState.askAccept: - title = Text(L10n.of(context)!.newVerificationRequest); + title = Text(L10n.of(context).newVerificationRequest); body = Column( mainAxisSize: MainAxisSize.min, children: [ @@ -179,7 +179,7 @@ class KeyVerificationPageState extends State { ), const SizedBox(height: 16), Text( - L10n.of(context)!.askVerificationRequest(displayName), + L10n.of(context).askVerificationRequest(displayName), ), ], ); @@ -187,7 +187,7 @@ class KeyVerificationPageState extends State { TextButton.icon( icon: const Icon(Icons.close), style: TextButton.styleFrom(foregroundColor: Colors.red), - label: Text(L10n.of(context)!.reject), + label: Text(L10n.of(context).reject), onPressed: () => widget.request .rejectVerification() .then((_) => Navigator.of(context, rootNavigator: false).pop()), @@ -196,7 +196,7 @@ class KeyVerificationPageState extends State { buttons.add( TextButton.icon( icon: const Icon(Icons.check), - label: Text(L10n.of(context)!.accept), + label: Text(L10n.of(context).accept), onPressed: () => widget.request.acceptVerification(), ), ); @@ -222,7 +222,7 @@ class KeyVerificationPageState extends State { ), const SizedBox(height: 16), Text( - L10n.of(context)!.waitingPartnerAcceptRequest, + L10n.of(context).waitingPartnerAcceptRequest, textAlign: TextAlign.center, ), ], @@ -231,7 +231,7 @@ class KeyVerificationPageState extends State { buttons.add( TextButton.icon( icon: const Icon(Icons.close), - label: Text(L10n.of(context)!.cancel), + label: Text(L10n.of(context).cancel), onPressed: () => widget.request.cancel(), ), ); @@ -244,7 +244,7 @@ class KeyVerificationPageState extends State { if (widget.request.sasTypes.contains('emoji')) { title = Text( - L10n.of(context)!.compareEmojiMatch, + L10n.of(context).compareEmojiMatch, maxLines: 1, style: const TextStyle(fontSize: 16), ); @@ -254,7 +254,7 @@ class KeyVerificationPageState extends State { .toList(), ); } else { - title = Text(L10n.of(context)!.compareNumbersMatch); + title = Text(L10n.of(context).compareNumbersMatch); final numbers = widget.request.sasNumbers; final numbstr = '${numbers[0]}-${numbers[1]}-${numbers[2]}'; compareWidget = @@ -275,22 +275,22 @@ class KeyVerificationPageState extends State { style: TextButton.styleFrom( foregroundColor: Colors.red, ), - label: Text(L10n.of(context)!.theyDontMatch), + label: Text(L10n.of(context).theyDontMatch), onPressed: () => widget.request.rejectSas(), ), ); buttons.add( TextButton.icon( icon: const Icon(Icons.check_outlined), - label: Text(L10n.of(context)!.theyMatch), + label: Text(L10n.of(context).theyMatch), onPressed: () => widget.request.acceptSas(), ), ); break; case KeyVerificationState.waitingSas: final acceptText = widget.request.sasTypes.contains('emoji') - ? L10n.of(context)!.waitingPartnerEmoji - : L10n.of(context)!.waitingPartnerNumbers; + ? L10n.of(context).waitingPartnerEmoji + : L10n.of(context).waitingPartnerNumbers; body = Column( mainAxisSize: MainAxisSize.min, children: [ @@ -314,7 +314,7 @@ class KeyVerificationPageState extends State { ), const SizedBox(height: 10), Text( - L10n.of(context)!.verifySuccess, + L10n.of(context).verifySuccess, textAlign: TextAlign.center, ), ], @@ -322,7 +322,7 @@ class KeyVerificationPageState extends State { buttons.add( TextButton( child: Text( - L10n.of(context)!.close, + L10n.of(context).close, ), onPressed: () => Navigator.of(context, rootNavigator: false).pop(), ), @@ -345,7 +345,7 @@ class KeyVerificationPageState extends State { buttons.add( TextButton( child: Text( - L10n.of(context)!.close, + L10n.of(context).close, ), onPressed: () => Navigator.of(context, rootNavigator: false).pop(), ), diff --git a/lib/pages/login/login.dart b/lib/pages/login/login.dart index c62e2100..f648cc90 100644 --- a/lib/pages/login/login.dart +++ b/lib/pages/login/login.dart @@ -3,10 +3,10 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:adaptive_dialog/adaptive_dialog.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; import 'package:fluffychat/widgets/matrix.dart'; import '../../utils/platform_infos.dart'; @@ -33,12 +33,12 @@ class LoginController extends State { void login() async { final matrix = Matrix.of(context); if (usernameController.text.isEmpty) { - setState(() => usernameError = L10n.of(context)!.pleaseEnterYourUsername); + setState(() => usernameError = L10n.of(context).pleaseEnterYourUsername); } else { setState(() => usernameError = null); } if (passwordController.text.isEmpty) { - setState(() => passwordError = L10n.of(context)!.pleaseEnterYourPassword); + setState(() => passwordError = L10n.of(context).pleaseEnterYourPassword); } else { setState(() => passwordError = null); } @@ -128,10 +128,9 @@ class LoginController extends State { final dialogResult = await showOkCancelAlertDialog( context: context, useRootNavigator: false, - message: - L10n.of(context)!.noMatrixServer(newDomain, oldHomeserver!), - okLabel: L10n.of(context)!.ok, - cancelLabel: L10n.of(context)!.cancel, + message: L10n.of(context).noMatrixServer(newDomain, oldHomeserver!), + okLabel: L10n.of(context).ok, + cancelLabel: L10n.of(context).cancel, ); if (dialogResult == OkCancelResult.ok) { if (mounted) setState(() => usernameError = null); @@ -159,16 +158,16 @@ class LoginController extends State { final input = await showTextInputDialog( useRootNavigator: false, context: context, - title: L10n.of(context)!.passwordForgotten, - message: L10n.of(context)!.enterAnEmailAddress, - okLabel: L10n.of(context)!.ok, - cancelLabel: L10n.of(context)!.cancel, + title: L10n.of(context).passwordForgotten, + message: L10n.of(context).enterAnEmailAddress, + okLabel: L10n.of(context).ok, + cancelLabel: L10n.of(context).cancel, fullyCapitalizedForMaterial: false, textFields: [ DialogTextField( initialText: usernameController.text.isEmail ? usernameController.text : '', - hintText: L10n.of(context)!.enterAnEmailAddress, + hintText: L10n.of(context).enterAnEmailAddress, keyboardType: TextInputType.emailAddress, ), ], @@ -188,10 +187,10 @@ class LoginController extends State { final password = await showTextInputDialog( useRootNavigator: false, context: context, - title: L10n.of(context)!.passwordForgotten, - message: L10n.of(context)!.chooseAStrongPassword, - okLabel: L10n.of(context)!.ok, - cancelLabel: L10n.of(context)!.cancel, + title: L10n.of(context).passwordForgotten, + message: L10n.of(context).chooseAStrongPassword, + okLabel: L10n.of(context).ok, + cancelLabel: L10n.of(context).cancel, fullyCapitalizedForMaterial: false, textFields: [ const DialogTextField( @@ -206,9 +205,9 @@ class LoginController extends State { final ok = await showOkAlertDialog( useRootNavigator: false, context: context, - title: L10n.of(context)!.weSentYouAnEmail, - message: L10n.of(context)!.pleaseClickOnLink, - okLabel: L10n.of(context)!.iHaveClickedOnLink, + title: L10n.of(context).weSentYouAnEmail, + message: L10n.of(context).pleaseClickOnLink, + okLabel: L10n.of(context).iHaveClickedOnLink, fullyCapitalizedForMaterial: false, ); if (ok != OkCancelResult.ok) return; @@ -233,7 +232,7 @@ class LoginController extends State { ); if (success.error == null) { ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(L10n.of(context)!.passwordHasBeenChanged)), + SnackBar(content: Text(L10n.of(context).passwordHasBeenChanged)), ); usernameController.text = input.single; passwordController.text = password.single; diff --git a/lib/pages/login/login_view.dart b/lib/pages/login/login_view.dart index 80dae7a7..2589d76c 100644 --- a/lib/pages/login/login_view.dart +++ b/lib/pages/login/login_view.dart @@ -1,8 +1,7 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; - import 'package:fluffychat/config/themes.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/widgets/layouts/login_scaffold.dart'; import 'package:fluffychat/widgets/matrix.dart'; import 'login.dart'; @@ -19,7 +18,7 @@ class LoginView extends StatelessWidget { .homeserver .toString() .replaceFirst('https://', ''); - final title = L10n.of(context)!.logInTo(homeserver); + final title = L10n.of(context).logInTo(homeserver); final titleParts = title.split(homeserver); final textFieldFillColor = FluffyThemes.isColumnMode(context) @@ -71,7 +70,7 @@ class LoginView extends StatelessWidget { errorText: controller.usernameError, errorStyle: const TextStyle(color: Colors.orange), fillColor: textFieldFillColor, - hintText: L10n.of(context)!.emailOrUsername, + hintText: L10n.of(context).emailOrUsername, ), ), ), @@ -101,7 +100,7 @@ class LoginView extends StatelessWidget { color: Colors.black, ), ), - hintText: L10n.of(context)!.password, + hintText: L10n.of(context).password, ), ), ), @@ -117,7 +116,7 @@ class LoginView extends StatelessWidget { icon: const Icon(Icons.login_outlined), label: controller.loading ? const LinearProgressIndicator() - : Text(L10n.of(context)!.login), + : Text(L10n.of(context).login), ), ), const SizedBox(height: 16), @@ -131,7 +130,7 @@ class LoginView extends StatelessWidget { foregroundColor: Theme.of(context).colorScheme.error, ), icon: const Icon(Icons.safety_check_outlined), - label: Text(L10n.of(context)!.passwordForgotten), + label: Text(L10n.of(context).passwordForgotten), ), ), const SizedBox(height: 16), diff --git a/lib/pages/new_group/new_group_view.dart b/lib/pages/new_group/new_group_view.dart index a00ba375..be659561 100644 --- a/lib/pages/new_group/new_group_view.dart +++ b/lib/pages/new_group/new_group_view.dart @@ -1,8 +1,7 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; - import 'package:fluffychat/config/themes.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/new_group/new_group.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; import 'package:fluffychat/widgets/avatar.dart'; @@ -24,7 +23,7 @@ class NewGroupView extends StatelessWidget { onPressed: controller.loading ? null : Navigator.of(context).pop, ), ), - title: Text(L10n.of(context)!.createGroup), + title: Text(L10n.of(context).createGroup), ), body: MaxWidthBody( child: Column( @@ -61,7 +60,7 @@ class NewGroupView extends StatelessWidget { readOnly: controller.loading, decoration: InputDecoration( prefixIcon: const Icon(Icons.people_outlined), - hintText: L10n.of(context)!.groupName, + hintText: L10n.of(context).groupName, ), ), ), @@ -78,14 +77,14 @@ class NewGroupView extends StatelessWidget { maxLength: 255, readOnly: controller.loading, decoration: InputDecoration( - hintText: L10n.of(context)!.addChatDescription, + hintText: L10n.of(context).addChatDescription, ), ), ), const SizedBox(height: 16), SwitchListTile.adaptive( secondary: const Icon(Icons.public_outlined), - title: Text(L10n.of(context)!.groupIsPublic), + title: Text(L10n.of(context).groupIsPublic), value: controller.publicGroup, onChanged: controller.loading ? null : controller.setPublicGroup, ), @@ -94,7 +93,7 @@ class NewGroupView extends StatelessWidget { child: controller.publicGroup ? SwitchListTile.adaptive( secondary: const Icon(Icons.search_outlined), - title: Text(L10n.of(context)!.groupCanBeFoundViaSearch), + title: Text(L10n.of(context).groupCanBeFoundViaSearch), value: controller.groupCanBeFound, onChanged: controller.loading ? null @@ -108,7 +107,7 @@ class NewGroupView extends StatelessWidget { color: Theme.of(context).colorScheme.onSurface, ), title: Text( - L10n.of(context)!.enableEncryption, + L10n.of(context).enableEncryption, style: TextStyle( color: Theme.of(context).colorScheme.onSurface, ), @@ -133,7 +132,7 @@ class NewGroupView extends StatelessWidget { children: [ Expanded( child: Text( - L10n.of(context)!.createGroupAndInviteUsers, + L10n.of(context).createGroupAndInviteUsers, ), ), Icon(Icons.adaptive.arrow_forward_outlined), diff --git a/lib/pages/new_private_chat/new_private_chat.dart b/lib/pages/new_private_chat/new_private_chat.dart index c1d8c649..03c3b6c2 100644 --- a/lib/pages/new_private_chat/new_private_chat.dart +++ b/lib/pages/new_private_chat/new_private_chat.dart @@ -4,9 +4,9 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:device_info_plus/device_info_plus.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/new_private_chat/new_private_chat_view.dart'; import 'package:fluffychat/pages/new_private_chat/qr_scanner_modal.dart'; import 'package:fluffychat/pages/user_bottom_sheet/user_bottom_sheet.dart'; @@ -74,7 +74,7 @@ class NewPrivateChatController extends State { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text( - L10n.of(context)!.unsupportedAndroidVersionLong, + L10n.of(context).unsupportedAndroidVersionLong, ), ), ); @@ -94,7 +94,7 @@ class NewPrivateChatController extends State { ClipboardData(text: Matrix.of(context).client.userID!), ); ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(L10n.of(context)!.copiedToClipboard)), + SnackBar(content: Text(L10n.of(context).copiedToClipboard)), ); } diff --git a/lib/pages/new_private_chat/new_private_chat_view.dart b/lib/pages/new_private_chat/new_private_chat_view.dart index 81d10bcf..70fd9e6d 100644 --- a/lib/pages/new_private_chat/new_private_chat_view.dart +++ b/lib/pages/new_private_chat/new_private_chat_view.dart @@ -1,12 +1,12 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; import 'package:pretty_qr_code/pretty_qr_code.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/new_private_chat/new_private_chat.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; import 'package:fluffychat/utils/platform_infos.dart'; @@ -27,13 +27,13 @@ class NewPrivateChatView extends StatelessWidget { appBar: AppBar( scrolledUnderElevation: 0, leading: const Center(child: BackButton()), - title: Text(L10n.of(context)!.newChat), + title: Text(L10n.of(context).newChat), backgroundColor: Theme.of(context).scaffoldBackgroundColor, actions: [ TextButton( onPressed: UrlLauncher(context, AppConfig.startChatTutorial).launchUrl, - child: Text(L10n.of(context)!.help), + child: Text(L10n.of(context).help), ), ], ), @@ -51,7 +51,7 @@ class NewPrivateChatView extends StatelessWidget { controller: controller.controller, onChanged: controller.searchUsers, decoration: InputDecoration( - hintText: L10n.of(context)!.searchForUsers, + hintText: L10n.of(context).searchForUsers, prefixIcon: searchResponse == null ? const Icon(Icons.search_outlined) : FutureBuilder( @@ -98,7 +98,7 @@ class NewPrivateChatView extends StatelessWidget { TextSpan( children: [ TextSpan( - text: L10n.of(context)!.yourGlobalUserIdIs, + text: L10n.of(context).yourGlobalUserIdIs, ), TextSpan( text: Matrix.of(context).client.userID, @@ -123,7 +123,7 @@ class NewPrivateChatView extends StatelessWidget { Theme.of(context).colorScheme.onSecondaryContainer, child: Icon(Icons.adaptive.share_outlined), ), - title: Text(L10n.of(context)!.shareInviteLink), + title: Text(L10n.of(context).shareInviteLink), onTap: controller.inviteAction, ), ListTile( @@ -134,7 +134,7 @@ class NewPrivateChatView extends StatelessWidget { Theme.of(context).colorScheme.onTertiaryContainer, child: const Icon(Icons.group_add_outlined), ), - title: Text(L10n.of(context)!.createGroup), + title: Text(L10n.of(context).createGroup), onTap: () => context.go('/rooms/newgroup'), ), if (PlatformInfos.isMobile) @@ -146,7 +146,7 @@ class NewPrivateChatView extends StatelessWidget { Theme.of(context).colorScheme.onPrimaryContainer, child: const Icon(Icons.qr_code_scanner_outlined), ), - title: Text(L10n.of(context)!.scanQrCode), + title: Text(L10n.of(context).scanQrCode), onTap: controller.openScannerAction, ), Center( @@ -205,7 +205,7 @@ class NewPrivateChatView extends StatelessWidget { OutlinedButton.icon( onPressed: controller.searchUsers, icon: const Icon(Icons.refresh_outlined), - label: Text(L10n.of(context)!.tryAgain), + label: Text(L10n.of(context).tryAgain), ), ], ); @@ -223,7 +223,7 @@ class NewPrivateChatView extends StatelessWidget { Padding( padding: const EdgeInsets.all(16.0), child: Text( - L10n.of(context)!.noUsersFoundWithQuery( + L10n.of(context).noUsersFoundWithQuery( controller.controller.text, ), style: TextStyle( diff --git a/lib/pages/new_private_chat/qr_scanner_modal.dart b/lib/pages/new_private_chat/qr_scanner_modal.dart index fbc1d5e4..d9809bb5 100644 --- a/lib/pages/new_private_chat/qr_scanner_modal.dart +++ b/lib/pages/new_private_chat/qr_scanner_modal.dart @@ -3,9 +3,10 @@ import 'dart:io'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:qr_code_scanner/qr_code_scanner.dart'; +import 'package:fluffychat/l10n/l10n.dart'; + class QrScannerModal extends StatefulWidget { final void Function(String) onScan; const QrScannerModal({required this.onScan, super.key}); @@ -35,9 +36,9 @@ class QrScannerModalState extends State { leading: IconButton( icon: const Icon(Icons.close_outlined), onPressed: Navigator.of(context).pop, - tooltip: L10n.of(context)!.close, + tooltip: L10n.of(context).close, ), - title: Text(L10n.of(context)!.scanQrCode), + title: Text(L10n.of(context).scanQrCode), ), body: Stack( children: [ diff --git a/lib/pages/new_space/new_space.dart b/lib/pages/new_space/new_space.dart index a5a55c8b..d36de730 100644 --- a/lib/pages/new_space/new_space.dart +++ b/lib/pages/new_space/new_space.dart @@ -3,11 +3,11 @@ import 'dart:typed_data'; import 'package:flutter/material.dart'; import 'package:file_picker/file_picker.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart' as sdk; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/new_space/new_space_view.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; import 'package:fluffychat/widgets/matrix.dart'; @@ -53,7 +53,7 @@ class NewSpaceController extends State { }); if (nameController.text.isEmpty) { setState(() { - nameError = L10n.of(context)!.pleaseChoose; + nameError = L10n.of(context).pleaseChoose; }); return; } diff --git a/lib/pages/new_space/new_space_view.dart b/lib/pages/new_space/new_space_view.dart index eb464855..d667f25d 100644 --- a/lib/pages/new_space/new_space_view.dart +++ b/lib/pages/new_space/new_space_view.dart @@ -1,7 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; - +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; import 'new_space.dart'; @@ -16,7 +15,7 @@ class NewSpaceView extends StatelessWidget { final avatar = controller.avatar; return Scaffold( appBar: AppBar( - title: Text(L10n.of(context)!.createNewSpace), + title: Text(L10n.of(context).createNewSpace), ), body: MaxWidthBody( child: Column( @@ -27,7 +26,7 @@ class NewSpaceView extends StatelessWidget { padding: EdgeInsets.symmetric(horizontal: 16.0), child: Icon(Icons.info_outlined), ), - subtitle: Text(L10n.of(context)!.newSpaceDescription), + subtitle: Text(L10n.of(context).newSpaceDescription), ), const SizedBox(height: 16), Padding( @@ -61,7 +60,7 @@ class NewSpaceView extends StatelessWidget { readOnly: controller.loading, decoration: InputDecoration( prefixIcon: const Icon(Icons.people_outlined), - hintText: L10n.of(context)!.spaceName, + hintText: L10n.of(context).spaceName, errorText: controller.nameError, ), ), @@ -79,14 +78,14 @@ class NewSpaceView extends StatelessWidget { maxLength: 255, readOnly: controller.loading, decoration: InputDecoration( - hintText: L10n.of(context)!.addChatDescription, + hintText: L10n.of(context).addChatDescription, errorText: controller.topicError, ), ), ), const SizedBox(height: 16), SwitchListTile.adaptive( - title: Text(L10n.of(context)!.spaceIsPublic), + title: Text(L10n.of(context).spaceIsPublic), value: controller.publicGroup, onChanged: controller.setPublicGroup, ), @@ -107,7 +106,7 @@ class NewSpaceView extends StatelessWidget { children: [ Expanded( child: Text( - L10n.of(context)!.createNewSpace, + L10n.of(context).createNewSpace, ), ), Icon(Icons.adaptive.arrow_forward_outlined), diff --git a/lib/pages/settings/settings.dart b/lib/pages/settings/settings.dart index 97bbec66..389539fe 100644 --- a/lib/pages/settings/settings.dart +++ b/lib/pages/settings/settings.dart @@ -5,11 +5,11 @@ import 'package:flutter/material.dart'; import 'package:adaptive_dialog/adaptive_dialog.dart'; import 'package:collection/collection.dart'; import 'package:file_picker/file_picker.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:image_picker/image_picker.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/app_lock.dart'; import '../../widgets/matrix.dart'; @@ -37,9 +37,9 @@ class SettingsController extends State { final input = await showTextInputDialog( useRootNavigator: false, context: context, - title: L10n.of(context)!.editDisplayname, - okLabel: L10n.of(context)!.ok, - cancelLabel: L10n.of(context)!.cancel, + title: L10n.of(context).editDisplayname, + okLabel: L10n.of(context).ok, + cancelLabel: L10n.of(context).cancel, textFields: [ DialogTextField( initialText: profile?.displayName ?? @@ -64,11 +64,11 @@ class SettingsController extends State { if (await showOkCancelAlertDialog( useRootNavigator: false, context: context, - title: L10n.of(context)!.areYouSureYouWantToLogout, - message: L10n.of(context)!.noBackupWarning, + title: L10n.of(context).areYouSureYouWantToLogout, + message: L10n.of(context).noBackupWarning, isDestructiveAction: noBackup, - okLabel: L10n.of(context)!.logout, - cancelLabel: L10n.of(context)!.cancel, + okLabel: L10n.of(context).logout, + cancelLabel: L10n.of(context).cancel, ) == OkCancelResult.cancel) { return; @@ -86,19 +86,19 @@ class SettingsController extends State { if (PlatformInfos.isMobile) SheetAction( key: AvatarAction.camera, - label: L10n.of(context)!.openCamera, + label: L10n.of(context).openCamera, isDefaultAction: true, icon: Icons.camera_alt_outlined, ), SheetAction( key: AvatarAction.file, - label: L10n.of(context)!.openGallery, + label: L10n.of(context).openGallery, icon: Icons.photo_outlined, ), if (profile?.avatarUrl != null) SheetAction( key: AvatarAction.remove, - label: L10n.of(context)!.removeYourAvatar, + label: L10n.of(context).removeYourAvatar, isDestructiveAction: true, icon: Icons.delete_outlined, ), @@ -107,7 +107,7 @@ class SettingsController extends State { ? actions.single.key : await showModalActionSheet( context: context, - title: L10n.of(context)!.changeYourAvatar, + title: L10n.of(context).changeYourAvatar, actions: actions, ); if (action == null) return; @@ -192,9 +192,9 @@ class SettingsController extends State { if (showChatBackupBanner != true) { showOkAlertDialog( context: context, - title: L10n.of(context)!.chatBackup, - message: L10n.of(context)!.onlineKeyBackupEnabled, - okLabel: L10n.of(context)!.close, + title: L10n.of(context).chatBackup, + message: L10n.of(context).onlineKeyBackupEnabled, + okLabel: L10n.of(context).close, ); return; } diff --git a/lib/pages/settings/settings_view.dart b/lib/pages/settings/settings_view.dart index a709f46f..09f5d8b9 100644 --- a/lib/pages/settings/settings_view.dart +++ b/lib/pages/settings/settings_view.dart @@ -1,11 +1,11 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; import 'package:url_launcher/url_launcher_string.dart'; import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/fluffy_share.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/avatar.dart'; @@ -27,11 +27,11 @@ class SettingsView extends StatelessWidget { onPressed: () => context.go('/rooms'), ), ), - title: Text(L10n.of(context)!.settings), + title: Text(L10n.of(context).settings), actions: [ TextButton.icon( onPressed: controller.logoutAction, - label: Text(L10n.of(context)!.logout), + label: Text(L10n.of(context).logout), icon: const Icon(Icons.logout_outlined), ), ], @@ -46,7 +46,7 @@ class SettingsView extends StatelessWidget { builder: (context, snapshot) { final profile = snapshot.data; final mxid = - Matrix.of(context).client.userID ?? L10n.of(context)!.user; + Matrix.of(context).client.userID ?? L10n.of(context).user; final displayname = profile?.displayName ?? mxid.localpart ?? mxid; return Row( @@ -143,7 +143,7 @@ class SettingsView extends StatelessWidget { if (showChatBackupBanner == null) ListTile( leading: const Icon(Icons.backup_outlined), - title: Text(L10n.of(context)!.chatBackup), + title: Text(L10n.of(context).chatBackup), trailing: const CircularProgressIndicator.adaptive(), ) else @@ -151,7 +151,7 @@ class SettingsView extends StatelessWidget { controlAffinity: ListTileControlAffinity.trailing, value: controller.showChatBackupBanner == false, secondary: const Icon(Icons.backup_outlined), - title: Text(L10n.of(context)!.chatBackup), + title: Text(L10n.of(context).chatBackup), onChanged: controller.firstRunBootstrapAction, ), Divider( @@ -160,31 +160,31 @@ class SettingsView extends StatelessWidget { ), ListTile( leading: const Icon(Icons.format_paint_outlined), - title: Text(L10n.of(context)!.changeTheme), + title: Text(L10n.of(context).changeTheme), onTap: () => context.go('/rooms/settings/style'), trailing: const Icon(Icons.chevron_right_outlined), ), ListTile( leading: const Icon(Icons.notifications_outlined), - title: Text(L10n.of(context)!.notifications), + title: Text(L10n.of(context).notifications), onTap: () => context.go('/rooms/settings/notifications'), trailing: const Icon(Icons.chevron_right_outlined), ), ListTile( leading: const Icon(Icons.devices_outlined), - title: Text(L10n.of(context)!.devices), + title: Text(L10n.of(context).devices), onTap: () => context.go('/rooms/settings/devices'), trailing: const Icon(Icons.chevron_right_outlined), ), ListTile( leading: const Icon(Icons.forum_outlined), - title: Text(L10n.of(context)!.chat), + title: Text(L10n.of(context).chat), onTap: () => context.go('/rooms/settings/chat'), trailing: const Icon(Icons.chevron_right_outlined), ), ListTile( leading: const Icon(Icons.shield_outlined), - title: Text(L10n.of(context)!.security), + title: Text(L10n.of(context).security), onTap: () => context.go('/rooms/settings/security'), trailing: const Icon(Icons.chevron_right_outlined), ), @@ -194,19 +194,19 @@ class SettingsView extends StatelessWidget { ), ListTile( leading: const Icon(Icons.help_outline_outlined), - title: Text(L10n.of(context)!.help), + title: Text(L10n.of(context).help), onTap: () => launchUrlString(AppConfig.supportUrl), trailing: const Icon(Icons.open_in_new_outlined), ), ListTile( leading: const Icon(Icons.shield_sharp), - title: Text(L10n.of(context)!.privacy), + title: Text(L10n.of(context).privacy), onTap: () => launchUrlString(AppConfig.privacyUrl), trailing: const Icon(Icons.open_in_new_outlined), ), ListTile( leading: const Icon(Icons.info_outline_rounded), - title: Text(L10n.of(context)!.about), + title: Text(L10n.of(context).about), onTap: () => PlatformInfos.showDialog(context), trailing: const Icon(Icons.chevron_right_outlined), ), diff --git a/lib/pages/settings_3pid/settings_3pid.dart b/lib/pages/settings_3pid/settings_3pid.dart index d46cac2a..ffc98188 100644 --- a/lib/pages/settings_3pid/settings_3pid.dart +++ b/lib/pages/settings_3pid/settings_3pid.dart @@ -1,10 +1,10 @@ import 'package:flutter/material.dart'; import 'package:adaptive_dialog/adaptive_dialog.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/widgets/matrix.dart'; import 'settings_3pid_view.dart'; @@ -22,12 +22,12 @@ class Settings3PidController extends State { final input = await showTextInputDialog( useRootNavigator: false, context: context, - title: L10n.of(context)!.enterAnEmailAddress, - okLabel: L10n.of(context)!.ok, - cancelLabel: L10n.of(context)!.cancel, + title: L10n.of(context).enterAnEmailAddress, + okLabel: L10n.of(context).ok, + cancelLabel: L10n.of(context).cancel, textFields: [ DialogTextField( - hintText: L10n.of(context)!.enterAnEmailAddress, + hintText: L10n.of(context).enterAnEmailAddress, keyboardType: TextInputType.emailAddress, ), ], @@ -46,9 +46,9 @@ class Settings3PidController extends State { final ok = await showOkAlertDialog( useRootNavigator: false, context: context, - title: L10n.of(context)!.weSentYouAnEmail, - message: L10n.of(context)!.pleaseClickOnLink, - okLabel: L10n.of(context)!.iHaveClickedOnLink, + title: L10n.of(context).weSentYouAnEmail, + message: L10n.of(context).pleaseClickOnLink, + okLabel: L10n.of(context).iHaveClickedOnLink, ); if (ok != OkCancelResult.ok) return; final success = await showFutureLoadingDialog( @@ -71,9 +71,9 @@ class Settings3PidController extends State { if (await showOkCancelAlertDialog( useRootNavigator: false, context: context, - title: L10n.of(context)!.areYouSure, - okLabel: L10n.of(context)!.yes, - cancelLabel: L10n.of(context)!.cancel, + title: L10n.of(context).areYouSure, + okLabel: L10n.of(context).yes, + cancelLabel: L10n.of(context).cancel, ) != OkCancelResult.ok) { return; diff --git a/lib/pages/settings_3pid/settings_3pid_view.dart b/lib/pages/settings_3pid/settings_3pid_view.dart index 49f8b448..9c4635bd 100644 --- a/lib/pages/settings_3pid/settings_3pid_view.dart +++ b/lib/pages/settings_3pid/settings_3pid_view.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/settings_3pid/settings_3pid.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; import 'package:fluffychat/widgets/matrix.dart'; @@ -18,12 +18,12 @@ class Settings3PidView extends StatelessWidget { return Scaffold( appBar: AppBar( leading: const Center(child: BackButton()), - title: Text(L10n.of(context)!.passwordRecovery), + title: Text(L10n.of(context).passwordRecovery), actions: [ IconButton( icon: const Icon(Icons.add_outlined), onPressed: controller.add3PidAction, - tooltip: L10n.of(context)!.addEmail, + tooltip: L10n.of(context).addEmail, ), ], ), @@ -64,8 +64,8 @@ class Settings3PidView extends StatelessWidget { ), title: Text( identifier.isEmpty - ? L10n.of(context)!.noPasswordRecoveryDescription - : L10n.of(context)! + ? L10n.of(context).noPasswordRecoveryDescription + : L10n.of(context) .withTheseAddressesRecoveryDescription, ), ), @@ -82,7 +82,7 @@ class Settings3PidView extends StatelessWidget { ), title: Text(identifier[i].address), trailing: IconButton( - tooltip: L10n.of(context)!.delete, + tooltip: L10n.of(context).delete, icon: const Icon(Icons.delete_forever_outlined), color: Colors.red, onPressed: () => controller.delete3Pid(identifier[i]), diff --git a/lib/pages/settings_chat/settings_chat_view.dart b/lib/pages/settings_chat/settings_chat_view.dart index 1b7722b3..60eebe23 100644 --- a/lib/pages/settings_chat/settings_chat_view.dart +++ b/lib/pages/settings_chat/settings_chat_view.dart @@ -1,10 +1,10 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:go_router/go_router.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/setting_keys.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/utils/voip/callkeep_manager.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; @@ -19,48 +19,48 @@ class SettingsChatView extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar(title: Text(L10n.of(context)!.chat)), + appBar: AppBar(title: Text(L10n.of(context).chat)), body: ListTileTheme( iconColor: Theme.of(context).textTheme.bodyLarge!.color, child: MaxWidthBody( child: Column( children: [ SettingsSwitchListTile.adaptive( - title: L10n.of(context)!.formattedMessages, - subtitle: L10n.of(context)!.formattedMessagesDescription, + title: L10n.of(context).formattedMessages, + subtitle: L10n.of(context).formattedMessagesDescription, onChanged: (b) => AppConfig.renderHtml = b, storeKey: SettingKeys.renderHtml, defaultValue: AppConfig.renderHtml, ), SettingsSwitchListTile.adaptive( - title: L10n.of(context)!.hideMemberChangesInPublicChats, - subtitle: L10n.of(context)!.hideMemberChangesInPublicChatsBody, + title: L10n.of(context).hideMemberChangesInPublicChats, + subtitle: L10n.of(context).hideMemberChangesInPublicChatsBody, onChanged: (b) => AppConfig.hideUnimportantStateEvents = b, storeKey: SettingKeys.hideUnimportantStateEvents, defaultValue: AppConfig.hideUnimportantStateEvents, ), SettingsSwitchListTile.adaptive( - title: L10n.of(context)!.hideRedactedMessages, - subtitle: L10n.of(context)!.hideRedactedMessagesBody, + title: L10n.of(context).hideRedactedMessages, + subtitle: L10n.of(context).hideRedactedMessagesBody, onChanged: (b) => AppConfig.hideRedactedEvents = b, storeKey: SettingKeys.hideRedactedEvents, defaultValue: AppConfig.hideRedactedEvents, ), SettingsSwitchListTile.adaptive( - title: L10n.of(context)!.hideInvalidOrUnknownMessageFormats, + title: L10n.of(context).hideInvalidOrUnknownMessageFormats, onChanged: (b) => AppConfig.hideUnknownEvents = b, storeKey: SettingKeys.hideUnknownEvents, defaultValue: AppConfig.hideUnknownEvents, ), if (PlatformInfos.isMobile) SettingsSwitchListTile.adaptive( - title: L10n.of(context)!.autoplayImages, + title: L10n.of(context).autoplayImages, onChanged: (b) => AppConfig.autoplayImages = b, storeKey: SettingKeys.autoplayImages, defaultValue: AppConfig.autoplayImages, ), SettingsSwitchListTile.adaptive( - title: L10n.of(context)!.sendOnEnter, + title: L10n.of(context).sendOnEnter, onChanged: (b) => AppConfig.sendOnEnter = b, storeKey: SettingKeys.sendOnEnter, defaultValue: AppConfig.sendOnEnter ?? !PlatformInfos.isMobile, @@ -71,7 +71,7 @@ class SettingsChatView extends StatelessWidget { ), ListTile( title: Text( - L10n.of(context)!.customEmojisAndStickers, + L10n.of(context).customEmojisAndStickers, style: TextStyle( color: Theme.of(context).colorScheme.secondary, fontWeight: FontWeight.bold, @@ -79,8 +79,8 @@ class SettingsChatView extends StatelessWidget { ), ), ListTile( - title: Text(L10n.of(context)!.customEmojisAndStickers), - subtitle: Text(L10n.of(context)!.customEmojisAndStickersBody), + title: Text(L10n.of(context).customEmojisAndStickers), + subtitle: Text(L10n.of(context).customEmojisAndStickersBody), onTap: () => context.go('/rooms/settings/chat/emotes'), trailing: const Padding( padding: EdgeInsets.all(16.0), @@ -93,7 +93,7 @@ class SettingsChatView extends StatelessWidget { ), ListTile( title: Text( - L10n.of(context)!.calls, + L10n.of(context).calls, style: TextStyle( color: Theme.of(context).colorScheme.secondary, fontWeight: FontWeight.bold, @@ -101,7 +101,7 @@ class SettingsChatView extends StatelessWidget { ), ), SettingsSwitchListTile.adaptive( - title: L10n.of(context)!.experimentalVideoCalls, + title: L10n.of(context).experimentalVideoCalls, onChanged: (b) { AppConfig.experimentalVoip = b; Matrix.of(context).createVoipPlugin(); @@ -112,7 +112,7 @@ class SettingsChatView extends StatelessWidget { ), if (PlatformInfos.isMobile) ListTile( - title: Text(L10n.of(context)!.callingPermissions), + title: Text(L10n.of(context).callingPermissions), onTap: () => CallKeepManager().checkoutPhoneAccountSetting(context), trailing: const Padding( diff --git a/lib/pages/settings_emotes/import_archive_dialog.dart b/lib/pages/settings_emotes/import_archive_dialog.dart index 0ed5bb21..c039fc35 100644 --- a/lib/pages/settings_emotes/import_archive_dialog.dart +++ b/lib/pages/settings_emotes/import_archive_dialog.dart @@ -6,9 +6,9 @@ import 'package:flutter/services.dart'; import 'package:adaptive_dialog/adaptive_dialog.dart'; import 'package:archive/archive.dart'; import 'package:collection/collection.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/settings_emotes/settings_emotes.dart'; import 'package:fluffychat/utils/client_manager.dart'; import 'package:fluffychat/widgets/matrix.dart'; @@ -44,7 +44,7 @@ class _ImportEmoteArchiveDialogState extends State { @override Widget build(BuildContext context) { return AlertDialog( - title: Text(L10n.of(context)!.importEmojis), + title: Text(L10n.of(context).importEmojis), content: _loading ? Center( child: CircularProgressIndicator( @@ -73,7 +73,7 @@ class _ImportEmoteArchiveDialogState extends State { actions: [ TextButton( onPressed: _loading ? null : Navigator.of(context).pop, - child: Text(L10n.of(context)!.cancel), + child: Text(L10n.of(context).cancel), ), TextButton( onPressed: _loading @@ -81,7 +81,7 @@ class _ImportEmoteArchiveDialogState extends State { : _importMap.isNotEmpty ? _addEmotePack : null, - child: Text(L10n.of(context)!.importNow), + child: Text(L10n.of(context).importNow), ), ], ); @@ -121,10 +121,10 @@ class _ImportEmoteArchiveDialogState extends State { final result = await showOkCancelAlertDialog( useRootNavigator: false, context: context, - title: L10n.of(context)!.emoteExists, + title: L10n.of(context).emoteExists, message: imageCode, - cancelLabel: L10n.of(context)!.replace, - okLabel: L10n.of(context)!.skip, + cancelLabel: L10n.of(context).replace, + okLabel: L10n.of(context).skip, ); completer.complete(result); }); @@ -240,7 +240,7 @@ class _EmojiImportPreviewState extends State<_EmojiImportPreview> { IconButton( onPressed: widget.onRemove, icon: const Icon(Icons.remove_circle), - tooltip: L10n.of(context)!.remove, + tooltip: L10n.of(context).remove, ), ValueListenableBuilder( valueListenable: hasErrorNotifier, @@ -276,7 +276,7 @@ class _EmojiImportPreviewState extends State<_EmojiImportPreview> { minLines: 1, maxLines: 1, decoration: InputDecoration( - hintText: L10n.of(context)!.emoteShortcode, + hintText: L10n.of(context).emoteShortcode, prefixText: ': ', suffixText: ':', border: const OutlineInputBorder(), @@ -325,7 +325,7 @@ class _ImageFileError extends StatelessWidget { children: [ const Icon(Icons.error), Text( - L10n.of(context)!.notAnImage, + L10n.of(context).notAnImage, textAlign: TextAlign.center, style: Theme.of(context).textTheme.labelSmall, ), diff --git a/lib/pages/settings_emotes/settings_emotes.dart b/lib/pages/settings_emotes/settings_emotes.dart index 2ef905b1..65e0253f 100644 --- a/lib/pages/settings_emotes/settings_emotes.dart +++ b/lib/pages/settings_emotes/settings_emotes.dart @@ -6,12 +6,12 @@ import 'package:flutter/material.dart'; import 'package:adaptive_dialog/adaptive_dialog.dart'; import 'package:collection/collection.dart'; import 'package:file_picker/file_picker.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:go_router/go_router.dart'; import 'package:http/http.dart' hide Client; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/client_manager.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_file_extension.dart'; import 'package:fluffychat/widgets/app_lock.dart'; @@ -140,8 +140,8 @@ class EmotesSettingsController extends State { showOkAlertDialog( useRootNavigator: false, context: context, - message: L10n.of(context)!.emoteExists, - okLabel: L10n.of(context)!.ok, + message: L10n.of(context).emoteExists, + okLabel: L10n.of(context).ok, ); return; } @@ -150,8 +150,8 @@ class EmotesSettingsController extends State { showOkAlertDialog( useRootNavigator: false, context: context, - message: L10n.of(context)!.emoteInvalid, - okLabel: L10n.of(context)!.ok, + message: L10n.of(context).emoteInvalid, + okLabel: L10n.of(context).ok, ); return; } @@ -186,8 +186,8 @@ class EmotesSettingsController extends State { await showOkAlertDialog( useRootNavigator: false, context: context, - message: L10n.of(context)!.emoteWarnNeedToPick, - okLabel: L10n.of(context)!.ok, + message: L10n.of(context).emoteWarnNeedToPick, + okLabel: L10n.of(context).ok, ); return; } @@ -196,8 +196,8 @@ class EmotesSettingsController extends State { await showOkAlertDialog( useRootNavigator: false, context: context, - message: L10n.of(context)!.emoteExists, - okLabel: L10n.of(context)!.ok, + message: L10n.of(context).emoteExists, + okLabel: L10n.of(context).ok, ); return; } @@ -205,8 +205,8 @@ class EmotesSettingsController extends State { await showOkAlertDialog( useRootNavigator: false, context: context, - message: L10n.of(context)!.emoteInvalid, - okLabel: L10n.of(context)!.ok, + message: L10n.of(context).emoteInvalid, + okLabel: L10n.of(context).ok, ); return; } diff --git a/lib/pages/settings_emotes/settings_emotes_view.dart b/lib/pages/settings_emotes/settings_emotes_view.dart index 7e72cd46..7f458716 100644 --- a/lib/pages/settings_emotes/settings_emotes_view.dart +++ b/lib/pages/settings_emotes/settings_emotes_view.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; import 'package:fluffychat/widgets/mxc_image.dart'; @@ -24,7 +24,7 @@ class EmotesSettingsView extends StatelessWidget { return Scaffold( appBar: AppBar( leading: const Center(child: BackButton()), - title: Text(L10n.of(context)!.customEmojisAndStickers), + title: Text(L10n.of(context).customEmojisAndStickers), actions: [ PopupMenuButton( onSelected: (value) { @@ -41,11 +41,11 @@ class EmotesSettingsView extends StatelessWidget { itemBuilder: (context) => [ PopupMenuItem( value: PopupMenuEmojiActions.import, - child: Text(L10n.of(context)!.importFromZipFile), + child: Text(L10n.of(context).importFromZipFile), ), PopupMenuItem( value: PopupMenuEmojiActions.export, - child: Text(L10n.of(context)!.exportEmotePack), + child: Text(L10n.of(context).exportEmotePack), ), ], ), @@ -81,7 +81,7 @@ class EmotesSettingsView extends StatelessWidget { minLines: 1, maxLines: 1, decoration: InputDecoration( - hintText: L10n.of(context)!.emoteShortcode, + hintText: L10n.of(context).emoteShortcode, prefixText: ': ', suffixText: ':', prefixStyle: TextStyle( @@ -112,7 +112,7 @@ class EmotesSettingsView extends StatelessWidget { ), if (controller.room != null) SwitchListTile.adaptive( - title: Text(L10n.of(context)!.enableEmotesGlobally), + title: Text(L10n.of(context).enableEmotesGlobally), value: controller.isGloballyActive(client), onChanged: controller.setIsGloballyActive, ), @@ -123,7 +123,7 @@ class EmotesSettingsView extends StatelessWidget { child: Padding( padding: const EdgeInsets.all(16), child: Text( - L10n.of(context)!.noEmotesFound, + L10n.of(context).noEmotesFound, style: const TextStyle(fontSize: 20), ), ), @@ -184,7 +184,7 @@ class EmotesSettingsView extends StatelessWidget { minLines: 1, maxLines: 1, decoration: InputDecoration( - hintText: L10n.of(context)!.emoteShortcode, + hintText: L10n.of(context).emoteShortcode, prefixText: ': ', suffixText: ':', prefixStyle: TextStyle( @@ -269,7 +269,7 @@ class _ImagePickerState extends State<_ImagePicker> { if (widget.controller.value == null) { return ElevatedButton( onPressed: () => widget.onPressed(widget.controller), - child: Text(L10n.of(context)!.pickImage), + child: Text(L10n.of(context).pickImage), ); } else { return _EmoteImage(widget.controller.value!.url); diff --git a/lib/pages/settings_ignore_list/settings_ignore_list.dart b/lib/pages/settings_ignore_list/settings_ignore_list.dart index d64be058..2042a019 100644 --- a/lib/pages/settings_ignore_list/settings_ignore_list.dart +++ b/lib/pages/settings_ignore_list/settings_ignore_list.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import '../../widgets/matrix.dart'; import 'settings_ignore_list_view.dart'; @@ -34,7 +34,7 @@ class SettingsIgnoreListController extends State { if (userId.isEmpty) return; if (!userId.isValidMatrixId || userId.sigil != '@') { setState(() { - errorText = L10n.of(context)!.invalidInput; + errorText = L10n.of(context).invalidInput; }); return; } diff --git a/lib/pages/settings_ignore_list/settings_ignore_list_view.dart b/lib/pages/settings_ignore_list/settings_ignore_list_view.dart index edd26312..d2114967 100644 --- a/lib/pages/settings_ignore_list/settings_ignore_list_view.dart +++ b/lib/pages/settings_ignore_list/settings_ignore_list_view.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; import '../../widgets/matrix.dart'; @@ -20,7 +20,7 @@ class SettingsIgnoreListView extends StatelessWidget { return Scaffold( appBar: AppBar( leading: const Center(child: BackButton()), - title: Text(L10n.of(context)!.blockedUsers), + title: Text(L10n.of(context).blockedUsers), ), body: MaxWidthBody( withScrolling: false, @@ -41,9 +41,9 @@ class SettingsIgnoreListView extends StatelessWidget { errorText: controller.errorText, hintText: '@bad_guy:domain.abc', floatingLabelBehavior: FloatingLabelBehavior.always, - labelText: L10n.of(context)!.blockUsername, + labelText: L10n.of(context).blockUsername, suffixIcon: IconButton( - tooltip: L10n.of(context)!.block, + tooltip: L10n.of(context).block, icon: const Icon(Icons.send_outlined), onPressed: () => controller.ignoreUser(context), ), @@ -51,7 +51,7 @@ class SettingsIgnoreListView extends StatelessWidget { ), const SizedBox(height: 16), Text( - L10n.of(context)!.blockListDescription, + L10n.of(context).blockListDescription, style: const TextStyle(color: Colors.orange), ), ], @@ -81,7 +81,7 @@ class SettingsIgnoreListView extends StatelessWidget { subtitle: Text(s.data?.userId ?? client.ignoredUsers[i]), trailing: IconButton( - tooltip: L10n.of(context)!.delete, + tooltip: L10n.of(context).delete, icon: const Icon(Icons.delete_outlined), onPressed: () => showFutureLoadingDialog( context: context, diff --git a/lib/pages/settings_multiple_emotes/settings_multiple_emotes_view.dart b/lib/pages/settings_multiple_emotes/settings_multiple_emotes_view.dart index 5b910a8b..6559d0f1 100644 --- a/lib/pages/settings_multiple_emotes/settings_multiple_emotes_view.dart +++ b/lib/pages/settings_multiple_emotes/settings_multiple_emotes_view.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/settings_multiple_emotes/settings_multiple_emotes.dart'; import 'package:fluffychat/widgets/matrix.dart'; @@ -18,7 +18,7 @@ class MultipleEmotesSettingsView extends StatelessWidget { return Scaffold( appBar: AppBar( leading: const Center(child: BackButton()), - title: Text(L10n.of(context)!.emotePacks), + title: Text(L10n.of(context).emotePacks), ), body: StreamBuilder( stream: room.client.onRoomState.stream diff --git a/lib/pages/settings_notifications/settings_notifications.dart b/lib/pages/settings_notifications/settings_notifications.dart index 2baf14dd..c996d884 100644 --- a/lib/pages/settings_notifications/settings_notifications.dart +++ b/lib/pages/settings_notifications/settings_notifications.dart @@ -2,10 +2,10 @@ import 'package:flutter/material.dart'; import 'package:adaptive_dialog/adaptive_dialog.dart'; import 'package:collection/collection.dart' show IterableExtension; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; import '../../widgets/matrix.dart'; import 'settings_notifications_view.dart'; @@ -19,37 +19,37 @@ class NotificationSettingsItem { NotificationSettingsItem( PushRuleKind.underride, '.m.rule.message', - (c) => L10n.of(c)!.allRooms, + (c) => L10n.of(c).allRooms, ), NotificationSettingsItem( PushRuleKind.underride, '.m.rule.room_one_to_one', - (c) => L10n.of(c)!.directChats, + (c) => L10n.of(c).directChats, ), NotificationSettingsItem( PushRuleKind.override, '.m.rule.contains_display_name', - (c) => L10n.of(c)!.containsDisplayName, + (c) => L10n.of(c).containsDisplayName, ), NotificationSettingsItem( PushRuleKind.content, '.m.rule.contains_user_name', - (c) => L10n.of(c)!.containsUserName, + (c) => L10n.of(c).containsUserName, ), NotificationSettingsItem( PushRuleKind.override, '.m.rule.invite_for_me', - (c) => L10n.of(c)!.inviteForMe, + (c) => L10n.of(c).inviteForMe, ), NotificationSettingsItem( PushRuleKind.override, '.m.rule.member_event', - (c) => L10n.of(c)!.memberChanges, + (c) => L10n.of(c).memberChanges, ), NotificationSettingsItem( PushRuleKind.override, '.m.rule.suppress_notices', - (c) => L10n.of(c)!.botMessages, + (c) => L10n.of(c).botMessages, ), ]; } @@ -145,7 +145,7 @@ class SettingsNotificationsController extends State { message: '${pusher.appDisplayName} (${pusher.appId})', actions: [ SheetAction( - label: L10n.of(context)!.delete, + label: L10n.of(context).delete, isDestructiveAction: true, key: true, ), diff --git a/lib/pages/settings_notifications/settings_notifications_view.dart b/lib/pages/settings_notifications/settings_notifications_view.dart index 978858a0..671b6f24 100644 --- a/lib/pages/settings_notifications/settings_notifications_view.dart +++ b/lib/pages/settings_notifications/settings_notifications_view.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; import '../../utils/localized_exception_extension.dart'; import '../../widgets/matrix.dart'; @@ -18,7 +18,7 @@ class SettingsNotificationsView extends StatelessWidget { return Scaffold( appBar: AppBar( leading: const Center(child: BackButton()), - title: Text(L10n.of(context)!.notifications), + title: Text(L10n.of(context).notifications), ), body: MaxWidthBody( child: StreamBuilder( @@ -33,7 +33,7 @@ class SettingsNotificationsView extends StatelessWidget { SwitchListTile.adaptive( value: !Matrix.of(context).client.allPushNotificationsMuted, title: Text( - L10n.of(context)!.notificationsEnabledForThisAccount, + L10n.of(context).notificationsEnabledForThisAccount, ), onChanged: controller.isLoading ? null @@ -42,7 +42,7 @@ class SettingsNotificationsView extends StatelessWidget { Divider(color: Theme.of(context).dividerColor), ListTile( title: Text( - L10n.of(context)!.notifyMeFor, + L10n.of(context).notifyMeFor, style: TextStyle( color: Theme.of(context).colorScheme.secondary, fontWeight: FontWeight.bold, @@ -65,7 +65,7 @@ class SettingsNotificationsView extends StatelessWidget { Divider(color: Theme.of(context).dividerColor), ListTile( title: Text( - L10n.of(context)!.devices, + L10n.of(context).devices, style: TextStyle( color: Theme.of(context).colorScheme.secondary, fontWeight: FontWeight.bold, @@ -95,7 +95,7 @@ class SettingsNotificationsView extends StatelessWidget { return Center( child: Padding( padding: const EdgeInsets.only(bottom: 16.0), - child: Text(L10n.of(context)!.noOtherDevicesFound), + child: Text(L10n.of(context).noOtherDevicesFound), ), ); } diff --git a/lib/pages/settings_password/settings_password.dart b/lib/pages/settings_password/settings_password.dart index cb631d7f..bc2400c8 100644 --- a/lib/pages/settings_password/settings_password.dart +++ b/lib/pages/settings_password/settings_password.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:go_router/go_router.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/settings_password/settings_password_view.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; import 'package:fluffychat/widgets/matrix.dart'; @@ -31,20 +31,20 @@ class SettingsPasswordController extends State { }); if (oldPasswordController.text.isEmpty) { setState(() { - oldPasswordError = L10n.of(context)!.pleaseEnterYourPassword; + oldPasswordError = L10n.of(context).pleaseEnterYourPassword; }); return; } if (newPassword1Controller.text.isEmpty || newPassword1Controller.text.length < 6) { setState(() { - newPassword1Error = L10n.of(context)!.pleaseChooseAStrongPassword; + newPassword1Error = L10n.of(context).pleaseChooseAStrongPassword; }); return; } if (newPassword1Controller.text != newPassword2Controller.text) { setState(() { - newPassword2Error = L10n.of(context)!.passwordsDoNotMatch; + newPassword2Error = L10n.of(context).passwordsDoNotMatch; }); return; } @@ -60,7 +60,7 @@ class SettingsPasswordController extends State { ); scaffoldMessenger.showSnackBar( SnackBar( - content: Text(L10n.of(context)!.passwordHasBeenChanged), + content: Text(L10n.of(context).passwordHasBeenChanged), ), ); if (mounted) context.pop(); diff --git a/lib/pages/settings_password/settings_password_view.dart b/lib/pages/settings_password/settings_password_view.dart index 813bebd1..f08d6e92 100644 --- a/lib/pages/settings_password/settings_password_view.dart +++ b/lib/pages/settings_password/settings_password_view.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:go_router/go_router.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/settings_password/settings_password.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; @@ -14,10 +14,10 @@ class SettingsPasswordView extends StatelessWidget { Widget build(BuildContext context) { return Scaffold( appBar: AppBar( - title: Text(L10n.of(context)!.changePassword), + title: Text(L10n.of(context).changePassword), actions: [ TextButton( - child: Text(L10n.of(context)!.passwordRecoverySettings), + child: Text(L10n.of(context).passwordRecoverySettings), onPressed: () => context.go('/rooms/settings/security/3pid'), ), ], @@ -44,7 +44,7 @@ class SettingsPasswordView extends StatelessWidget { autofocus: true, readOnly: controller.loading, decoration: InputDecoration( - hintText: L10n.of(context)!.pleaseEnterYourCurrentPassword, + hintText: L10n.of(context).pleaseEnterYourCurrentPassword, errorText: controller.oldPasswordError, ), ), @@ -55,7 +55,7 @@ class SettingsPasswordView extends StatelessWidget { autocorrect: false, readOnly: controller.loading, decoration: InputDecoration( - hintText: L10n.of(context)!.newPassword, + hintText: L10n.of(context).newPassword, errorText: controller.newPassword1Error, ), ), @@ -66,7 +66,7 @@ class SettingsPasswordView extends StatelessWidget { autocorrect: false, readOnly: controller.loading, decoration: InputDecoration( - hintText: L10n.of(context)!.repeatPassword, + hintText: L10n.of(context).repeatPassword, errorText: controller.newPassword2Error, ), ), @@ -79,7 +79,7 @@ class SettingsPasswordView extends StatelessWidget { icon: const Icon(Icons.send_outlined), label: controller.loading ? const LinearProgressIndicator() - : Text(L10n.of(context)!.changePassword), + : Text(L10n.of(context).changePassword), ), ), ], diff --git a/lib/pages/settings_security/settings_security.dart b/lib/pages/settings_security/settings_security.dart index 69069d69..b01c805b 100644 --- a/lib/pages/settings_security/settings_security.dart +++ b/lib/pages/settings_security/settings_security.dart @@ -1,10 +1,10 @@ import 'package:flutter/material.dart'; import 'package:adaptive_dialog/adaptive_dialog.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/widgets/app_lock.dart'; import 'package:fluffychat/widgets/matrix.dart'; import '../bootstrap/bootstrap_dialog.dart'; @@ -25,9 +25,9 @@ class SettingsSecurityController extends State { final newLock = await showTextInputDialog( useRootNavigator: false, context: context, - title: L10n.of(context)!.pleaseChooseAPasscode, - message: L10n.of(context)!.pleaseEnter4Digits, - cancelLabel: L10n.of(context)!.cancel, + title: L10n.of(context).pleaseChooseAPasscode, + message: L10n.of(context).pleaseEnter4Digits, + cancelLabel: L10n.of(context).cancel, textFields: [ DialogTextField( validator: (text) { @@ -35,7 +35,7 @@ class SettingsSecurityController extends State { (text.length == 4 && int.tryParse(text)! >= 0)) { return null; } - return L10n.of(context)!.pleaseEnter4Digits; + return L10n.of(context).pleaseEnter4Digits; }, keyboardType: TextInputType.number, obscureText: true, @@ -54,10 +54,10 @@ class SettingsSecurityController extends State { if (await showOkCancelAlertDialog( useRootNavigator: false, context: context, - title: L10n.of(context)!.warning, - message: L10n.of(context)!.deactivateAccountWarning, - okLabel: L10n.of(context)!.ok, - cancelLabel: L10n.of(context)!.cancel, + title: L10n.of(context).warning, + message: L10n.of(context).deactivateAccountWarning, + okLabel: L10n.of(context).ok, + cancelLabel: L10n.of(context).cancel, isDestructiveAction: true, ) == OkCancelResult.cancel) { @@ -67,17 +67,17 @@ class SettingsSecurityController extends State { final mxids = await showTextInputDialog( useRootNavigator: false, context: context, - title: L10n.of(context)!.confirmMatrixId, + title: L10n.of(context).confirmMatrixId, textFields: [ DialogTextField( validator: (text) => text == supposedMxid ? null - : L10n.of(context)!.supposedMxid(supposedMxid), + : L10n.of(context).supposedMxid(supposedMxid), ), ], isDestructiveAction: true, - okLabel: L10n.of(context)!.delete, - cancelLabel: L10n.of(context)!.cancel, + okLabel: L10n.of(context).delete, + cancelLabel: L10n.of(context).cancel, ); if (mxids == null || mxids.length != 1 || mxids.single != supposedMxid) { return; @@ -85,9 +85,9 @@ class SettingsSecurityController extends State { final input = await showTextInputDialog( useRootNavigator: false, context: context, - title: L10n.of(context)!.pleaseEnterYourPassword, - okLabel: L10n.of(context)!.ok, - cancelLabel: L10n.of(context)!.cancel, + title: L10n.of(context).pleaseEnterYourPassword, + okLabel: L10n.of(context).ok, + cancelLabel: L10n.of(context).cancel, isDestructiveAction: true, textFields: [ const DialogTextField( diff --git a/lib/pages/settings_security/settings_security_view.dart b/lib/pages/settings_security/settings_security_view.dart index 49b39d75..f71ae9aa 100644 --- a/lib/pages/settings_security/settings_security_view.dart +++ b/lib/pages/settings_security/settings_security_view.dart @@ -1,10 +1,10 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:go_router/go_router.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/setting_keys.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/beautify_string_extension.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; @@ -19,7 +19,7 @@ class SettingsSecurityView extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar(title: Text(L10n.of(context)!.security)), + appBar: AppBar(title: Text(L10n.of(context).security)), body: ListTileTheme( iconColor: Theme.of(context).colorScheme.onSurface, child: MaxWidthBody( @@ -43,7 +43,7 @@ class SettingsSecurityView extends StatelessWidget { children: [ ListTile( title: Text( - L10n.of(context)!.privacy, + L10n.of(context).privacy, style: TextStyle( color: Theme.of(context).colorScheme.secondary, fontWeight: FontWeight.bold, @@ -51,25 +51,25 @@ class SettingsSecurityView extends StatelessWidget { ), ), SettingsSwitchListTile.adaptive( - title: L10n.of(context)!.sendTypingNotifications, + title: L10n.of(context).sendTypingNotifications, subtitle: - L10n.of(context)!.sendTypingNotificationsDescription, + L10n.of(context).sendTypingNotificationsDescription, onChanged: (b) => AppConfig.sendTypingNotifications = b, storeKey: SettingKeys.sendTypingNotifications, defaultValue: AppConfig.sendTypingNotifications, ), SettingsSwitchListTile.adaptive( - title: L10n.of(context)!.sendReadReceipts, - subtitle: L10n.of(context)!.sendReadReceiptsDescription, + title: L10n.of(context).sendReadReceipts, + subtitle: L10n.of(context).sendReadReceiptsDescription, onChanged: (b) => AppConfig.sendPublicReadReceipts = b, storeKey: SettingKeys.sendPublicReadReceipts, defaultValue: AppConfig.sendPublicReadReceipts, ), ListTile( trailing: const Icon(Icons.chevron_right_outlined), - title: Text(L10n.of(context)!.blockedUsers), + title: Text(L10n.of(context).blockedUsers), subtitle: Text( - L10n.of(context)!.thereAreCountUsersBlocked( + L10n.of(context).thereAreCountUsersBlocked( Matrix.of(context).client.ignoredUsers.length, ), ), @@ -80,8 +80,8 @@ class SettingsSecurityView extends StatelessWidget { if (PlatformInfos.isMobile) ListTile( trailing: const Icon(Icons.chevron_right_outlined), - title: Text(L10n.of(context)!.appLock), - subtitle: Text(L10n.of(context)!.appLockDescription), + title: Text(L10n.of(context).appLock), + subtitle: Text(L10n.of(context).appLockDescription), onTap: controller.setAppLockAction, ), }, @@ -91,7 +91,7 @@ class SettingsSecurityView extends StatelessWidget { ), ListTile( title: Text( - L10n.of(context)!.account, + L10n.of(context).account, style: TextStyle( color: Theme.of(context).colorScheme.secondary, fontWeight: FontWeight.bold, @@ -99,7 +99,7 @@ class SettingsSecurityView extends StatelessWidget { ), ), ListTile( - title: Text(L10n.of(context)!.yourPublicKey), + title: Text(L10n.of(context).yourPublicKey), leading: const Icon(Icons.vpn_key_outlined), subtitle: SelectableText( Matrix.of(context).client.fingerprintKey.beautified, @@ -111,7 +111,7 @@ class SettingsSecurityView extends StatelessWidget { ListTile( leading: const Icon(Icons.password_outlined), trailing: const Icon(Icons.chevron_right_outlined), - title: Text(L10n.of(context)!.changePassword), + title: Text(L10n.of(context).changePassword), onTap: () => context.go('/rooms/settings/security/password'), ), @@ -119,7 +119,7 @@ class SettingsSecurityView extends StatelessWidget { iconColor: Colors.orange, leading: const Icon(Icons.tap_and_play), title: Text( - L10n.of(context)!.dehydrate, + L10n.of(context).dehydrate, style: const TextStyle(color: Colors.orange), ), onTap: controller.dehydrateAction, @@ -128,7 +128,7 @@ class SettingsSecurityView extends StatelessWidget { iconColor: Colors.red, leading: const Icon(Icons.delete_outlined), title: Text( - L10n.of(context)!.deleteAccount, + L10n.of(context).deleteAccount, style: const TextStyle(color: Colors.red), ), onTap: controller.deleteAccountAction, diff --git a/lib/pages/settings_style/settings_style_view.dart b/lib/pages/settings_style/settings_style_view.dart index 0286ff70..d3aa35e6 100644 --- a/lib/pages/settings_style/settings_style_view.dart +++ b/lib/pages/settings_style/settings_style_view.dart @@ -1,9 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; - import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/config/themes.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/account_config.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; @@ -25,7 +24,7 @@ class SettingsStyleView extends StatelessWidget { return Scaffold( appBar: AppBar( leading: const Center(child: BackButton()), - title: Text(L10n.of(context)!.changeTheme), + title: Text(L10n.of(context).changeTheme), ), backgroundColor: Theme.of(context).colorScheme.surface, body: MaxWidthBody( @@ -33,7 +32,7 @@ class SettingsStyleView extends StatelessWidget { children: [ ListTile( title: Text( - L10n.of(context)!.setColorTheme, + L10n.of(context).setColorTheme, style: TextStyle( color: Theme.of(context).colorScheme.secondary, fontWeight: FontWeight.bold, @@ -94,7 +93,7 @@ class SettingsStyleView extends StatelessWidget { ), ), Text( - L10n.of(context)!.systemTheme, + L10n.of(context).systemTheme, textAlign: TextAlign.center, style: TextStyle( color: Theme.of(context) @@ -141,7 +140,7 @@ class SettingsStyleView extends StatelessWidget { ), ListTile( title: Text( - L10n.of(context)!.setTheme, + L10n.of(context).setTheme, style: TextStyle( color: Theme.of(context).colorScheme.secondary, fontWeight: FontWeight.bold, @@ -151,19 +150,19 @@ class SettingsStyleView extends StatelessWidget { RadioListTile( groupValue: controller.currentTheme, value: ThemeMode.system, - title: Text(L10n.of(context)!.systemTheme), + title: Text(L10n.of(context).systemTheme), onChanged: controller.switchTheme, ), RadioListTile( groupValue: controller.currentTheme, value: ThemeMode.light, - title: Text(L10n.of(context)!.lightTheme), + title: Text(L10n.of(context).lightTheme), onChanged: controller.switchTheme, ), RadioListTile( groupValue: controller.currentTheme, value: ThemeMode.dark, - title: Text(L10n.of(context)!.darkTheme), + title: Text(L10n.of(context).darkTheme), onChanged: controller.switchTheme, ), Divider( @@ -172,7 +171,7 @@ class SettingsStyleView extends StatelessWidget { ), ListTile( title: Text( - L10n.of(context)!.overview, + L10n.of(context).overview, style: TextStyle( color: Theme.of(context).colorScheme.secondary, fontWeight: FontWeight.bold, @@ -180,13 +179,13 @@ class SettingsStyleView extends StatelessWidget { ), ), SettingsSwitchListTile.adaptive( - title: L10n.of(context)!.presencesToggle, + title: L10n.of(context).presencesToggle, onChanged: (b) => AppConfig.showPresences = b, storeKey: SettingKeys.showPresences, defaultValue: AppConfig.showPresences, ), SettingsSwitchListTile.adaptive( - title: L10n.of(context)!.separateChatTypes, + title: L10n.of(context).separateChatTypes, onChanged: (b) => AppConfig.separateChatTypes = b, storeKey: SettingKeys.separateChatTypes, defaultValue: AppConfig.separateChatTypes, @@ -197,7 +196,7 @@ class SettingsStyleView extends StatelessWidget { ), ListTile( title: Text( - L10n.of(context)!.messagesStyle, + L10n.of(context).messagesStyle, style: TextStyle( color: Theme.of(context).colorScheme.secondary, fontWeight: FontWeight.bold, @@ -270,7 +269,7 @@ class SettingsStyleView extends StatelessWidget { ), ), ListTile( - title: Text(L10n.of(context)!.wallpaper), + title: Text(L10n.of(context).wallpaper), leading: const Icon(Icons.photo_outlined), trailing: accountConfig.wallpaperUrl == null ? null @@ -286,7 +285,7 @@ class SettingsStyleView extends StatelessWidget { curve: FluffyThemes.animationCurve, child: accountConfig.wallpaperUrl != null ? SwitchListTile.adaptive( - title: Text(L10n.of(context)!.transparent), + title: Text(L10n.of(context).transparent), secondary: const Icon(Icons.blur_linear_outlined), value: !wallpaperOpacityIsDefault, onChanged: (_) => @@ -301,7 +300,7 @@ class SettingsStyleView extends StatelessWidget { }, ), ListTile( - title: Text(L10n.of(context)!.fontSize), + title: Text(L10n.of(context).fontSize), trailing: Text('× ${AppConfig.fontSizeFactor}'), ), Slider.adaptive( diff --git a/lib/pages/user_bottom_sheet/user_bottom_sheet.dart b/lib/pages/user_bottom_sheet/user_bottom_sheet.dart index 52791507..e04c9de3 100644 --- a/lib/pages/user_bottom_sheet/user_bottom_sheet.dart +++ b/lib/pages/user_bottom_sheet/user_bottom_sheet.dart @@ -1,12 +1,12 @@ import 'package:flutter/material.dart'; import 'package:adaptive_dialog/adaptive_dialog.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/themes.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/widgets/permission_slider_dialog.dart'; import '../../widgets/matrix.dart'; import 'user_bottom_sheet_view.dart'; @@ -98,22 +98,22 @@ class UserBottomSheetController extends State { final score = await showConfirmationDialog( context: context, - title: L10n.of(context)!.reportUser, - message: L10n.of(context)!.howOffensiveIsThisContent, - cancelLabel: L10n.of(context)!.cancel, - okLabel: L10n.of(context)!.ok, + title: L10n.of(context).reportUser, + message: L10n.of(context).howOffensiveIsThisContent, + cancelLabel: L10n.of(context).cancel, + okLabel: L10n.of(context).ok, actions: [ AlertDialogAction( key: -100, - label: L10n.of(context)!.extremeOffensive, + label: L10n.of(context).extremeOffensive, ), AlertDialogAction( key: -50, - label: L10n.of(context)!.offensive, + label: L10n.of(context).offensive, ), AlertDialogAction( key: 0, - label: L10n.of(context)!.inoffensive, + label: L10n.of(context).inoffensive, ), ], ); @@ -121,10 +121,10 @@ class UserBottomSheetController extends State { final reason = await showTextInputDialog( useRootNavigator: false, context: context, - title: L10n.of(context)!.whyDoYouWantToReportThis, - okLabel: L10n.of(context)!.ok, - cancelLabel: L10n.of(context)!.cancel, - textFields: [DialogTextField(hintText: L10n.of(context)!.reason)], + title: L10n.of(context).whyDoYouWantToReportThis, + okLabel: L10n.of(context).ok, + cancelLabel: L10n.of(context).cancel, + textFields: [DialogTextField(hintText: L10n.of(context).reason)], ); if (reason == null || reason.single.isEmpty) return; @@ -139,7 +139,7 @@ class UserBottomSheetController extends State { ); if (result.error != null) return; ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(L10n.of(context)!.contentHasBeenReported)), + SnackBar(content: Text(L10n.of(context).contentHasBeenReported)), ); break; case UserBottomSheetAction.mention: @@ -152,10 +152,10 @@ class UserBottomSheetController extends State { if (await showOkCancelAlertDialog( useRootNavigator: false, context: context, - title: L10n.of(context)!.areYouSure, - okLabel: L10n.of(context)!.yes, - cancelLabel: L10n.of(context)!.no, - message: L10n.of(context)!.banUserDescription, + title: L10n.of(context).areYouSure, + okLabel: L10n.of(context).yes, + cancelLabel: L10n.of(context).no, + message: L10n.of(context).banUserDescription, ) == OkCancelResult.ok) { await showFutureLoadingDialog( @@ -170,10 +170,10 @@ class UserBottomSheetController extends State { if (await showOkCancelAlertDialog( useRootNavigator: false, context: context, - title: L10n.of(context)!.areYouSure, - okLabel: L10n.of(context)!.yes, - cancelLabel: L10n.of(context)!.no, - message: L10n.of(context)!.unbanUserDescription, + title: L10n.of(context).areYouSure, + okLabel: L10n.of(context).yes, + cancelLabel: L10n.of(context).no, + message: L10n.of(context).unbanUserDescription, ) == OkCancelResult.ok) { await showFutureLoadingDialog( @@ -188,10 +188,10 @@ class UserBottomSheetController extends State { if (await showOkCancelAlertDialog( useRootNavigator: false, context: context, - title: L10n.of(context)!.areYouSure, - okLabel: L10n.of(context)!.yes, - cancelLabel: L10n.of(context)!.no, - message: L10n.of(context)!.kickUserDescription, + title: L10n.of(context).areYouSure, + okLabel: L10n.of(context).yes, + cancelLabel: L10n.of(context).no, + message: L10n.of(context).kickUserDescription, ) == OkCancelResult.ok) { await showFutureLoadingDialog( @@ -261,10 +261,10 @@ class UserBottomSheetController extends State { final consent = await showOkCancelAlertDialog( useRootNavigator: false, context: context, - title: L10n.of(context)!.areYouSure, - okLabel: L10n.of(context)!.yes, - cancelLabel: L10n.of(context)!.no, - message: L10n.of(context)!.makeAdminDescription, + title: L10n.of(context).areYouSure, + okLabel: L10n.of(context).yes, + cancelLabel: L10n.of(context).no, + message: L10n.of(context).makeAdminDescription, ); if (consent != OkCancelResult.ok) return; } diff --git a/lib/pages/user_bottom_sheet/user_bottom_sheet_view.dart b/lib/pages/user_bottom_sheet/user_bottom_sheet_view.dart index 883a4806..a3d1e646 100644 --- a/lib/pages/user_bottom_sheet/user_bottom_sheet_view.dart +++ b/lib/pages/user_bottom_sheet/user_bottom_sheet_view.dart @@ -1,10 +1,10 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:flutter_linkify/flutter_linkify.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/date_time_extension.dart'; import 'package:fluffychat/utils/fluffy_share.dart'; import 'package:fluffychat/utils/url_launcher.dart'; @@ -72,13 +72,13 @@ class UserBottomSheetView extends StatelessWidget { ), if (presence.currentlyActive == true) Text( - L10n.of(context)!.currentlyActive, + L10n.of(context).currentlyActive, overflow: TextOverflow.ellipsis, style: Theme.of(context).textTheme.bodySmall, ) else if (lastActiveTimestamp != null) Text( - L10n.of(context)!.lastActiveAgo( + L10n.of(context).lastActiveAgo( lastActiveTimestamp.localizedTimeShort(context), ), overflow: TextOverflow.ellipsis, @@ -97,7 +97,7 @@ class UserBottomSheetView extends StatelessWidget { padding: const EdgeInsets.only(right: 8.0), child: IconButton( icon: const Icon(Icons.block_outlined), - tooltip: L10n.of(context)!.block, + tooltip: L10n.of(context).block, onPressed: () => controller .participantAction(UserBottomSheetAction.ignore), ), @@ -128,7 +128,7 @@ class UserBottomSheetView extends StatelessWidget { title: Padding( padding: const EdgeInsets.only(bottom: 12.0), child: Text( - L10n.of(context)! + L10n.of(context) .userWouldLikeToChangeTheChat(displayname), ), ), @@ -143,7 +143,7 @@ class UserBottomSheetView extends StatelessWidget { ), onPressed: controller.knockAccept, icon: const Icon(Icons.check_outlined), - label: Text(L10n.of(context)!.accept), + label: Text(L10n.of(context).accept), ), const SizedBox(width: 12), TextButton.icon( @@ -157,7 +157,7 @@ class UserBottomSheetView extends StatelessWidget { ), onPressed: controller.knockDecline, icon: const Icon(Icons.cancel_outlined), - label: Text(L10n.of(context)!.decline), + label: Text(L10n.of(context).decline), ), ], ), @@ -253,8 +253,8 @@ class UserBottomSheetView extends StatelessWidget { icon: const Icon(Icons.forum_outlined), label: Text( controller.widget.user == null - ? L10n.of(context)!.startConversation - : L10n.of(context)!.sendAMessage, + ? L10n.of(context).startConversation + : L10n.of(context).sendAMessage, ), ), ), @@ -284,7 +284,7 @@ class UserBottomSheetView extends StatelessWidget { if (controller.widget.onMention != null) ListTile( leading: const Icon(Icons.alternate_email_outlined), - title: Text(L10n.of(context)!.mention), + title: Text(L10n.of(context).mention), onTap: () => controller .participantAction(UserBottomSheetAction.mention), ), @@ -292,7 +292,7 @@ class UserBottomSheetView extends StatelessWidget { Divider(color: Theme.of(context).dividerColor), ListTile( title: Text( - '${L10n.of(context)!.userRole} (${user.powerLevel})', + '${L10n.of(context).userRole} (${user.powerLevel})', ), leading: const Icon(Icons.person_outlined), trailing: Material( @@ -316,19 +316,19 @@ class UserBottomSheetView extends StatelessWidget { items: [ DropdownMenuItem( value: 0, - child: Text(L10n.of(context)!.user), + child: Text(L10n.of(context).user), ), DropdownMenuItem( value: 50, - child: Text(L10n.of(context)!.moderator), + child: Text(L10n.of(context).moderator), ), DropdownMenuItem( value: 100, - child: Text(L10n.of(context)!.admin), + child: Text(L10n.of(context).admin), ), DropdownMenuItem( value: null, - child: Text(L10n.of(context)!.custom), + child: Text(L10n.of(context).custom), ), ], ), @@ -340,7 +340,7 @@ class UserBottomSheetView extends StatelessWidget { ListTile( textColor: Theme.of(context).colorScheme.error, iconColor: Theme.of(context).colorScheme.error, - title: Text(L10n.of(context)!.kickFromChat), + title: Text(L10n.of(context).kickFromChat), leading: const Icon(Icons.exit_to_app_outlined), onTap: () => controller .participantAction(UserBottomSheetAction.kick), @@ -351,7 +351,7 @@ class UserBottomSheetView extends StatelessWidget { ListTile( textColor: Theme.of(context).colorScheme.onErrorContainer, iconColor: Theme.of(context).colorScheme.onErrorContainer, - title: Text(L10n.of(context)!.banFromChat), + title: Text(L10n.of(context).banFromChat), leading: const Icon(Icons.warning_sharp), onTap: () => controller.participantAction(UserBottomSheetAction.ban), @@ -360,7 +360,7 @@ class UserBottomSheetView extends StatelessWidget { user.canBan && user.membership == Membership.ban) ListTile( - title: Text(L10n.of(context)!.unbanFromChat), + title: Text(L10n.of(context).unbanFromChat), leading: const Icon(Icons.warning_outlined), onTap: () => controller .participantAction(UserBottomSheetAction.unban), @@ -369,7 +369,7 @@ class UserBottomSheetView extends StatelessWidget { ListTile( textColor: Theme.of(context).colorScheme.onErrorContainer, iconColor: Theme.of(context).colorScheme.onErrorContainer, - title: Text(L10n.of(context)!.reportUser), + title: Text(L10n.of(context).reportUser), leading: const Icon(Icons.report_outlined), onTap: () => controller .participantAction(UserBottomSheetAction.report), @@ -381,7 +381,7 @@ class UserBottomSheetView extends StatelessWidget { color: Colors.orange, ), subtitle: Text( - L10n.of(context)!.profileNotFound, + L10n.of(context).profileNotFound, style: const TextStyle(color: Colors.orange), ), ), diff --git a/lib/utils/background_push.dart b/lib/utils/background_push.dart index 039dde89..1d1cb538 100644 --- a/lib/utils/background_push.dart +++ b/lib/utils/background_push.dart @@ -25,12 +25,12 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_app_badger/flutter_app_badger.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:http/http.dart' as http; import 'package:matrix/matrix.dart'; import 'package:unifiedpush/unifiedpush.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/push_helper.dart'; import 'package:fluffychat/widgets/fluffy_chat_app.dart'; import '../config/app_config.dart'; diff --git a/lib/utils/client_manager.dart b/lib/utils/client_manager.dart index e3741fd3..259dac2e 100644 --- a/lib/utils/client_manager.dart +++ b/lib/utils/client_manager.dart @@ -3,7 +3,6 @@ import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:desktop_notifications/desktop_notifications.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:hive_flutter/hive_flutter.dart'; import 'package:matrix/encryption/utils/key_verification.dart'; @@ -13,6 +12,7 @@ import 'package:shared_preferences/shared_preferences.dart'; import 'package:universal_html/html.dart' as html; import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/custom_http_client.dart'; import 'package:fluffychat/utils/custom_image_resizer.dart'; import 'package:fluffychat/utils/init_with_restore.dart'; diff --git a/lib/utils/date_time_extension.dart b/lib/utils/date_time_extension.dart index 121eaf72..cde05400 100644 --- a/lib/utils/date_time_extension.dart +++ b/lib/utils/date_time_extension.dart @@ -1,8 +1,9 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:intl/intl.dart'; +import 'package:fluffychat/l10n/l10n.dart'; + /// Provides extra functionality for formatting the time. extension DateTimeExtension on DateTime { bool operator <(DateTime other) { @@ -63,12 +64,12 @@ extension DateTimeExtension on DateTime { return DateFormat.EEEE(Localizations.localeOf(context).languageCode) .format(this); } else if (sameYear) { - return L10n.of(context)!.dateWithoutYear( + return L10n.of(context).dateWithoutYear( month.toString().padLeft(2, '0'), day.toString().padLeft(2, '0'), ); } - return L10n.of(context)!.dateWithYear( + return L10n.of(context).dateWithYear( year.toString(), month.toString().padLeft(2, '0'), day.toString().padLeft(2, '0'), @@ -86,7 +87,7 @@ extension DateTimeExtension on DateTime { final sameDay = sameYear && now.month == month && now.day == day; if (sameDay) return localizedTimeOfDay(context); - return L10n.of(context)!.dateAndTimeOfDay( + return L10n.of(context).dateAndTimeOfDay( localizedTimeShort(context), localizedTimeOfDay(context), ); diff --git a/lib/utils/error_reporter.dart b/lib/utils/error_reporter.dart index f9254d35..bd42aa68 100644 --- a/lib/utils/error_reporter.dart +++ b/lib/utils/error_reporter.dart @@ -1,13 +1,13 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:flutter_highlighter/flutter_highlighter.dart'; import 'package:flutter_highlighter/themes/shades-of-purple.dart'; import 'package:matrix/matrix.dart'; import 'package:url_launcher/url_launcher.dart'; import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/l10n/l10n.dart'; class ErrorReporter { final BuildContext context; @@ -21,7 +21,7 @@ class ErrorReporter { await showAdaptiveDialog( context: context, builder: (context) => AlertDialog.adaptive( - title: Text(L10n.of(context)!.reportErrorDescription), + title: Text(L10n.of(context).reportErrorDescription), content: SizedBox( height: 256, width: 256, @@ -36,13 +36,13 @@ class ErrorReporter { actions: [ TextButton( onPressed: () => Navigator.of(context).pop(), - child: Text(L10n.of(context)!.close), + child: Text(L10n.of(context).close), ), TextButton( onPressed: () => Clipboard.setData( ClipboardData(text: text), ), - child: Text(L10n.of(context)!.copy), + child: Text(L10n.of(context).copy), ), TextButton( onPressed: () => launchUrl( @@ -56,7 +56,7 @@ class ErrorReporter { ), mode: LaunchMode.externalApplication, ), - child: Text(L10n.of(context)!.report), + child: Text(L10n.of(context).report), ), ], ), diff --git a/lib/utils/fluffy_share.dart b/lib/utils/fluffy_share.dart index fbe533c5..3ecfcbf2 100644 --- a/lib/utils/fluffy_share.dart +++ b/lib/utils/fluffy_share.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:share_plus/share_plus.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import '../widgets/matrix.dart'; @@ -25,7 +25,7 @@ abstract class FluffyShare { ClipboardData(text: text), ); ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(L10n.of(context)!.copiedToClipboard)), + SnackBar(content: Text(L10n.of(context).copiedToClipboard)), ); return; } @@ -34,7 +34,7 @@ abstract class FluffyShare { final client = Matrix.of(context).client; final ownProfile = await client.fetchOwnProfile(); await FluffyShare.share( - L10n.of(context)!.inviteText( + L10n.of(context).inviteText( ownProfile.displayName ?? client.userID!, 'https://matrix.to/#/${client.userID}?client=im.fluffychat', ), diff --git a/lib/utils/init_with_restore.dart b/lib/utils/init_with_restore.dart index c99e2ba0..c23ffcad 100644 --- a/lib/utils/init_with_restore.dart +++ b/lib/utils/init_with_restore.dart @@ -1,11 +1,11 @@ import 'dart:convert'; import 'dart:ui'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/client_manager.dart'; import 'package:fluffychat/utils/platform_infos.dart'; diff --git a/lib/utils/localized_exception_extension.dart b/lib/utils/localized_exception_extension.dart index 65be02a1..883bf0c0 100644 --- a/lib/utils/localized_exception_extension.dart +++ b/lib/utils/localized_exception_extension.dart @@ -2,10 +2,10 @@ import 'dart:io'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/encryption.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'uia_request_manager.dart'; extension LocalizedExceptionExtension on Object { @@ -17,20 +17,20 @@ extension LocalizedExceptionExtension on Object { switch ((this as MatrixException).error) { case MatrixError.M_FORBIDDEN: if (exceptionContext == ExceptionContext.changePassword) { - return L10n.of(context)!.passwordIsWrong; + return L10n.of(context).passwordIsWrong; } - return L10n.of(context)!.noPermission; + return L10n.of(context).noPermission; case MatrixError.M_LIMIT_EXCEEDED: - return L10n.of(context)!.tooManyRequestsWarning; + return L10n.of(context).tooManyRequestsWarning; default: return (this as MatrixException).errorMessage; } } if (this is InvalidPassphraseException) { - return L10n.of(context)!.wrongRecoveryKey; + return L10n.of(context).wrongRecoveryKey; } if (this is FileTooBigMatrixException) { - return L10n.of(context)!.fileIsTooBigForServer; + return L10n.of(context).fileIsTooBigForServer; } if (this is BadServerVersionsException) { final serverVersions = (this as BadServerVersionsException) @@ -43,7 +43,7 @@ extension LocalizedExceptionExtension on Object { .toString() .replaceAll('{', '"') .replaceAll('}', '"'); - return L10n.of(context)!.badServerVersionsException( + return L10n.of(context).badServerVersionsException( serverVersions, supportedVersions, serverVersions, @@ -61,7 +61,7 @@ extension LocalizedExceptionExtension on Object { .toString() .replaceAll('{', '"') .replaceAll('}', '"'); - return L10n.of(context)!.badServerLoginTypesException( + return L10n.of(context).badServerLoginTypesException( serverVersions, supportedVersions, supportedVersions, @@ -70,12 +70,12 @@ extension LocalizedExceptionExtension on Object { if (this is MatrixConnectionException || this is SocketException || this is SyncConnectionException) { - return L10n.of(context)!.noConnectionToTheServer; + return L10n.of(context).noConnectionToTheServer; } if (this is String) return toString(); if (this is UiaException) return toString(); Logs().w('Something went wrong: ', this); - return L10n.of(context)!.oopsSomethingWentWrong; + return L10n.of(context).oopsSomethingWentWrong; } } diff --git a/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/builder.dart b/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/builder.dart index ff6d4a8c..7890df55 100644 --- a/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/builder.dart +++ b/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/builder.dart @@ -2,7 +2,6 @@ import 'dart:io'; import 'package:flutter/foundation.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; import 'package:path/path.dart'; import 'package:path_provider/path_provider.dart'; @@ -10,6 +9,7 @@ import 'package:sqflite_common_ffi/sqflite_ffi.dart'; import 'package:universal_html/html.dart' as html; import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/client_manager.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/flutter_hive_collections_database.dart'; import 'package:fluffychat/utils/platform_infos.dart'; diff --git a/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/cipher.dart b/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/cipher.dart index a1903018..21742e0c 100644 --- a/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/cipher.dart +++ b/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/cipher.dart @@ -4,12 +4,12 @@ import 'dart:math'; import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:matrix/matrix.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:fluffychat/config/setting_keys.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/client_manager.dart'; const _passwordStorageKey = 'database_password'; diff --git a/lib/utils/matrix_sdk_extensions/matrix_file_extension.dart b/lib/utils/matrix_sdk_extensions/matrix_file_extension.dart index 8ffa9201..f84044c7 100644 --- a/lib/utils/matrix_sdk_extensions/matrix_file_extension.dart +++ b/lib/utils/matrix_sdk_extensions/matrix_file_extension.dart @@ -3,12 +3,12 @@ import 'dart:io'; import 'package:flutter/material.dart'; import 'package:file_picker/file_picker.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:matrix/matrix.dart'; import 'package:share_plus/share_plus.dart'; import 'package:universal_html/html.dart' as html; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/utils/size_string.dart'; @@ -20,7 +20,7 @@ extension MatrixFileExtension on MatrixFile { } final downloadPath = await FilePicker.platform.saveFile( - dialogTitle: L10n.of(context)!.saveFile, + dialogTitle: L10n.of(context).saveFile, fileName: name, type: filePickerFileType, bytes: bytes, @@ -38,7 +38,7 @@ extension MatrixFileExtension on MatrixFile { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text( - L10n.of(context)!.fileHasBeenSavedAt(downloadPath), + L10n.of(context).fileHasBeenSavedAt(downloadPath), ), ), ); diff --git a/lib/utils/matrix_sdk_extensions/matrix_locals.dart b/lib/utils/matrix_sdk_extensions/matrix_locals.dart index 5714baa2..36e7d7d0 100644 --- a/lib/utils/matrix_sdk_extensions/matrix_locals.dart +++ b/lib/utils/matrix_sdk_extensions/matrix_locals.dart @@ -1,6 +1,7 @@ -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; + /// This is a temporary helper class until there is a proper solution to this with the new system class MatrixLocals extends MatrixLocalizations { final L10n l10n; diff --git a/lib/utils/platform_infos.dart b/lib/utils/platform_infos.dart index b96104df..3f9e061d 100644 --- a/lib/utils/platform_infos.dart +++ b/lib/utils/platform_infos.dart @@ -3,11 +3,11 @@ import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:go_router/go_router.dart'; import 'package:package_info_plus/package_info_plus.dart'; import 'package:url_launcher/url_launcher_string.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import '../config/app_config.dart'; abstract class PlatformInfos { @@ -51,7 +51,7 @@ abstract class PlatformInfos { TextButton.icon( onPressed: () => launchUrlString(AppConfig.sourceCodeUrl), icon: const Icon(Icons.source_outlined), - label: Text(L10n.of(context)!.sourceCode), + label: Text(L10n.of(context).sourceCode), ), TextButton.icon( onPressed: () => launchUrlString(AppConfig.emojiFontUrl), diff --git a/lib/utils/push_helper.dart b/lib/utils/push_helper.dart index edfdb494..837b6d17 100644 --- a/lib/utils/push_helper.dart +++ b/lib/utils/push_helper.dart @@ -6,13 +6,13 @@ import 'package:flutter/material.dart'; import 'package:collection/collection.dart'; import 'package:flutter_cache_manager/flutter_cache_manager.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:flutter_shortcuts/flutter_shortcuts.dart'; import 'package:matrix/matrix.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/client_manager.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/utils/platform_infos.dart'; diff --git a/lib/utils/room_status_extension.dart b/lib/utils/room_status_extension.dart index 02c70b08..e5019be7 100644 --- a/lib/utils/room_status_extension.dart +++ b/lib/utils/room_status_extension.dart @@ -1,8 +1,8 @@ import 'package:flutter/widgets.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import '../config/app_config.dart'; extension RoomStatusExtension on Room { @@ -12,24 +12,24 @@ extension RoomStatusExtension on Room { typingUsers.removeWhere((User u) => u.id == client.userID); if (AppConfig.hideTypingUsernames) { - typingText = L10n.of(context)!.isTyping; + typingText = L10n.of(context).isTyping; if (typingUsers.first.id != directChatMatrixID) { typingText = - L10n.of(context)!.numUsersTyping(typingUsers.length.toString()); + L10n.of(context).numUsersTyping(typingUsers.length.toString()); } } else if (typingUsers.length == 1) { - typingText = L10n.of(context)!.isTyping; + typingText = L10n.of(context).isTyping; if (typingUsers.first.id != directChatMatrixID) { typingText = - L10n.of(context)!.userIsTyping(typingUsers.first.calcDisplayname()); + L10n.of(context).userIsTyping(typingUsers.first.calcDisplayname()); } } else if (typingUsers.length == 2) { - typingText = L10n.of(context)!.userAndUserAreTyping( + typingText = L10n.of(context).userAndUserAreTyping( typingUsers.first.calcDisplayname(), typingUsers[1].calcDisplayname(), ); } else if (typingUsers.length > 2) { - typingText = L10n.of(context)!.userAndOthersAreTyping( + typingText = L10n.of(context).userAndOthersAreTyping( typingUsers.first.calcDisplayname(), (typingUsers.length - 1).toString(), ); diff --git a/lib/utils/uia_request_manager.dart b/lib/utils/uia_request_manager.dart index 04c8b484..0823685f 100644 --- a/lib/utils/uia_request_manager.dart +++ b/lib/utils/uia_request_manager.dart @@ -1,15 +1,15 @@ import 'dart:async'; import 'package:adaptive_dialog/adaptive_dialog.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; import 'package:url_launcher/url_launcher_string.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/widgets/matrix.dart'; extension UiaRequestManager on MatrixState { Future uiaRequestHandler(UiaRequest uiaRequest) async { - final l10n = L10n.of(context)!; + final l10n = L10n.of(context); try { if (uiaRequest.state != UiaRequestState.waitForUser || uiaRequest.nextStages.isEmpty) { @@ -49,7 +49,7 @@ extension UiaRequestManager on MatrixState { case AuthenticationTypes.emailIdentity: if (currentThreepidCreds == null) { return uiaRequest.cancel( - UiaException(L10n.of(context)!.serverRequiresEmail), + UiaException(L10n.of(context).serverRequiresEmail), ); } final auth = AuthenticationThreePidCreds( diff --git a/lib/utils/url_launcher.dart b/lib/utils/url_launcher.dart index 53de9b13..9653e762 100644 --- a/lib/utils/url_launcher.dart +++ b/lib/utils/url_launcher.dart @@ -2,7 +2,6 @@ import 'package:flutter/material.dart'; import 'package:adaptive_dialog/adaptive_dialog.dart'; import 'package:collection/collection.dart' show IterableExtension; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; @@ -10,6 +9,7 @@ import 'package:punycode/punycode.dart'; import 'package:url_launcher/url_launcher_string.dart'; import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/user_bottom_sheet/user_bottom_sheet.dart'; import 'package:fluffychat/utils/adaptive_bottom_sheet.dart'; import 'package:fluffychat/widgets/matrix.dart'; @@ -39,7 +39,7 @@ class UrlLauncher { if (uri == null) { // we can't open this thing ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(L10n.of(context)!.cantOpenUri(url!))), + SnackBar(content: Text(L10n.of(context).cantOpenUri(url!))), ); return; } @@ -49,10 +49,10 @@ class UrlLauncher { // that the user can see the actual url before opening the browser. final consent = await showOkCancelAlertDialog( context: context, - title: L10n.of(context)!.openLinkInBrowser, + title: L10n.of(context).openLinkInBrowser, message: url, - okLabel: L10n.of(context)!.yes, - cancelLabel: L10n.of(context)!.cancel, + okLabel: L10n.of(context).yes, + cancelLabel: L10n.of(context).cancel, ); if (consent != OkCancelResult.ok) return; } @@ -93,7 +93,7 @@ class UrlLauncher { } if (uri.host.isEmpty) { ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(L10n.of(context)!.cantOpenUri(url!))), + SnackBar(content: Text(L10n.of(context).cantOpenUri(url!))), ); return; } diff --git a/lib/utils/voip/callkeep_manager.dart b/lib/utils/voip/callkeep_manager.dart index a3db3eba..5bde7dec 100644 --- a/lib/utils/voip/callkeep_manager.dart +++ b/lib/utils/voip/callkeep_manager.dart @@ -4,10 +4,11 @@ import 'package:flutter/material.dart'; import 'package:callkeep/callkeep.dart'; import 'package:flutter_foreground_task/flutter_foreground_task.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; import 'package:permission_handler/permission_handler.dart'; +import 'package:fluffychat/l10n/l10n.dart'; + class CallKeeper { CallKeeper(this.callKeepManager, this.call) { call.onCallStateChanged.stream.listen(_handleCallState); @@ -226,14 +227,14 @@ class CallKeepManager { barrierDismissible: true, useRootNavigator: false, builder: (_) => AlertDialog( - title: Text(L10n.of(context)!.callingPermissions), + title: Text(L10n.of(context).callingPermissions), content: Column( mainAxisSize: MainAxisSize.min, children: [ ListTile( onTap: () => openCallingAccountsPage(context), - title: Text(L10n.of(context)!.callingAccount), - subtitle: Text(L10n.of(context)!.callingAccountDetails), + title: Text(L10n.of(context).callingAccount), + subtitle: Text(L10n.of(context).callingAccountDetails), trailing: const Icon(Icons.phone), ), const Divider(), @@ -241,14 +242,14 @@ class CallKeepManager { onTap: () => FlutterForegroundTask.openSystemAlertWindowSettings( forceOpen: true, ), - title: Text(L10n.of(context)!.appearOnTop), - subtitle: Text(L10n.of(context)!.appearOnTopDetails), + title: Text(L10n.of(context).appearOnTop), + subtitle: Text(L10n.of(context).appearOnTopDetails), trailing: const Icon(Icons.file_upload_rounded), ), const Divider(), ListTile( onTap: () => openAppSettings(), - title: Text(L10n.of(context)!.otherCallingPermissions), + title: Text(L10n.of(context).otherCallingPermissions), trailing: const Icon(Icons.mic), ), ], diff --git a/lib/widgets/chat_settings_popup_menu.dart b/lib/widgets/chat_settings_popup_menu.dart index 23732aeb..3e3a793e 100644 --- a/lib/widgets/chat_settings_popup_menu.dart +++ b/lib/widgets/chat_settings_popup_menu.dart @@ -4,12 +4,12 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:adaptive_dialog/adaptive_dialog.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:go_router/go_router.dart'; import 'package:keyboard_shortcuts/keyboard_shortcuts.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'matrix.dart'; enum ChatPopupMenuActions { details, mute, unmute, leave, search } @@ -51,7 +51,7 @@ class ChatSettingsPopupMenuState extends State { LogicalKeyboardKey.controlLeft, LogicalKeyboardKey.keyI, }, - helpLabel: L10n.of(context)!.chatDetails, + helpLabel: L10n.of(context).chatDetails, onKeysPressed: _showChatDetails, child: const SizedBox.shrink(), ), @@ -62,10 +62,10 @@ class ChatSettingsPopupMenuState extends State { final confirmed = await showOkCancelAlertDialog( useRootNavigator: false, context: context, - title: L10n.of(context)!.areYouSure, - okLabel: L10n.of(context)!.ok, - cancelLabel: L10n.of(context)!.cancel, - message: L10n.of(context)!.archiveRoomDescription, + title: L10n.of(context).areYouSure, + okLabel: L10n.of(context).ok, + cancelLabel: L10n.of(context).cancel, + message: L10n.of(context).archiveRoomDescription, ); if (confirmed == OkCancelResult.ok) { final success = await showFutureLoadingDialog( @@ -107,7 +107,7 @@ class ChatSettingsPopupMenuState extends State { children: [ const Icon(Icons.info_outline_rounded), const SizedBox(width: 12), - Text(L10n.of(context)!.chatDetails), + Text(L10n.of(context).chatDetails), ], ), ), @@ -118,7 +118,7 @@ class ChatSettingsPopupMenuState extends State { children: [ const Icon(Icons.notifications_off_outlined), const SizedBox(width: 12), - Text(L10n.of(context)!.muteChat), + Text(L10n.of(context).muteChat), ], ), ) @@ -129,7 +129,7 @@ class ChatSettingsPopupMenuState extends State { children: [ const Icon(Icons.notifications_on_outlined), const SizedBox(width: 12), - Text(L10n.of(context)!.unmuteChat), + Text(L10n.of(context).unmuteChat), ], ), ), @@ -139,7 +139,7 @@ class ChatSettingsPopupMenuState extends State { children: [ const Icon(Icons.search_outlined), const SizedBox(width: 12), - Text(L10n.of(context)!.search), + Text(L10n.of(context).search), ], ), ), @@ -149,7 +149,7 @@ class ChatSettingsPopupMenuState extends State { children: [ const Icon(Icons.delete_outlined), const SizedBox(width: 12), - Text(L10n.of(context)!.leave), + Text(L10n.of(context).leave), ], ), ), diff --git a/lib/widgets/connection_status_header.dart b/lib/widgets/connection_status_header.dart index 285ebb8b..99a5d470 100644 --- a/lib/widgets/connection_status_header.dart +++ b/lib/widgets/connection_status_header.dart @@ -2,9 +2,9 @@ import 'dart:async'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import '../config/themes.dart'; import '../utils/localized_exception_extension.dart'; import 'matrix.dart'; @@ -77,7 +77,7 @@ extension on SyncStatusUpdate { String toLocalizedString(BuildContext context) { switch (status) { case SyncStatus.waitingForResponse: - return L10n.of(context)!.loadingPleaseWait; + return L10n.of(context).loadingPleaseWait; case SyncStatus.error: return ((error?.exception ?? Object()) as Object) .toLocalizedString(context); @@ -85,7 +85,7 @@ extension on SyncStatusUpdate { case SyncStatus.cleaningUp: case SyncStatus.finished: default: - return L10n.of(context)!.synchronizingPleaseWait; + return L10n.of(context).synchronizingPleaseWait; } } } diff --git a/lib/widgets/fluffy_chat_app.dart b/lib/widgets/fluffy_chat_app.dart index d9d2f042..4ab21247 100644 --- a/lib/widgets/fluffy_chat_app.dart +++ b/lib/widgets/fluffy_chat_app.dart @@ -1,12 +1,12 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:fluffychat/config/routes.dart'; import 'package:fluffychat/config/themes.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/widgets/app_lock.dart'; import 'package:fluffychat/widgets/theme_builder.dart'; import '../config/app_config.dart'; diff --git a/lib/widgets/layouts/login_scaffold.dart b/lib/widgets/layouts/login_scaffold.dart index b253ec4f..7902097e 100644 --- a/lib/widgets/layouts/login_scaffold.dart +++ b/lib/widgets/layouts/login_scaffold.dart @@ -2,11 +2,11 @@ import 'dart:ui'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:url_launcher/url_launcher_string.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/platform_infos.dart'; class LoginScaffold extends StatelessWidget { @@ -126,14 +126,14 @@ class _PrivacyButtons extends StatelessWidget { TextButton( onPressed: () => PlatformInfos.showDialog(context), child: Text( - L10n.of(context)!.about, + L10n.of(context).about, style: shadowTextStyle, ), ), TextButton( onPressed: () => launchUrlString(AppConfig.privacyUrl), child: Text( - L10n.of(context)!.privacy, + L10n.of(context).privacy, style: shadowTextStyle, ), ), diff --git a/lib/widgets/local_notifications_extension.dart b/lib/widgets/local_notifications_extension.dart index e3d9ff3c..7647d272 100644 --- a/lib/widgets/local_notifications_extension.dart +++ b/lib/widgets/local_notifications_extension.dart @@ -4,7 +4,6 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:desktop_notifications/desktop_notifications.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:go_router/go_router.dart'; import 'package:http/http.dart' as http; import 'package:matrix/matrix.dart'; @@ -12,6 +11,7 @@ import 'package:path_provider/path_provider.dart'; import 'package:universal_html/html.dart' as html; import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/matrix.dart'; @@ -38,9 +38,9 @@ extension LocalNotificationsExtension on MatrixState { if (room.notificationCount == 0) return; final event = Event.fromJson(eventUpdate.content, room); - final title = room.getLocalizedDisplayname(MatrixLocals(L10n.of(context)!)); + final title = room.getLocalizedDisplayname(MatrixLocals(L10n.of(context))); final body = await event.calcLocalizedBody( - MatrixLocals(L10n.of(context)!), + MatrixLocals(L10n.of(context)), withSenderNamePrefix: !room.isDirectChat || room.lastEvent?.senderId == client.userID, plaintextBody: true, @@ -95,11 +95,11 @@ extension LocalNotificationsExtension on MatrixState { actions: [ NotificationAction( DesktopNotificationActions.openChat.name, - L10n.of(context)!.openChat, + L10n.of(context).openChat, ), NotificationAction( DesktopNotificationActions.seen.name, - L10n.of(context)!.markAsRead, + L10n.of(context).markAsRead, ), ], hints: [ diff --git a/lib/widgets/lock_screen.dart b/lib/widgets/lock_screen.dart index 93c0b54f..38a83f2e 100644 --- a/lib/widgets/lock_screen.dart +++ b/lib/widgets/lock_screen.dart @@ -2,9 +2,8 @@ import 'dart:async'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; - import 'package:fluffychat/config/themes.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/widgets/app_lock.dart'; class LockScreen extends StatefulWidget { @@ -29,7 +28,7 @@ class _LockScreenState extends State { final enteredPin = int.tryParse(_textEditingController.text); if (enteredPin == null || _textEditingController.text.length != 4) { setState(() { - _errorText = L10n.of(context)!.invalidInput; + _errorText = L10n.of(context).invalidInput; }); _textEditingController.clear(); return; @@ -45,7 +44,7 @@ class _LockScreenState extends State { } setState(() { - _errorText = L10n.of(context)!.wrongPinEntered(_coolDownSeconds); + _errorText = L10n.of(context).wrongPinEntered(_coolDownSeconds); _inputBlocked = true; }); Future.delayed(Duration(seconds: _coolDownSeconds)).then((_) { @@ -62,7 +61,7 @@ class _LockScreenState extends State { Widget build(BuildContext context) { return Scaffold( appBar: AppBar( - title: Text(L10n.of(context)!.pleaseEnterYourPin), + title: Text(L10n.of(context).pleaseEnterYourPin), centerTitle: true, ), extendBodyBehindAppBar: true, diff --git a/lib/widgets/matrix.dart b/lib/widgets/matrix.dart index 96eaeb00..81a3d945 100644 --- a/lib/widgets/matrix.dart +++ b/lib/widgets/matrix.dart @@ -7,7 +7,6 @@ import 'package:flutter/material.dart'; import 'package:adaptive_dialog/adaptive_dialog.dart'; import 'package:collection/collection.dart'; import 'package:desktop_notifications/desktop_notifications.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:http/http.dart' as http; import 'package:image_picker/image_picker.dart'; @@ -19,6 +18,7 @@ import 'package:shared_preferences/shared_preferences.dart'; import 'package:universal_html/html.dart' as html; import 'package:url_launcher/url_launcher_string.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/client_manager.dart'; import 'package:fluffychat/utils/init_with_restore.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; @@ -239,8 +239,8 @@ class MatrixState extends State with WidgetsBindingObserver { void initLoadingDialog() { WidgetsBinding.instance.addPostFrameCallback((_) { - LoadingDialog.defaultTitle = L10n.of(context)!.loadingPleaseWait; - LoadingDialog.defaultBackLabel = L10n.of(context)!.close; + LoadingDialog.defaultTitle = L10n.of(context).loadingPleaseWait; + LoadingDialog.defaultBackLabel = L10n.of(context).close; LoadingDialog.defaultOnError = (e) => (e as Object?)!.toLocalizedString(context); }); @@ -306,7 +306,7 @@ class MatrixState extends State with WidgetsBindingObserver { ClientManager.removeClientNameFromStore(c.clientName, store); ScaffoldMessenger.of(context).showSnackBar( SnackBar( - content: Text(L10n.of(context)!.oneClientLoggedOut), + content: Text(L10n.of(context).oneClientLoggedOut), ), ); @@ -363,13 +363,12 @@ class MatrixState extends State with WidgetsBindingObserver { final result = await showOkCancelAlertDialog( barrierDismissible: true, context: context, - title: L10n.of(context)!.pushNotificationsNotAvailable, + title: L10n.of(context).pushNotificationsNotAvailable, message: errorMsg, fullyCapitalizedForMaterial: false, - okLabel: link == null - ? L10n.of(context)!.ok - : L10n.of(context)!.learnMore, - cancelLabel: L10n.of(context)!.doNotShowAgain, + okLabel: + link == null ? L10n.of(context).ok : L10n.of(context).learnMore, + cancelLabel: L10n.of(context).doNotShowAgain, ); if (result == OkCancelResult.ok && link != null) { launchUrlString( @@ -483,8 +482,8 @@ class MatrixState extends State with WidgetsBindingObserver { final response = await showOkCancelAlertDialog( context: context, isDestructiveAction: true, - title: L10n.of(context)!.dehydrate, - message: L10n.of(context)!.dehydrateWarning, + title: L10n.of(context).dehydrate, + message: L10n.of(context).dehydrateWarning, ); if (response != OkCancelResult.ok) { return; diff --git a/lib/widgets/permission_slider_dialog.dart b/lib/widgets/permission_slider_dialog.dart index 1e883e12..8e237a2c 100644 --- a/lib/widgets/permission_slider_dialog.dart +++ b/lib/widgets/permission_slider_dialog.dart @@ -2,7 +2,8 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:adaptive_dialog/adaptive_dialog.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; + +import 'package:fluffychat/l10n/l10n.dart'; Future showPermissionChooser( BuildContext context, { @@ -10,7 +11,7 @@ Future showPermissionChooser( }) async { final customLevel = await showTextInputDialog( context: context, - title: L10n.of(context)!.setPermissionsLevel, + title: L10n.of(context).setPermissionsLevel, textFields: [ DialogTextField( initialText: currentLevel.toString(), @@ -18,11 +19,11 @@ Future showPermissionChooser( autocorrect: false, validator: (text) { if (text == null) { - return L10n.of(context)!.pleaseEnterANumber; + return L10n.of(context).pleaseEnterANumber; } final level = int.tryParse(text); if (level == null) { - return L10n.of(context)!.pleaseEnterANumber; + return L10n.of(context).pleaseEnterANumber; } return null; }, diff --git a/lib/widgets/public_room_bottom_sheet.dart b/lib/widgets/public_room_bottom_sheet.dart index 3a4f68f3..c82959bb 100644 --- a/lib/widgets/public_room_bottom_sheet.dart +++ b/lib/widgets/public_room_bottom_sheet.dart @@ -1,11 +1,11 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:flutter_linkify/flutter_linkify.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/fluffy_share.dart'; import 'package:fluffychat/utils/url_launcher.dart'; import 'package:fluffychat/widgets/avatar.dart'; @@ -74,7 +74,7 @@ class PublicRoomBottomSheet extends StatelessWidget { ), ); if (!query.chunk.any(_testRoom)) { - throw (L10n.of(context)!.noRoomsFound); + throw (L10n.of(context).noRoomsFound); } return query.chunk.firstWhere(_testRoom); } @@ -92,7 +92,7 @@ class PublicRoomBottomSheet extends StatelessWidget { leading: IconButton( icon: const Icon(Icons.arrow_downward_outlined), onPressed: Navigator.of(context, rootNavigator: false).pop, - tooltip: L10n.of(context)!.close, + tooltip: L10n.of(context).close, ), actions: [ Padding( @@ -147,10 +147,10 @@ class PublicRoomBottomSheet extends StatelessWidget { .client .getRoomById(chunk!.roomId) == null - ? L10n.of(context)!.knock + ? L10n.of(context).knock : chunk?.roomType == 'm.space' - ? L10n.of(context)!.joinSpace - : L10n.of(context)!.joinRoom, + ? L10n.of(context).joinSpace + : L10n.of(context).joinRoom, ), icon: const Icon(Icons.login_outlined), ), @@ -161,16 +161,16 @@ class PublicRoomBottomSheet extends StatelessWidget { profile?.name ?? roomAlias?.localpart ?? chunk?.roomId.localpart ?? - L10n.of(context)!.chat, + L10n.of(context).chat, ), subtitle: Text( - '${L10n.of(context)!.participant}: ${profile?.numJoinedMembers ?? 0}', + '${L10n.of(context).participant}: ${profile?.numJoinedMembers ?? 0}', ), trailing: const Icon(Icons.account_box_outlined), ), if (roomAlias != null) ListTile( - title: Text(L10n.of(context)!.publicLink), + title: Text(L10n.of(context).publicLink), subtitle: SelectableText(roomAlias), contentPadding: const EdgeInsets.symmetric(horizontal: 16.0),