_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'FutureOr<List<dynamic>>
104
In your ApinWebServices, you are using
Dio.get('chapters');
which is not a property of Dio
, as your data is json use
return response.data['chapters'];
Author by
Abdulla Masoud
Updated on January 04, 2023Comments
-
Abdulla Masoud 10 months
hi I am still learning flutter and I am struggling to understand and fix this problem.
I am using dio to retrieve data from api to pass it to repository then to the cubit and then the ui.
when ever I press button that takes me to screen that suppose to show data that come api.
gives me this error.
debug counsel
flutter: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'FutureOr<List<dynamic>>'
Json respons
{ "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" } } ]}
my model
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; } }
my dio
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 []; } } }
my repository
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(); } }
my cubit
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; } }
-
Arbiter Chil over 1 yearOn the Dio side return make it return response.data['chapters']; since it's a raw data so that from the return juzQuran.map((e) => ChapterModel.fromJson(e)).toList(); you might able to put them in model try.
-