-
三棵树和渲染原理⭐️⭐️
目录 Widget介绍 三棵树 是如何更新的 一个典型示例 结合三棵树来说说CPU和GPU是如何工作的 iOS原生渲染和Flutter渲染有什么不同⭐️Widget介绍一、Widget的种类按继承关系分类 维度 StatelessWidget StatefulWidget RenderObjectWidget ProxyWidget 是否有状态 ❌ 无 ✅ 有(S...…
-
Future的用法⭐️
目录 普通用法 async和await 依赖分析 使用场景 Future.await的使用 微任务普通用法future的使用void futureUse1() { print('1'); Future(() { print('异步任务'); }); print('2'); /* flutter: 1 flutter: 2 flutter: 异步任务 */}future的使用void futureUse3() { print('1'); F...…
-
布局
目录 普通布局 横向布局 纵向布局普通布局Alignment(0.0, 0.0),flutter的坐标原点在屏幕中间。(-1,-1)是左上角Container( color: Colors.green, width: 300, height: 300, alignment: const Alignment(0, 0), child: Container( color: Colors.blue, height: 150, child: const Aspec...…
-
常用控件
目录 架子介绍 常用Widget 重要Widget架子介绍程序的入口函数,runApp() 相当于UIApplicationMain()方法void main() { runApp(const MyApp());}Widget 小部件 有状态:Stateful 可变,比如颜色 无状态:Stateless 不可变 build方法 -> 渲染方法。build方法返回什么,就渲染什么常用Widget一、容器相当于UIViewContainer( width: 100, h...…
-
常用
目录 timer的使用 获取设备宽高 计算文本宽度 函数防抖timer的使用倒计时Timer timer = Timer(const Duration(seconds: 2), () { debugPrint('倒计时结束');});// 在合适的时机取消timer// timer.cancel();定时器int count = 5;Timer.periodic(const Duration(seconds: 1), (Timer timer) { debugPrint('定时...…
-
对象类型
目录 对象 类的继承 抽象类对象一、普通对象class Person { String name; int age; final bool? sexy; //final修饰的属性必须有初始值 String? _hobby; //私有属性外部无法访问 int? _height; static int? num; //静态属性 //默认构造函数 // Person(); //构造函数:在形参的位置,只有构造函数能使用this // : 初始化列表,可以对final修饰...…
-
基本类型
目录 有哪些类型 常量 变量 布尔 数值 字符串 list map operator 函数 闭包有哪些类型常量:const final变量:var布尔类型:bool数值型:num : int & double字符串:String列表:list键值对:map常量int testSum() { return 10;}// 编译时需要确定常量的值,一旦确定便不能更改// const int a = testSum();// int 可以省略,dart会自动推断...…
-
混合开发
目录 介绍 Flutter SDK 升级 flutter_flutter介绍一、混合开发flutter application Flutter应用程序是一个完整的移动应用程序,使用Flutter框架进行开发。它包括了从UI布局到业务逻辑的一切,是最终用户可以下载和使用的产品 开发完整的移动应用程序,可以运行在iOS和Android设备上 包含主函数、应用入口、各种页面、路由、状态管理等flutter module Flutter模块是一种可以嵌入到现有的Android或iOS...…
-
介绍⭐️
目录 介绍 两个项目 相关指令 跨平台技术介绍一、Flutter 与 DartFlutter 是一种用于构建高性能、跨平台移动应用、Web 应用和桌面应用的开源框架. Flutter 框架,它提供了一组工具、库和组件,用于构建用户界面、处理用户输入、管理状态等。 Dart 是 Flutter 的官方编程语言,具有现代编程语言的特性,如强类型、异步编程支持、面向对象特性等。 Dart 作为其主要编程语言,你会使用 Dart 来编写应用程序的逻辑、业务逻...…
-
day02
目录 数据绑定 事件绑定 条件渲染 列表渲染 WXSS 模板样式 全局配置 页面配置 网络数据请求数据绑定1、在页面对应的 .js 文件中,把数据定义到 data 对象中即可:Page({ data: { info: 'init data', msgList: [ {msg: 'hello'}, {msg: 'world'} ], imgSrc: 'http://www.itheima.com/images/logo.png' ...…
-
day01
目录 介绍 注册小程序 开发工具安装 项目结构 项目中的配置文件 小程序的宿主环境 协同工作和发布介绍一、小程序与普通网页开发的区别1、运行环境不同 网页运行在浏览器环境中 小程序运行在微信环境中2、API 不同 由于运行环境的不同,所以小程序中,无法调用 DOM 和 BOM 的 API。 但是,小程序中可以调用微信环境提供的各种 API,例如:地理定位、扫码、支付3、开发模式不同 网页的开发模式:浏览器 + 代码编辑器 小程序有自己的一套标准开发模式: 申请小...…
-
常见写法解读
目录 代码解释代码解释一、代码1type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;我们先定义一个类型 User 以方便后续解释代码type User = { id: number; name: string; age: number; }1、keyof T 拿到类型 T 的所有键,例如:keyof User // "id" | "name" | "age"keyof ...…
-
day02
目录 类型 typeof的两种用法 class的用法类型一、字面量类型let str1 = 'Hello TS'const str2: 'Hello TS' = 'Hello TS'let age: 18 = 18function changeDirection(direction: 'up' | 'down' | 'left' | 'right') { console.log(direction)}// leftchangeDirection('left')二、枚举类型1、数...…
-
day01
目录 TS介绍 类型相关 TS新增类型 对象接口TS介绍1、js的超集 ts = 类型 + js,变量类型发生变化时js不会检查,ts会检查2、区别 ts是静态语言(编译时进行类型检查,可以更早发现错误)let age: number = 18// 这句代码报错age = '20'age.toFixed()js是动态语言(执行时进行类型检查,发现错误较晚)3、转化 ts 命令行工具(编译工具) 转为js 再执行 安装:npm i -g typescript 使用 tsc h...…
-
动静态库
目录 静态库 动态库-iOS静态库和动态库详解-iOS之深入解析静态库和动态库静态库.o文件的合集,是编译后的产物,在链接阶段会被打包进mach-O可执行文件动态库是多个.o文件,链接后的产物,不会被打包进mach-O可执行文件,只会把引用打包进mach-o(rPath/frameworks/xxxx.framework)在app启动时根据引用通过dyld加载进内存,所以过多的动态库会影响app的启动时间静态库可以依赖静态库(一块打包进了mach-o) 静态库可以依赖动态库...…
-
8.Hmap
目录 头文件查找 Swift和module HeaderMap vfs头文件查找一、.m文件在编译的时候如何查找其使用的头文件?第一轮:先在.m的同目录下查找 1、查找是否有modulemap文件,如果有就以module的形式引入(modulemap文件内配置了对应了.h文件)2、编译选项是否配置了module文件,module的方式3、然后看是不是framework(后边讲)4、是否有headermap文件,headermap文件内若配置的是头文件的具体路径,copy的方式, 若...…
-
7.头文件和PCH
目录 快速开始 PCH文件 编译流程 module快速开始一、pch1、include 和 import 的区别?import = include + #pragma once2、头文件是如何找到的 完整路径 = header_search_path + viewcontroller.h3、pch文件的原理 pch文件在编译阶段会生成ast产物,然后被复制到所有的.m文件中 节省了重复编译的时间,但重复copy的时间没有缩短还增加了二、编译流程编译器前端clang:词法分析(...…
-
6.组件二进制(下)
目录 快速开始 插件介绍 编译 制作xcframwork 创建私有库使用二进制源快速开始插件介绍部分仅做了解(第一段视频)组件二进制的这三节课信息量很大,命令行工具、cocoapods插件,最终怎么使用也没太明白需要静下心来好好研究老师的ruby代码,编译部分根据第二段视频讲解的思路去一点一点的研究二进制制作的思路: 1、生成app工程 2、获取多平台多架构的编译产物 3、制作xcframework 4、制作和使用二进制源插件介绍一、插件如何调试cocoapods在执行命令的...…
-
5.组件二进制(中)
目录 快速开始 制作二进制包步骤 cocoapods-project-gen快速开始一、制作二进制的步骤1、copy一份源码到一个新目录,不要对源码直接修改2、生成工程:使用工具cocoapods-project-gen 将网络引入和本地引入两种方式做了结合3、编译工程4、制作二进制包xcframework,上传到文件服务器5、配置podfile文件,使用二进制pod lib lint 做了哪些事? 从远程拉取代码 按照指定的平台分别生成xcode工程 对所有平台app进行编译 编...…
-
4.组件二进制(上)
目录 快速开始 索引速度 组件二进制 Gem制作快速开始一、索引速度索引完成后可以更好的使用xcode:代码补全、跳转到定义 索引做了哪些事:词法分析、语法分析、语义分析、建立符号表,建立引用关系 xcode自定义了clang,所以才有indexing,我们也可以在配置项中关掉indexing来提高编译速度 build-setting搜索:COMPILER_INDEX_STORE_ENABLE二、组件二进制使用组件二进制:1、提高编译速度。2、保护源代码 如何使用:在podfil...…