приведение int к bool в dart - PullRequest
0 голосов
/ 16 июня 2020

У меня есть список различных типов значений, экспортированных из 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. Я пытаюсь разобрать int на String вот так.

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

, но, похоже, с этим преобразованием возникла проблема. Я не могу получить точный способ преобразования int в bool в дротике. В нем указано:

Условия должны иметь тип stati c bool.

Ответы [ 3 ]

2 голосов
/ 16 июня 2020

Невозможно автоматически «преобразовать» целое число в логическое.

Объекты Dart имеют тип, и преобразование их в другой тип будет означать изменение того, каким они являются объектами, и это то, что язык решили не делать за вас.

Условие должно быть логическим, а целое число не является логическим.

У Dart очень мало способов неявного преобразования между разными объектами. тип. Единственный реальный пример - это преобразование вызываемого объекта в функцию (путем отделения метода call), которое выполняется неявно, если контекст требует функции. (Возможно, целое число литерал в контексте double "преобразуется в double", но там никогда не бывает целого числа значение . Оно анализируется как двойное.)

Итак, если у вас есть целое число и вы хотите bool, вам нужно написать преобразование самостоятельно. Предположим, вы хотите, чтобы ноль был ложным, а ненулевой - истинным. Тогда все, что вам нужно сделать, это написать myInteger != 0, или в данном случае:

value: widget.studentDetailsList[index].status != 0
0 голосов
/ 16 июня 2020

Попробуйте использовать геттер.

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

Затем передайте статус в значение.

value: status
0 голосов
/ 16 июня 2020

Попробуйте следующее:

value: widget.studentDetailsList[index].status == 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...