为什么 Root Widget 需要构建两次?

最白目*_*最白目 8 flutter

我有这个非常基本的测试应用程序:

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
    print("ROOT WIDGET ");
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Container(decoration: BoxDecoration(color: Colors.blue),),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

日志输出调试:

在调试模式下在 iPhone X 上启动 lib/main.dart...

找到保存的证书选项“XXX”。要清除,请使用“颤振配置”。使用开发人员身份为设备部署签署 iOS 应用程序:“XXX”

运行 Xcode 构建...

Xcode 构建完成。39,4s

安装和启动...

颤动:根小部件

正在将文件同步到设备 iPhone X...

颤动:根小部件

日志输出 flutter run --release

在 iPhone X 上以发布模式启动 lib/main.dart...

找到保存的证书选项“XXX”。要清除,请使用“颤振配置”。

使用开发人员身份为设备部署签署 iOS 应用程序:“XXX”

运行 pod install...
1,2s

运行 Xcode build...
??Building Dart 代码... 15,8s

??生成dSYM文件... 0,1s

??剥离调试符号... 0,0s

??组装颤振资源... 0,7s

??编译、链接和签名... 48,3s

Xcode 构建完成。67,4s

安装和启动...
6,8s

要退出,请按“q”。

颤动:根小部件

如您所见,它仅在调试模式下发生。

我问的原因是,在我的真实应用中,我使用WebView. 功能onWebViewCreated(WebViewController controller)WebView只有被称为第一次,让WebViewController一直在调试模式下空。

cs *_*guy 7

我一直在关注这个问题

Flutter 1.22.0 • 通道稳定

从我的模拟器/物理手机中删除应用程序并重新安装可解决此问题。从系统设置/应用程序中从模拟器/物理删除应用程序,然后在调试模式下重新安装。

我不知道为什么,但我的主要小部件有时会精确地重建两次,而且我在我的主要小部件中没有做任何事情,没有 SetStates 或没有 Futurebuilder。我认为这是一个颤振内部错误。