Skip to main content

基于GetX的Flutter项目架构设计方案

· 11 min read

本文探讨的是一种基于 Flutter 进行全新 App 项目的开发模式,不涉及老的代码复用等问题。

关于在现有 Android 或 iOS 项目中接入 flutter 框架,这属于混合栈开发的内容,可以参考阿里巴巴的flutter boost的方案,或者企业微信的FlutterThrio方案。

本文假设读者已经基本熟悉 Flutter 的开发,并对主流的 Flutter 状态管理方案(Redux, Bloc, Provider 等)有一定的了解。

iOS 依赖注入库 Resolver 入门

· 10 min read

为什么需要依赖注入,则不在本文讨论范围中。

Why Resolver?

Swift 的依赖注入库有很多,比如 GitHub Star 数最多的Swinject,也有大厂开源的如 Uber 的Needle,百度的CarbonGraph, 其它的如Cleanse,以及本文介绍的Resolver

为什么技术选型时选择 Resolver? 最重要的一点是 Resolver 的接口设计非常简洁,能够适应各种依赖注入的场景。

我关注的技术大会

· 7 min read

最近年终总结需要写一些外训的项目,实在不知道咋写,就把我这几年都会一直保持关注的技术大会罗列了出来。

WWDC

苹果开发者大会,我已经连续关注 8 年了。按照惯例,苹果会在加州选择一个地方来举办直播,但这两年因为新冠疫情,改为线上发布会了。

有时候会在大会上发布一些硬件产品,但软件才是主角。

大会分为几天进行,第一天会有一个 Keynote 演讲,大概 2 小时左右,这个演讲里会介绍 macOS、iOS、watchOS、tvOS 等系统更新内容。

之后今天会连续发布各种开发类主题演讲,当然,我个人比较关注的是偏向 iOS 方向,比如新增的 Framework、API 变化、Swift 更新内容、Xcode 更内容等等。最重要的是会讲解一些开发实践,比如 2021 年的“Use async/await with URLSession”等。

另外,最近 3 年,苹果对视频增加了中文字幕,这对很多英文不是很好的同学来说就很给力了。

克制人性,穿越周期

· 4 min read

无数次的市场轮回都在说明一个问题,树不可能涨到天上去。然而,为什么那些最聪明的人,也会认为这次不一样呢?

这背后是那个古老的话题,人性的贪婪与恐惧。

时代变迁,但人性像山岳一样古老。人性的贪婪和恐惧,在投资中反复地上演。

对待风险的态度是所有钟摆式摆动中最强劲的一个。霍华德·马克斯将投资的主要风险归结为两个:亏损的风险和错失机会的风险。大幅消除其中任何一个都是有可能的,但二者是不可能被同时消除的。

当股价涨到最高点时,人性因为贪婪而面临亏损的风险;当股价跌到最低点时,人性又因为恐惧而面临错失机会的风险。只有克制自己的人性,才能尽可能地消除风险。

然而,克制人性并不容易,即便对于大师也是如此。

Flutter 解决iOS录制视频时前几帧黑屏的情况

· 2 min read

问题描述

官方的camera包 在录制视频时,第一次初始化后,前 100ms 左右的视频都是黑屏,第二次使用时没有这样的情况。

Google 一轮后,大部分回答是因为音频录制需要花时间准备,需要在startVideoRecording前调用prepareForVideoRecording操作来初始化 Audio Session,但是尝试过了,没有效果。

解决方案

在 stackoverflow 找到一个暴力的解决方案,直接丢弃这 100ms 的内容。在ios/Classes/CameraPlugin.m文件里修改如下代码即可:

-   _videoTimeOffset = CMTimeMake(0, 1);
- _audioTimeOffset = CMTimeMake(0, 1);
+ _videoTimeOffset = CMTimeMakeWithSeconds(1, 10);
+ _audioTimeOffset = CMTimeMakeWithSeconds(1, 10);

fork 了一份官方的代码,然后创建一个新的flutter-camera