0

This is my model class

import 'dart:convert';

Streams streamsFromJson(String str) => Streams.fromJson(json.decode(str));

String streamsToJson(Streams data) => json.encode(data.toJson());

class Streams {
 Streams({
   this. Title,
   this. Stream,
   this. Description,
   this.author,
   this.availability,
 });

 String? title;
 String? stream;
String? description;
 String? author;
 bool? availability;

 factory Streams.fromJson(Map<String, dynamic> json) => Streams(
       title: json["title"],
       stream: json["stream"],
       description: json["description"],
       author: json["author"],
       availability: json["availability"],
     );

 Map<String, dynamic> toJson() => {
      "title": title,
      "stream": stream,
      "description": description,
      "author": author,
      "availability": availability,
    };

}

And this is how I am fetching the data

class RetrieveStreams {
static var client = http.Client();
ProjectApis projectApis = ProjectApis();

static Future<Streams> fetchStreams() async {
  final response = await client. Get(
    Uri.parse(ProjectApis.streamsUrl),
  );
  if (response.statusCode == HttpStatus.ok) {
    // Call is successful 
    var jsonString = response. Body;
    return streamsFromJson(jsonString);
  } else {
    // If that call was not successful, throw an error.
    Get.snackbar(
      'Error',
      'Failed to load streams',
       backgroundColor: Colors.red,
      colorText: Colors.white,
     );
     throw Exception('');
    }
  }
}

This is my controller class using getx

lass StreamsController extends GetxController {
 var streamList = <Streams>[].obs;

 void getStreams() async {
   var streamVariable = await RetrieveStreams.fetchStreams();
   streamList.value = streamVariable as List<Streams>;
 }

    @override
    void onInit() {
      getStreams();
   super.onInit();
  }
}

And I am showing the data in this Text widget

Text(
   _streamsController.streamList
    .map((element) => element. Title)
     .toList()[index]
     .toString(),
      style: TextStyle(
      color: ProjectColors.black,
    ),
 ),

I have read through this enter link description here carefully but it does not seem to solve my problem.

The Error seems to suggest that the data I am receiving from the endpoint is in the form of a list and I am using a map, suggesting a data mismatch. I just can't seem to get my head around this error

2
  • Would you please edit your question and copy-paste the JSON response you get from the API? Commented Aug 3, 2022 at 22:33
  • @lepsch, please I have edited the question as requested. The API does not give any response because of the error. Commented Aug 3, 2022 at 23:16

1 Answer 1

1

It looks like the API is returning an array instead of a Streams object. Supposing it's an array of Streams objects, to encode/decode this array use the following functions:

List<Streams> streamsListFromJson(String str) =>
    (json.decode(str) as List<dynamic>)
        .map((s) => Streams.fromJson(s))
        .toList();

String streamsListToJson(List<Streams> data) =>
    json.encode(data.map((s) => s.toJson()).toList());
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.