Flutter中BottomNavigator跳转同名不同参数页面失效是否为正常现象?
问题结论
这种跳转异常是默认配置下的预期表现,并非代码运行故障。
原因说明
Flutter的Widget差分(Diff)算法判断两个Widget是否需要替换重建时,会同时校验runtimeType和key两个属性:
- 你代码中的两个Trends实例没有传入唯一标识
key,二者runtimeType完全相同,Diff算法会默认判定二者是同一个Widget,所以不会触发页面切换动作 - Favorites、Search页面和Trends的
runtimeType不一致,所以跨组件的切换可以正常生效
修复方案
给两个Trends实例分别指定不同的ValueKey即可解决跳转异常问题:
final screens = [ Favorites(), Search(), Trends(language: 'IS', key: const ValueKey('trends_is')), Trends(language: 'EN', key: const ValueKey('trends_en')), ];
如果Trends组件暂不支持接收key参数,在构造方法中增加key透传即可:
class Trends extends StatelessWidget { final String language; const Trends({super.key, required this.language}); // 其余组件实现逻辑 }
内容的提问来源于stack exchange,提问作者sigjak
相关产品推荐
相关产品推荐

