La liste des cartes que j'obtiens en réponse http
final data = simpleBarArrayData;
ressemble à:
print(simpleBarArrayData);
[
new OrdinalSales('27',30),
new OrdinalSales('28',68),
new OrdinalSales('29',73),
new OrdinalSales('30',60),
new OrdinalSales('31',57),
new OrdinalSales('01',51),
new OrdinalSales('02',51),
new OrdinalSales('03',51),
new OrdinalSales('04',48),
new OrdinalSales('05',58)
]
Ce que j'aimerais obtenir ce tableau json est une liste que je peux utiliser pour la bibliothèque Flutter Charting (Simple Bar Chart). Pour utiliser ce graphique à barres simple, ce tableau devrait ressembler à ceci:
final data = [
new OrdinalSales('27', 30),
new OrdinalSales('28', 68),
new OrdinalSales('29', 74),
new OrdinalSales('30', 60),
new OrdinalSales('31', 57),
new OrdinalSales('01', 51),
new OrdinalSales('02', 51),
new OrdinalSales('03', 51),
new OrdinalSales('04', 48),
new OrdinalSales('05', 58),
];
Existe-t-il un moyen d'utiliser la liste existante de cartes pour créer le tableau json dont j'ai besoin afficher le graphique à barres simple?
MODIFIER:
J'ai réussi à créer un tableau (simpleBarArrayData) avec les données dont j'avais besoin pour le graphique à barres simple ( https://google.github.io/charts/flutter/example/bar_charts/simple ). Mais lorsque j'essaie d'insérer ce tableau au lieu du tableau défini comme exemple dans Simple Bar Chart, une erreur se produit:
type 'List<dynamic>' is not a subtype of type List<OrdinalSales>'
L'exemple de tableau de données:
final data = [
new OrdinalSales('27', 30),
new OrdinalSales('28', 68),
new OrdinalSales('29', 74),
new OrdinalSales('30', 60),
new OrdinalSales('31', 57),
new OrdinalSales('01', 51),
new OrdinalSales('02', 51),
new OrdinalSales('03', 51),
new OrdinalSales('04', 48),
new OrdinalSales('05', 58),
];
Le tableau créé (simpleBarArrayData) ressemble à ceci:
[
{"date":"27\/08\/2019","score":"30.00"},
{"date":"28\/08\/2019","score":"67.67"},
{"date":"29\/08\/2019","score":"73.00"},
{"date":"30\/08\/2019","score":"59.80"},
{"date":"31\/08\/2019","score":"57.18"},
{"date":"01\/09\/2019","score":"50.75"},
{"date":"02\/09\/2019","score":"50.78"},
{"date":"03\/09\/2019","score":"50.85"},
{"date":"04\/09\/2019","score":"48.18"},
{"date":"05\/09\/2019","score":"58.12"}
]
J'ai essayé de remplacer les données existantes par le code suivant:
final List<dynamic> scoresByDay = httpResponse[0]['days']['averageScores'];
print(scoresByDay);
Et l'erreur se produit.
3 Réponses :
Disons que votre
List<String> dates = [];
List<int> scores = [];
void _fetch() {
for (var item in json) {
String date = item["date"];
dates.add(date.split("\/")[0]);
String score = item["score"];
int element = int.parse(score.split("\.")[0]);
scores.add(element);
}
}
void _merge() {
// you can merge by iterating it over
List<OrdinalSales> data = [];
for (int i = 0; i < dates.length; i++) {
data.add(OrdinalSales(dates[i], scores[i]));
}
}
Vous pouvez créer cette méthode, et ici les dates n'auront que vos dates et les scores auront un score.
List json = [YOUR_GIVEN_JSON_IN_LIST];
Comment puis-je fusionner ces deux tableaux et obtenir une chaîne "new OrdinalSales ('27 ', 30)" incluse dans ce nouveau tableau?
Toujours sans la bonne solution au problème. J'ai édité la question en essayant de la résoudre.
OK, le correctif devrait être simple, au lieu d'utiliser List utilisez List.
Étant donné un exemple de spécification OrdinalSales comme
List<dynamic> scoresByDay = [
{"date":"27\/08\/2019","score":"30.00"},
{"date":"28\/08\/2019","score":"67.67"},
{"date":"29\/08\/2019","score":"73.00"},
{"date":"30\/08\/2019","score":"59.80"},
{"date":"31\/08\/2019","score":"57.18"},
{"date":"01\/09\/2019","score":"50.75"},
{"date":"02\/09\/2019","score":"50.78"},
{"date":"03\/09\/2019","score":"50.85"},
{"date":"04\/09\/2019","score":"48.18"},
{"date":"05\/09\/2019","score":"58.12"}
];
// parse j with
var result = scoresByDay.map((i) => OrdinalSales.fromMap(i)).toList();
print(result[0].day); // 27
print(result[0].score); // 30
, vous pouvez l'utiliser comme
class OrdinalSales {
String day;
num score;
OrdinalSales.fromMap(Map<String, dynamic> m){
day = m["date"].substring(0,2); // serious date parsing should be here
score = num.parse(m["score"]).round();
}
}
J'obtiens cette erreur "le type 'List
Où? (J'ai fait un petit refactor pour que le code soit plus compréhensible).
Je viens de modifier la question en essayant de résoudre le problème
Essayez d'utiliser data = new List.from (simpleBarArrayData); . Si data a été défini comme final , cela ne fonctionnera pas et vous devez soit supprimer le mot-clé final , soit créer une autre variable.
Voici le modèle de votre json
// To parse this JSON data, do
//
// final ordinalSales = ordinalSalesFromJson(jsonString);
import 'dart:convert';
List<OrdinalSales> ordinalSalesFromJson(String str) =>
new List<OrdinalSales>.from(json.decode(str).map((x) =>
OrdinalSales.fromJson(x)));
String ordinalSalesToJson(List<OrdinalSales> data) =>
json.encode(new List<dynamic>.from(data.map((x) => x.toJson())));
class OrdinalSales {
String date;
String score;
OrdinalSales({
this.date,
this.score,
});
factory OrdinalSales.fromJson(Map<String, dynamic> json) =>
new OrdinalSales(
date: json["date"] == null ? null : json["date"],
score: json["score"] == null ? null : json["score"],
);
Map<String, dynamic> toJson() => {
"date": date == null ? null : date,
"score": score == null ? null : score,
};
}
que vous pouvez utiliser ci-dessous URL pour créer un modèle pour JSON https://app.quicktype.io/
Le type d'argument 'List' ne peut pas être affecté au type de paramètre 'String'.dart (argument_type_not_assignable)
Je ne sais pas pourquoi les réponses ne mentionnent pas la plus grande documentation a >, Il est facile d'utiliser un générateur au lieu d'un codage en dur personnalisé ...