Flutter 在Navigator.pushNamed更改到另一个屏幕的路径后,颤振构建旧屏幕?
我注意到,当我在屏幕之间移动并按路线时,例如Flutter 在Navigator.pushNamed更改到另一个屏幕的路径后,颤振构建旧屏幕?,flutter,Flutter,我注意到,当我在屏幕之间移动并按路线时,例如 Navigator.pushNamed(context, "/screenNumberTwo"); 我的源屏幕上的build方法(我们称之为screenNumberOne)在screenNumberTwo的build方法之后被调用(尽管只有第二个屏幕可见)。如果我在MaterialButton中按on移动,以及在InkWell中按onTap移动,在有参数和无参数的路由情况下,我都会看到这种情况 我的路线如下所示 class MyApp extend
Navigator.pushNamed(context, "/screenNumberTwo");
我的源屏幕上的build方法(我们称之为screenNumberOne)在screenNumberTwo
的build方法之后被调用(尽管只有第二个屏幕可见)。如果我在MaterialButton
中按on
移动,以及在InkWell
中按onTap
移动,在有参数和无参数的路由情况下,我都会看到这种情况
我的路线如下所示
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
onGenerateTitle: (BuildContext context) =>
Localization.of(context).appTitle,
initialRoute: "/",
routes: {
"/": (context) => FirstScreen(),
"/select_category": (context) => SecondScreen(),
},
onGenerateRoute: (routeSettings) {
print("Route: ${routeSettings.name}");
var path = routeSettings.name.split('/');
if (path[1] == 'thirdscreen') {
if (path.length == 3) {
//(... where I set paramId)
return new MaterialPageRoute(
builder: (context) => new ThirdScreen(paramId),
settings: routeSettings);
} else if (path.length == 4) {
//(... where I set paramId and param2Id)
return new MaterialPageRoute(
builder: (context) => new ThirdScreen(
paramId, param2Id,
),
settings: routeSettings);
}
},
localizationsDelegates: [
const LocalizationDelegate(),
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
],
supportedLocales: [
const Locale('en'),
const Locale('pl'),
]);
}
}
这不是一个功能问题,更多的是一个问题,在我的例子中,颤振是在计算屏幕上燃烧CPU,而用户无论如何都不会看到它。。。如有任何建议,请更改内容/在何处查找问题,我们将不胜感激 这是正常的。出于各种原因,颤振可以调用
build
函数。它还可以在动画等情况下重复调用它。这就是为什么在build
中不应该有昂贵的计算。另一方面,由于这是颤振设计的核心,因此整个构建机制非常高效(例如,垃圾收集器设计用于处理所有这些新的、短期的小部件对象的创建)
为了实现60FPS的动画效果,Flatter将以该帧速率调用build,因此一个额外的不需要的build并不重要。似乎动画导致调用build。但是,我在文档中没有找到对此的具体解释。也许这个答案会有帮助:我认为你没有回答OP的问题。我们都知道build()可以被多次调用,但为什么要调用当前未激活的旧屏幕呢?“我也有同样的问题。”彼得·阿尔文,检查一下。一位《颤栗》撰稿人说“这正按预期工作”,这与理查德·希普在回答中的回答相同。