Listview Builder没有响应api flutter rest api问题



我正在使用一个服务从xml创建api;

这是我的模型文件:

// To parse this JSON data, do
//
//     final economylistXml = economylistXmlFromJson(jsonString);
import 'dart:convert';
EconomylistXml economylistXmlFromJson(String str) => EconomylistXml.fromJson(json.decode(str));
String economylistXmlToJson(EconomylistXml data) => json.encode(data.toJson());
class EconomylistXml {
EconomylistXml({
required this.haberler,
});
Haberler haberler;
factory EconomylistXml.fromJson(Map<String, dynamic> json) => EconomylistXml(
haberler: Haberler.fromJson(json["haberler"]),
);
Map<String, dynamic> toJson() => {
"haberler": haberler.toJson(),
};
}
class Haberler {
Haberler({
required this.haber,
});
List<Haber> haber;
factory Haberler.fromJson(Map<String, dynamic> json) => Haberler(
haber: List<Haber>.from(json["haber"].map((x) => Haber.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"haber": List<dynamic>.from(haber.map((x) => x.toJson())),
};
}
class Haber {
Haber({
required this.haberManset,
required this.haberResim,
required this.haberLink,
required this.haberId,
required this.haberVideo,
required this.haberAciklama,
required this.haberMetni,
required this.haberKategorisi,
required this.haberTarihi,
required this.mansetResim,
required this.izlesId,
required this.yorumSay,
required this.okunmaadedi,
required this.anasayfamanset,
required this.kategorimanset,
});
String? haberManset;
String? haberResim;
String? haberLink;
String? haberId;
String? haberVideo;
String? haberAciklama;
String? haberMetni;
HaberKategorisi? haberKategorisi;
String? haberTarihi;
String? mansetResim;
String? izlesId;
String? yorumSay;
String? okunmaadedi;
String? anasayfamanset;
String? kategorimanset;
factory Haber.fromJson(Map<String, dynamic> json) => Haber(
haberManset: json["haber_manset"],
haberResim: json["haber_resim"],
haberLink: json["haber_link"],
haberId: json["haber_id"],
haberVideo: json["haber_video"],
haberAciklama: json["haber_aciklama"],
haberMetni: json["haber_metni"],
haberKategorisi: haberKategorisiValues.map[json["haber_kategorisi"]],
haberTarihi: json["haber_tarihi"],
mansetResim: json["manset_resim"],
izlesId: json["izles_id"],
yorumSay: json["yorumSay"],
okunmaadedi: json["okunmaadedi"],
anasayfamanset: json["anasayfamanset"],
kategorimanset: json["kategorimanset"],
);
Map<String, dynamic> toJson() => {
"haber_manset": haberManset,
"haber_resim": haberResim,
"haber_link": haberLink,
"haber_id": haberId,
"haber_video": haberVideo,
"haber_aciklama": haberAciklama,
"haber_metni": haberMetni,
"haber_kategorisi": haberKategorisiValues.reverse[haberKategorisi],
"haber_tarihi": haberTarihi,
"manset_resim": mansetResim,
"izles_id": izlesId,
"yorumSay": yorumSay,
"okunmaadedi": okunmaadedi,
"anasayfamanset": anasayfamanset,
"kategorimanset": kategorimanset,
};
}
enum HaberKategorisi { EKONOMI, DNYA }
final haberKategorisiValues = EnumValues({
"Dünya": HaberKategorisi.DNYA,
"Ekonomi": HaberKategorisi.EKONOMI
});
class EnumValues<T> {
Map<String, T> map;
Map<T, String>? reverseMap;
EnumValues ( this.map);
Map<T, String> get reverse {
if (reverseMap == null) {
reverseMap = map.map((k, v) => new MapEntry(v, k));
}
return reverseMap!;
}
}

这就是我调用api的地方:

import 'package:flutter/material.dart';
import 'package:halkaarzhisseler/models/apis/economy_api.dart';
import 'package:http/http.dart' as http;
import '../models/apis/economy_xml.dart';
import 'haberdetail.dart';

class Economy extends StatefulWidget {
const Economy({Key? key}) : super(key: key);
@override
State<Economy> createState() => _EconomyState();
}
class _EconomyState extends State<Economy> {
ScrollController? controller;
final scaffoldKey = GlobalKey<ScaffoldState>();
final url = Uri.parse('https://v1.nocodeapi.com/miktadtahir/xml_to_json/htvLvoPDCwIEyTxa?url=https://www.trthaber.com/xml_mobile.php?tur=xml_genel&kategori=ekonomi&adet=20&selectEx=yorumSay,okunmaadedi,anasayfamanset,kategorimanset');
var counter;
EconomylistXml? haberResult;
Future callHaber() async {
try{
final response = await http.get(url);
if(response.statusCode == 200){
var haberler = economylistXmlFromJson(response.body);
if(mounted);
setState(() {
haberResult = haberler;
});
return haberler;
} else {
print(response.statusCode);
}
} catch(e) {
print(e.toString());
}
}
@override
void initState() {
// TODO: implement initState
super.initState();
callHaber();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
centerTitle: false,
automaticallyImplyLeading: false,
title: Text(
'Ekonomi Haberleri'
),
),
body: Center(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: counter != null ?
ListView.builder(
itemCount: counter,
itemBuilder: (context, index){
return Card(
child: ListTile(
title: Text(haberResult?.haberler.haber[index].haberManset??""),
leading: CircleAvatar(
backgroundImage: NetworkImage(haberResult?.haberler.haber[index].haberResim??""),),

onTap: () => Navigator.push(
context, MaterialPageRoute(builder: (context) => HaberDetailScreen( subtitle: haberResult?.haberler.haber[index].haberMetni??"", title: haberResult?.haberler.haber[index].haberManset??"",image: haberResult?.haberler.haber[index].haberResim??"")),),
),
);
}) : Center(child: CircularProgressIndicator(
)),
),
),
);
}
}

/*class Economy extends StatefulWidget {
const Economy({Key? key}) : super(key: key);
@override
State<Economy> createState() => _EconomyState();
}
class _EconomyState extends State<Economy> {
ScrollController? controller;
final scaffoldKey = GlobalKey<ScaffoldState>();
final url = Uri.parse('https://api.collectapi.com/news/getNews?country=tr&tag=economy&padding=10');
var counter;
Economylist? haberResult;
Future callHaber() async {
try{
Map<String, String> requestHeaders = {
'Content-Type': 'application/json',
'Authorization': 'apikey 3fPhNZfVyrl8dOAkT86niI:3g2OzN57bil8vArOdVE3ka'
};
final response = await http.get(url,headers:requestHeaders);
if(response.statusCode == 200){
var result = economylistFromJson(response.body);
if(mounted);
setState(() {
counter = counter = result.result.length;
haberResult = result;
});
return result;
} else {
print(response.statusCode);
}
} catch(e) {
print(e.toString());
}
}
@override
void initState() {
// TODO: implement initState
super.initState();
callHaber();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
centerTitle: false,
automaticallyImplyLeading: false,
title: Text(
'Ekonomi Haberleri'
),
),
body: Center(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: counter != null ?
ListView.builder(
itemCount: counter,
itemBuilder: (context, index){
return Card(
child: ListTile(
title: Text(haberResult?.result[index].name??""),
leading: CircleAvatar(
backgroundImage: NetworkImage(haberResult?.result[index].image??""),),

onTap: () => Navigator.push(
context, MaterialPageRoute(builder: (context) => HaberDetailScreen( subtitle: haberResult?.result[index].description??"", title: haberResult?.result[index].name??"",image: haberResult?.result[index].image??"")),),
),
);
}) : Center(child: CircularProgressIndicator(
)),
),
),
);
}
}
*/
JSON响应:

{
"haberler": {
"haber": [
{
"haber_manset": "Avusturya’da enflasyonun tırmanışı temmuzda da sürdü",
"haber_resim": "https://trthaberstatic.cdn.wp.trt.com.tr/resimler/1510000/avusturya-aa-1510377.jpg",
"haber_link": "haber/dunya/avusturyada-enflasyonun-tirmanisi-temmuzda-da-surdu-702277.html",
"haber_id": "702277",
"haber_video": "",
"haber_aciklama": "Avusturya’da Rusya-Ukrayna savaşıyla tırmanışa geçen enflasyon durdurulamıyor. Haziranda 8,7 olan enflasyon temmuzda 9,3’e yükselerek 1975’ten bu yana en yüksek seviyeye çıktı.",
"haber_metni": "<p>rnt<a href="https://www.trthaber.com/etiket/avusturya/" target="_blank">Avusturya</a> İstatistik Kurumu’ndan yapılan açıklamada, temmuzda enflasyonun yüzde 9,3’e yükseldiği bildirildi. Bu oranın 1975’ten bu yana kayıtlara geçen en yüksek seviye olduğu ifade edildi.</p>rn<p>rntAçıklamada, akaryakıt, <a href="https://www.trthaber.com/etiket/enerji/" target="_blank">enerji</a> ve <a href="https://www.trthaber.com/etiket/gida/" target="_blank">gıda</a> sektörlerindeki fiyat artışlarının enflasyonun yükselmesinde belirleyici rol oynadığı kaydedildi.</p>rn<p>rntBuna göre, temel gıda ve içecek fiyatları yüzde 12,5, süt ürünleri ise yüzde 17,4 oranında yükseldi. Et ürünleri yüzde 13,9, sebze ve meyve 12,5, tahılla ilişkili ürünlerin fiyatları ise 11,2 oranında arttı.</p>rn<p>rnt<strong>İkinci el araçlarda yüzde 24,7’lik artış</strong></p>rn<p>rntBu arada, <a href="https://www.trthaber.com/etiket/akaryakit/" target="_blank">akaryakıt</a> fiyatlarının yüzde 63,1 oranında arttığı ülkede, ikinci el araç fiyatları, uzun bir aranın ardından ciddi oranda yükseldi.</p>rn<p>rntYeni araç fiyatlarının yüzde 8,9 oranında artış gösterdiği Avusturya’da ikinci el araçlarda bu oran yüzde 24,7 gibi ülke tarihinde az rastlanan bir gelişme olarak kayıtlara geçti.</p>",
"haber_kategorisi": "Ekonomi",
"haber_tarihi": "Thu, 2022-08-18 17:31:00",
"manset_resim": "https://trthaberstatic.cdn.wp.trt.com.tr/resimler/1510000/avusturya-aa-1510377.jpg",
"izles_id": "",
"yorumSay": "0",
"okunmaadedi": "0",
"anasayfamanset": "0",
"kategorimanset": "0"
},
{
"haber_manset": "Merkez Bankası rezervleri 113,7 milyar dolar oldu",
"haber_resim": "https://trthaberstatic.cdn.wp.trt.com.tr/resimler/1508000/merkez-bankasi-binasi-hd-aa-1509968.jpg",
"haber_link": "haber/ekonomi/merkez-bankasi-rezervleri-1137-milyar-dolar-oldu-702247.html",
"haber_id": "702247",
"haber_video": "",
"haber_aciklama": "Türkiye Cumhuriyet Merkez Bankası toplam rezervleri 12 Ağustos haftasında 113 milyar 738 milyon dolara çıktı.",
"haber_metni": "<p>rntTürkiye Cumhuriyet <a href="https://www.trthaber.com/etiket/merkez-bankasi/" target="_blank">Merkez Bankası</a> (TCMB) arafından Haftalık Para ve Banka İstatistikleri yayımlandı.</p>rn<p>rntBuna göre, 12 Ağustos itibarıyla Merkez Bankası brüt döviz rezervleri, 4 milyar 791 milyon <a href="https://www.trthaber.com/etiket/dolar/" target="_blank">dolar</a> artışla 72 milyar 560 milyon dolara yükseldi. Brüt döviz rezervleri, 5 Ağustos'ta 67 milyar 769 milyon dolar seviyesindeydi.</p>rn<p>rntSöz konusu dönemde <a href="https://www.trthaber.com/etiket/altin/" target="_blank">altın</a> rezervleri de 309 milyon dolar artarak 40 milyar 868 milyon dolardan 41 milyar 177 milyon dolara yükseldi.</p>rn<p>rntBöylece Merkez Bankası'nın toplam rezervleri, 12 Ağustos haftasında bir önceki haftaya kıyasla 5 milyar 101 milyon dolar yükselişle 108 milyar 637 milyon dolardan 113 milyar 738 milyon dolara çıktı.</p>",
"haber_kategorisi": "Ekonomi",
"haber_tarihi": "Thu, 2022-08-18 15:06:00",
"manset_resim": "https://trthaberstatic.cdn.wp.trt.com.tr/resimler/1508000/merkez-bankasi-binasi-hd-aa-1509968.jpg",
"izles_id": "",
"yorumSay": "0",
"okunmaadedi": "0",
"anasayfamanset": "0",
"kategorimanset": "1"
},
{
"haber_manset": "Türkiye'den 155,2 milyon dolarlık yaş meyve sebze ihracatı",
"haber_resim": "https://trthaberstatic.cdn.wp.trt.com.tr/resimler/1650000/domates-sebze-aa-1650261.jpg",
"haber_link": "haber/ekonomi/turkiyeden-1552-milyon-dolarlik-yas-meyve-sebze-ihracati-702245.html",
"haber_id": "702245",
"haber_video": "",
"haber_aciklama": "Türkiye'nin temmuzdaki yaş meyve ve sebze ihracatı 155,2 milyon dolara ulaştı. Rusya, yüzde 52'lik artış ve 83,1 milyon dolarla en fazla ihracat yapılan ülke oldu.",
"haber_metni": "<p>rntAkdeniz Yaş Meyve Sebze İhracatçıları Birliği Başkanı Ferhat Gürüz, yazılı açıklamasında, Türkiye'nin yaş meyve sebze üretiminde önemli ülkeler arasında yer aldığına işaret etti.</p>rn<p>rntGürüz, temmuzda 179 bin 398 ton ürünü ihracat pazarlarında değerlendirdiklerini belirtti.</p>rn<p>rntBu kapsamda, Türkiye'nin temmuzdaki yaş meyve ve sebze ihracatı 155,2 milyon dolara ulaştı.</p>rn<p>rntYaş meyve ve sebze sektörü temmuzdaki ihracat hacminde en güçlü artışları mantar, armut ve kayısı satışından elde etti.</p>rn<p>rntYılın 7. ayında, sektör en fazla şeftali, kiraz-vişne ve kayısı ihraç etti. Şeftalide yüzde 53 artışla 41 milyon dolarlık, kiraz-vişnede yüzde 45 azalışla 34 milyon dolarlık, kayısıda yüzde 82 artışla 26 milyon dolarlık döviz geliri elde edildi. </p>rn<p>rnt<strong>En fazla ihracat Rusya'ya</strong></p>rn<p>rntEn fazla ihracat yapılan ülkeler listesinde, yüzde 52'lik artış ve 83,1 milyon dolarla <a href="https://www.trthaber.com/etiket/rusya/" target="_blank">Rusya</a> birinci sırada yer aldı.</p>rn<p>rntBu ülkeyi 28,2 milyon dolarla Almanya, 4,3 milyon dolarla <a href="https://www.trthaber.com/etiket/irak/" target="_blank">Irak</a> takip etti. </p>",
"haber_kategorisi": "Ekonomi",
"haber_tarihi": "Thu, 2022-08-18 14:56:00",
"manset_resim": "https://trthaberstatic.cdn.wp.trt.com.tr/resimler/1650000/domates-sebze-aa-1650261.jpg",
"izles_id": "",
"yorumSay": "0",
"okunmaadedi": "0",
"anasayfamanset": "0",
"kategorimanset": "1"
},
{
"haber_manset": "Bankaların toplam mevduatı arttı",
"haber_resim": "https://trthaberstatic.cdn.wp.trt.com.tr/resimler/1476000/para-odeme-1476750.jpg",
"haber_link": "haber/ekonomi/bankalarin-toplam-mevduati-artti-702244.html",
"haber_id": "702244",
"haber_video": "",
"haber_aciklama": "Bankacılık sektörünün toplam mevduatı, 156,8 milyar lira artarak 8 trilyon 29,9 milyar liraya yükseldi. Kredi hacmi ise 6 trilyon 318,2 milyar liraya ulaştı",
"haber_metni": "<p>rntTürkiye Cumhuriyet <a href="https://www.trthaber.com/etiket/merkez-bankasi/" target="_blank">Merkez Bankası</a> (TCMB) tarafından haftalık para ve banka istatistikleri yayımlandı.</p>rn<p>rntBuna göre, <a href="https://www.trthaber.com/etiket/bankacilik/" target="_blank">bankacılık</a> sektöründeki toplam mevduat (bankalar arası dahil) 12 Ağustos ile biten haftada 156 milyar 808 milyon 168 bin lira artarak 8 trilyon 29 milyar 916 milyon 329 bin liraya yükseldi.</p>rn<p>rntAynı dönemde bankalardaki TL cinsi mevduat yüzde 4,32 artışla 3 trilyon 410 milyar 177 milyon 877 bin lira, yabancı para (YP) cinsinden mevduat ise yüzde 0,14 yükselişle 4 trilyon 247 milyar 678 milyon 230 bin lira oldu.</p>rn<p>rntBankalarda bulunan toplam YP mevduatı, geçen hafta 250 milyar 168 milyon <a href="https://www.trthaber.com/etiket/dolar/" target="_blank">dolar</a> düzeyinde gerçekleşirken, bu tutarın 217 milyar 145 milyon doları yurt içinde yerleşik kişilerin hesaplarında toplandı. Yurt içi yerleşiklerin toplam YP mevduatındaki değişime bakıldığında, parite etkisinden arındırılmış verilerle 12 Ağustos itibarıyla 313 milyon dolarlık azalış görüldü.</p>rn<p>rnt<strong>Taksitli ticari kredi miktarı arttı</strong></p>rn<p>rntMevduat bankalarındaki tüketici kredileri, geçen hafta yüzde 0,71 artarak 887 milyar 671 milyon 31 bin lira oldu. Aynı dönemde taksitli ticari krediler yüzde 0,15 artışla 779 milyar 531 milyon 217 bin liraya, kredi kartları bakiyesi yüzde 1,88 yükselişle 452 milyar 95 milyon 82 bin liraya çıktı.</p>rn<p>rntMevduat bankalarındaki tüketici kredilerinin 322 milyar 886 milyon 857 bin lirası konut, 19 milyar 467 milyon 79 bin lirası taşıt ve 545 milyar 317 milyon 95 bin lirası diğer kredilerden oluştu.</p>rn<p>rntBankacılık sektörünün TCMB dahil toplam kredi hacmi de 12 Ağustos ile biten haftada 59 milyar 367 milyon 562 bin lira artarak 6 trilyon 318 milyar 209 milyon 774 bin liraya çıktı. Toplam kredi hacmi, geçen yılın aynı dönemine göre yüzde 67,35 artış kaydetti.</p>rn",
"haber_kategorisi": "Ekonomi",
"haber_tarihi": "Thu, 2022-08-18 14:56:00",
"manset_resim": "https://trthaberstatic.cdn.wp.trt.com.tr/resimler/1476000/para-odeme-1476750.jpg",
"izles_id": "",
"yorumSay": "0",
"okunmaadedi": "0",
"anasayfamanset": "0",
"kategorimanset": "1"
},
{
"haber_manset": "Bankacılık sektörünün kredi hacmi 6 trilyon 569 milyar liraya yükseldi",
"haber_resim": "https://trthaberstatic.cdn.wp.trt.com.tr/resimler/1476000/varlik-para-1476290.jpg",
"haber_link": "haber/ekonomi/bankacilik-sektorunun-kredi-hacmi-6-trilyon-569-milyar-liraya-yukseldi-702240.html",
"haber_id": "702240",
"haber_video": "",
"haber_aciklama": "Bankacılık sektörünün kredi hacmi, geçen hafta 53 milyar 374 milyon lira artarak 6 trilyon 569 milyar 302 milyon liraya yükseldi. Tüketici kredileri tutarı, 6 milyar 487 milyon lira artışla 936 milyar 273 milyon liraya yükseldi.",
"haber_metni": "<p>rnt<a href="https://www.trthaber.com/etiket/bankacilik/" target="_blank">Bankacılık</a> Düzenleme ve Denetleme Kurumu (BDDK) tarafından yayımlanan haftalık bültene göre, sektörün kredi hacmi 12 Ağustos itibarıyla 53 milyar 374 milyon lira arttı. Söz konusu dönemde toplam kredi hacmi 6 trilyon 515 milyar 928 milyon liradan 6 trilyon 569 milyar 302 milyon liraya çıktı.</p>rn<p>rntBankacılık sektöründeki toplam mevduat da (bankalararası dahil), geçen hafta 144 milyar 199 milyon lira arttı. Söz konusu haftada yüzde 1,9 yükselen bankacılık sektörü toplam mevduatı, 7 trilyon 731 milyar 715 milyon lira oldu.</p>rn<p>rnt<strong>Tüketici kredileri tutarı 936 milyar lirayı aştı</strong></p>rn<p>rntVerilere göre, tüketici kredileri tutarı, 12 Ağustos itibarıyla 6 milyar 487 milyon lira artışla 936 milyar 273 milyon liraya yükseldi. Söz konusu kredilerin 352 milyar 496 milyon lirası konut, 26 milyar 790 milyon lirası taşıt ve 556 milyar 987 milyon lirası ihtiyaç kredilerinden oluştu.</p>rn<p>rntSöz konusu dönemde taksitli ticari kredilerin tutarı 1 milyar 383 milyon lira artarak 864 milyar 363 milyon liraya yükseldi. Bankaların bireysel kredi kartı alacakları da yüzde 2,5 artışla 305 milyar 697 milyon liraya çıktı. Bireysel kredi kartı alacaklarının 131 milyar 78 milyon lirası taksitli, 174 milyar 619 milyon lirası taksitsiz oldu.</p>rn<p>rnt<strong>Yasal öz kaynaklar arttı</strong></p>rn<p>rnt<a href="https://www.trthaber.com/etiket/bddk/" target="_blank">BDDK</a> haftalık verilerine göre, bankacılık sektöründe takipteki alacaklar, 12 Ağustos itibarıyla bir önceki haftaya göre 633 milyon lira azalarak 162 milyar 5 milyon liraya geriledi. Söz konusu takipteki alacakların 132 milyar 862 milyon lirasına özel karşılık ayrıldı.</p>rn<p>rntAynı dönemde bankacılık sisteminin yasal öz kaynaklar 635 milyon lira artarak 1 trilyon 320 milyar 278 milyon lira oldu.</p>",
"haber_kategorisi": "Ekonomi",
"haber_tarihi": "Thu, 2022-08-18 14:44:00",
"manset_resim": "https://trthaberstatic.cdn.wp.trt.com.tr/resimler/1476000/varlik-para-1476290.jpg",
"izles_id": "",
"yorumSay": "0",
"okunmaadedi": "0",
"anasayfamanset": "0",
"kategorimanset": "1"
},

{...}

},  },     

由于字符限制,我剪切了响应。最终,我一无所获。控制台或其他地方没有错误。只有circularprogressıindicator保持工作问题出在哪里?感谢您的帮助

您检查了计数器!=null以添加listview,但从未更新计数器的值。在中

Future callHaber() async {
try{
final response = await http.get(url);
if(response.statusCode == 200){
var haberler = economylistXmlFromJson(response.body);
if(mounted);
setState(() {

haberResult = haberler;
counter = haberResult?.haberler.haber.length//<--- here
});
return haberler;
} else {
print(response.statusCode);
}
} catch(e) {
print(e.toString());
}
}

相关内容

  • 没有找到相关文章

最新更新