阅读 517

Flutter for Windows 启动流程解析

当你启动了Flutter Windows平台支持的时候,创建的项目列表就会多出一个windows文件夹,文件夹内部是Cmake工程文件,当你执行flutter run的时候,如果打开Vs2019,就会在下面的控制台看到Cmake的工作内容。

出于好奇,对文件夹的内容做了梳理,总结了下列流程图:

image.png

不多说,开始一步一步分析!

main.cpp

20-33行就是Flutter的启动逻辑,剩下的头和尾对应流程图的头和尾,我们这里不关心。

如果你想更深入了解DartProjectFlutterWindow的内部逻辑,下面这篇文章详细梳理了内部过程,因为篇幅太多,就单独抽离出来。

Windows 下 Flutter Engine 是如何启动的?(还没开始写)

image.png

这里只对FlutterWindowCreateAndShow进行梳理

CreateAndShow(FlutterWindow.cpp)

FlutterWindow的父类是Win32WindowWin32Window并不复杂,CreateAndShow函数实际上是Win32Window实现的,内容如下。

image.png

CreateAndShow的参数很简单,title就是标题栏名称,origin就是相对屏幕左上方的坐标,和移动端一样逻辑,size为窗口大小。

Oncreate函数调用之前,熟悉Win32 MFC的同学已经知道了,就设置了DPI,创建了一个空白窗口,用Win32HWND标识符储存该窗口信息,目前这个窗口是一片空白

到这里,还是没有看到任何flutter engine的启动代码,所以到这里,flutter engine还没有启动。

OnCreate(FlutterWindow.cpp)

前方高能

父类Win32WindowOnCreate就是个打酱油的,FlutterWindowOnCreate才是重量级选手。

  1. 19-26行,flutter_controller_FlutterViewController类型,构造参数是窗口大小DartProject,也就是说我们一开始创建的project在这边就被使用了。这个controller帮我们处理了很多内部逻辑,总之就是它帮我们启动了引擎,想深入研究?下面请...(和上面是同一篇文章)

    Windows 下 Flutter Engine 是如何启动的?(还没开始写)

  2. 24-26行,判断是否初始化成功。

    Flutter 与Windows平台交互(Method&Event Channel) - 掘金 (juejin.cn)

    • 一般我们写Platform Channel的配置也是在这个函数内的,因为它可以确保引擎初始化成功。

  3. FlutterViewController持有显示画面的viewflutter engineviewGetNativeWindow方法会返回一个HWND标识符,这个标识符对应的内容就是Flutter渲染好的界面。

  4. 最后调用Win32 MFCSetChildContent把原来的空白内容替换成我们要的Flutter界面。

image.png

image.png

回到main.cpp

CreateAndShow返回true,就有画面出来了。

写点感想

应该没什么人会研究这个,但我就是头铁要研究,因为拨云见日,让我看到了共享纹理的可行性,吃通一个平台,其他的逻辑也是类似的,嘻嘻。


作者:Chinouo
链接:https://juejin.cn/post/7023659473193402398


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐