避免在生产代码中调用“print”。(文档)

iDe*_*ode 34 dart flutter

我开始在我所有的陈述中看到这个警告print。

print('Foo'); // Warning: Avoid `print` calls in production code. 
Run Code Online (Sandbox Code Playgroud)

iDe*_*ode 44

这是因为flutter_lintsFlutter 2.3.0 之后创建的新项目中隐式添加了该包。

您可以使用以下任一解决方案。

  1. 要删除该行中的警告:

    // ignore: avoid_print
    print('Hello World');
    
    Run Code Online (Sandbox Code Playgroud)
  2. 删除该文件中的警告

    // ignore_for_file: avoid_print
    print('Hello World');
    
    Run Code Online (Sandbox Code Playgroud)
  3. 从整个项目中删除警告。

    打开analysis_options.yaml文件并添加此 linter 规则:

    include: package:flutter_lints/flutter.yaml
    
    linter:
      rules:
        avoid_print: false
    
    Run Code Online (Sandbox Code Playgroud)

为什么不debugPrint或者log?

虽然您也可以使用debugPrint, 或log(from dart:developer),但我不喜欢它们有几个原因。

  1. 它们都仅适用于 Flutter 应用程序(不适用于 Dart 应用程序)
  2. 你必须手动导入一个库才能让它们工作(导入非常痛苦,除非在 IDE 中实现动态导入)
  3. 他们只接受 aString作为参数,不像print它接受Object?(一切)

  • Linting 是自动检查源代码中的编程和风格错误,因此最佳实践是解决错误而不是忽略它。此时,最好使用 ```debugPrint()``` 而不是 ```print()``` 方法。 (7认同)

Vol*_*nko 20

开发人员不应抑制此类分析器警告,也不应将其用于print()他们正在构建的应用程序。print()也会在发布版本中打印日志,这是不应该发生的事情,因为某些开发人员可能会记录敏感信息。

其他人建议的debugPrint()只是一个包装,以print()避免在 Android 上丢失一些日志,以防函数print()调用太频繁或输出太大。

应该使用 中可用log()的函数dart.developer,它还允许附加记录事件的错误对象、严重性级别、名称等,并且不会在发布模式下打印任何内容,因此不会泄漏任何信息。

以下是有关正确日志记录方法的更多信息,其中还描述了log()功能: https: //docs.flutter.dev/testing/code-debugging#logging