改变扑扑的局部化与集团状态管理问题

时间:2020-11-05 17:28:19

标签: flutter dart internationalization flutter-bloc

我希望每次有人决定更改应用程序语言而不重新启动应用程序时更改应用程序语言。一切都使用BLoC进行。

我遇到的问题我不太了解一件事。如果我将MaterialApp属性title TodosLocalizations.of(context).translate("appTitle")传递给它,则会引发错误:

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

enter image description here

但是当我注释此行并将相同的内容使用onGenerateTitle传递到context属性时,一切都正常工作。

enter image description here

有人可以回答我为什么发生这种情况,否则在这种情况下我可能不理解如何使用此属性(标题)。

1 个答案:

答案 0 :(得分:1)

当调用onGenerateTitle:(BuildContext context)=> TodosLocalizations.of(context).title时,它将使用一个新的BuildContext,它已经包含LocalizedDelagate(),因此可以使用TodosLocalizations.of(context)进行调用。

当您在同一构建方法中不带onGenerateTitle的方式直接使用它时,您在创建LocalizedDelagate()之前引用了一个上下文实例,因此TodosLocalizations.of(context)不返回任何内容。