Flutter 如何打开列表<;动态>;进入列表<;地图>&燃气轮机&燃气轮机;

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

我开始学习颤振,因为我想建立一个应用程序,可以处理API调用。 但现在我很沮丧,因为我想做一个无限的负荷,却不能让它工作。 问题是,该方法需要一个未来,但我不知道如何将API的响应转换为列表

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>();