我注意到,当我在屏幕之间移动并推送路线时,例如
Navigator.pushNamed(context, "/screenNumberTwo");
Run Code Online (Sandbox Code Playgroud)
我的源屏幕上的构建方法(我们称之为screenNumberOne)在构建方法之后被调用screenNumberTwo
(尽管只有第二个屏幕可见)。如果我使用onPressed
inMaterialButton
和onTap
in移动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'),
]);
}
}
Run Code Online (Sandbox Code Playgroud)
这不是一个功能问题,更多的是一个问题,在我的例子中,颤动正在烧毁计算屏幕上的CPU,而该屏幕无论如何都不会呈现给用户......任何建议更改什么/在哪里寻找问题,我们将不胜感激!
这个是正常的。Flutter 可以build
出于各种原因调用该函数。它还可以在动画等情况下重复调用它。这就是为什么build
. 另一方面,由于这是 Flutter 设计的核心,整个构建机制非常高效(例如垃圾收集器被设计为始终处理所有这些新的、短命的 widget 对象的创建) )。
为了实现 60FPS 动画,Flutter 将以该帧速率调用构建,因此额外的不需要的构建并不重要。
归档时间: |
|
查看次数: |
1520 次 |
最近记录: |