从Flutter记录大字符串

Ter*_*hia 20 dart flutter

我正在尝试构建一个Flutter应用程序并在此过程中学习Dart,但是在调试时我会感到很沮丧.我从API中获取了一个资源,现在我想将JSON字符串打印到控制台,但它一直在切断字符串.

控制台中截断字符串的屏幕截图

所以我实际上有两个问题:终端控制台真的是打印调试消息的唯一方法吗?如何在没有自动切断的情况下将大字符串打印到控制台?

Sis*_*sir 89

如何使用dart: developer库中的 Flutter 日志。这似乎没有像print()或那样的最大长度限制debugPrint()。这是似乎工作正常的唯一解决方案。尝试如下:

log(reallyReallyLongText)
Run Code Online (Sandbox Code Playgroud)

输出将是没有中断的整个长字符串,并以 [log]

  • 对我不起作用仍然被截断 (7认同)
  • 我究竟做错了什么 ?var data = { 'recordType':recordTypeText, 'horseId': horseId, 'dateOfCheck': dateOfCheck, 'title': 标题, 'details': 详细信息, 'images':images }; 日志(data.toString()); 并且没有输出 (6认同)
  • @user1634451 它是不同级别的输出,您可能在终端上看不到它,但它可以在 vscode 上运行 (2认同)

Cop*_*oad 37

您可以制作自己的印刷品。定义这个方法

void printWrapped(String text) {
  final pattern = RegExp('.{1,800}'); // 800 is the size of each chunk
  pattern.allMatches(text).forEach((match) => print(match.group(0)));
}
Run Code Online (Sandbox Code Playgroud)

使用它就像

printWrapped("Your very long string ...");
Run Code Online (Sandbox Code Playgroud)

信用


Bis*_*ing 15

目前 dart 不支持打印超过 1020 个字符的日志(通过尝试发现)。

所以,我想出了这个方法来打印长日志:

static void LogPrint(Object object) async {
    int defaultPrintLength = 1020;
    if (object == null || object.toString().length <= defaultPrintLength) {
       print(object);
    } else {
       String log = object.toString();
       int start = 0;
       int endIndex = defaultPrintLength;
       int logLength = log.length;
       int tmpLogLength = log.length;
       while (endIndex < logLength) {
          print(log.substring(start, endIndex));
          endIndex += defaultPrintLength;
          start += defaultPrintLength;
          tmpLogLength -= defaultPrintLength;
       }
       if (tmpLogLength > 0) {
          print(log.substring(start, logLength));
       }
    }
}
Run Code Online (Sandbox Code Playgroud)


jes*_*nte 13

使用带有可选参数的 debugPrint 根据平台的输出限制进行换行。

debugPrint(someSuperLongString, wrapWidth: 1024);
Run Code Online (Sandbox Code Playgroud)


fzy*_*cjy 6

这是基于@CopsOnRoad答案的一行,您可以快速复制和粘贴(例如:当您想稍微修改代码并记录一些数据并暂时查看时):

void printWrapped(String text) => RegExp('.{1,800}').allMatches(text).map((m) => m.group(0)).forEach(print);
Run Code Online (Sandbox Code Playgroud)


Mah*_*ahi 3

如果您想阅读,请尝试debugPrint('your output');代替此处print('your output');的文档。根据文档将输出限制在一定水平以避免被 android 内核丢弃。debugPrint

  • debugPrint() 还为我截断长字符串。好像限制700字。 (14认同)
  • 是的,我仍然使用 debugprint 被截断 (3认同)
  • 只需要添加 `wrapWidth: &lt;SomeBigInt&gt;` 调用 debugPrint 并且它不会截断 (2认同)