我想创建一个新闻应用程序,并使用 newsapi.org 作为来源。
我正在尝试获取来自 Http 库的 JSON 数据。
我在下面提供了完整的代码。
它没有给我任何错误,但没有加载数据,当我打印数据时,它打印的一切正常,但我无法显示它。
我不知道是什么问题,但我所有的项目都在这个问题上停止了。
我正在寻找此代码的解决方案,因为它不起作用。
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:newly/services/networking.dart';
import 'package:newly/widgets/article.dart';
class NewsScreen extends StatefulWidget {
@override
_NewsScreenState createState() => _NewsScreenState();
}
class _NewsScreenState extends State<NewsScreen> {
List<Article> articles = [];
NetworkHelper networkHelper = NetworkHelper(
url:
'https://newsapi.org/v2/everything?q=bitcoin&apiKey=392495172bab4b3885ae93760df54b91',
);
Future<List<Widget>> getNews() async {
var newsData = await networkHelper.getData();
for (int i = 0; i < await newsData['articles'].length; i++) {
var title = await newsData['articles'][i]['title'];
var urlToImage = await newsData['articles'][i]['urlToImage'];
var content = await newsData['articles'][i]['content'];
var author = await newsData['articles'][i]['author'];
var url = await newsData['articles'][i]['url'];
print(title);
print(urlToImage);
print(url);
print(content);
print(author);
print('123456789123456789123456789123456789');
articles.add(
Article(
author: author,
content: content,
title: title,
url: url,
urlToImage: urlToImage,
),
);
print(articles[0].author);
}
return articles;
}
Future<List<Article>> showArticles() async {
var data = await get(
'https://newsapi.org/v2/everything?q=bitcoin&apiKey=392495172bab4b3885ae93760df54b91',
);
var dataDecoded = await json.decode(data.body);
List<Article> articles = [];
await dataDecoded.forEach(
(article) {
articles.add(
Article(
author: article['author'],
content: article['content'],
title: article['title'],
url: article['url'],
urlToImage: article['urlToImage'],
),
);
},
);
return articles;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.black,
centerTitle: true,
title: Text(
'Newly',
style: TextStyle(
color: Colors.white,
),
),
),
body: FutureBuilder(
future: getNews(),
builder: (context, snapshot) {
return ListView(
children: articles,
);
},
),
);
}
}
网络助手:
import 'package:http/http.dart' as http;
import 'dart:convert';
class NetworkHelper {
NetworkHelper({this.url});
final String url;
Future getData() async {
http.Response response = await http.get(url);
if (response.statusCode == 200) {
String data = response.body;
return json.decode(data);
} else {
print('something wrong');
print(response.statusCode);
}
}
}
最佳答案
与 一起工作时json 数据
好的做法是到 创建模型 为此,然后只是 通过api获取数据
创建模型和类很容易,而且不费力,使您的工作变得轻松;)
对于 为您的项目创建模型
访问 https://javiercbk.github.io/json_to_dart/
只是copy your json data
和 paste in the textField
只需单击一下,您就可以准备好模型类
用于访问数据
Test _test = Test.fromJson(response.body);
就是这样。引用下图
关于arrays - 如何在 flutter 中解析json?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58706067/