在 dart 中将int铸造成bool

8qgya5xd  于 2023-09-28  发布在  其他
关注(0)|答案(7)|浏览(131)

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

我尝试使用status的值作为Checkbox的value参数。我尝试像这样将int解析为String

value:((widget.studentDetailsList[index].status = (1 ? true : false) as int)as bool)

但这种转换似乎有问题。我没有得到确切的方式转换intbool在 dart 。它说
条件必须具有静态类型“bool”。

o3imoua4

o3imoua41#

要在Dart中将int转换为bool,您可以使用三元运算符:

myInt == 0 ? false : true;

要在Dart中将bool转换为int,您可以使用三元运算符:

myBool ? 1 : 0;
9fkzdhlc

9fkzdhlc2#

没有办法自动将整数“转换”为布尔值。
Dart对象有一个类型,将它们转换为不同的类型将意味着改变它们是什么对象,而这是语言选择不为您做的事情。
条件必须是布尔值,而整数不是布尔值。
Dart很少有方法在不同类型的东西之间进行隐式转换。唯一真实的的例子是将可调用对象转换为函数(通过剥离call方法),如果上下文需要函数,则隐式完成。(可以说,double上下文中的整数 literal 被“转换为double”,但那里从来没有整数 value。它被 * 解析为double。)
所以,如果你有一个整数,想要一个bool,你需要自己编写转换。让我们假设你希望零为假,非零为真。然后你要做的就是写myInteger != 0,或者在这种情况下:

value: widget.studentDetailsList[index].status != 0
db2dz4w8

db2dz4w83#

尝试使用getter。

bool get status {
    if(widget.studentDetailsList[index].status == 0)
              return false;
    return true;
}

然后将status传递给value。

value: status
e4eetjau

e4eetjau4#

我知道这是一个老问题,但我认为这是一个从int转换为bool的干净方法:

myBool = myInt.isOdd;

或者是零安全

myBool = myInt?.isOdd ?? false;
pepwfjgg

pepwfjgg5#

试试这个:

value: widget.studentDetailsList[index].status == 1
mm5n2pyu

mm5n2pyu6#

我刚刚发布了一个lib,可以在dart中将任何对象转换为bool值,asbool(免责声明:我是作者)
对于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

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

5us2dqdw

5us2dqdw7#

如果你需要经常使用它,你可以创建一个扩展:

extension BoolExtensions on bool {
  int toInt() {
    return this ? 1 : 0;
  }
}

那么它可以用作:

boolVal.toInt()

相关问题