当我们在写 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");
其他的建议
在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...