Localization 从一个材质应用程序切换到另一个材质应用程序时,会出现短时间的黑屏

Localization 从一个材质应用程序切换到另一个材质应用程序时,会出现短时间的黑屏,localization,flutter,Localization,Flutter,从一个材质应用程序切换到另一个材质应用程序时,会出现短时间的黑屏。仅当我设置MaterialApp的localizationDelegates时才会发生这种情况 您可以运行以下回购来复制发行: 我不知道是什么导致了黑屏。您知道吗?您的问题发生是因为您从更新了小部件树 Foo MaterialApp 到 这使得颤振硬复位材料PP的状态,触发加载 一般来说,你应该避免这样做。最好始终使用空数据插入Bar,或者使用GlobalKey: final key = GlobalKey(); // ..

从一个材质应用程序切换到另一个材质应用程序时,会出现短时间的黑屏。仅当我设置MaterialApp的localizationDelegates时才会发生这种情况

您可以运行以下回购来复制发行:


我不知道是什么导致了黑屏。您知道吗?

您的问题发生是因为您从更新了小部件树

Foo
 MaterialApp

这使得颤振硬复位
材料PP
的状态,触发加载

一般来说,你应该避免这样做。最好始终使用空数据插入
Bar
,或者使用
GlobalKey

final key = GlobalKey();
// ...

Widget build(BuildContext context) {
  final app = MaterialApp(key: key);
  return someCondition
    ? Bar(child: app)
    : app;
}

GlobalKey
有目的地重用与键关联的先前
元素
您的问题之所以发生,是因为您从

Foo
 MaterialApp

这使得颤振硬复位
材料PP
的状态,触发加载

一般来说,你应该避免这样做。最好始终使用空数据插入
Bar
,或者使用
GlobalKey

final key = GlobalKey();
// ...

Widget build(BuildContext context) {
  final app = MaterialApp(key: key);
  return someCondition
    ? Bar(child: app)
    : app;
}

GlobalKey
有目的地重用与键关联的先前的
元素

为什么要在可以更新其子项时创建新的materialapp?我想在流有数据时使用DataProvider包装materialapp,以便所有路由都可以访问该数据。是的,但这并不意味着您必须重新创建materialapp您的目标是什么建议?使用继承的小部件,如
主题
或一些自定义小部件。您不会重新创建MaterialApp,但行为是相同的为什么在可以更新其子级时创建新MaterialApp?我想在流有数据时使用DataProvider包装MaterialApp,以便所有路由都可以访问该数据。是的,但这并不意味着您必须重新创建MaterialApp您的建议是什么?使用继承的小部件,例如
主题
或一些自定义主题。您不会重新创建MaterialApp,但其行为与您相同。GlobalKey解决了这个问题。但我也不得不做一些更奇怪的事情。问题是我正在根据情况改变房子。如果有数据,则显示主页。但如果没有,我会显示一个输入屏幕,然后从该屏幕导航到另一个屏幕(Splash),该屏幕也会保持在所有内容的顶部,即使我有数据,它应该显示主页,但我在我的颤振检查器中看到Splash和Home都在MaterialApp下,所以我所做的就是监听数据流,当有数据时我会弹出SplashPage。你介意再问一个问题吗?老实说,我不明白这个问题,评论也不是很好。我的大脑在更新回购协议时开始工作。当然它会显示SplashScreen,因为我是从家里导航到它的。我在想什么?啊!所以,即使我的主页更新了主页,我也需要从路由堆栈返回查看它。所以我最终在一个页面内处理InputPage和SplashPage内容,所以这里没有导航业务。谢谢你的帮助和关心,雷米。谢谢你。GlobalKey解决了这个问题。但我也不得不做一些更奇怪的事情。问题是我正在根据情况改变房子。如果有数据,则显示主页。但如果没有,我会显示一个输入屏幕,然后从该屏幕导航到另一个屏幕(Splash),该屏幕也会保持在所有内容的顶部,即使我有数据,它应该显示主页,但我在我的颤振检查器中看到Splash和Home都在MaterialApp下,所以我所做的就是监听数据流,当有数据时我会弹出SplashPage。你介意再问一个问题吗?老实说,我不明白这个问题,评论也不是很好。我的大脑在更新回购协议时开始工作。当然它会显示SplashScreen,因为我是从家里导航到它的。我在想什么?啊!所以,即使我的主页更新了主页,我也需要从路由堆栈返回查看它。所以我最终在一个页面内处理InputPage和SplashPage内容,所以这里没有导航业务。谢谢你的帮助和关心,雷米。