最近 Flutter
发布到了 1.9
版本了,已经将 flutter_web
合并到了主分支,所以就将我之前开始的 web
项目也升级到 1.9
吧,正好也感受一下新版本的 Flutter
。
我使用的是 1.9.7
之前的 pubspec.yaml
是这样的:
|
|
初九:素履,往无咎。
最近 Flutter
发布到了 1.9
版本了,已经将 flutter_web
合并到了主分支,所以就将我之前开始的 web
项目也升级到 1.9
吧,正好也感受一下新版本的 Flutter
。
我使用的是 1.9.7
之前的 pubspec.yaml
是这样的:
|
|
最近使用 Flutter
实现了一个小的项目,分享一下;
运行环境:wangpos, 实际为 Android-5.1.1
这个项目是重构的一个已经存在的项目,之前的项目使用 Android 原生 + Webview
混合开发的方式实现;
缺点如下:
1,需要嵌入浏览器内核到 apk
,导致安装包的大小增加了 n*10M
;
2,嵌入的浏览器内核对 css
的支持并不是特别完美,特别是一些新的特性,导致兼容性有一些问题;
3,代码相当于 public
的,意味着一些敏感信息写在代码里面会有顾虑;
优点:
1,可以无感知的更新版本;
正好 Google
正式发布了 Flutter
,似乎上面的缺点可以完美解决,并保留优点(当时 Google
明确表示可以支持热更新,可惜后来叫停了,感觉上了贼船),于是决定使用 Flutter
来重写;
下面介绍一下具体的实现:
项目的状态管理是应该优先考虑的问题,如果状态管理没有考虑好,我们的项目往往会随着规模的扩大,复杂度的提升,慢慢的变得混乱,腐败;官方推荐的方式是 Bloc(Bussiness Logic Component)
,同时也查看了其它的一些实现,比如 fish-redux
,最后还是发现 Bloc
的学习曲线比较平缓,借助于 Dart
的 Stream
和 Sinks
,个人可以不借助第三方的框架或者 package
轻松的实现(实际用的是 RxDart, 一个对 Stream
和 Sinks
的封装);
就像上图所示,widget
可以发送指令到 Bloc
, 并且监听 Sream
获取状态变化,这样我们就可以很容易的将 业务逻辑
和 UI
分离开
more >>
最近使用 flutter_svg
这个 package
加载 svg
图片:
https://github.com/dnfield/flutter_svg.git
一开始的使用还算顺利,直到遇到了一个需求,需要设置 Container
的 DecorationImage
,但是 DecorationImage
的 image
参数需要一个 ImageProvider
:
使用正常图片是没有问题的,但是如果能支持svg
的话岂不是很美,所以研究了一下 fluter_svg
这个 package,发现并没有提供相关的方法来调用,而且网上也没有相关的实现,那就只能自己动手,丰衣足食了。
先看看 ImageProvider
是个什么东东:
是个 abstract class
,似乎是个不错的信号,这意味着只要 extends ImageProvide
就可以作为参数传递进去了。那就先看看 Image
这个 Widget
是怎么实现的吧:
最近 Flutter 刚刚宣布可以支持 web 开发,迫不及待的想要尝尝鲜,正好最近有开发一个网站的计划,直接开始吧。
安装 flutter_web 构建工具:
这里有个坑,会出现 webdev 版本 与 flutter 版本 不匹配的情况,可以重新激活一下指定版本:
flutter_web
这里是官方 flutter_web 的 GitHub 地址,我们把这个项目 clone 到本地:
访问 :
就可以看到 hello world! 的页面了。
那么就开始新建一个项目吧,官方推荐 VS Code 和 IntelliJ 创建项目,鉴于之前刚刚从 VS Code 脱坑,不想折腾,想使用 command 直接创建,奈何没有找到方式,官方貌似也没有相关的说明,那就将 GitHub 上的 hello world 拿过来开始吧,我的项目名称叫 nishihouziqinglaidedoubima_fe(哈哈:你是猴子请来的逗比吗):
最近 3D 打印机的价格算是比较亲民了,于是入手了一台两千元以内的 3D 打印机,刚刚开始的时候踩了很多的坑,导致浪费了大量的时间和精力,这里分享出来希望可以帮助更多志同道合的朋友。
打印时不出料,这是新手常犯的错误:
模型不能固定到平台上,导致打印失败:
模型顶部出现轮廓变平的情况:
相邻的两个不连续的高点存在严重的拉丝现象:
没有太多,但是以上每一条都是中肯的建议,希望可以有用。
最近实现了一个挺有意思的功能。这里来记录一下。
需求:根据用户条件筛选出可用数据。
比如,有几条个人信息的数据,A用户想看到的数据是男性用户,B用户想看到的数女性用户,C用户想看到的是年龄大于30的女性用户,等等、、、
一开始的想法是,为每个用户对应个人信息字段添加一个标示或者多个标示,作为过滤条件。
貌似可以满足需求,等等,以上的每个用户的判断条件之间都是·与·的关系,如果是·或·的关系怎么办,比如用户想看到的数据是大于30岁的男性或者小于20岁的女性:
用多条数据来标示·或·的关系,貌似也可以。但是如果用户想看到的数据是大于30岁的男性与居住于北京小于40岁的女性或者小于20岁的女性(当然前面与的结果是空,但是不妨碍会有这种需求啊,变态有的是),这种方式就没办法满足了,冥思苦想没有解决方案,同事建议可以看看后缀表达式,一看果然是好东西,这个条件可以表达成为:
这个可读性好像比较差,用逗号隔开吧:
可以加上括号看看逻辑:
最近在做视频解码相关的工作,有一个功能需要将整个视频解码之后放到内存里面,经测试,一分钟的视频解码需要20s,不算太理想,考虑用多线程来实现。
基本思路是获取所有关键帧信息,然后开启不同的线程来从不同的关键帧开始解码。
1,获取所有关键帧信息,获取所有的关键帧时间戳,大约会花费0.2s:
有时候我们需要将大量的图片放到内存里面,但是又不想占用太多内存。比如实现进度条拖拽流畅的正播倒播,只能先把视频帧解码之后放到内存中才能实现。如果是原始图片大小,假设为1280*720的图片,4通道,我们可以简单估算一下时长一分钟帧率为24视频解码之后所占内存的大小:
632 MB 的内存对于PC端好像还可以接受,但是对于移动端来说就显得弥足珍贵了,如果对图片的质量要求不要太高,我们可以改变图片的宽高来实现节省内存的目的,比如宽高都变为1/4,就可以将内存占用将为原来的1/16,这可是相当可观的,四通道的图片在内存中是以RGBARGBARGBA…这种方式排列的,所以我们可以用如下方式改变图片的宽高:
当然你可以采用cv_resize,如果条件允许的话。
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true