Flutter:避免在导航到下一条路线时调用上一条路线的 build() 方法
Flutter: avoid build() method of previous route being called when navigate to next route
我的 Flutter 应用显示启动画面 (statefulWidget
) 作为第一条路线。此路线显示动画,同时在后台调用 API 以获取一些数据。
收到数据并完成动画后,它会导航到第二条路线。
一切正常,除了当调用 Navigator
导航到第二条路线时,显示了第二条路线,但我可以再次看到 API 在第一条路线上的响应路由,正在调用。
原来在构建第二条路由的时候,也调用了之前路由的构建方法,又进行了一次不必要的API调用。
如何避免这种行为?,我相信这一定是 Flutter
上的错误??
当前流程(非预期):SplashRoute(build) ---> Navigator ---> HomeRoute(build)+SplashRoute(build)
所需流程:SplashRoute(build) ---> Navigator ---> HomeRoute(build)
你想做的是与框架作对。这是徒劳的努力。相反,您应该使用框架。以下是原因和方式:
构建方法不应发出 API 请求。构建方法应该使用您的状态 class 的字段来生成没有任何副作用的 UI。
请将您的 API 调用移至 initState
方法,将其结果保存在您所在州 class 和 setState
的字段中并获取 build
使用它们而不产生任何副作用的方法。
我的 Flutter 应用显示启动画面 (statefulWidget
) 作为第一条路线。此路线显示动画,同时在后台调用 API 以获取一些数据。
收到数据并完成动画后,它会导航到第二条路线。
一切正常,除了当调用 Navigator
导航到第二条路线时,显示了第二条路线,但我可以再次看到 API 在第一条路线上的响应路由,正在调用。
原来在构建第二条路由的时候,也调用了之前路由的构建方法,又进行了一次不必要的API调用。
如何避免这种行为?,我相信这一定是 Flutter
上的错误??
当前流程(非预期):SplashRoute(build) ---> Navigator ---> HomeRoute(build)+SplashRoute(build)
所需流程:SplashRoute(build) ---> Navigator ---> HomeRoute(build)
你想做的是与框架作对。这是徒劳的努力。相反,您应该使用框架。以下是原因和方式:
构建方法不应发出 API 请求。构建方法应该使用您的状态 class 的字段来生成没有任何副作用的 UI。
请将您的 API 调用移至 initState
方法,将其结果保存在您所在州 class 和 setState
的字段中并获取 build
使用它们而不产生任何副作用的方法。