Тип элемента будущее не может быть назначен тип списка будущего <Data> - PullRequest
0 голосов
/ 04 марта 2020

Я пытаюсь использовать Future.wait в FutureBuilder, так что это мой код:

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 голосов
/ 04 марта 2020

Измените 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];

Кажется, у вас нет двух будущее в предоставленном коде, поэтому вам не нужно использовать Future.wait, как сказал @ Dari sh. Подробнее о Future.wait , пожалуйста, прочитайте документацию.

...