Flutter Data from API?
Hey, will Daten von meiner erstellten API ausgeben in meiner App.
Code:
fetchData() async {
final response = await http.get(Uri.parse('http://localhost/list.json'));
return json.decode(response.body);
}
FutureBuilder(
future: fetchData(),
builder: (BuildContext context, AsyncSnapshot snapshot){
if(snapshot.hasError){
return Center(
child:Text("Error"),
);
}
if(snapshot.hasData){
return ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (BuildContext context, int index){
return Row(
children: [
Expanded(
child: Container(
child: Column(
children: [
Text(snapshot.data[index]['id']),
SizedBox(height: 10,),
Text(snapshot.data[index]['name']),
],
),
),
),
],
);
});
}
return Center(child: CircularProgressIndicator(),);
},
),
Jedoch bekomm ich als Ausgabe "Error". Woran kann das liegen? Die API kann ich mit Postmann abfragen.
2 Antworten
Glaube du musst erst den ConnectionState gucken
Siehe hier:
Nun hab ich das gelöst und jz bekomme ich folgendes: "Error: type String is not a subtype of type int"
An welcher Stelle denn? Irgendwo passen die Typen scheinbar nicht.
Bei Text(snapshot.data[index]['id']) versuchst du wahrscheinlich einen int da rein zu machen.
Es muss aber ein String sein. Du könntest einfach noch ein .toString() anhängen um es umzuwandeln
ja, beim model, siehe code unten passt int nicht, aber weiß nicht wie ich das lösen kann. Hab mal versucht die int variablen auszukommentieren und dann hat es funktioniert, aber mit int nicht
Wo setzt du denn oben in dem Code dein Model ein?
Ansonsten kannst du einfach mit .toString() einen String daraus machen.
Text(snapshot.data[index]['id'].toString())
Wobei es da noch Probleme mit dem nullable geben könnte.
List<TestModel> list = [];
Future<List<TestModel>> getTestApi() async {
final resposne = await http.get(Uri.parse('http://localhost/index.php/test/list'));
var data = jsonDecode(resposne.body.toString());
if (resposne.statusCode == 200) {
list.clear();
for (Map i in data) {
list.add(TestModel.fromJson(i));
}
return list;
} else
return list;
}
}
Text(list[index].ID.toString()),
SizedBox(height: 5,),
Text(list[index].Name.toString()),
Und was passiert jetzt? Gibt es noch Fehler? In welchen Zeilen tritt der Fehler auf? Dart/Flutter sagt einem ziemlich genau wo was schiefläuft
der fehler bleibt der gleiche, aber im terminal kommt kein fehler
Wenn ich die App ausführe erscheint auf der Seite der fehler
Es gibt einige Gründe, warum Sie möglicherweise einen Fehler erhalten, wenn Sie versuchen, auf Ihre API zuzugreifen. Hier sind einige Dinge, die Sie überprüfen können:
- Stellen Sie sicher, dass der Hostname und der Port, den Sie in der URL verwenden, korrekt sind und dass Ihre API auf dem angegebenen Host und Port ausgeführt wird.
- Stellen Sie sicher, dass Ihre Firewall oder eine andere Sicherheitssoftware den Zugriff auf Ihre API nicht blockiert.
- Überprüfen Sie, ob es einen Fehler in Ihrem Code gibt, der dazu führen könnte, dass der Fehler "Error" angezeigt wird. Eine Möglichkeit, dies zu tun, ist das Hinzufügen von Ausgaben in den Fehlerfall des
FutureBuilder
- (z.B.
print(snapshot.error)
- ), um herauszufinden, was den Fehler verursacht hat.
- Wenn Sie Ihre API mit Postman testen können, aber von Ihrer Flutter-App nicht, stellen Sie sicher, dass Sie die richtige URL verwenden und dass Ihre App auf demselben Computer oder auf demselben Netzwerk wie Ihre API ausgeführt wird.
Meine Ausgabe:
"Error: type String is not a subtype of type int"
Mein Model:
class TestModel {
TestModel({
int? ID,
String? Name,
String? Strasse,
}){
_ID = ID;
_Name = Name;
_Strasse = Strasse;
}
TestModel.fromJson(dynamic json) {
_ID = json['ID'];
_Name = json['Name'];
}
int? _ID;
String? _Name;
int? get ID => _ID;
String? get Name => _Name;
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['ID'] = _ID;
map['Name'] = _Name;
return map;
}
}
Danke, hab ich nun ergänzt, nun bekomme ich einen Connection refused Error