首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >元素类型'Future<List<Organization>>?‘无法分配给列表类型“Widget”

元素类型'Future<List<Organization>>?‘无法分配给列表类型“Widget”
EN

Stack Overflow用户
提问于 2022-08-02 13:18:05
回答 1查看 44关注 0票数 0
代码语言:javascript
复制
class Organization_Api{
    static Future<List<dynamic>> getData(
      {required String target, String? limit}) async {
    try {
      var uri = Uri.https(
          BASE_URL,
          "api/$target",
          target == "organizations"
              ? {
            "offset": "0",
            "limit": limit,
          }
              : {});
      var response = await http.get(uri);
      var data = jsonDecode(response.body);
      List tempList = [];
      if (response.statusCode != 200) {
        throw data["message"];
      }
      for (var v in data) {
        tempList.add(v);
      }
      return tempList;
    } catch (error) {
      log("An error occured $error");
      throw error.toString();
    }
  }
   
    static Future<List<Organization>> getAllOrganizations(
      {required String limit}) async {
    List temp = await getData(
      target: "organizations",
      limit: limit,
    );
    return Organization.organizationsToList(temp);
  }
  
     static Future<Organization> getOrganizationById({required String id}) async {
    try {
      var uri = Uri.https(
        BASE_URL,
        "api/organizations/$id",
      );
      var response = await http.get(uri);
      var data = jsonDecode(response.body);
      if (response.statusCode != 200) {
        throw data["message"];
      }
      return Organization.fromJson(data);
    } catch (error) {
      log("an error occured while getting organization info $error");
      throw error.toString();
    }
  }
}
代码语言:javascript
复制
 class HomeScreen extends StatefulWidget {
    const HomeScreen({Key? key}) : super(key: key);
    static String routeName = "/home";
    @override
    State<HomeScreen> createState() => _HomeScreenState();
}

    class _HomeScreenState extends State<HomeScreen> {
    Future<List<Organization>>? result ;
    void initState(){
    result = Organization_Api.getAllOrganizations(limit: '4');
    super.initState();
  }

    @override
    Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Organizations", style: TextStyle(color: Colors.black),
        ),
        backgroundColor: Colors.white,
        centerTitle: true,
      ),
      body: Padding(
        padding: EdgeInsets.all(10.0),
        child: Column(
          children:
            <Widget>[
              SingleChildScrollView(
                scrollDirection: Axis.horizontal,
                child: Row(
                  children:<Widget>[
                    ListView(
                      shrinkWrap: true,
                      children:<Widget> [result],
                    )
                  ],
                ),
              )
          ],
        ),
      ),
    );
  }
}

class Organization{
  final int OrganizationId;
  final String OrganizationName;

  Organization({required this.OrganizationId,required this.OrganizationName});

  factory Organization.fromJson(Map<String,dynamic> json){
    return Organization(OrganizationId: json['OrganizationId'], OrganizationName: json['OrganizationName']);
  }
  Map toJson(){
    return{
      "OrganizationId": this.OrganizationId,
      "OrganizationName": this.OrganizationName,
    };
  }
  static List<Organization> organizationsToList(List organizationToList) {
    return organizationToList.map((data) {
      return Organization.fromJson(data);
    }).toList();
  }
}

错误=元素类型>‘未来?’不能分配给列表类型'Widget‘。

我只想检查来自服务的数据,但是我找不到怎么做。我做错了什么,或者错过了什么来列出输入的数据?我分享了屏幕页面和代码,我是如何从服务中获得信息的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-02 13:33:05

您的Organization_Api.getAllOrganizations提供了一个未来。您可以使用FutureBuilder

代码语言:javascript
复制
class _HomeScreenState extends State<HomeScreen> {
  Future<List<Organization>>? myFuture;

  @override
  void initState() {
    myFuture = Organization_Api.getAllOrganizations(limit: '4');
    super.initState();
  }

以及未来的建设者

代码语言:javascript
复制
FutureBuilder<List<Organization>?>(
  future: myFuture,
  builder: (context, snapshot) {
    if (snapshot.hasData && snapshot.data!.isNotEmpty) {
      return ListView(
        shrinkWrap: true,
        //children: snapshot.data!, // when `Organization` is a widget
        children:// when `Organization` is a data model class
        snapshot.data!.map((e) => Text(e.toString())).toList(),
      );
    }

    return CircularProgressIndicator();
  },
)

也可以检查Randal L. Schwartz关于使用未来的视频

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73208281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档