- 博客(45)
- 收藏
- 关注
原创 Flutter - 原生交互 - 相册
选择多张照片在iOS平台上只在14+才生效,用的是PhotosUI.framework中的PHPicker,因为手上测试机是13.4.1设备一直无法多选图片,查看源码。Xcode工程的GeneratePluginRegistrant新增了对应的注册代码。在上一个界面接收从相册中选择的图片并刷新界面。中没有对limit做任何处理代码。在Flutter中可以使用。更新Xcode的pod依赖。插件实现从相册中获取图片。flutter中访问相册。可以从相册获取视频和照片。可以从相册获取视频文件。
2025-06-25 09:03:20
368
原创 Flutter - 原生交互 - 相机Camera - 曝光,缩放,录制视频
使用Camera组件中的cameraController.startVideoRecording()方法来开始拍摄视频,然后用cameraController.stopVideoRecording()方法可以结束视频。系统的相机可以双指进行缩放操作,在Flutter中可以在GestureDetector来实现。因为是点击的是同一个按钮进行拍照和视频,一些元素的控制。录制结束后调用_startVideoPlayer方法。,使用该组件控制曝光量,组件的样式是iOS上的。方法可以锁定相机的方向。
2025-06-16 18:01:26
431
原创 Flutter - 原生交互 - 相机Camera - 02
新建take_photo.dart文件,输入stf快捷创建一个有状态的Widget,命名为。通过更新CameraController对象的description参数来切换摄像头。使用CameraController的takePicture()方法实现拍照功能。使用CameraController对象的setZoomLevel方法设置焦距。使用CameraController对象的setFlashMode方法。使用CameraPreview类实现相机的预览。使用Align设置缩略图靠左。
2025-06-11 16:34:05
1105
1
原创 Flutter - 原生交互 - 相机Camera - 01
原生插件将方法的channel(约定的字符串),回调设置给Flutter原生平台代码(C++ && OC)Flutter的Dart层发送消息并传递channel,Flutter根据channel找到设置的回调(Dart -> C++ && OC),然后执行原生插件提供的方法(C++ && OC)获取执行结果并返回给Flutter的原生平台代码(C++ && OC),再发送给Dart代码(C++ && OC -> Dart)
2025-05-31 23:13:00
2127
2
原创 Flutter - 集成三方库:数据库(sqflite)
数据库的增删改查可能会失败,导致数据与预期的不一致,为了保证在执行前后的数据一致性,引入了事务。原来有成功过,后面发现一直都会有问题,前段时间突然不行,在长时间运行后就会报这个错误,但是单独在VSCode外部用flutter run命令能正常运行。然后发现VSCode的代理有这样的说明,若未设置则会继承环境变量中的。中,所以VSCode的默认会用代理,但是运行在真机上,手机没有代理,应该是这样影响了网络环境。随着功能迭代,需要对数据库的表结构进行修改时,比如增加新字段时,需要对表的结构进行更新。
2025-05-20 17:04:12
643
原创 Flutter - 集成三方库:日志(logger)
默认的过滤器(DevelopmentFilter)在debug模式下可以打印所有level >= Logger.level的日志,在Release模式下所有日志被忽略。比如设置Release模式下只打印warning级别以上(含warning)的日志。Logger构造函数有个。参数可以指定输出格式。
2025-05-16 16:53:10
800
1
原创 Flutter - UIKit开发相关指南 - 线程和异步
Dart采用单线程执行模型,支持Isolates(在另一个线程上运行Dart代码)、事件循环和异步编程。Flutter的事件循环相当于iOS的主线程上的RunLoop。在执行I/O密集型的操作时,比如访问磁盘或网络,可以使用async/await,但是当在执行CPU计算密集型的操作时,则应该将其移到独立线程(Isolate)以避免阻塞事件循环。首次启动需要同意网络权限,看报错是DNS找不到域名,所以还是网络问题,在手机上授权后再重新用flutter运行工程能恢复。因为要请求网络,所以添加http模块。
2025-05-14 10:18:51
452
原创 Flutter - UIKit开发相关指南 - 控制器,主题,表单
Flutter要使用自定义的字体可以在文件中添加fonts:fonts:Text(),
2025-05-12 15:35:29
798
原创 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
608
原创 Flutter - UIKit开发相关指南 - 概览
在UIKit中通过继承UIView来自定义组件,而在Flutter中定义自定义组件通常使用组合的方式@overridebody: Center(child: CustomButton("自定义按钮")),/// 自定义按钮@override。
2025-05-10 23:18:30
1274
原创 Flutter 布局
此外不能直接看到的也是 widget,例如用来排列、限制和对齐可见 widget 的行、列和网格。对应 Material 应用,可以使用 Scaffold widget,它提供默认的 banner 背景颜色,还有用于添加抽屉、提示条和底部列表弹窗的 API。只有一个子项,这个子项可以是列,行,列表,网格或者其它支持多个子项的。,它可以很轻松的创建一个包含三行文本以及可选的行前和行尾图标的行。是从上往下延伸的,所以主轴就是垂直方向,交叉轴就是水平方向的。,当内容大于自己的渲染框时,就会自动支持滚动。
2025-05-06 11:52:46
1160
原创 Flutter - 概览
Flutter中的一切都是Widget,Widget分为有状态和无状态两种,在 Flutter 中每个页面都是一帧,无状态就是保持在那一帧,而有状态的 Widget 当数据更新时,其实是创建了新的 Widget,只是 State 实现了跨帧的数据同步保存。在虚拟机使用新的字段和函数更新类后,Flutter框架自动重新构建widget。,可以重写这个方法中配置动画或准备订阅平台相关的服务,重写方法开始要先调用。方法来执行清理操作,比如取消定时器,取消订阅,同样在重写方法中也要先调用。取决于是否要管理状态。
2025-05-02 18:37:42
1351
1
原创 iOS - 音频: Core Audio - 播放
Properties的key一般是个常量值,比如 kAudioFilePropertyFileFormat或者kAudioQueueDeviceProperty_NumberChannels.类型中的stream只是表示播放的概念,这里定义的就是iOS音频格式的描述。在回调方法中读取音频文件并将数据入队供系统的队列播放。我加载的是一个44.1kHz,双声道的mp3文件。: 一个声道采样的值,采样率定义了每秒从。回调函数实现分两步: 注册 && 回调。: 一个或多个连续的帧。: 一个时间常量内的。
2025-04-29 08:59:21
1122
原创 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
1307
原创 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
1137
原创 音视频学习 - MP3格式
每个帧都有一个帧头,长度是四个字节,帧后面可能有2字节的CRC校验,取决于帧头的第16位,为0则无校验,为1则有校验,后面是可变长度的附加信息,对于标准的MP3文件来说,其长度是32字节,紧接其后的是压缩的声音数据,当解码器读到此处时就进行解码了。MP3全称为MPEG Audio Layer 3,它是一种高效的计算机音频编码方案,它以较大的压缩比将音频文件转换成较小的扩展名为.mp3的文件,基本保持源文件的音质,MP3是ISO/MPEG标准的一部分,是压缩时每一帧的长度,包括帧头的4个字节。
2025-04-22 17:01:54
979
原创 学习笔记: Mach-O 文件
结构决定性质,性质决定用途”。如果不了解结构,是很难真正理解的。通过一个示例的可执行文件了解Mach-O文件的结构。
2025-04-19 16:48:55
762
原创 音视频学习 - ffmpeg 编译与调试
来自参考1库介绍avcodec音视频编解码核心库avformat音视频容器格式的封装和解析avutil核心工具库swscal图像格式转换的模块swresample音频重采样avfilter音视频滤镜库,如视频加水印、音频变声avdevice输入输出设备库,提供设备数据的输入与输出,和硬件设备交互。
2025-04-17 16:20:44
1050
原创 学习笔记 - Swfit 6.1 - 语法概览
该等级类型的值可以传给子程序作为参数,可以从子程序里返回,可以赋给变量。大多数程序设计语言里,整型、字符类型等简单类型都是一级的。该等级类型的值可以传给子程序作为参数,但是不能从子程序里返回,也不能赋给变量。类型:规定了变量可以取的值得范围,以及该类型的值可以进行的操作。值是实际值,而不仅仅是编写其原始值的另一种方式。事实上,在没有有意义的原始值的情况下,可以不必提供原始值。这是种默认值的写法,更健壮的处理当数据可能为。可以对方法,函数,类,枚举,结构体应用泛型。函数是一种特殊的闭包,有名字的闭包(
2025-04-15 14:56:55
678
原创 Vue 学习笔记 - 内置组件 - Transition
也可以向传递以下的props来指定自定义的过渡class传入的class会覆盖相应阶段的默认class名。这个功能在想要集成其它的第三方CSS动画库时非常有用-- 假设你已经在页面中引入了 Animate.css -->
2025-04-14 10:29:19
663
原创 Vue学习笔记 - 插件
插件(Plugins)是一种能为Vue添加全局功能的工具代码/* 可选的选项 */})一个插件可以是一个拥有install()方法的对象,也可以直接是一个安装函数本身。安装函数会接收到安装它的应用实例和传递给app.use()的额外选项作为参数:对象的写法// 配置此应用函数的写法// 插件逻辑// 你可以在这里添加全局方法、指令、混入等// 示例:添加全局方法');...插件没有严格定义的使用范围,但是插件发挥作用的常见场景主要包括以下几种通过和注册一到多个全局组件或自定义指令。
2025-04-12 16:28:14
684
原创 Vue学习笔记 - 深入组件 - 注册,透传Attribute,异步组件
Vue的文档很清晰,导致这部分大多数是"转译"下原来的文档,价值寥寥,只能算熟悉框架了…耐心点,慢慢来。
2025-04-10 09:35:15
423
原创 Vue学习笔记 - 互动教程 02
如何操作列表通过computed选项可以关联其它的状态了解了Vue模板的生命周期通过watch选项在其它状态变化时触发指定操作如何引入外部组件props(父组件传子组件),Emits(子组件回传父组件),slot(父组件传子组件)
2025-04-09 08:08:09
978
原创 Vue学习笔记 - 安装与环境搭建
Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。
2025-04-07 07:32:36
1199
原创 Flask学习笔记 - 数据库
Flask 提供了多种方式来与数据库进行交互,包括直接使用 SQL 和利用 ORM(对象关系映射)工具,如 SQLAlchemy。SQLAlchemy 是一个强大的 ORM 库,可以简化数据库操作,通过 Python 对象与数据库表进行交互。Flask-Migrate 是一个用于数据库迁移的扩展,基于 Alembic,可以帮助你管理数据库的版本控制。SQLAlchemy 提供了丰富的查询功能,可以通过查询对象来执行各种查询操作。模型是数据库表的 Python 类,每个模型类代表数据库中的一张表。
2025-04-06 08:03:42
777
原创 Flask学习笔记 - 表单
是csrf_token未匹配的原因,对比了其它几种写法,未发现有什么特殊操作,其中提到清理浏览器缓存的操作,我一直都是使用Trae IDE自带的浏览器,抱着试一试的心态。用Chrome测试了下,是正常的!在Trae起的web服务和主机起的web服务,应该是有差别的。我又问了Trae里的AI,看能不能告诉我怎么清理自带的浏览器,然后它的回答,始终讲不到点上。一开始以为是html中的name和email是小写,导致提交时找不到元素,然而还是不对。要求name和email非空,且email要符合格式。
2025-04-05 08:58:43
1277
原创 Flask学习笔记 - 模板渲染
Flask 使用 Jinja2 模板引擎来渲染这些模板,将 Python 数据插入到 HTML 中,从而生成最终的网页。模板引擎来处理模板渲染。模板渲染允许你将动态内容插入到 HTML 页面中,使得应用能够生成动态的网页内容。自动转义:Jinja2 默认会对模板中的变量进行自动转义,防止 XSS 攻击。Jinja2 提供了多种控制结构,用于在模板中实现条件逻辑和循环。过滤器的写法与shell中的管道一样都是用"|"来表示。过滤器用于在模板中格式化和处理变量数据。模板是包含占位符的 HTML 文件。
2025-04-04 08:40:20
822
原创 Flask学习笔记 - 视图函数
继续学习…# 接收 - URL参数from flask import request # 接收 - URL参数 @app . route('/greet/<name>') def greet(name) : return f'Hello, {name }!
2025-04-03 08:32:24
479
原创 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
1680
原创 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
5292
原创 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
1604
原创 Clang学习历程 编译过程-词法分析
前言《编译原理》中提到编译器的第一个步骤是词法分析(Lexical Analysis)或扫描。词法分析器读入组成源程序的字符流,并且将它们组织成为有意义的词素(lexeme)的序列。对于每个词素,词法分析产生如下形式的词法单元(token)作为输出:&lt;token-name,attribute-value&gt;token-name 是一个语法分析步骤要使用的抽象符号att...
2018-12-28 15:41:13
4816
原创 Clang学习历程 概述
介绍ClangClang是LLVM(Low Level Virtual Machine)项目提供的工具链中的编译器的前端部分LLVM项目是模块化和可重用的编译器和工具链技术的集合,LLVM的一大特色就是,有着独立的、完善的、严格约束的中间代码表示。这种中间代码,就是LLVM的字节码,是LLVM抽象的精髓,前端生成这种中间代码,后端自动进行各类优化分析,让用LLVM开发的编译器,都能用上最先见...
2018-12-28 15:39:46
6796
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人