_InternalLinkedHashMap<String, dynamic>' не является подтипом типа FutureOr<List<dynamic>>

привет, я все еще изучаю флаттер, и я изо всех сил пытаюсь понять и решить эту проблему.

Я использую dio для извлечения данных из API, чтобы передать их в репозиторий, затем в кубит, а затем в пользовательский интерфейс.

когда я когда-либо нажимаю кнопку, которая переводит меня на экран, который предполагает отображение данных, поступающих через API.

дает мне эту ошибку.

советник по отладке

flutter: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'FutureOr<List<dynamic>>'

Json отвечает

{
"chapters": [
       {
        "id": 114,
        "revelation_place": "makkah",
        "revelation_order": 21,
        "bismillah_pre": true,
        "name_simple": "An-Nas",
        "name_complex": "An-Nās",
        "name_arabic": "الناس",
        "verses_count": 6,
        "pages": [
            604,
            604
        ],
        "translated_name": {
            "language_name": "english",
            "name": "Mankind"
        }
    }
]}

моя модель

class ChapterModel {
  List<Chapters>? chapters;

  ChapterModel({this.chapters});

  ChapterModel.fromJson(Map<String, dynamic> json) {
    if (json['chapters'] != null) {
      chapters = <Chapters>[];
      json['chapters'].forEach((v) {
        chapters!.add(new Chapters.fromJson(v));
      });
    }
  }
}

class Chapters {
  int? id;
  String? revelationPlace;
  int? revelationOrder;
  bool? bismillahPre;
  String? nameSimple;
  String? nameComplex;
  String? nameArabic;
  int? versesCount;
  List<int>? pages;
  TranslatedName? translatedName;

  Chapters(
      {this.id,
      this.revelationPlace,
      this.revelationOrder,
      this.bismillahPre,
      this.nameSimple,
      this.nameComplex,
      this.nameArabic,
      this.versesCount,
      this.pages,
      this.translatedName});

  Chapters.fromJson(Map<String, dynamic> json) {
    id = json['id'];
    revelationPlace = json['revelation_place'];
    revelationOrder = json['revelation_order'];
    bismillahPre = json['bismillah_pre'];
    nameSimple = json['name_simple'];
    nameComplex = json['name_complex'];
    nameArabic = json['name_arabic'];
    versesCount = json['verses_count'];
    pages = json['pages'].cast<int>();
    translatedName = json['translated_name'] != null
        ? new TranslatedName.fromJson(json['translated_name'])
        : null;
  }
}

мой дио

class ApinWebServices {
  static late Dio dio;

  static init() {
    BaseOptions options = BaseOptions(
      baseUrl: baseUrl,
      queryParameters: {'language': 'ar'},
      receiveDataWhenStatusError: true,
    );

    dio = Dio(options);
  }

  Future<List<dynamic>> getALLJuzQuran() async {
    try {
      Response response = await dio.get('chapters');
      return response.data;
    } catch (e) {
      print(e.toString());
      return [];
    }
  }
}

мой репозиторий

class ChapterRepository {
  final ApinWebServices apinWebServices;

  ChapterRepository(this.apinWebServices);

  Future<List<ChapterModel>> getALLJuzQuran() async {
    final juzQuran = await apinWebServices.getALLJuzQuran();


    return juzQuran.map((e) => ChapterModel.fromJson(e)).toList();
  }
}

мой локоть

class JuzquranCubit extends Cubit<HomeState> {
  final ChapterRepository chapterRepository;

  late List<ChapterModel> juzQuran = [];
  JuzquranCubit(this.chapterRepository) : super(HomeInitial());

  List<ChapterModel> getALLJuzQuran() {
    chapterRepository.getALLJuzQuran().then((chapters) {
      emit(JuzQuranLoaded(chapters: chapters));
      this.juzQuran = juzQuran;
    });
    return juzQuran;


  }
}

На стороне возврата Dio сделайте его вернуть response.data['главы'];, так как это необработанные данные, чтобы из return juzQuran.map((e) => ChapterModel.fromJson(e)).toList(); вы могли поместить их в попытку модели.

Arbiter Chil 21.03.2022 02:38
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
1
1
42
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В ваших ApinWebServices вы используете

Dio.get('chapters');

что не является свойством Dio, так как ваши данные используются в json

return response.data['chapters'];

Другие вопросы по теме