技术小黑屋

Flutter/Dart Release 模式下屏蔽 debugPrint 与 Print 输出

当我们在写 Flutter,Dart程序时,release 模式下,我们很奇怪的发现debugPrint和 print 这两个的输出内容,还是能够通过 flutter logs 展示出来。这一点尤其在端上暴露的问题要严重一些,比如涉及到一些敏感信息的日志打印。

本文,将会有两个超级简单的方法,来实现对这些输出的屏蔽,并且是专门治理 release 模式下的问题,debug 模式不受影响。

一个脚本,快速发现项目中的重复文件

项目中的文件越来愈多,导致生成的apk包也不断增大,可是这些文件中会不会存在重复的文件呢,这是一个值得验证的问题,毕竟解决了之后会减少很多apk的体积。

我们不可能依赖人工的手动查找,因为这样是时间成本太大。于是我们再次尝试使用脚本程序来实现检查项目中是否有重复文件。

Flutter 在 iOS 模拟器中运行卡住问题解决

当我们尝试在 iOS 模拟器运行 flutter run 可能会出现类似如下的卡住问题。

1
2
3
executing: xcrun simctl launch xxx-54F9-427F-8119-xxxx com.hahaha.app --enable-dart-profiling --enable-checked-mode --verify-entry-points --observatory-port=0
[+1000 ms] com.hahaha.app: 49573
[        ] Waiting for observatory port to be available

模拟器上的 App 也无法打开,也看不出有什么具体的崩溃问题。不知如何是好。

超快速实现 Svg 转 Png,jpg等格式

svg 是 用于描述二维矢量图形的图形格式,有着很多的优势,但是有时候并不是所有的场景都支持 svg,那么这时候,我们需要将svg 图片转换成 png 等格式。

当然,可以进行svg 转png 的方式有很多,比如通过在线的网页工具可以,也可以使用终端的命令处理。这里我们主要设计的使用终端命令进行转换处理。

简单一招,百倍提速 Flutter 开发

Flutter 开发中,为了实现更好的解耦与更高的复用,我们都会使用模块化的思路来处理,在Dart 和 Flutter 中,我们会使用 Dart 包或者插件包等,将它们发布到比如自己的unpub 服务器上,然后在壳工程(主工程)中聚合使用。

比如一个 壳工程的 yaml 是这样的

1
2
3
4
5
6
7
8
9
10
dependencies:
 flutter:
   sdk: flutter
 firebase_crashlytics: 2.4.5
 firebase_analytics: 9.0.5
 basic:
   hosted:
     name: basic
     url: https://unpub.droidyue.com
   version: 1.6.2

于是有这样一个场景,我们想要在basic 包里面加一个方法,并应用到 主工程中。

但是在执行处理的时候,我们会有这样的考虑

  • 如果修改的内容,通过 unpub 进行验证,时间成本很大。
  • 但是发布到unpub,需要有一定的质量把控,修改的内容必须进行验证通过后,才能发布到unpub 服务器上

所以,我们需要尝试寻找一种不通过 unpub,更快速验证修改内容的方式。

好在 dart 提供了 dependency_overrides 这个配置项来处理依赖重写问题。

Android 添加 Overlay View (覆盖视图)

在 Android 中,有一种黑科技,就是能够过在 Window 上添加一个视图,然后这个视图,会覆盖在所有的 应用视图的上面(包括桌面)。比如下面的视图。

https://asset.droidyue.com/image/2022/h1/android_overlay_view_sample.png

想要利用上面的黑科技,很简单。大概分为如下的步骤。

iSlide 插件 5 周年回馈,买两年送一年!每月不到 5 块钱

是不是每次在制作 PPT 时,都丝毫没有头绪?各种模板东拼西凑没有章法?你和 PPT 高手之间,其实就只差一个 iSlide。

iSlide 是一款口碑优秀的 PPT 插件,海量在线资源库,超 30 万专业模板、素材一键插入 PPT,更有一键排版等 38 种辅助功能,真正实现「让 PPT 设计简单起来」。

https://asset.droidyue.com/image/lizhi_io/islide/%E5%9B%BE1.png

如今,iSlide 插件发布已有 5 年时间,获得秋叶 PPT 等众多业内大咖推荐!最近它开启了 5 周年活动,前往数码荔枝买两年送一年,每月不到 5 元钱,新用户首单还能立减 5 元,非常值的价格别错过!

赶快点击[合作伙伴]专属链接收下这款人见人爱的 PPT 神器吧!活动时间:即日起至 5 月 8 日,订阅时长可叠加,趁现在便宜快买买买~

Fences 4 新版来袭,栅栏式桌面整理快速搞定,从此不再乱糟糟!

你有整理电脑桌面的习惯吗?还是各种文件、文件夹都往桌面塞,时间一久占满半个屏幕,既不美观也不好找文件。

想要保持桌面整洁,当然要试试经典的 Fences,自动归类整理 Windows 桌面文件。近期这款工具迎来了 4.0 大更新,这次也为大家带来了优惠价格!通过[合作伙伴]专属优惠链接39 元起即可实现整理自由,解放双手。新注册用户再享立减 5 元优惠,仅需34 元起!

https://asset.droidyue.com/image/lizhi_io/fences/%E5%9B%BE1.png


Android 中 利用 AccessibilityService 辅助服务 模拟点击事件

在 Android 中想要执行一些模拟点击操作,在无法修改页面源码的情况下,通常只能使用 adb 和借助辅助功能两种方式。

Adb 方式

借助 adb shell 的命令,我们可以使用下面的方式模拟一个执行点击坐标的操作。

1
adb shell input tap x y

但是 adb 操作有一些门槛

  • 需要一台电脑执行adb 命令(终端执行)
  • 需要一个数据线
  • 目标设备(手机)需要开启开发者模式

所有 adb 操作的问题就是无法借助一台设备独立完成。所以可以借助辅助服务来实现单一设备独立完成。

忘了 Mac 访达吧,QSpace 文件管理器一个更比多个强

注:QSpace 是我的一位超级优秀的前同事开发的,个人在软件发布之初就曾尝试,很不错,希望大家可以支持使用一下哈。

使用 Mac 的小伙伴,有多少人还在用原生的访达管理文件?虽然已经满足基本需求,但仍有一些槽点:不支持多视图查看、地址栏编辑不够直观、连接服务器仅只读等。

强烈安利一款单窗口多视图文件管理器:QSpace,拥有连接云服务器、右键增强、文件暂存等诸多实用自定义功能。

https://asset.droidyue.com/image/lizhi_io/qspace/%E5%9B%BE1.png

同类产品 Path Finder,订阅一年就要支付约 190 元,而今天的 QSpace 买断只要 47 元起,爆款产品数码荔枝独家代理。点击[合作伙伴]专属优惠链接,抢购就趁现在!新用户还能领券再省 5 元!

终端下 History 展示时间信息

经常使用终端的同学,最常用的命令之一可能就有 history, 它可以帮助我们查看执行过的终端命令的历史信息。

history 执行很简单

1
2
3
4
5
6
7
8
9
10
11
[email protected]:~ $ history
    1  clear
    2  ls
    3  sudo apt update
    4  df -h
    5  sudo apt install vim
    6  sudo reboot
    7  clear
    8  ls
    9  sudo apt install vim
   10  locale

MBP Touchbar 设置Fn 按键长期显示

TouchBar 的出现确实让 MBP 酷炫了很多,但是对于我来说,总感觉有点华而不实,原因有二

  • 动态变化的 按钮 几乎没有用到
  • 基础的Fn 按键 使用起来反而更加不方便。(比如 IDE 使用F3 查看Definition)

好在系统设置提供了长期显示 Fn 的配置选项

Flutter TabController 多次调用,导致切换异常问题

Flutter 中,TabController 是连接 TabBar 与 TabBarView 的纽带,处理选中状态时必不可少的内容。

但是当我们在监听 TabController 时,会发现又多次调用

1
2
3
4
5
6
7
8
@override
void initState() {
 super.initState();
 _tabController = TabController(vsync: this, length: myTabs.length);
 _tabController.addListener(() {
   debugPrint('initState currentIndex=${_tabController.index}');
 });
}

Flutter 中获取 TextField 中 Text 内容

在Flutter 中,TextField 是一个用来输入 文本的 控件。使用起来也很简单,比如这样,就可以轻松实现一个 TextField 来接收用户的输入内容。

1
2
3
4
5
6
7
TextField(
 decoration: const InputDecoration(
   border: OutlineInputBorder(),
   labelText: 'Contact Name',
 ),

)

但是 Flutter 是声明式 UI 编程,我们无法像 Android 里那样拿到 TextField 的实例,类似这样(textFieldInstance.text)获取到内部的输入内容。

不过,办法还是有的,只是略有不同而已。

Flutter 轻松实现动态更新 ListView

在 App 开发过程中,ListView 是 比较很常见的控件,用来处理 列表类的数据展示。当然 Flutter 也是支持的,由于 Flutter 是归属于声明式 UI 编程,其处理起来要更加的简单与便捷。

Android/iOS 终端快速截屏技巧

传统的方式进行截屏大概是这样:

  • 使用手机截屏按钮截屏
  • 将截屏软件通过 通讯软件(微信和飞书等)发到电脑上

但是这其中需要在手机上安装软件可能就不是十分的便捷和高效。

其实有更加边界的方式处理截屏。这其中有两种方式适用于安卓,一种方式适用于 iOS 设备。

一个检测 Json 合法性的脚本

越来越多的配置都是使用 json 的格式,当我们修改好,最好是进行一下 json 合法性校验。

我们可以使用下面的脚本进行校验。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/env ruby
# encoding: utf-8
require 'json'
file = ARGV[0]


def is_json_valid(value)
  result = JSON.parse(value)
    result.is_a?(Hash) || result.is_a?(Array)
  rescue JSON::ParserError, TypeError
    false
  end


result = is_json_valid(File.open(file).read)
puts "json is valid(#{result})"

Flutter(Dart) 中将 2022-01-05 09:33:44 +0000 UTC 转成 Datetime

在日常的开发中,进行日期转换是比较常用的。但是对于新接触 Flutter 的话,对这个日期2022-01-05 09:33:44 +0000 UTC 使用DateTime.parse直接转换,会有问题,如下。

1
print(DateTime.parse('2022-01-05 09:33:44 +0000 UTC'));

当我们运行后,会得到这样的崩溃stacktrace

1
2
3
4
5
6
7
8
Unhandled exception:
FormatException: Invalid date format
2022-01-05 09:33:44 +0000 UTC
#0      DateTime.parse (dart:core/date_time.dart:330:7)
#1      testDateFormat (file:///Users/xxx/IdeaProjects/dart_sample/bin/dart_sample.dart:38:18)
#2      main (file:///Users/xxx/IdeaProjects/dart_sample/bin/dart_sample.dart:26:3)
#3      _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:295:32)
#4      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:192:12)

Mac 清理优化工具 MacBooster 限时特惠,终生版 7 折低至 41.3 元起

Mac 用户越来越多,针对 Mac 的病毒木马也逐渐出现了,Mac 电脑无需安全优化工具的历史似乎已成为过去。但部分清理工具升级迭代快,价格也很昂贵。

今天给大家推荐一款价格实惠、功能强大的 macOS 系统清理优化工具:MacBooster。一站式清理、查杀病毒及残余文件,优化系统加速运行。

https://asset.droidyue.com/image/lizhi_io/mac_booster/%E5%9B%BE1.png

Mac 上优秀的虚拟机软件 Parallels Desktop

使用 Mac 电脑,我们有时会碰到一些只在 Windows 平台下运行的软件。开发者们也时常会遇到安全性未知的软件,这时一个不影响工作环境的系统就很重要。

除了安装双系统,虚拟机就是解决上述这些问题的利器之一。而在 macOS 平台下,Parallels Desktop 可是虚拟机工具的不错选择。它是 macOS 平台性能首屈一指的虚拟机工具,软件搭载了各种常见和使用的工具,让您在 Mac 和 Windows 中能够很好地完成日常任务。

现在购买,享有优惠,具体请查看这里Parallels Desktop 17 – Mac 上优秀的虚拟机软件 PD 激活码 赠送Win11

Mac 终端下 实现 安装 Ipa 包到 iPhone 真机

最近处理 Flutter 的开发工作,开始尝试使用 iOS 作为日常的真机调试工作。对于一个原技术栈为 Android的人来说,发现 iOS 有很多不太方便的地方。比如如何在 Mac 电脑上安装 ipa包到 iPhone 上。

相比来说,Android 提供了adb 可以很快捷的在 终端上执行安装。而iOS 我也希望有一个可以在终端上实现安装ipa的方式,摸索了一下,终于发现了一个可行的技术方案。