在我的 flutter 应用程序中,我想翻译推送通知正文中的一些文本。
用于前台通知。没问题。
对于我使用的后台通知:
void main() {
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
runApp(MyApp());
}
并且
_firebaseMessagingBackgroundHandler
必须是顶级函数。
那么,既然我在这里没有上下文,我该如何使用我著名的
AppLocalizations.of(context).cancel,
呢?
由于
_firebaseMessagingBackgroundHandler
是顶级函数 - 您可以将 context
作为可选参数传递。这样您就可以访问上下文。
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message,
{BuildContext? context}){
//Your code
}
在 MyApp 中创建变量 static 经验:
static BuildContext? mContext;
在 MyApp 的构建函数中
mContext = context;
我遇到了同样的问题,这是我的解决方案:
@pragma('vm:entry-point')
Future<void> _backgroundMessageHandler(RemoteMessage message) async {
Locale locale = PlatformDispatcher.instance.locale;
AppLocalizations? localizations =
locale.languageCode == 'fr' ? AppLocalizationsFr() : AppLocalizationsEn();
}
基本上我使用了基于平台的
locale
而不是 context
的本地化。
我想知道为什么没有人建议这个,它对我有用。