元素类型future <List <Data >>不能分配给Future <Data>的列表类型

时间:2020-03-04 09:27:16

标签: flutter async-await

我正在尝试在FutureBuilder上使用Future.wait,所以这是我的代码:

child: SafeArea(
  child: FutureBuilder<List<ActiveTools.Data>>(
    future: Future.wait([
      MyToolsProvider()
          .getChannelMe("df6b88b6-f47d-****"),
    ]),
    builder: (ctx, AsyncSnapshot<List<ActiveTools.Data>> dataSnapshot) {
      if (dataSnapshot.connectionState == ConnectionState.waiting) {

MyToolsProvider().getChannelMe方法中,我返回Future<List<ActiveTools.Data>>

import 'package:mobile_iotel/models/active_tools_model.dart'as ActiveTools;


  Future<List<ActiveTools.Data>> getChannelMe(String auth) async {
    Map<String, dynamic> header = {
      'Content-Type': "application/json",...
    };

    try {
      var result = await NetworkCLient()
          .getRequest(url: '$URL/api/me', header: header);
      debugPrint('result is $result');
      if (result != null) {
        var programsByActiveToolsModel =
            ActiveTools.ProgramsByActiveToolsModel.fromJson(result);
        if (programsByActiveToolsModel.responseCode == 200) {
          return programsByActiveToolsModel.data;
        } else
          return null;
      }
    } catch (e) {
      debugPrint('catch is $e');
    }
  }

但是在Future.wait中,我遇到了这个错误:

enter image description here

元素类型future>不能分配给Future的列表类型

我的方法返回List<ActiveTools.Data>,为什么会出现此错误?

1 个答案:

答案 0 :(得分:0)

ActiveTools.Data更改为List<dynamic>,并获得dataSnapshot.data中的第一个元素,您应该找到期望的List<ActiveTools.Data>

child: SafeArea(
  child: FutureBuilder<List<dynamic>>( // You might want to use List<List<ActiveTools.Data>>
    future: Future.wait([
      MyToolsProvider()
          .getChannelMe("df6b88b6-f47d-****"),
    ]),
    builder: (ctx, AsyncSnapshot<List<dynamic>> dataSnapshot) {
      if (dataSnapshot.connectionState == ConnectionState.waiting) {
      //...omit
      List<ActiveTools.Data> datas = dataSnapshot.data[0];

似乎所提供的代码中没有两个未来,因此您不必像@Darish所说的那样使用Future.wait。有关Future.wait的更多信息,请阅读文档。