我有一个从 JSON 导出的不同类型的值的列表。
class StudentDetailsToMarkAttendance {
int att_on_off_status;
String name;
String reg_number;
int status;
StudentDetailsToMarkAttendance(
{this.att_on_off_status, this.name, this.reg_number, this.status});
factory StudentDetailsToMarkAttendance.fromJson(Map<String, dynamic> json) {
return StudentDetailsToMarkAttendance(
att_on_off_status: json['att_on_off_status'],
name: json['name'],
reg_number: json['reg_number'],
status: json['status'],
);
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['att_on_off_status'] = this.att_on_off_status;
data['name'] = this.name;
data['reg_number'] = this.reg_number;
data['status'] = this.status;
return data;
}
}
我正在尝试使用状态的值作为Checkbox
的值参数。我正在尝试将int
解析为这样的String
。
value:((widget.studentDetailsList[index].status = (1 ? true : false) as int)as bool)
但是这种转换似乎存在问题。我没有得到在飞镖中将int
转换为bool
的确切方法。 它说
条件必须具有静态类型的"布尔值"。
要在 Dart 中将int 转换为布尔值,可以使用三元运算符:
myInt == 0 ? false : true;
要在 Dart 中将bool 转换为 int,您可以使用三元运算符:
myBool ? 1 : 0;
没有办法自动将整数"转换"为布尔值。
Dart对象有一个类型,将它们转换为不同的类型将意味着改变它们是什么对象,这是语言选择不为你做的事情。
条件必须是布尔值,而整数不是布尔值。
Dart 很少有方法可以在不同类型的事物之间进行隐式转换。唯一真实的例子是将可调用对象转换为函数(通过撕掉call
方法(,如果上下文需要函数,这是隐式完成的。 (可以说,双精度上下文中的整数文本被"转换为双精度",但那里从来没有整数值。它被解析为双精度。
因此,如果您有一个整数并且想要一个布尔值,则需要自己编写转换。 假设您希望零为假,非零为真。然后你所要做的就是写myInteger != 0
,或者在这种情况下:
value: widget.studentDetailsList[index].status != 0
尝试使用getter。
bool get status {
if(widget.studentDetailsList[index].status == 0)
return false;
return true;
}
然后将状态传递给值。
value: status
我知道这是一个老问题,但我认为这是一种从int
转换为bool
的干净方法:
myBool = myInt.isOdd;
或具有空安全
myBool = myInt?.isOdd ?? false;
试试这个:
value: widget.studentDetailsList[index].status == 1
我刚刚发布了一个库,用于将任何对象转换为 dart、asbool 中的bool
值(免责声明:我是作者(
对于int
对象,您可以将其用作扩展(.asBool
(或辅助方法(asBool(obj)
(:
int? num = 23;
int? num2;
assert(num.asBool == true); // true == true
assert(asBool(num) == true); // true == true
assert(num2.asBool == false); // false == false
assert(0.asBool == asBool(null)); // false == false
assert(120.asBool == asBool(2.567)); // false == false
它也适用于任何其他对象,如字符串、可迭代对象、映射等。