有关于 Flutter Texture 的部分的相关资料都比较少,要么就是封装视频播放器的大佬,要么就是闲鱼,声网这些团队
有关于 Flutter Texture 的部分的相关资料都比较少,要么就是封装视频播放器的大佬,要么就是闲鱼,声网这些团队
上次开源了一个简易的终端模拟器,我也知道并不是标准的,但自己也一直在用,然后就发现了一些棘手的问题,就又跑去研究了一些完整终端的源码,termux,Android Terminal,最后成功的将他们的原理在 Flutter 实现
其实这个源也可能会是你学习使用 dart:ffi 的一个例子,其中用到的 char **,也就是二级指针的传递在也很少能在官方的 example 中也很难找到直接的例子,也是我处理这种类型遇见的比较麻烦的坑,主要就是没有案例。我将 termux 的 C 语言部分完全重构以供 Flutter 使用,由于 UI 框架使用的 Flutter 经过测试可以在 Macos 上跑起来!!!
我是首先去看了官方的前两个 example,都上手来跑了,然后对应理解每一部分,dart:ffi 的例子是在 pc 端,所以一系列的编译也是在 pc 端,可我是安卓端的 app,于是就遇见了第一个坑,交叉编译.c,.h 到 so 库
在 Android 原生中执行 shell 可以使用 Runtime 的这些类,更多的会选择第三方开发者封装好的库来调用 shell,完整的终端模拟器,如 termux,Android Terminal 等都涉及到一些 jni 通信,C 语言中 system 函数可以执行命令行命令,python 中则是 os.system 函数,各类语言都有执行命令行的函数与方法,在 dart 中,我们通过 Process 类来实现这些功能
写这个的一切起因都得从我某天切换了酷安 App 的夜间模式说起,看个 Gif,忽略图中其他无关项。
这种的动画在 awesome-Flutter 上好像见到过,但是记得只是类似,有一个 App 的首次引导页跟这个有点像,不过那个是在一个 PageView 切换的时候的动画。上图的酷安 App 是原生应用,可以看到我在第三次切换主题的时候滑动了一个横向的类似于 Flutter ListView 的东西,再次点击切换主题,ListView 的状态变化了,所以我怀疑酷安是用 StartActivity 的方式(太久没碰原生 UI 了,所以只是猜测)
如何让 Flutter 程序可以跨应用的更改其他应用的状态呢,先看原生如何实现,其次再用 MethodChannel 对接 Flutter 就行了,所以此篇更多的是安卓原生开发的知识,提到原生开发跨应用发送消息或者更改状态,有两个东西能够实现这样的需求,一个是 ContentObserver,另一个就是 Broadcast