为什么Root Widget会生成两次?

时间:2019-04-04 11:53:33

标签: 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),),
    );
  }
}

日志输出调试:

  

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

     

找到已保存的证书选择“ XXX”。要清除,请使用“ flutter config”。   使用开发人员身份“ XXX”对iOS应用进行签名以进行设备部署

     

正在运行Xcode构建...

     

Xcode构建完成。 39,4秒

     

安装和启动...

     

颤抖:ROOT WIDGET

     

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

     

颤抖:ROOT WIDGET

使用flutter run --release

记录输出
  

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

     

找到已保存的证书选择“ XXX”。要清除,请使用“ flutter config”。

     

使用开发者身份“ XXX”为设备部署签署iOS应用

     

正在运行pod安装...
  1,2秒

     

正在运行Xcode构建...
                                                                                            ├─构建Dart代码... 15,8s

     

├─正在生成dSYM文件... 0.1秒

     

├─剥离调试符号... 0,0s

     

├─组装Flutter资源... 0.7秒

     

└─编译,链接和签名... 48,3s

     

Xcode构建完成。 67,4秒

     

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

     

要退出,请按“ q”。

     

颤抖:ROOT WIDGET

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

我问的原因是,在我的真实应用中,我使用了WebViewonWebViewCreated(WebViewController controller)的函数WebView仅是第一次调用,因此WebViewController在调试模式下始终为空。

3 个答案:

答案 0 :(得分:2)

我一直在遇到这个问题

Flutter 1.22.0•通道稳定

从模拟器/物理电话中删除应用程序并重新安装可解决此问题。从模拟器/实体中的“系统设置/应用”中删除该应用,然后以调试模式重新安装。

我不知道为什么,但是我的主窗口小部件会不时地继续进行两次准确的重建,并且我在主窗口小部件中没有做任何事情,没有SetStates或没有futurebuilder。我认为这是一个不稳定的内部错误。

答案 1 :(得分:0)

线索可能在这里

Installing and launching... //We are launching the app , the code bundled with it it's executed briefly before it "sync" to allow hot reload

flutter: ROOT WIDGET //The bundled code executes

Syncing files to device iPhone X... //We start the sync, hot reload triggers an app rebuild 

flutter: ROOT WIDGET //The live code executes

如果您对打印进行注释,然后进行热重装,然后取消注释打印,则您应该只会看到一个“ ROOT WIDGET”。

答案 2 :(得分:-2)

我有同样的问题,我发现这不是 flutter 的问题,而是 vscode。 尝试在 android studio 中运行。

相关问题