易栈网-膘叔

浏览模式: 标准 | 列表 | 图文
flutter_launcher_icons的小坑

flutter_launcher_icons的小坑

先说一下,flutter_launcher_icons真是一个好插件,至少你不需要再额外为自己的APP准备图片,也不用单独下载什么app来生成图片,直接运行flutter pub run flutter_launcher_icons:main 即可

准备一张合适的PNG,该有的alpha通道,透明等都必须得有,否则生成出来的图片会有问题。
踩坑的问题是在android下,如果你配置文件中flutter_icon > android 的文件名,不是ic_launcher,OK,没问题,照样可以生成,打包后,图标也变成了你想要的icon,但,这时候会有另一个问题。
你会发现你的状态栏上,居然是默认的flutter的图片。为了解决这个问题,还是将 flutter_icon > android对应的值改为ic_launcher,然后 到 android > app > src > main > res目录下,把目录中非ic_launcher对应的图片删除。
然后flutter clean && flutter pub get && flutter run ,这时候你会发现,图标恢复正常了。
但是,在debug模式下(也就是开发模式,随便你怎么设置,在任务栏上的ICON,都是flutter自带的。估计我还是有 什么姿势不对?)
---
1、经过测试,不需要为android单独设置名字,直接android: true,就行了。
2、状态栏图标没有变的原因,还有一个可能确实是cache的问题,经过我重启,成正常ICON了
---
所以,上面的坑可能只是设置的问题,如果你也遇到了,可以尝试卸载APP,清理垃圾(会提示你删除应用缓存)、重启系统。也许问题就这样解决了。
利用qshell自动上传APK到七牛存储

利用qshell自动上传APK到七牛存储

在开发安卓的时候,因为还没有用什么第三方的工具,比如自动构建和自动上传,所以就想点办法了。比如我flutter run apk的时候,会构建android的文件,然后我打开七牛,上传到指定目录下。再到接口文档里改一下。。。一个自动更新就这样完成了。

听起来也不复杂,但对于我在没有使用第三方工具时,有没有再方便一点的办法呢?去七牛文案放了一下,有qshell的命令行,压缩包8M,解压后18M,看了一下命令行参数,发现用起来也方便
1、qshell account ak secret [name],可以将某个对应的账户先存下来
2、qshell buckets ,显示当前所有的bucket。。。开始我以为是listbuckets,结果这个是显示所有文件
3、qshell rput [bucket] [distname] [localname] --worker=10 ,有没有worker都无所谓,看了一下,没有明显的提升,而且就一个文件。。。本来是用qupload2的。结果默认没有进度,一直显示是二进制内容被读的情况,感觉无法适应。还是换成rput了。。
现在就方便了。。。flutter run apk && qshell rput [bucket] [distnam] build/...../release.apk ,直接上传。当然文件名要替换的,否则上传的时候rput 用--overwrite参数进行覆盖。
然后利用curl,将最后一条的git log 更新内容。以及版本号通知server,server存储下来,然后接口读出来就可以返回给APP用了。也算一个偷懒的办法了。
昨天看某短视频说月入12000,15年应该要攒下10万

昨天看某短视频说月入12000,15年应该要攒下10万

如题,虽然看得出这种是段子,月入1.2万,15年攒10万肯定是没问题,但是女主来一说就很恐怖了,比如:

房贷

3000

伙食

2500

电

240

水

120

煤气

200

物业

150

车位费

260

网

220

烟

600

衣服

200

酒

200

加油

500

车险

360

理发

20

外出吃饭

300

零钱

200

人情

500

小孩伙食费

400

保险

100

文具

100

蓝球、散打

800

小孩零用

100

小孩衣服

200

牛奶水果

300

家庭生活费

100

说是一个月只剩300多了。
看了下上面的内容,其实就是感觉挺有意思的。为了拍视频也为了吸眼球,什么类别都在往上凑了。所谓的再苦不能苦孩子,再穷不能穷教育。呵呵
实话实说,苹果的通用控制让我省了一台电脑

实话实说,苹果的通用控制让我省了一台电脑

用M1的时候起初是挺爽的,但后面随着要开的IDE越来越多,16G内存就不够用了。当年最大只有16G,真让人痛苦。

本来想着换吧,但一来,2年的分期还没到,AC啥的都没过期,感觉没意义。二来,家里笔记本真的有点多了。14、18,再加M1,如果再来一台。。。也太占地方了。

原来以为通用控制只能控制PAD,结果 看到电脑也可以控制,这个就太方便了,立即把18拿出来用,32G内存做啥都够了。。就是时不时的风扇会响,自从用了M1,已经几年没有听过风扇的声音了。。。。真不知道以前18款那2年我是怎么用过来的。。

顺便再说一个,M1最大只能接一个外置显示器,用通用控制后,可以不使用镜像,而用作扩展显示器,一下子,相当于变成2个外接显示器了。。。

所以。。。是当成第二台电脑,还是当成第二台显示器,就看心情了。。HOHO

买了个小米激光打印机

买了个小米激光打印机

先申明,不算是米粉,但确实家里小米的东西比较多,手机、PAD、电脑、吸尘器、牙刷、灯,现在又买了个打印机。(哦,还有路由、音箱等)

也算是图方便,毕竟一个APP就能够连接几乎所有的设备,对懒人来说确实是比较方便的。所以,那些要打造什么智能家居的,如果你没有足够多的设备能够互联互通,怎么能够让别人来用你的产品呢?
说说打印机吧,之所以会买它。是因为原来的TS5180墨盒打出来的字糊了,TS5180是佳能的机器,5180好象是国内款还是啥的,驱动里显示是5100。从娃上6年级开始现现在8年级暑假,3年,打了9000多张(通过打印墨水信息可以查看)。因为买的时候换了连供,所以除了黑墨水外,其他的墨水都还没有用完,问了客服,客服推荐是换个连供墨盒,看了一下价格:280。再看了一下订单,当时买打印机的时候,机器是980.合着一个墨盒就是1/3的价格啊。
在买墨盒的同时,买了小米这个激光打印机,原来在犹豫是买喷墨还是买激光,因为小米有自己的连供,说是可以打9500张左右。而激光的自带一个墨盒,只能打4000,如果再买一个墨盒打4000,再换的时候就是连硒鼓一块换了。199的墨盒,249的硒鼓(硒鼓寿命是8000张),所以如果要打满8000张,成本是:硒鼓X1,墨盒X2,总费用为:249+199*2=547,对比一下打印机,1600左右,也是1/3的价格。
所以其实就是这样,你要么不换,要换成本基本上都在1/3,由于初中还有最后一年,所以做了两手准备:一个激光打印机+更新的墨盒。
打印机刚到手,过两天看看有没有什么使用上的问题,也好写写使用情况。
最后补一句,如果不追求双面,打印份数也需要不少的,可以考虑小米喷墨连供,其实现在喷墨的技术都趋向于稳定了,所以打印机其实都大同小异,再加上现在都是上网课,打印量非常大,所以1000左右买个连供用个2~3年也够了。

DataGrip和navicat中的data transfer

突然发现自己还有一个database的分类,想想以前还在为了折腾怎么弄mysql更好,后面被各种数据库折腾(小型公司,不涉及大数据库,都是常规的,象pg/sqlite/sqlserver/mongodb/redis)。

平时用的最多的还是navicat,不过我现在还在用11,用它的原因很的很奇怪也很尴尬
1、他的 cmd+ . , cmd+shift+.可以用来关库关表 (12开始,居然没有这个快捷键了)
2、12开始密码存到keychain里了。导致我其实没有办法迁移数据库(确实很尴尬,很多密码居然都忘光了。。。。但还能连接)
3、UI的变化,也让我有点不太习惯。
所以只能一直用着11了,11也有不少小问题,比如从新版的macos 11起,在data管理界面,对数据操作的Icon全部不见了,我都是凭记忆在猜在操作。
所幸+,-等还在因定的位置,刷新可以cmd+R,所以我其实已经忍了好多年了。
之所以还在一直使用,就是因为navicat的data transfer实在太方便了。对于一些小的表,要复制到本地,或者复制到线上。。直接在表名上data transfer就可以导入到指定的target库里了。
当datagrip出来后,我本来想的是可以迁移了,至少他是免费的,而且也支持市面上几乎所有的数据库,然而就是我说的data transfer这个功能阻挡了我,即使我安装了datagrip,也很少用它,直接我无意中搜索到了这个:Copy | DataGrip (jetbrains.com),原来它不叫data transfer,而是叫:copy to ....,将指定的表copy 到target里。
简单的在本地用sqlite进行了测试,操作完美,但这毕竟只是同库操作,于是我又试了一下,copy table from sqlite to mysql,完美~~
看来以后可以切换着使用datagrip了~(缺点也有,打开的时候数据过多的时候,没有navicat快。想想也是,毕竟是基于java的。而人家是纯C写的(也可能objc) )
结论:是的,你真的可以开始尝试DataGrip了
---EOF---
刚发现,DataGrip居然是收费的。不过我反正都买了全家桶了,所以也可以自豪的说用正版了,要知道原来用navicat premium可是擦边球的,You Know~~
佳能打印机连供突然没墨

佳能打印机连供突然没墨

本文属于记事

1、出现1686没墨的时候,直接按停止键10秒,看看能不能恢复
2、如果不能恢复,开机,用工作抽墨水。抽出来后再放进去。这时候还会显示1686,继续 按停止键10秒,看能不能恢复
如果还不能恢复。找客服问问吧。
其它
1、如果卡纸了,取出来后,需要重启
如果买的是佳能的连供,可以关注一下:脱机不是机的个人空间_哔哩哔哩_bilibili,上面有不少教程,当然有问题最快的还是问客服。
---EOF
突然发现,我置顶的文章本身就记录了这个问题:canon连供吸墨相关问题。
flutter在页面中使用getcontroller处理map时的异常

flutter在页面中使用getcontroller处理map时的异常

在使用GetView的时候(其实StatelessWidget也一样)。只要使用了getX的Map<String,dynamic>,不管是get还是set,都会报setState的错误,(setState() or markNeedsBuild() called during build)。说白了和上次的问题一样:flutter中页面渲染完成的回调,但这次没有办法使用。上次是设置变量,这次是直接读变量。

当然,即使报错了,但页面还是可以正常渲染,上次是直接就红屏了。因为在项目中,没有细看原理,想了下还是应该没有设置初始值导致的。所以特别设置了一下初始值。问题解决。

做个笔记。

flutter中页面渲染完成的回调

flutter中页面渲染完成的回调

这玩意就有点象vue中的mounted/或者其他的afterLoad等操作。怎么突然想要用到这个呢,是因为我用了getX,之前用riverpod,也没注意过这个问题。用了GetX之后,这个东西就被派上用场了。

原因是我有一个设置背景图的功能。本来想着一切换页面,背景图就加载出来,但事实上我把这个功能提前后,进入页面就直接报错,说是obx在页面没有渲染完成的时候不能调用。

This Obx widget cannot be marked as needing to build because the framework is already in the process of building widgets. A widget can be marked as needing to be built during the build phase only if one of its ancestors is currently building. This exception is allowed because the framework builds parent widgets before children, which means a dirty descendant will always be built. Otherwise, the framework might not visit this widget during this build phase.

于是,使用:

WidgetsBinding.instance.addPostFrameCallback((time) {

final back = Get.find<BackgroundController>();

back.set(Assets.backgroundImage);

});

问题解决

flutter 的dialog如何自定义宽度

flutter 的dialog如何自定义宽度

比如我们常用的alertDialog,只要显示一个message,不显示title的话,有点象toast。这时候如何自定义宽度 呢?

如果你直接在content中包含一个sizedbox,定义宽度为200,或者更小,你会发现其实是没有用的 ,通过翻看源码可以了解到。其他他是在组件上方定义了一个ConstrainedBox,然后设置了minWidth = 280.所以你设置低于280的,怎么都没用。
要解决这个问题也不难,在Dialog上面包两个组件UnConstraintedBox,和container。先用uncontraintedbox解除限制,再使用container来定义宽高。问题就这么解决了