我注意到无状态小部件中的构建函数被调用了两次。
import 'package:flutter/material.dart';
void main() {
runApp(new MyApp());
}
class MyApp extends StatelessWidget {
MyApp() {
print("constructor MyApp class");
}
@override
Widget build(BuildContext context) {
print("build MyApp");
return MaterialApp(
home: HomeWidget(),
);
}
}
class HomeWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(child: Text("home widget")),
);
}
}
控制台结果
Performing hot restart...
Syncing files to device AOSP on IA Emulator...
Restarted application in 755ms.
I/flutter (14765): constructor MyApp class
I/flutter (14765): build MyApp
I/flutter (14765): build MyApp
从控制台输出来看,构造函数被调用了一次,而 build 函数被调用了两次。
我搜索了这个问题并阅读了以下文件。
https://github.com/flutter/flutter/issues/33566
https://flutterigniter.com/future-async-called-multiple-times/
然而,我还是不太理解。为什么 build 函数会被多次调用?我没有使用 async 或 future,我的代码非常简单。
在 dartpad 上运行时,这个问题不会出现。它只在 Android Studio 上出现。