Flutter 如何打开列表<;动态>;进入列表<;地图>&燃气轮机&燃气轮机;
我开始学习颤振,因为我想建立一个应用程序,可以处理API调用。 但现在我很沮丧,因为我想做一个无限的负荷,却不能让它工作。 问题是,该方法需要一个未来,但我不知道如何将API的响应转换为列表Flutter 如何打开列表<;动态>;进入列表<;地图>&燃气轮机&燃气轮机;,flutter,dart,Flutter,Dart,我开始学习颤振,因为我想建立一个应用程序,可以处理API调用。 但现在我很沮丧,因为我想做一个无限的负荷,却不能让它工作。 问题是,该方法需要一个未来,但我不知道如何将API的响应转换为列表 Future<List<Map>> _getServerData(int length) async{ String api = data.url +length.toString(); final res= await http.get("data.url&q
Future<List<Map>> _getServerData(int length) async{
String api = data.url +length.toString();
final res=
await http.get("data.url");
if (res.statusCode == 200) {
List<dynamic> resp = jsonDecode(res.body);
return resp;
} else {
throw Exception('Failed to load DATA');
}
}
Future\u getServerData(int-length)异步{
字符串api=data.url+length.toString();
最终结果=
等待http.get(“data.url”);
如果(res.statusCode==200){
列表响应=jsonDecode(res.body);
返回响应;
}否则{
抛出异常(“加载数据失败”);
}
}
全班同学都在听大卫的教程。
但是在他的教程中,他没有使用API
Future<List<Map>> _getExampleServerData(int length) {
return Future.delayed(Duration(seconds: 1), () {
return List<Map>.generate(length, (int index) {
return {
"body": WordPair.random().asPascalCase,
"avatar": 'https://api.adorable.io/avatars/60/${WordPair.random().asPascalCase}.png',
};
});
});
}
Future\u getExampleServerData(整数长度){
返回未来。延迟(持续时间(秒:1),(){
返回列表。生成(长度,(整数索引){
返回{
“body”:WordPair.random().asPascalCase,
“阿凡达”:https://api.adorable.io/avatars/60/${WordPair.random().asPascalCase}.png',
};
});
});
}
他就是这样解决的
下面是全班同学
import 'dart:async';
import 'dart:convert';
import 'package:Kontra/pages/articel_list.dart';
import 'package:http/http.dart' as http;
import 'package:Kontra/api/url.dart' as data;
import 'package:Kontra/api/articelsResponse.dart';
/// Example data as it might be returned by an external service
/// ...this is often a `Map` representing `JSON` or a `FireStore` document
Future<List<Map>> _getServerData(int length) async{
String api = data.url +length.toString();
final res=
await http.get(data.url);
if (res.statusCode == 200) {
List<dynamic> resp = jsonDecode(res.body);
return resp;
} else {
throw Exception('Failed to load DATA');
}
}
/// PostModel has a constructor that can handle the `Map` data
/// ...from the server.
class PostModel {
String sId;
String title;
String text;
String author;
String pictures;
String link;
int postId;
String createdAt;
PostModel({this.title, this.text, this.pictures, this.link, this.postId});
factory PostModel.fromServerMap(Map<String, dynamic> json) {
return PostModel(
title: json['title'],
text: json['text'],
pictures: json['pictures'],
link: json['link'],
postId: json['postId']
);
}
}
/// PostsModel controls a `Stream` of posts and handles
/// ...refreshing data and loading more posts
class PostsModel {
int reload = 0;
Stream<List<PostModel>> stream;
bool hasMore;
bool _isLoading;
List<Map> _data;
StreamController<List<Map>> _controller;
PostsModel() {
_data = List<Map>();
_controller = StreamController<List<Map>>.broadcast();
_isLoading = false;
stream = _controller.stream.map((List<Map> postsData) {
return postsData.map((Map postData) {
return PostModel.fromServerMap(postData);
}).toList();
});
hasMore = true;
refresh();
}
Future<void> refresh() {
return loadMore(clearCachedData: true);
}
Future<void> loadMore({bool clearCachedData = false}) {
if (clearCachedData) {
_data = List<Map>();
hasMore = true;
}
if (_isLoading || !hasMore) {
return Future.value();
}
_isLoading = true;
return _getServerData(reload++).then((postsData) {
_isLoading = false;
_data.addAll(postsData);
hasMore = (_data.length < 30);
_controller.add(_data);
});
}
}
导入'dart:async';
导入“dart:convert”;
导入“包装:Kontra/pages/articel_list.dart”;
将“package:http/http.dart”导入为http;
导入“package:Kontra/api/url.dart”作为数据;
导入“包装:Kontra/api/articelsResponse.dart”;
///外部服务可能返回的示例数据
///…这通常是一个表示“JSON”或“FireStore”文档的“Map”
Future\u getServerData(int-length)异步{
字符串api=data.url+length.toString();
最终结果=
等待http.get(data.url);
如果(res.statusCode==200){
列表响应=jsonDecode(res.body);
返回响应;
}否则{
抛出异常(“加载数据失败”);
}
}
///PostModel有一个可以处理“Map”数据的构造函数
///…从服务器。
类后模型{
字符串sId;
字符串标题;
字符串文本;
字符串作者;
字符串图片;
串链;
国际邮政;
字符串createdAt;
PostModel({this.title,this.text,this.pictures,this.link,this.postId});
factory PostModel.fromServerMap(Map json){
返回后模型(
标题:json['title'],
text:json['text'],
图片:json['pictures'],
link:json['link'],
postId:json['postId']
);
}
}
///PostsModel控制帖子和句柄的“流”
///…刷新数据并加载更多帖子
类PostsModel{
int=0;
溪流;
布尔·哈斯莫尔;
bool_卸载;
列出数据;
流控制器(StreamController);;
PostsModel(){
_数据=列表();
_controller=StreamController.broadcast();
_isLoading=false;
stream=\u controller.stream.map((List postsData){
返回postsData.map((map postData){
返回PostModel.fromServerMap(postData);
}).toList();
});
哈斯莫尔=真;
刷新();
}
未来刷新(){
返回loadMore(clearCachedData:true);
}
未来加载更多({bool clearCachedData=false}){
如果(clearCachedData){
_数据=列表();
哈斯莫尔=真;
}
如果(_isLoading | |!hasMore){
返回Future.value();
}
_isLoading=true;
返回_getServerData(reload++)。然后((postsData){
_isLoading=false;
_data.addAll(postsData);
hasMore=(_data.length<30);
_控制器。添加(_数据);
});
}
}
谢谢你们的帮助,伙计们试试看
return List<Map>.from(resp.whereType<Map>());
return List.from(resp.whereType());
或
return resp.whereType().toList();
或
returnresp.cast();
但是不是映射列表,你想要哪种类型的对象的列表吗?不,我想要一个列表映射,但我不知道如何从列表转换它,以及需要哪些参数来求和,我想要响应的类型与return@jxstxn__你为什么想要地图的列表?根据json数据,您应该决定返回什么,或者使用模型类映射json数据
return resp.whereType<Map>().toList();
return resp.cast<Map>();