Flutter 当我第一次运行颤振代码时,它被重新编译了2次,这正常吗?(我只使用一个类)

Flutter 当我第一次运行颤振代码时,它被重新编译了2次,这正常吗?(我只使用一个类),flutter,Flutter,我是个新手。有些事让我担心,我不知道这是否正常。我知道如果小部件的类型为StateFulWidget,则代码将呈现。但在本例中,我有一个无状态小部件,出于某种原因,它呈现了2次。这正常吗 这是我的代码: import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { // This widget is t

我是个新手。有些事让我担心,我不知道这是否正常。我知道如果小部件的类型为
StateFulWidget
,则代码将呈现。但在本例中,我有一个
无状态小部件
,出于某种原因,它呈现了2次。这正常吗

这是我的代码:

  import 'package:flutter/material.dart';

  void main() {
    runApp(MyApp());
  }

  class MyApp extends StatelessWidget {
    // This widget is the root of your application.
    @override
    Widget build(BuildContext context) {
      print("main");
      return MaterialApp(title: 'Provider Example', initialRoute: '/', routes: {
        '/': (context) => Page2(),
      });
    }
  }

  class Page2 extends StatelessWidget {
    Page2() {
      print("page2");
    }

    @override
    Widget build(BuildContext context) {
      return Container();
    }
  }
这是输出:

 Restarted application in 832ms.
 I/flutter ( 4439): main
 I/flutter ( 4439): page2    --> next two lines are the same, the widget is render again
 I/flutter ( 4439): main
 I/flutter ( 4439): page2

颤振构建方法是在屏幕上创建并返回呈现的小部件的方法,因此每次UI中发生变化时都必须调用该构建,并且它需要重建。根据

生成方法将在以下时间后调用:

  • 在调用initState之后
  • 在调用didUpdateWidget之后
  • 在接到对setState的调用后
  • 此状态对象的依赖项更改后(例如,先前构建更改引用的继承小部件)
  • 调用deactivate后,然后在另一个位置将状态对象重新插入到树中
因此,即使您有一个无状态的小部件,flatter也可以并且将多次重建,这就是为什么您应该避免在小部件中放置逻辑处理程序,特别是
构建
,让此方法尽可能简单,只需要构建小部件所需的实际内容


此外,在动画期间,过渡。。。为了执行动画,您的小部件将被重建很多次。如果你想避免不必要的构建,有一些方法可以做到,通过使用
const
小部件,如果你认为某个小部件在运行时不会像
Text('Hi')
那样改变,这种小部件只需要构建一次,因此,您可以使用
const
关键字对其执行操作。

我不知道如何放置
const
,以便小部件不会呈现。非常感谢您的回答,换句话说,这种行为是完全正常的是的,当然,如果您看到您的构建被调用了100次,这意味着可能有问题,无论如何
const
final
关键字在dart中有不同的含义,看看这个,这样你就会更好地理解:)你能给我一个在构建中使用const的例子吗?我得到了语法错误。const关键字必须与依赖于编译时已知值的小部件一起使用,这意味着如果您有一个文本,其中显示了一个在运行时可能更改的变量的值,您将得到错误,因为该小部件不能是const。您可以检查此项以更好地理解常量的含义,我理解,但在这种情况下,我遇到了一些错误,例如,我放置了
const SafeArea(..