【发布时间】:2021-04-27 10:26:21
【问题描述】:
我正在尝试构建一个简单的应用程序来查看 json 数据。 我从 Flutter 网站上的示例开始:https://flutter.dev/docs/cookbook/networking/fetch-data
这是有效的。
现在我正在尝试从以下位置加载 cmets 列表:https://jsonplaceholder.typicode.com/comments/
当我运行应用程序时,我只看到从 CircularProgressIndicator 加载的圆圈。为什么?我无法获取数据,但我不明白为什么,你能帮帮我吗?代码如下:
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:http/http.dart' as http;
import 'dart:convert';
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Flutter json test',
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: new MyHomePage(title: 'Flutter json test'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => new _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
Future<List<Comment>> _getComments() async {
var data = await http.get("https://jsonplaceholder.typicode.com/comments/");
List<Comment> comments = [];
if(data.statusCode==200) {
var jsonData = json.decode(data.body);
for (var d in jsonData) {
Comment comment = Comment(
d["postId"],d["id"], d["name"], d["email"], d["body"]);
comments.add(comment);
}
print(comments.length.toString());
return comments;
}
else {
throw Exception('Failed to load album');
}
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text(widget.title),
),
body: Container(
child: FutureBuilder(
future: _getComments(),
builder: (BuildContext context, AsyncSnapshot snapshot){
if(snapshot.hasData){
return ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (BuildContext context, int index) {
return ListTile(
title: Text( snapshot.data[index]['name']),
subtitle: Text(snapshot.data[index]['email']),
onTap: (){
Navigator.push(context,
new MaterialPageRoute(builder: (context) => DetailPage(snapshot.data[index]))
);
},
);
},
);
} else {
return Center(
child: CircularProgressIndicator(),
);
}
},
),
),
);
}
}
class DetailPage extends StatelessWidget {
final Comment comment;
DetailPage(this.comment);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(comment.name),
)
);
}
}
class Comment {
final int postId;
final String id;
final String name;
final String email;
final String body;
Comment(this.postId, this.id, this.name, this.email, this.body);
}
你能给我一些建议吗?谢谢!
【问题讨论】: