Flutter 路由切换时,是否需要避免页面 Widget 重新实例化?

7 min read

对于一些数据量较大的 Widget,我们是需要尽量避免重新实例化的。Flutter 提供了两种方法来实现路由切换时避免 Widget 重新实例化。

1. 使用 Navigator.pushReplacementNamed 方法

这个方法可以直接替换掉当前路由栈顶的页面,并且它可以无限级使用。使用方式如下:

Navigator.pushReplacementNamed(context, '/secondPage');

这样就可以直接替换掉当前页面为 /secondPage。

2. 使用 AutomaticKeepAliveClientMixin 方法

这个方法需要在需要保持 Widget 状态的页面中使用,并且需要继承 AutomaticKeepAliveClientMixin 类,采用如下方式重载方法:

@override
bool get wantKeepAlive => true;

这样就可以保持页面状态。在下次打开该页面时,旧的 Widget 实例就会被重用。

这两种方法都可以避免 Widget 重新实例化,但是需要根据具体情况选择使用。如果只是简单的页面跳转,可以使用第一种方法。如果需要保持页面状态,可以使用第二种方法。