当消费者触发重建时,MaterialApp 主页小部件不会被渲染。需要油漆

Posted

技术标签:

【中文标题】当消费者触发重建时,MaterialApp 主页小部件不会被渲染。需要油漆【英文标题】:MaterialApp home widget doesn't get rendered when Consumer triggers rebuild. NEEDS-PAINT 【发布时间】:2020-09-09 04:09:15 【问题描述】:

我在玩 Flutter,在构建登录流程时偶然发现了一个我无法弄清楚的问题。 主要思想是我正在使用身份验证详细信息的提供者,这暴露了一个吸气剂,说明用户是否经过身份验证。基于此,我想有条件地将 home 小部件设置为应用程序的仪表板或欢迎屏幕。这种技术与 Maximilian Schwarzmüller 在 udemy 课程中使用的技术完全相同。

现在,我使用调试器进行了检查,成功设置身份验证后,主页小部件没有更改。在 DevTools 中,我可以看到 DashboardScreen 小部件已添加到树中,但未显示在屏幕上。它虽然有一条带有“NEEDS-PAINT”的奇怪消息。

这是 DashboardScreen 小部件,仅供参考:

我做错了什么吗? 谢谢!

【问题讨论】:

【参考方案1】:

成功设置身份验证后,您是否在 Auth 业务逻辑中调用 notifyListeners() ?在您这样做之前,Consumer 不会自行重建。

【讨论】:

是的,它被称为。调试时,我也可以看到调用了 build 方法,但实际上小部件没有正确显示,正如您在 DevTools 的屏幕截图中看到的那样,DashboardScreen 在那里,但没有在模拟器上显示。这是区别,就在调用 notifyListeners() 之前:imgur.com/a/IaUj3qn 我没有看到你在使用命名路由。您可能需要在 initState 中监听提供者并从那里推送命名路由。 另外,小部件是无状态的。

以上是关于当消费者触发重建时,MaterialApp 主页小部件不会被渲染。需要油漆的主要内容,如果未能解决你的问题,请参考以下文章

我们如何使用 Flutter 中的底部导航栏触发有状态小部件以通过导航重建自身?

当另一个小部件的状态改变时重建小部件

当我渲染我的子材料应用程序时,如何阻止我的更改通知提供程序重建我的父材料应用程序?

InheritedWidget 混淆

如何知道是啥触发了我的 Flutter 小部件重建

使用上下文和观察更改模型时,Flutter Provider 不会触发重建