![](/img/trans.png)
[英]How can I use variable of CubitState inside Cubit? Flutter/Bloc
[英]How to use flutter internationalization inside BLOC, Cubit And Repositories for translate messages?
我正在 Flutter 开发多语言应用程序。
我使用flutter_localizations package 进行本地化,使用intl package 进行国际化。
在 Widgets 中的正常方式,我可以在Context的帮助下使用它。
但问题是当我想在存储库或除 UI 层之外的其他层中使用国际化时。
在除 UI(我们无权访问Context )之外的其他层内进行国际化的最佳实践是什么,例如在 Api、存储库、Bloc 或 Cubit 内使用国际化?
注意:我正在寻找一种在应用程序的 BLOC(业务逻辑)内部使用国际化的方法,而不是 UI!
一般来说,最好避免在 UI 层之外使用本地化。 如果您使用的是 BLoC 库,则可以在 BlocListener 中显示对话框、快餐栏和类似的小部件。 您还可以为您的 state 编写一个扩展来处理 UI 层中的本地化。
但是,有一些方法可以在没有 BuildContext 的情况下使用本地化。 例如:
简短示例:
import 'package:get_it/get_it.dart';
GetIt getIt= GetIt.instance;
void setupServiceLocator() {
getIt.registerLazySingleton(() => AppLocalizations());
}
AppLocalizations i10n = await AppLocalizations.delegate.load(Locale('en'));
使用easy_localization package 实际上很容易实现。您不需要上下文,可以像这样访问字符串:
final text = LocaleKeys.books_details_delete.tr();
此解决方案的唯一缺点是它使用代码生成,因此您需要在字符串更改后重建项目。
有关更多详细信息,我已经编写了一个带有教程的示例应用程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.