0
votes

casting int en bool dans la fléchette

J'ai une liste de différents types de valeurs exportées depuis JSON.

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

J'essaie d'utiliser la valeur de status comme paramètre de valeur de Checkbox . J'essaye d'analyser int en String comme ça.

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;
  }
}

mais il semble y avoir un problème avec cette conversion. Je n'obtiens pas le moyen exact de convertir un int en bool dans Dart. Ça dit

Les conditions doivent avoir un type statique de «booléen».


0 commentaires

4 Réponses :


0
votes

Essaye ça:

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


1 commentaires

? true : false est redondant.



2
votes

Il n'y a aucun moyen de «convertir» automatiquement un entier en booléen.

Les objets Dart ont un type, et les convertir en un type différent signifierait changer de quel objet ils sont, et c'est quelque chose que le langage a choisi de ne pas faire pour vous.

La condition doit être un booléen et un entier n'est pas un booléen.

Dart a très peu de moyens de faire une conversion implicite entre des choses de type différent. Le seul exemple réel est la conversion d'un objet appelable en une fonction (en arrachant la méthode d' call ), ce qui est fait implicitement si le contexte nécessite une fonction. (On peut soutenir qu'un littéral entier dans un contexte double est "converti en double", mais il n'y a jamais de valeur entière ici. Il est analysé comme un double.)

Donc, si vous avez un entier et que vous voulez un booléen, vous devez écrire la conversion vous-même. Supposons que vous vouliez que zéro soit faux et différent de zéro soit vrai. Ensuite, tout ce que vous avez à faire est d'écrire myInteger != 0 , ou dans ce cas:

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


0 commentaires

0
votes

Essayez d'utiliser un getter.

value: status

Passez ensuite le statut à la valeur.

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


0 commentaires

2
votes

Pour convertir un entier en booléen dans Dart, vous pouvez utiliser l'opérateur ternaire:

myBool ? true : false;

Pour convertir bool en int dans Dart, vous pouvez utiliser l'opérateur ternaire:

myInt == 0 ? false : true;


0 commentaires