我对 Flutter 比较陌生,我目前正在尝试从 Wordpress 网站获取帖子。在之前的一个项目中,我有一个函数,但现在它不再起作用了。
这是函数(我替换了网址):
Future<List<Artikel>> fetchArticelList(int artikel) async{
print("Loading Articels");
try {
final response = await http.get(
'https://WORDPRESSURL/wp-json/wp/v2/posts?_embed&per_page=' + artikel.toString(),
headers: {"Accept":"application/json"},
);
if (response.statusCode == 200) {
List<Artikel> artikel = json.decode(response.body)
.cast<Map<String, dynamic>>()
.map<Artikel>((json) => Artikel.fromJson(json))
.toList();
return artikel;
} else {
throw Exception("Error");
}
} catch(e){
throw Exception(e.toString());
}
}
这是错误:
E/flutter (10158): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: Exception: Exception: NoSuchMethodError: The method '[]' was called on null.
E/flutter (10158): Receiver: null
E/flutter (10158): Tried calling: [](0)
我用调试器运行了它,我发现它在第 7 行失败,并带有“.toList();” (它在一个单独的行中,所以我可以用调试器测试它,这不是导致错误的原因)。正如我所说,我对 Flutter 比较陌生,我只是从以前的项目中复制了这个,所以我不知道它有什么作用了。该函数在类 Articel 中,这是我调用该函数的 Widget:
class _androidThomsLineLoadingScreenState extends State<androidThomsLineLoadingScreen> {
@override
void initState() {
// TODO: implement initState
super.initState();
Artikel().fetchArticelList(100).then((value) => Navigator.pushReplacementNamed(context, '/artikelListView', arguments: {'artikelList': value}));
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.transparent,
body: Center(
child: SpinKitWave(
color: Color(0xffa51a3e),
),
),
);
}
}
这里是 .jsonFunction:
factory Artikel.fromJson(Map<String, dynamic> json) {
if (json == null) {
print("got Empty JSON");
return null;
} else {
print("Erstelle Artikel");
}
try {
//Initialising one line Parameters
final String renderedTitle =
new HtmlUnescape().convert(json['title']['rendered']);
String date = DateFormat.yMd().format(DateTime.parse(json['date']));
String imageUrl = json['_embedded']['wp:featuredmedia'][0]
['media_details']['sizes']['medium']['source_url'];
String url = json['guid']['rendered'];
String excerpt = parse(json['excerpt']['rendered'].toString())
.documentElement
.text
.replaceAll(r'\n', r'');
bool thumbnailProvided = false;
//Get Author(s)
List<String> authorsNameList = [];
String authorString = '';
List<int> authorIdList = [];
if (json['_embedded']['author'] != null) {
for (int i = 0; i < json['_embedded']['author'].length; i++) {
//Generating authorString
if (i > 0) authorString = authorString + ', ';
authorString = authorString + json['_embedded']['author'][i]['name'];
//Generating authorsNameList
authorsNameList.add(json['_embedded']['author'][i]['name']);
//Generating authorIdList
authorIdList.add(json['_embedded']['author'][i]['id']);
}
}
//Generate HTML for Content
// String content = parse(json['content']['rendered'].replaceAll(r'\n', r'').replaceAll(r'\"', r'"').toString()).documentElement.text; //Just Text, no formating
String content = '<h1>$renderedTitle</h1><h4>$date $authorString</h4>' +
json['content'][
'rendered']; //HTML Text from API without Pictures //HTML Text from APi
return Artikel(
title: renderedTitle,
date: date,
url: url,
imageUrl: imageUrl,
content: content,
excerpt: excerpt, //Rmeoving HTML from Text
authorString: authorString,
authorIdList: authorIdList,
authorsNameList: authorsNameList,
thumbnailProvided: thumbnailProvided,
);
} catch (e) {
throw Exception(e.toString());
}
}
我希望你能帮助我,这可能是一个非常严重的错误,但我现在正在努力解决大约一天。
编辑:根据要求:这里是 request.body。如您所见,它是一个 JSON 列表,长度通常由参数“artikel”决定,但我在这里只放了一个(我也替换了 Wordpress URL):https://pastebin.com/5NrB6GkD
答案 0 :(得分:0)
正如我所想,这是一个非常愚蠢的错误。错误是,有一个字符串有时为空,但我看到了。