当前位置: 首页 > news >正文

Flutter 启动流程解析

任何应用程序都是从main()开始的,Flutter也不例外。Flutter 的启动入口在 lib/main.dart 里的 main() 函数中,代码如下。

void main() => runApp(MyApp());void runApp(Widget app) {final WidgetsBinding binding = WidgetsFlutterBinding.ensureInitialized();assert(binding.debugCheckZone('runApp'));binding..scheduleAttachRootWidget(binding.wrapWithDefaultView(app))..scheduleWarmUpFrame();
}

runApp的代码很简单,传递一个Widget参数,然后执行了三行代码,三行代码代表了Flutter App启动的主要三个流程:

  • Binding初始化(ensureInitialized)
  • 绑定根节点(scheduleAttachRootWidget)
  • 绘制热身帧(scheduleWarmUpFrame)

接下来,我们就按照上面的流程来分析下Flutter App的启动流程。

Binding初始化

WidgetsFlutterBinding的源码比较简单,如下所示。

class WidgetsFlutterBinding extends BindingBase with GestureBinding, SchedulerBinding, ServicesBinding, PaintingBinding, SemanticsBinding, RendererBinding, WidgetsBinding {static Widg
http://www.lryc.cn/news/307349.html

相关文章:

  • 全量知识系统问题及SmartChat给出的答复 之4
  • Java架构师之路七、大数据:Hadoop、Spark、Hive、HBase、Kafka等
  • 图论基础(一)
  • 使用 React 和 MUI 创建多选 Checkbox 树组件
  • vue3里面使用el-image-vie出现图片预览导致页面卡顿停止加载问题
  • Leetcoder Day26| 回溯part06:总结+三道hard题
  • 浅谈 Linux 网络编程 - 网络字节序
  • Nginx网络服务六-----IP透传、调度算法和负载均衡
  • 【Linux进程】进程状态---进程僵尸与孤儿
  • MySQL数据库基础知识总结(适合小白入门使用)一
  • 历史新知网:寄快递寄个电脑显示器要多少钱?
  • 在两台CentOS 7服务器上部署MinIO集群。
  • 【计算机网络】深度学习使用应用层的HTTP协议
  • Ubuntu18.04 系统上配置并运行SuperGluePretrainedNetwork(仅使用CPU)
  • 协议-http协议-基础概念01-发展历程-http组成-http是什么-相关的应用-相关的协议
  • UI学习-学习内容
  • Flink CDC 提取记录变更时间作为事件时间和 Hudi 表的 precombine.field 以及1970-01-01 取值问题
  • 【网络安全】网络安全意识教育实用指南
  • wordpress模板购买网站推荐
  • LeetCode 刷题 [C++] 第240题.搜索二维矩阵 II
  • HP笔记本电脑如何恢复出厂设置?这里提供几种方法
  • Elasticsearch:了解人工智能搜索算法
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • 分享便携式血氧仪单片机方案
  • 【Java设计模式】四、适配器模式
  • RV32/64 特权架构 - 特权模式与指令
  • 多微服务合并为一个服务
  • Springboot企业级开发--开发入门01
  • bash和sh和./的区别
  • LeetCode 3:寻找最长不含重复字符的子串长度