在 dart 中将int铸造成bool

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

我有一个从JSON导出的不同类型值的列表。

  1. class StudentDetailsToMarkAttendance {
  2. int att_on_off_status;
  3. String name;
  4. String reg_number;
  5. int status;
  6. StudentDetailsToMarkAttendance(
  7. {this.att_on_off_status, this.name, this.reg_number, this.status});
  8. factory StudentDetailsToMarkAttendance.fromJson(Map<String, dynamic> json) {
  9. return StudentDetailsToMarkAttendance(
  10. att_on_off_status: json['att_on_off_status'],
  11. name: json['name'],
  12. reg_number: json['reg_number'],
  13. status: json['status'],
  14. );
  15. }
  16. Map<String, dynamic> toJson() {
  17. final Map<String, dynamic> data = new Map<String, dynamic>();
  18. data['att_on_off_status'] = this.att_on_off_status;
  19. data['name'] = this.name;
  20. data['reg_number'] = this.reg_number;
  21. data['status'] = this.status;
  22. return data;
  23. }
  24. }

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

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

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

o3imoua4

o3imoua41#

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

  1. myInt == 0 ? false : true;

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

  1. myBool ? 1 : 0;
9fkzdhlc

9fkzdhlc2#

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

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

db2dz4w83#

尝试使用getter。

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

然后将status传递给value。

  1. value: status
e4eetjau

e4eetjau4#

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

  1. myBool = myInt.isOdd;

或者是零安全

  1. myBool = myInt?.isOdd ?? false;
pepwfjgg

pepwfjgg5#

试试这个:

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

mm5n2pyu6#

我刚刚发布了一个lib,可以在dart中将任何对象转换为bool值,asbool(免责声明:我是作者)
对于int对象,可以将其用作扩展(.asBool)或辅助方法(asBool(obj)):

  1. int? num = 23;
  2. int? num2;
  3. assert(num.asBool == true); // true == true
  4. assert(asBool(num) == true); // true == true
  5. assert(num2.asBool == false); // false == false
  6. assert(0.asBool == asBool(null)); // false == false
  7. assert(120.asBool == asBool(2.567)); // false == false

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

5us2dqdw

5us2dqdw7#

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

  1. extension BoolExtensions on bool {
  2. int toInt() {
  3. return this ? 1 : 0;
  4. }
  5. }

那么它可以用作:

  1. boolVal.toInt()

相关问题