嘿,我正在寻找一个函数,它用DART语言尽可能完整地将动态变量打印到控制台.

例如,在PHP中,我会使用var_dump()来获取有关变量的所有信息.

JavaScript年后,我会做以下一件事:

1) 将对象转换为JSON并打印控制台.日志(log)(JSON.stringify(obj))

2)或如下所示的自定义函数:

 function dump(arr,level) {
  var dumped_text = "";
  if(!level) level = 0;

  //The padding given at the beginning of the line.
  var level_padding = "";
  for(var j=0;j<level+1;j++) level_padding += "    ";

  if(typeof(arr) == 'object') { //Array/Hashes/Objects 
   for(var item in arr) {
    var value = arr[item];

    if(typeof(value) == 'object') { //If it is an array,
     dumped_text += level_padding + "'" + item + "' ...\n";
     dumped_text += dump(value,level+1);
    } else {
     dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
    }
   }
  } else { //Stings/Chars/Numbers etc.
   dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
  }
  return dumped_text;
 }

然而,在Dart,如果我做print(variable),我得到的大概是Instance of 'FooBarObject'.我不能像在JavaScript中那样只将对象转换为JSON,因为并非所有对象都可以这样做.

所以我的详细问题是:

是DART中可以打印未知类型(对象、数组等)的函数或自定义函数的位置是否将所有(公共)属性以及嵌套对象和变量包含到我的控制台?或者哪种功能最接近这个愿望?

推荐答案

没有生成此类输出的内置函数.

print(variable)打印variable.toString()Instance of 'FooBarObject'是默认实现.您可以在自定义类中覆盖它,并打印一些不同的内容.

您可以使用反射(https://www.dartlang.org/articles/libraries/reflection-with-mirrors)自己构建一个函数,该函数调查实例的所有类型的属性,并以您想要的方式打印它. 您可以做的事情几乎没有限制,出于调试目的,这绝对是一个很好的 Select .

对于生产Web应用程序,应该避免这种情况,因为它严重限制了树摇动,并且会导致构建输出大小显着增加. Flutter (移动)根本不支持反射.

您还可以使用其中一个JSON序列化包,它可以轻松地向自定义类添加序列化,然后打印序列化值.

我想还有其他的,但我不知道(dis)的优点,因为我通常使用https://pub.dartlang.org/packages/source_gen来滚动我自己的

Dart相关问答推荐

在 Dart 中使用隔离优于异步的优势

Flutter - MultiProvider 如何与相同类型的提供者一起工作?

在 Flutter 中检测键盘事件

执行 `dart2js` 时会生成哪些文件?为什么?

在 Dart/Flutter 中创建 DateTime 对象时如何指定 TimeZone?

如何在没有 Scaffold.drawer 的情况下使用 Drawer?

Flutter - 为什么滑块不会在 AlertDialog 中更新?

如何处理 ListView 滚动方向

Dart-对base64字符串进行编码和解码

如何从目录中获取文件列表并将其传递给ListView?

如何在 flutter 中对json进行字符串化

Flutter 如何使用 ListTile 三行

如何左对齐 Flutter 中的 OutlineButton 图标

如何将整数中的ascii值转换为Flutter中的等效字符?

如何在 URL 中获取查询参数

dart 如何创建、监听和发出自定义事件?

如何在dart列表中找到一个元素

dart中的max/mi int/double 值是否有常数?

dart中是否可以有一个私有构造函数?

dart中的动态和对象有什么区别?