使用 bloc 状态管理问题更改 flutter 本地化

Change flutter localizations with bloc state managment problem

每当有人决定在不重新启动应用程序的情况下更改应用程序语言时,我都想更改应用程序语言。使用 BLoC 一切正常。

我遇到的问题我真的不明白一件事。如果我传递给 MaterialApp 属性 title TodosLocalizations.of(context).translate("appTitle") 它会抛出一个错误:

The method 'translate' was called on null.
Receiver: null
Tried calling: translate("appTitle")

但是当我评论这一行并使用 context 将相同的内容传递给 onGenerateTitle 属性 时,一切正常。

谁能回答我为什么会这样,否则我可能不明白在这种情况下如何使用这个 属性(标题)。

当你调用 onGenerateTitle: (BuildContext context) => TodosLocalizations.of(context).title 时,它​​使用了一个新的 BuildContext,它已经包含了 LocalizedDelagate(),因此可以用 TodosLocalizations.of(上下文).

当您在同一个构建方法中不使用 onGenerateTitle 直接使用它时,您会在创建 LocalizedDelagate() 之前引用上下文实例,因此 TodosLocalizations.of(context) 不会 return任何东西。