在飞镖中将 int 转换为布尔值



我有一个从 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

它也适用于任何其他对象,如字符串、可迭代对象、映射等。

相关内容

  • 没有找到相关文章

最新更新