ProviderScope在AlertDialog中失效:弹窗计数无法实时更新问题
问题原因分析
弹窗与父页面的组件生命周期完全分离:通过
showDialog打开的弹窗,其组件树属于Navigator的overlay层,和父页面Home的组件树是独立分支。Home组件因监听counterProvider,状态更新时会触发自身重建,页面内的CounterDisplay能同步拿到新值更新;但已打开的弹窗不会因Home的重建重新接收参数——弹窗里的CounterDisplay仅在弹窗初始化时获取一次当时的counter值,后续无任何机制通知它值发生了变化。监听逻辑上移导致弹窗失去实时更新能力:原本的
ConsumerWidget是在CounterDisplay内部直接监听counterProvider,只要状态变化组件就会自动重建刷新。现在你把监听逻辑移到Home组件,仅通过参数传递值给CounterDisplay,这种方式只能在组件初始化或父组件重建时传一次值。但弹窗作为独立组件,父组件Home的重建无法触发现有弹窗内CounterDisplay的参数更新。弹窗内部无状态监听机制:弹窗里的
CounterDisplay既没有自己监听counterProvider,也没有订阅状态变化的逻辑,所以counter值更新时弹窗无法感知,只有关闭重新打开时,才会重新从Home获取当时的最新值。
内容的提问来源于stack exchange,提问作者S.n. Ahad
相关产品推荐
相关产品推荐

