我已经注意到,当我的屏幕和推路线例如之间移动
Navigator.pushNamed(context, "/screenNumberTwo");
我的源屏幕上的构建方法(我们称其为 screenNumberOne )在screenNumberTwo
的构建方法之后被调用(尽管只有第二个屏幕可见)。如果在有参数且没有参数的情况下使用onPressed
中的MaterialButton
和onTap
中的InkWell
进行移动,我都会看到这种情况。
我的路由如下完成
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,无论如何用户都不会看到它。有关更改/查找问题的任何建议是感谢!
答案 0 :(得分:0)
这是正常现象。 Flutter可以出于各种原因调用build
函数。在动画等情况下,它也可以反复调用它。这就是为什么build
中应该没有昂贵的计算的原因。另一方面,由于这是Flutter设计的核心,因此整个构建机制非常高效(例如,垃圾收集器旨在始终应对所有这些新的,短暂的窗口小部件对象的创建) )。
要获得60FPS动画,Flutter将以该帧速率调用构建,因此再也不需要多余的构建了。