MMKV
的 mmkvWithAshmemID
(Ashmem MMKV 是 Android 里的一个 memory-only 的多进程共享 key-value 存储,在一个 App 的所有进程退出后,会自动消失。她不使用任何文件来做存储,因此很适合在一个 App 内的众多进程之间共享敏感数据。),结果在非主进程使用的时候直接报了 java.lang.IllegalStateException: MMKVContentProvider has invalid authority
,拿 Demo 看了看,发现这段 1 | <provider |
我给漏了 😂 ,依赖里也没自带,或许是因为只有 Ashmem
的时候才需要吧,所以依赖里默认没带上。加上就好了~
记一笔,万一还有别的人也漏了,啊哈哈哈哈哈~
TextField
的边框效果,拿 border:
尝试了半天,普通状态下总有个黑边,自定义的颜色也没看到,再看了眼 TextField
的一堆属性,突然发现 TextField
不仅有 border
,还有 errorBorder
、focusedBorderfocusedBorder
、focusedErrorBorder
、disabledBorder
、enabledBorder
这几个 border …… 好了,问题解开 😂 示例:
1 | TextField( |
深度的技术积淀在国内看应该还是不少的了,但是或许是从老王离职了开始吧,明显感觉到稳定性啥的不如前了,很迷。先说个很基础的吧,比如 15.11 的时候,右下角 dock 的时间12/24小时制切换就坏了,一重启 dock 或者系统,大概率就自动回12小时制了,社区好几个贴,也没修,直到 v20 才恢复正常。出完 15.11 后不久,社区又因为官方在筹备统信而几乎就是不闻不问,也没个人在社区告诉一下他们在忙着筹备统信,全靠一堆版主里的个别一两个(非官方,真·志愿者)在帮忙打理……写到这,我又开始怀念老王在职的时候了……
一转眼,左等右等,一众用户离开,我都快认为深度凉了的时候,v20初版终于公开了,可是……真·BUG成堆……
不管怎样,v20 也算是有了,至少说是 Deepin 没凉……
但是给我的感觉,v20 的质量,真的,没法说好,很多看上去很离谱的BUG,都在这个华丽的外表下暗藏着……
说到华丽,再扯一句,虽说华丽,但其实也未必华丽,不管是大圆角,还是消失的侧边栏,亦或是失踪的热区……众人吐槽无数……
v20 初版发布到现在,理应已经比较稳定了吧~哈?Are you ok?我一共就两台电脑装了 Deepin,其中一台还停在 15.11,至于这是为什么,你觉得呢? 😂
当然,Deepin 变统信,业务量多了不少,系统也有好几个分支了现在,新招的员工也不少,有些离谱BUG也能接受,但是,却又不注重社区维护。比如,即使一堆人报的BUG,有些仍然没有官方一个认真的处理情况,甚至是回复。再比如,发帖有些关键词拦截,需要额外审核,可是,审核,谁审核?发个帖过了几天,还在审核,在审啥?
顺便吐槽下 jingle,有时感觉也不太着调……或许是太忙了吧……
诶还有个,差点忘了,Deepin 的论坛不知道怎么回事,经常出错……(把 DZ 名声都带坏了那么一点点…… DZ 明明挺稳的好不好……)
总之,还是希望,统信,能正常的走下去,别被一些外环境的乌烟瘴气给带偏了……各方面,也能往好的方向,一点点走下去……
brightness == Brightness.dark
)下,一般情况下这样就可以了:1 | bool isDarkMode(BuildContext context) { |
为什么这么做呢,因为 theme_data.dart
中就有一句:
1 | final bool isDark = _brightness == Brightness.dark; |
那为什么说 一般情况下 呢,还是看 theme_data.dart
:
1 | final Brightness _brightness = brightness ?? colorScheme?.brightness ?? Brightness.light; |
所以有时候,需要这样做:
1 | bool isDarkMode(BuildContext context) { |
height
和 width
比较下就可以了,比如这样:1 | MediaQuery.of(context).size.width > |
如果说要在横竖屏、应用显示尺寸改变时触发,那可以套一个 OrientationBuilder
,比如这样(新建了个 Flutter 项目用来示例,所以以下例子和使用场景其实不太匹配 😂):
1 | OrientationBuilder( |
或者这样(直接用 OrientationBuilder
的 orientation
):
1 | OrientationBuilder( |
item
和 value
的配对的情况下(很简单的啦): 1 | new AlertDialog.Builder(context) |
item
和 value
配对的情况下(实现中利用了一个二维数组,或许还有更好的方案): 1 | // 此例中 Items 和 Values 的内容是按顺序一一对应的 |
builder
里提供的 setSingleChoiceItems
目前看是有四种,可以按需使用。上方的代码只用了其中一种,使用方式区别不大,靠官方文档的注释应该就足够了。这里略微带过几小段:1 | /** |
1 | /** |
1 | /** |
1 | /** |
如果需要多选的话,setMultiChoiceItems
拿来用就行了。
网上搜了一圈,PHP 301 重定向都是用 header('HTTP/1.1 301 Moved Permanently');
再配合 header('Location: https://www.example.com');
完成的。
总感觉一句话干不完,再加上HTTP/2
啥的都出来许久了还写了个HTTP/1.1
看着不太爽,当然写成HTTP/2
或是HTTP/1.0
也没事,但是不管写什么总之有种表述不清的感觉(比如写的HTTP/1.1
实际访问时是HTTP/2
——访问的时候该HTTP/2
的时候还是HTTP/2
也没问题不会乱变HTTP/1.1
😂)
又去 php.net 寻觅一番,发现 Header 可以这样用header ( string $header [, bool $replace = TRUE [, int $http_response_code ]] )
这就好办了,一句话header('Location: https://www.example.com', true, 301);
完事,哈哈哈哈哈哈 😁
额外再提一句,如果要自适应HTTPS/HTTP
的话,这样就可以了:header('Location: //www.example.com', true, 301);
同步自我的CSDN
]]>进入正题:
再来个视频:
同步我的CSDN
]]>