嘿那里我正在寻找一个功能,它在Dart语言中尽可能完全地打印动态变量到控制台.
例如,在PHP中,我将使用var_dump()它来获取有关变量的所有信息.
在JavaScript中,我会执行以下操作之一:
1)将对象转换为JSON并打印console.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;
}
Run Code Online (Sandbox Code Playgroud)
但是如果我在Dart,我会print(variable)得到类似的东西Instance of 'FooBarObject'.我不能像JavaScript一样将对象转换为JSON,因为这对所有对象都不可能.
所以我的问题详细说明:
dart中的函数或自定义函数是否可以打印包含所有(公共)属性以及嵌套对象和变量的未知类型(对象,数组等)的变量到我的控制台?或者哪种功能最接近这种愿望?
Pau*_*elo 21
dart:developer 库具有检查功能,允许调试器在对象上打开检查器。
要使用它添加:
import 'dart:developer';
Run Code Online (Sandbox Code Playgroud)
您可以在控制台中看到您检查的变量/对象:
inspect(myVar);
Run Code Online (Sandbox Code Playgroud)
Saa*_*ran 14
如果是地图,则可以转换为JSON. 首先convert从 flutter导入包。
import 'dart:convert';
Run Code Online (Sandbox Code Playgroud)
然后转换为JSON并打印
print(json.encode(yourMapVariable));
Run Code Online (Sandbox Code Playgroud)
更新
以上答案适用于map。对于类/对象添加到toString()方法。
例如:说我们有一个 user class
class User {
String name;
String address;
toString() {
return "name: " + name + ", address: " + address;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以toString()使用您的IDE.
Gün*_*uer 12
没有内置函数可以生成这样的输出.
print(variable)打印variable.toString()并且Instance of 'FooBarObject'是默认实现.您可以在自定义类中覆盖它并打印不同的东西.
您可以使用反射(https://www.dartlang.org/articles/libraries/reflection-with-mirrors)自行构建一个函数,该函数调查实例的各种属性并以您希望的方式打印它.几乎没有限制你可以做什么,为了调试目的,它绝对是一个很好的选择.
对于生产Web应用程序,应该避免它,因为它严重限制了树木抖动,并将导致构建输出大小显着增加.颤动(移动)根本不支持反射.
您还可以使用其中一个JSON序列化包,这样可以轻松地将序列化添加到自定义类,然后打印序列化值.例如
我认为还有其他的,但我不知道(dis)优势,因为我通常使用https://pub.dartlang.org/packages/source_gen滚动我自己
简单的小技巧可以完成工作
void printObject(Object object) {
// Encode your object and then decode your object to Map variable
Map jsonMapped = json.decode(json.encode(object));
// Using JsonEncoder for spacing
JsonEncoder encoder = new JsonEncoder.withIndent(' ');
// encode it to string
String prettyPrint = encoder.convert(jsonMapped);
// print or debugPrint your object
debugPrint(prettyPrint);
}
// To use simply pass your object to it
printObject(yourObject);
Run Code Online (Sandbox Code Playgroud)
小智 5
Instance of 'FooBarObject'当您尝试直接执行时会发生这种情况print(object);
即使你使用convertflutter 中的包,它也会抛出Uncaught Error: Converting object to an encodable object failed:
要解决此问题,首先,确保您的模型类或数据类包含fromJson和toJson方法。
如果您这样做,您的模型类将如下所示。
class User {
String name;
String gender;
int age;
User({this.name, this.gender, this.age});
User.fromJson(Map<String, dynamic> json) {
name = json['name'];
gender = json['gender'];
age = json['age'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['name'] = this.name;
data['gender'] = this.gender;
data['age'] = this.age;
return data;
}
}
Run Code Online (Sandbox Code Playgroud)
并将其打印为json导入convert包
import 'dart:convert';
Run Code Online (Sandbox Code Playgroud)
并打电话json.encode
//after initializing the user object
print('value is--> ' + json.encode(user);
Run Code Online (Sandbox Code Playgroud)
这会将数据打印为
value is--> {"name": "Vignesh","gender": "Male","age": 25}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8531 次 |
| 最近记录: |