相关文章推荐

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

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

DebugPrint

DebugPrint 着实是一个比较迷惑的方法,看意思我们理解是在debug 模式下才进行日志打印,但是实际上,这个方法也会在 release 模式下进行日志输出。

好在,我们可以通过这样简单设置即可处理 上面的问题。

if (kReleaseMode) {
   debugPrint = (String? message, {int? wrapWidth}) {
     // empty debugPrint implementation in the release mode
 

在 RunApp 启动之前即可。

print 处理

print 的处理相对比较麻烦一些,但是 dart 层也提供了一个 重载print实现的方法,就是使用 Zone API.

实现思路如下

  • • 使用 runZonedGuarded 包裹 runApp

  • • 增加 zoneSpecification 参数配置 printHandler

  • • printHandler 增加release 模式控制,进行日志打印屏蔽处理。

具体代码如下

runZonedGuarded(() {
 runApp(MyApp());
}, (error, stackTrace) {
 print(stackTrace);
}, zoneSpecification: ZoneSpecification(
   print: (Zone self, ZoneDelegate parent, Zone zone, String message){
      * Print only in debug mode
     if (kDebugMode) {
       parent.print(zone, "wrapped content=$message");
 

其他的建议

  • • 使用自己封装的 Log 库,可以统一进行管理

  • • 使用 lint 检查,检测并处理 使用 print,debugPrint的代码。

Flutter中,如果我们需要打印日志,如果不进行自定义,我们只能使用自带的 print() 或者 debugPrint() 方法进行打印,但是这两种打印,日志都是默认 Info 层级的日志,很不友好,所以如果需要日志打印层级分明,我们就需要自定义一个日志打印组件,以下就来介绍如何自定义日志打印组件。 如何让输出的日志层级分明? 换种方式想,如果我们能在Flutter代码中,能够调用到原始Android中的Log组件,岂不是就能解决日志打印问题? 如何进行关联 在Flutter中,可以使用 MethodChannel 进行关联,让Flutter调用特定平台(如Android、IOS)的相关 作者|檀婷婷(三莅)出品|阿里巴巴新零售淘系技术部背景高性能高流畅度一直是Flutter团队宣传的一大亮点,也是当初闲鱼选择Flutter的重要因素之一,但是随着复杂业务的应用落地,通过... 在Flutter中,如果我们需要打印日志,如果不进行自定义,我们只能使用自带的print()或者debugPrint()方法进行打印,但是这两种打印,日志都是默认Info层级的日志,很不友好,所以如果需要日志打印层级分明,我们就需要自定义一个日志打印组件,以下就来介绍如何自定义日志打印组件。 如何让输出的日志层级分明? 换种方式想,如果我们能在Flutter代码中,能够调用到原始Androi... 一、思考做 iOS 开发时这个功能很常用, 在 OC 和 Swift 中都可以很轻松实现,因为系统本来就提供了用于日志输出的预处理宏,只要我们拿来拼接就可以了,但是在 Dart 中并不提供这些,那有什么办法实现它呢?我们回想在开发过程中,是不是发现只要一不小心抛异常,就可以看到类似如下的打印内容,而且还能清楚的知道异常是在哪个文件和哪一行的代码造成的。所以如果我们可以在调用函数时拿到当前调用堆栈,... Dart 分析器 在运行应用程序前,请运行flutter analyze测试你的代码。这个工具(它是dartanalyzer工具的一个包装)将分析你的代码并帮助你发现可能的错误。 如果你使用IntelliJ的Flutter插件,那么已经自动启用了。 Dart分析器大量使用了代码中的类型注释来帮助追踪问题。我们... 解决方法有几种: 等官方更新,或者切到flutter的master分支,方法是执行flutter channel master。这个方法我没试过,也不推荐,业务master分支不是一个稳定分支。 把修正这个错误的单子合并到stable分支,因为我用的是stable分支,所以后面讲这么合并到stable分支 1.打... 程序调试是程序投入运行之前,使用手工或编译程序等方法进行的测试,z主要用以修正语法错误和逻辑错误。程序调试是保证计算机信息系统正确性的必不可少的步骤。 在Flutter应用开发中,Android Studio和VSCode是两种比较常见的集成开发环境,因此项目调试也围绕这两款IDE进行。Android Studio为Flutter提供完整的集成IDE体验,因此Android的调试技巧对于Flutt... static var _separator = "="; static var _split = "$_separator$_separator$_separator$_separator$_separator$_separator$ 个推是一个数据智能服务商,不仅有消息推送服务,还有用户画像、数据统计等服务。目前我们只使用了消息推送服务.个推的消息推送分为“通知消息”和“消息透传”。通知消息:指定通知标题和内容后,由个推 SDK 自动处理在系统通知栏中展示通知栏消息。消息透传:即自定义消息,消息体格式客户可以自己定义,如纯文本、json 串等。透传消息个推只传递数据,不做任何处理,客户端接收到透传消息后需要自己去做后续动作处理,如通知栏展示、弹框等。我们选择了消息透传的方式进行开发。以上就是flutter消息推送客户端集成方案。 文章目录1.Flutter的调试1.1 VS Code 的断点调试1.2 debugger()1.3 debugDumpApp()1.4 debugDumpRenderTree()1.5 debugDumpLayerTree()1.6 debugDumpSemanticsTree()1.7 可视化调试1.8 动画的调试1.9 性能的调试1.10 应用启动时间的查看1.11 代码、方法执行时间查看1... 以前用惯了as的logcat,现在在接触flutter,但是打印日志窗口真的让我蒙了,啥功能都没有,于是自己写了一个小工具,至少分下类过滤一下 class LogUtils { static const bool debug = true; //显示debug,info,error static const bool showDebug = false; //显示info,e...
 
推荐文章