Flutter知识点整理

JVM
1.Flutter Hot reload 实现原理
        一、原理概述

                Hot Reload 只能在 Debug 模式下使用,因为 Debug 模式下,Flutter 采用的是 JIT( 动态编译),代码是运行在 Dart VM 上,JIT 将 Dart 编译成可以运行在 Dart VM 上的 Dart Kernel,Dart Kernel 可以动态更新,所以就实现了代码的实时更新功能。

        二、实现过程(Hot Reload时)

        1、首先会扫描代码,找到上次编译之后有变化的Dart代码;

        2、将这些变化的Dart代码转化为增量的Dart Kernel文件;

        3、将增量的Dart Kernel文件发送到正在移动设备上运行的Dart VM;

        4、Dart VM接着将发来的增量Dart Kernel文件和原有的Dart Kernel文件合并,然后重新加载全新的Dart Kernel文件(这时候不会重新执行代码)

        5、最后通知Flutter Framework重新构建Widget(Flutter的大多数视图刷新都是因为重构了Widget,但是此时会保留Flutter的之前状态);

        简要说就是 1.扫描代码 2.生成diff 3.发送设备上的虚拟机 4.内核合并 5.重构组件

2.Flutter开发框架有哪些,有什么特点?
        BLoC
        Provider
        GetX

                Provider、Bloc、GetX的使用区别和原理 - 简书        

3.Flutter中setState的原理

        setState是一个添加标记的过程,在下一次绘制需要组成渲染的内容时会将标记为脏的element重新渲染,之后合到场景绘制。

        1.setState调用markNeedsBuild
@protected
void setState(VoidCallback fn) {_element.markNeedsBuild();
}
2.markNeedsBuild标记为脏的 同时调用BuildOwner的scheduleBuildFor
void markNeedsBuild() {if (!_active)return;if (dirty)return;_dirty = true;// 标记为dirty(脏的)owner.scheduleBuildFor(this);
}
3.scheduleBuildFor将要刷新的element加入到全局的脏链表_dirtyElements
void scheduleBuildFor(Element element) {if (element._inDirtyList) {_dirtyElementsNeedsResorting = true;return;}if (!_scheduledFlushDirtyElements && onBuildScheduled != null) {_scheduledFlushDirtyElements = true;onBuildScheduled();// 回调}_dirtyElements.add(element);// 添加到“脏”链表里element._inDirtyList = true;
}
4.Flutter 布局和绘制关系

Flutter的布局和绘制详解 ---三棵树 - 简书

5.Flutter如何优化性能

超级全面的Flutter性能优化实践 - 知乎

  • 尽量不要为 Widget 设置半透明效果,而是考虑用图片的形式代替,这样被遮挡的 Widget 部分区域就不需要绘制了;
  • 控制 build 方法耗时,将 Widget 拆小,避免直接返回一个巨大的 Widget,这样 Widget 会享有更细粒度的重建和复用;
  • 对列表采用懒加载而不是直接一次性创建所有的子 Widget,这样视图的初始化时间就减少了。
6.Flutter DevTools工具介绍

Flutter开发之Dart DevTools - 知乎

7.Flutter 与原生通信有几种方式

准确说有四种,其中三种是MethodChannel、EventChannel、BasicMessageChannel

MethodChannel

用于native与flutter的方法调用

EventChannel

用于native单向的向flutter发送广播消息

BasicMessageChannel

用于native与flutter之间的消息互发。

第四种是PlatformView

让Flutter可以嵌套原生View到页面中也可以看作一种“特殊的通讯方式”

8.Flutter state生命周期
didChangeDependencies

didUpdateWidget

9. StatelessWidget和StatefulWidget有什么区别?

  生命周期不同,使用场景不同

1.StatelessWidget生命周期方法只有两个

        createElement

        build

2.StatefulWidget生命周期大致分为4个类

createState——initState——didChangeDependencies——build——didUpdateWidget(update后都会build)——deactivate(类似onPause)——dispose(类似onDestory)

        1.初始化调用createState 和 initState方法

        2.组件创建 调用didChangeDependencies 和build

        3.触发重build调用build(状态改变)

        4.暂停和销毁调用deactivate和dispose

10.Dart中如何让你的代码异步执行执行

        大家都知道Dart是单线程模型,在Looper里有一个微任务队列和事件队列,在循环的时候就会先遍历微任务队列再遍历事件队列再遍历微任务队列这样循环下去...

        那么要让代码一步执行只需要把代码放进微任务队列或事件队列中就行了

    //微任务scheduleMicrotask((){//你需要执行的代码});//事件队列Timer.run((){//你需要执行的代码});
11.Stream和Future区别

Future和Stream都是用于处理异步操作

简单来说

Future 单次异步事件 返回一次值,是不需要关闭的。直接return结果并使用then处理结果。

Stream 多次异步事件,未关闭的流是可以发射多次值的,一般都是需要关闭的。使用yield返回结果,使用await for处理结果。

(普通Stream属于单订阅流,通过Stream.asBroadcastStream()转换成广播流,广播流支持多个订阅者。)

Future适合一次性的异步操作,而Stream适合实时流式异步操作。

还有什么高频面试知识点欢迎留言!!

                

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/765401.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YOLOv8 | 注意力机制 | ShuffleAttention注意力机制 提升检测精度

YOLOv8成功添加ShuffleAttention ⭐欢迎大家订阅我的专栏一起学习⭐ 🚀🚀🚀订阅专栏,更新及时查看不迷路🚀🚀🚀 YOLOv5涨点专栏:http://t.csdnimg.cn/1Aqzu YOLOv8涨点专栏…

02 mybatis

文章目录 product.sqlpom.xmlmybatis-config.xmlmapper.ProductsMapper.xmlpojo.products.javautils.DButil.javamapper.impl.ProductsMapperImpl.javatest product.sql create table products (product_id int auto_increment comment 产品IDprimary key,product_name …

mysql字段多个值,mybatis/mybatis-plus匹配查询

mysql中有一个字段是字符串类型的,category字段值有多个用逗号分割的,例如:娱乐,时尚美妆,美食 。现在想实现这么一个功能, 前端传参 字符串,美食,娱乐。现在想在mybatis的xml中实现,查询,能查到…

软件测试 -- Selenium常用API全面解答(java)

写在前面 // 如果文章有问题的地方, 欢迎评论区或者私信指正 目录 什么是Selenium 一个简单的用例 元素定位 id定位 xpath定位 name定位 tag name 定位和class name 定位 操作元素 click send_keys submit text getAttribute 添加等待 显示等待 隐式等待 显示等…

【wubuntu】披着Win11皮肤主题的Ubuntu系统

wubuntu - 一款外观类似于 Windows 的 Linux 操作系统,没有任何硬件限制。以下是官方的描述 Wubuntu is an operating system based on Ubuntu LTS that has a similar appearance to Windows using the open-source themes. Wubuntu also comes with a set of adva…

SpringBoot打印日志、控制输出格式、存储日志到文件

在Spring Boot中,使用logback-spring.xml文件来配置日志输出格式和存储到文件。 打开src/main/resources目录下的application.properties或application.yml文件,并添加以下配置来启用Spring Boot的日志功能: # application.propertiesloggi…

Prism:打造WPF项目的MVVM之选,简化开发流程、提高可维护性

概述:探索WPF开发新境界,借助Prism MVVM库,实现模块化、可维护的项目。强大的命令系统、松耦合通信、内置导航,让您的开发更高效、更流畅 在WPF开发中,一个优秀的MVVM库是Prism。以下是Prism的优点以及基本应用示例&a…

5.80 BCC工具之tcpconnect.py解读

一,工具简介 tcpconnect工具追踪执行活动TCP连接的内核函数(例如,通过connect()系统调用;accept()是被动连接)。 详细地说,tcpconnect通过钩住内核中的tcp_v4_connect和/或tcp_v6_connect函数来工作,这些函数是在尝试建立TCP连接时被调用的。当这些函数被调用时,tcpc…

Spring Boot(七十一):整合RateLimiter实现接口限流

1 简介 RateLimiter 从概念上来讲,速率限制器会在可配置的速率下分配许可证。如果必要的话,每个acquire() 会阻塞当前线程直到许可证可用后获取该许可证。一旦获取到许可证,不需要再释放许可证。 RateLimiter使用的是一种叫令牌桶的流控算法,RateLimiter会按照一定的频率…

JavaScript 权威指南第七版(GPT 重译)(二)

第四章:表达式和运算符 本章记录了 JavaScript 表达式以及构建许多这些表达式的运算符。表达式 是 JavaScript 的短语,可以 评估 以产生一个值。在程序中直接嵌入的常量是一种非常简单的表达式。变量名也是一个简单表达式,它评估为分配给该变…

2024 Mazing 3 中文版新功能介绍Windows and macOS

iMazing 3中文版(ios设备管理软件)是一款管理苹果设备的软件, Windows 平台上的一款帮助用户管理 IOS 手机的应用程序。iMazing中文版与苹果设备连接后,可以轻松传输文件,浏览保存信息等,软件功能非常强大,界面简洁明晰…

springboot 单元测试

Spring Boot 单元测试是确保代码质量的重要部分,它允许我们在不实际启动整个应用的情况下测试我们的代码。在Spring Boot中,我们通常使用Spring Test模块和JUnit测试框架来编写单元测试。以下是一个简单的Spring Boot单元测试的详细代码介绍:…

AI学习笔记

1. **基础知识学习:** - 学习AI的基础概念,例如机器学习、深度学习、神经网络等。 - 了解常用的AI算法和技术,例如监督学习、无监督学习、强化学习等。 2. **编程语言和工具:** - 掌握Python编程语言,它是AI…

大厂面试--介绍下webpack的整个生命周期?

Webpack 的运行流程是一个串行的过程,从启动到结束会以此执行以下流程 初始化参数 从配置文件和Shell语句中读取与合并参数,得出最终的参数;开始编译 用上一步得到的参数初始化Compiler对象,加载所有配置的插件,执行对…

leetcode 402.移掉k位数字

暴力的话我只能优化到这里了,也就是只能过31个样例,思路就是对于每一位字符,如果当前的字符小于下一个字符,那么就加进去结果,否则就是需要删除的字符,然后次数。 class Solution { public:string removeK…

【运维】MacOS Wifi热点设置

目录 打开热点 配置共享网段 打开热点 打开macOS设置,进入通用->共享 点击如下图标进行配置, 会进入如下界面(⚠️目前是打开共享状态,无法修改配置,只有在未打开状态才能进入配置) 配置完成后&#x…

2024.3.23

具体是哪些参数 每个点是如何投票的 删除那里不懂 是先给了,再重新分组,具体怎么再重新分组 聚的簇 真实的标签 为什么没有PI 加上其他的 基因调控网络

【前端寻宝之路】学习和总结有无序列表的实现和样式修改

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-WuZk6y8cqVpDsE8W {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

深度学习之本地部署大模型ChatGLM3-6B【大模型】【报错】

文章目录 0.前言1.模型下载2.配置环境2.1 下载项目文件2.2 配置环境 3.开始推理4.总结 0.前言 本博客将介绍ChatGLM3-6B大模型在Ubuntu上的本地部署教程 1.模型下载 由于毛毛张的服务器服务无法科学上网,所以模型的相关文件必须现在本地下载好,再上传到…

Zookeeper详解(zk)

文章目录 Zookeeper 概念ZooKeeper的应用场景使用场景zk的原理ZooKeeper、Nacos、Eureka 和 Consul区别Zookeeper的数据结构zk集群脑裂如何解决ZAB 协议假如注册中心挂了,消费者还能调⽤服务吗,用什么调用的dubbo注册中心为什么选择 Zookeeper关于zookee…