我正在使用 http: ^0.13.3,
这是我的简单代码,当我运行此代码时,出现错误:“期望类型为 'Map
class SubCategoryObject {
final int id;
final String category;
SubCategoryObject({@required this.id, @required this.category});
factory SubCategoryObject.fromJson(Map<String, dynamic> json) {
return SubCategoryObject(
id: json['id'],
category: json['title'],
);
}
}
class SubCategoryListScreen extends StatelessWidget {
static const route = 'sub-category-list';
SubCategoryListScreen({Key key}) : super(key: key);
Future<SubCategoryObject> getData() async {
final res =
await http.get(Uri.https("jsonplaceholder.typicode.com", "todos"));
if (res.statusCode == 200) {
return SubCategoryObject.fromJson(jsonDecode(res.body));
} else {
// If that call was not successful, throw an error.
throw Exception('Failed to load ');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("martman"),
),
body: FutureBuilder<SubCategoryObject>(
future: getData(),
builder: (ctx, snapshot) {
// Checking if future is resolved or not
if (snapshot.connectionState == ConnectionState.done) {
// If we got an error
if (snapshot.hasError) {
return Center(
child: Text(
'${snapshot.error} occured',
style: TextStyle(fontSize: 18),
),
);
// if we got our data
} else if (snapshot.hasData) {
return Text(snapshot.data.category);
}
}
// Displaying LoadingSpinner to indicate waiting state
return Center(
child: CircularProgressIndicator(),
);
},
),
);
}
}
答案 0 :(得分:3)
请查看以下链接。它返回列表,而不是地图数据。 https://jsonplaceholder.typicode.com/todos
Future<List<SubCategoryObject>> getData() async {
final res =
await http.get(Uri.https("jsonplaceholder.typicode.com", "todos"));
if (res.statusCode == 200) {
dynamic result = jsonDecode(res.body);
return (result as List).map((e) => SubCategoryObject.fromJson(e)).toList();
} else {
// If that call was not successful, throw an error.
throw Exception('Failed to load ');
}
}