Flutter 颤振:未能将本地化与提供程序包相结合

Flutter 颤振:未能将本地化与提供程序包相结合,flutter,dart,Flutter,Dart,我正在尝试使用本地化,以便可以从我自己的颤振插件中获得它。为此,我使用了一个名为CoreLocalization的抽象基类,它由我的具体Applocalization类实现。那我就用 列表uiConsumableProviders=[ ... 供应商 create:context=>AppLocalisation.ofcontext ]; 我正在从ContentPage调用MultiProvider: @覆盖小部件构建上下文上下文{ //最终本地化=上下文的应用本地化; 回程多供应商 提供者:u

我正在尝试使用本地化,以便可以从我自己的颤振插件中获得它。为此,我使用了一个名为CoreLocalization的抽象基类,它由我的具体Applocalization类实现。那我就用

列表uiConsumableProviders=[ ... 供应商 create:context=>AppLocalisation.ofcontext ]; 我正在从ContentPage调用MultiProvider:

@覆盖小部件构建上下文上下文{ //最终本地化=上下文的应用本地化; 回程多供应商 提供者:uiConsumableProviders, 孩子:。。。 ; } 让我困惑的是,对applocalization.ofcontext的注释掉调用工作得非常好,但在MultiProvider中的调用引发以下异常:

调用了inheritFromWidgetOfExactType_LocalizationsScope或inheritFromElement 在BuilderStateDelegate.initDelegate完成之前

在我看来,子上下文应该可以访问父上下文可用的所有元素。我遗漏了一些基本的东西吗?

你不能调用本地化。其中调用initState内部同步的inheritFromWidgetOfExactType,因为此时小部件树仍在构建中,你无法访问继承的小部件。您可以使用异步回调调用它:

Timer.run{ 这个上下文的AppLocalizations.ofthis.context; }; 或从帧后回调:

WidgetsBinding.instance.addPostFrameCallback\u{ 这个上下文的AppLocalizations.ofthis.context; };
我没有明确地解决这个问题,但我设置了一个变通方法。首先,我创建了一个提供者,其工作只是将上下文转换为CoreLocalization的具体实例。它在插件中使用了这个类:

类CoreLocalizationProvider{ 最终核心本地化功能构建上下文; CoreLocationProviderThis.of; } 然后,消费应用程序中的提供商如下所示:

Provider.valuevalue:CoreLocalizationProviderContext=>Applocalization.ofcontext 我可以在CoreLocalization中添加以下语法糖:

buildcontext的静态核心本地化=>Provider.ofcontext.ofcontext;
诚然,这看起来很笨拙,但它允许我在整个代码库中使用熟悉的语法coreLocalization.ofcontext,就好像coreLocalization是一个常见的或花园式的具体本地化类一样。

错误并不是说树中没有这样的元素。相反,它是说你在错误的时间打电话。