- 博客(39)
- 收藏
- 关注
原创 Flutter - 集成三方库:日志(logger)
默认的过滤器(DevelopmentFilter)在debug模式下可以打印所有level >= Logger.level的日志,在Release模式下所有日志被忽略。比如设置Release模式下只打印warning级别以上(含warning)的日志。Logger构造函数有个。参数可以指定输出格式。
2025-05-16 16:53:10
583
原创 Flutter - UIKit开发相关指南 - 线程和异步
Dart采用单线程执行模型,支持Isolates(在另一个线程上运行Dart代码)、事件循环和异步编程。Flutter的事件循环相当于iOS的主线程上的RunLoop。在执行I/O密集型的操作时,比如访问磁盘或网络,可以使用async/await,但是当在执行CPU计算密集型的操作时,则应该将其移到独立线程(Isolate)以避免阻塞事件循环。首次启动需要同意网络权限,看报错是DNS找不到域名,所以还是网络问题,在手机上授权后再重新用flutter运行工程能恢复。因为要请求网络,所以添加http模块。
2025-05-14 10:18:51
387
原创 Flutter - UIKit开发相关指南 - 控制器,主题,表单
Flutter要使用自定义的字体可以在文件中添加fonts:fonts:Text(),
2025-05-12 15:35:29
753
原创 Flutter - UIKit开发相关指南 - 导航
go_router是一个用于Flutter声明式的路由包,使用Router API为不同屏幕间进行切换。在UIKit中使用URL scheme来实现。Flutter可以使用类似。在push方法中直接用builder跳转,而不需要通过路由表。文件中添加go_router依赖包,并下载。Flutter中通过。Flutter中使用如下代码实现。是一个应用中屏幕或页的抽象,是一个Widget来管理这些。添加允许打开短信和电话的配置。在iOS上约等于如下的实现。可以粗略的认为是一个。
2025-05-11 11:54:34
586
原创 Flutter - UIKit开发相关指南 - 概览
在UIKit中通过继承UIView来自定义组件,而在Flutter中定义自定义组件通常使用组合的方式@overridebody: Center(child: CustomButton("自定义按钮")),/// 自定义按钮@override。
2025-05-10 23:18:30
1189
原创 Flutter 布局
此外不能直接看到的也是 widget,例如用来排列、限制和对齐可见 widget 的行、列和网格。对应 Material 应用,可以使用 Scaffold widget,它提供默认的 banner 背景颜色,还有用于添加抽屉、提示条和底部列表弹窗的 API。只有一个子项,这个子项可以是列,行,列表,网格或者其它支持多个子项的。,它可以很轻松的创建一个包含三行文本以及可选的行前和行尾图标的行。是从上往下延伸的,所以主轴就是垂直方向,交叉轴就是水平方向的。,当内容大于自己的渲染框时,就会自动支持滚动。
2025-05-06 11:52:46
1103
原创 Flutter - 概览
Flutter中的一切都是Widget,Widget分为有状态和无状态两种,在 Flutter 中每个页面都是一帧,无状态就是保持在那一帧,而有状态的 Widget 当数据更新时,其实是创建了新的 Widget,只是 State 实现了跨帧的数据同步保存。在虚拟机使用新的字段和函数更新类后,Flutter框架自动重新构建widget。,可以重写这个方法中配置动画或准备订阅平台相关的服务,重写方法开始要先调用。方法来执行清理操作,比如取消定时器,取消订阅,同样在重写方法中也要先调用。取决于是否要管理状态。
2025-05-02 18:37:42
1283
1
原创 iOS - 音频: Core Audio - 播放
Properties的key一般是个常量值,比如 kAudioFilePropertyFileFormat或者kAudioQueueDeviceProperty_NumberChannels.类型中的stream只是表示播放的概念,这里定义的就是iOS音频格式的描述。在回调方法中读取音频文件并将数据入队供系统的队列播放。我加载的是一个44.1kHz,双声道的mp3文件。: 一个声道采样的值,采样率定义了每秒从。回调函数实现分两步: 注册 && 回调。: 一个或多个连续的帧。: 一个时间常量内的。
2025-04-29 08:59:21
1017
原创 Flutter 环境搭建 (Android)
但里面说要重新删除cache,因为昨天网问题,下载非常慢,我原来下过,大部分是不用删,不删改代码执行会报错,主要是因为有哈希校验,所以看了下,把几个大的(artifacts,dark-sdk,flutter_web_sdk)和相关的.stamp文件保留,然后执行会快很多。没明白为什么会去下34的build-Tools,本地已经安装的是35和36,命令会下失败,手动下载34后放到sdk对应目录下。使用Android Studio界面创建虚拟机,下载镜像,还是网络问题,一直失败,还是通过浏览器下载放到。
2025-04-25 18:20:35
1188
原创 Flutter 环境搭建
再重新运行但是还是报相同的错误,使用Xcode工程现在是可以运行在手机上,所以问题应该是出在Flutter驱动Xcode的过程,因为跨平台。我的环境是macOS + iOS,所以选择了参考1的文档,下载了flutter_macos_3.29.3-stable.zip。选择iPhone(13.4.1)时报错了,看错误是证书问题,用Xcode打开Flutter里的Xcode工程。文档中要WIFI调试,这点目前不关键,然后iPhone Xcode相关的配置文档中也已经详细的写了。启动系统会弹2个告警的弹窗。
2025-04-23 10:33:36
1068
原创 音视频学习 - MP3格式
每个帧都有一个帧头,长度是四个字节,帧后面可能有2字节的CRC校验,取决于帧头的第16位,为0则无校验,为1则有校验,后面是可变长度的附加信息,对于标准的MP3文件来说,其长度是32字节,紧接其后的是压缩的声音数据,当解码器读到此处时就进行解码了。MP3全称为MPEG Audio Layer 3,它是一种高效的计算机音频编码方案,它以较大的压缩比将音频文件转换成较小的扩展名为.mp3的文件,基本保持源文件的音质,MP3是ISO/MPEG标准的一部分,是压缩时每一帧的长度,包括帧头的4个字节。
2025-04-22 17:01:54
920
原创 学习笔记: Mach-O 文件
结构决定性质,性质决定用途”。如果不了解结构,是很难真正理解的。通过一个示例的可执行文件了解Mach-O文件的结构。
2025-04-19 16:48:55
712
原创 音视频学习 - ffmpeg 编译与调试
来自参考1库介绍avcodec音视频编解码核心库avformat音视频容器格式的封装和解析avutil核心工具库swscal图像格式转换的模块swresample音频重采样avfilter音视频滤镜库,如视频加水印、音频变声avdevice输入输出设备库,提供设备数据的输入与输出,和硬件设备交互。
2025-04-17 16:20:44
995
原创 学习笔记 - Swfit 6.1 - 语法概览
该等级类型的值可以传给子程序作为参数,可以从子程序里返回,可以赋给变量。大多数程序设计语言里,整型、字符类型等简单类型都是一级的。该等级类型的值可以传给子程序作为参数,但是不能从子程序里返回,也不能赋给变量。类型:规定了变量可以取的值得范围,以及该类型的值可以进行的操作。值是实际值,而不仅仅是编写其原始值的另一种方式。事实上,在没有有意义的原始值的情况下,可以不必提供原始值。这是种默认值的写法,更健壮的处理当数据可能为。可以对方法,函数,类,枚举,结构体应用泛型。函数是一种特殊的闭包,有名字的闭包(
2025-04-15 14:56:55
628
原创 Vue 学习笔记 - 内置组件 - Transition
也可以向传递以下的props来指定自定义的过渡class传入的class会覆盖相应阶段的默认class名。这个功能在想要集成其它的第三方CSS动画库时非常有用-- 假设你已经在页面中引入了 Animate.css -->
2025-04-14 10:29:19
635
原创 Vue学习笔记 - 插件
插件(Plugins)是一种能为Vue添加全局功能的工具代码/* 可选的选项 */})一个插件可以是一个拥有install()方法的对象,也可以直接是一个安装函数本身。安装函数会接收到安装它的应用实例和传递给app.use()的额外选项作为参数:对象的写法// 配置此应用函数的写法// 插件逻辑// 你可以在这里添加全局方法、指令、混入等// 示例:添加全局方法');...插件没有严格定义的使用范围,但是插件发挥作用的常见场景主要包括以下几种通过和注册一到多个全局组件或自定义指令。
2025-04-12 16:28:14
654
原创 Vue学习笔记 - 深入组件 - 注册,透传Attribute,异步组件
Vue的文档很清晰,导致这部分大多数是"转译"下原来的文档,价值寥寥,只能算熟悉框架了…耐心点,慢慢来。
2025-04-10 09:35:15
397
原创 Vue学习笔记 - 互动教程 02
如何操作列表通过computed选项可以关联其它的状态了解了Vue模板的生命周期通过watch选项在其它状态变化时触发指定操作如何引入外部组件props(父组件传子组件),Emits(子组件回传父组件),slot(父组件传子组件)
2025-04-09 08:08:09
955
原创 Vue学习笔记 - 安装与环境搭建
Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。
2025-04-07 07:32:36
1165
原创 Flask学习笔记 - 数据库
Flask 提供了多种方式来与数据库进行交互,包括直接使用 SQL 和利用 ORM(对象关系映射)工具,如 SQLAlchemy。SQLAlchemy 是一个强大的 ORM 库,可以简化数据库操作,通过 Python 对象与数据库表进行交互。Flask-Migrate 是一个用于数据库迁移的扩展,基于 Alembic,可以帮助你管理数据库的版本控制。SQLAlchemy 提供了丰富的查询功能,可以通过查询对象来执行各种查询操作。模型是数据库表的 Python 类,每个模型类代表数据库中的一张表。
2025-04-06 08:03:42
735
原创 Flask学习笔记 - 表单
是csrf_token未匹配的原因,对比了其它几种写法,未发现有什么特殊操作,其中提到清理浏览器缓存的操作,我一直都是使用Trae IDE自带的浏览器,抱着试一试的心态。用Chrome测试了下,是正常的!在Trae起的web服务和主机起的web服务,应该是有差别的。我又问了Trae里的AI,看能不能告诉我怎么清理自带的浏览器,然后它的回答,始终讲不到点上。一开始以为是html中的name和email是小写,导致提交时找不到元素,然而还是不对。要求name和email非空,且email要符合格式。
2025-04-05 08:58:43
1253
原创 Flask学习笔记 - 模板渲染
Flask 使用 Jinja2 模板引擎来渲染这些模板,将 Python 数据插入到 HTML 中,从而生成最终的网页。模板引擎来处理模板渲染。模板渲染允许你将动态内容插入到 HTML 页面中,使得应用能够生成动态的网页内容。自动转义:Jinja2 默认会对模板中的变量进行自动转义,防止 XSS 攻击。Jinja2 提供了多种控制结构,用于在模板中实现条件逻辑和循环。过滤器的写法与shell中的管道一样都是用"|"来表示。过滤器用于在模板中格式化和处理变量数据。模板是包含占位符的 HTML 文件。
2025-04-04 08:40:20
779
原创 Flask学习笔记 - 视图函数
继续学习…# 接收 - URL参数from flask import request # 接收 - URL参数 @app . route('/greet/<name>') def greet(name) : return f'Hello, {name }!
2025-04-03 08:32:24
443
原创 ReactNative 入门体验
环境macOS Mojave Version 10.14.3Xcode 10.1iPhone 5s 10.0.1node v11.10.0npm 6.7.0React Native 0.58react 16.6.3新建ReactNative项目brew install nodebrew install watchman安装React Native命令行工具npm in...
2019-02-22 23:36:14
1657
原创 iOS崩溃日志分析
环境macOS Mojave 10.14.3Xcode10.1iPhone6S 10.0.1获得崩溃日志方式一:Xcode菜单 > Window > Devices and Simulators选择设备并查看设备日志(View Device Logs)方式二:手机设置 > 隐私 > 诊断与用量 > 诊断与用量数据崩溃日志的结构头部(Head...
2019-02-09 09:57:54
4936
原创 Charles HTTP抓包原理
前言: Web代理服务器来自参考链接2对客户端/浏览器来说Web代理服务器是服务器对服务器来说Web代理服务器是客户端环境WireSharkCharlesmacOS 10.13.6解释根据参考链接1中的这段话Web proxy serversWeb proxies forward HTTP requests. The request from the client ...
2019-01-09 17:06:08
1591
原创 Clang学习历程 编译过程-词法分析
前言《编译原理》中提到编译器的第一个步骤是词法分析(Lexical Analysis)或扫描。词法分析器读入组成源程序的字符流,并且将它们组织成为有意义的词素(lexeme)的序列。对于每个词素,词法分析产生如下形式的词法单元(token)作为输出:&lt;token-name,attribute-value&gt;token-name 是一个语法分析步骤要使用的抽象符号att...
2018-12-28 15:41:13
4188
原创 Clang学习历程 概述
介绍ClangClang是LLVM(Low Level Virtual Machine)项目提供的工具链中的编译器的前端部分LLVM项目是模块化和可重用的编译器和工具链技术的集合,LLVM的一大特色就是,有着独立的、完善的、严格约束的中间代码表示。这种中间代码,就是LLVM的字节码,是LLVM抽象的精髓,前端生成这种中间代码,后端自动进行各类优化分析,让用LLVM开发的编译器,都能用上最先见...
2018-12-28 15:39:46
6426
原创 ObjC Runtime 中 Weak 属性的实现 (中)
导语在上一篇中简单分析了 Weak 属性是如何被存储,获取和销毁的,其中的 SideTable 结构体当做黑盒进行处理。本文尝试对 SideTable 的结构进行一些分析。观察struct SideTable { spinlock_t slock; RefcountMap refcnts; weak_table_t weak_table; SideTable() {
2017-06-05 07:19:33
1249
原创 ObjC Runtime 中 Weak 属性的实现 (上)
前言OC 中的 weak 属性是怎么实现的,为什么在对象释放后会自动变成 nil?本文对这个问题进行了一点探讨。环境 mac OS Sierra 10.12.4 objc709参考答案搜索后发现runtime 如何实现 weak 属性给出了一个参考答案。 runtime 对注册的类, 会进行布局,对于 weak 对象会放入一个 hash 表中。 用 weak 指向的对象内存地址作为
2017-05-30 08:20:04
4024
1
原创 Masonary-简化自动布局
Masonary的价值在iOS中,AutoLayout是一种灵活且高效的布局视图的方法,它通过约束简单明确的实现了多屏适配的功能,但是如果不用storyboard而使用,纯代码开发时,使用NSContraints就显得有些繁琐了,而Masonary就是创建自动布局的轻量级框架。如何安装新建一个xcode工程在Podfile中 添加 pod ‘Masonry’ (提示:最好在vim下编辑,关闭中文
2015-06-11 00:18:26
1537
原创 OC的数据传递-Block,代理,通知,KVO
在开始之前,先贴一张图片,表明为什么需要将Block,代理,通知和KVO放在一起。由上图可知,Block,代理,通知和KVO都能实现数据传递的功能,可以根据不同的情景选择合适的方式Block声明// 使用typedef为block变量定义别名// 解释:将一个返回值为double,参数为int的block取一个Rename的别名typedef double (^Rename)(int);//
2015-06-09 07:58:41
1441
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人