使用go_router push和pop页面导致重建,如何防止?



我使用go_*路由器在屏幕之间导航,不幸的是,它会导致每次在当前页面和我导航到的页面上重建。在大多数页面上,我从Firebase读取文档,这会导致不必要的读取。作为替代方案,我使用Navigator来实现页面之间的导航,而无需重新构建。是否有可能实现相同的效果与go_*路由器?

Navigator.push(context,MaterialPageRoute(builder: (context) => SecondScreen(),); (rebuild on screen2)
context.go("/secondScreen") (rebuilds on screen1 and screen2)

我将使用Navigator代替go_router。

我相信我也有同样的问题。当我使用context.push()context.pop()时,堆栈树中的所有页面状态都再次运行,这导致已经存在的页面状态丢失。我意识到的是pageBuilder之间的区别,builder方法。为了使用pageBuilder方法,你需要调用MaterialPage<void>,它将每次构建页面。

解决方案:builder代替pageBuilder

不使用pageBuilder;

GoRoute(
path: '/',
pageBuilder: (context, state) => MaterialPage<void>(
key: ValueKey<String>(state.fullPath! +
DateTime.now().millisecondsSinceEpoch.toString()),
child: HomePage(),
),
),

使用生成器;

GoRoute(
path: '/',
builder: (context, state) {
return HomePage();
},
),

最新更新