Home > Software engineering >  Api data null whe nthe pages load even i use initState
Api data null whe nthe pages load even i use initState

Time:03-03

im using post method to get api data/response.body in initState and i get all the response/data then i put it in my variables surveyData, but when i load the pages with widget looped by the response.body length it goes error and say response.body.length is null but when i save the text editor/ hot reload, all the data entered and it's not null anymore and the widget appear.

fyi: the http.post method is my own function not from import 'package:http/http.dart' as http; so don't mind it

Variables that contain the response

  dynamic surveyData;

initState Code

@override
      void initState() {
        super.initState();
    
        // GET PAGES
        surveyPages = widget.surveyPages;
    
        // GET FORM DETAIL
        http.post(
          'survey-pre-mitsu/form-detail',
          body: {
            "survey_form_header_id": 1,
          },
        ).then(
          (res) {
            surveyData = res['data'];
          },
        );
      }

Widget that looped by surveyData.length

  for (var i = 0; i < surveyData.length; i  )
                AdditionalForm(questionLabel: surveyData[i]['label'],
                  questionType: surveyData[i]['type'],),
                  
                

This is what the error

enter image description here

And this is what it looks like when i do hot reload

enter image description here

CodePudding user response:

First, I suggest performing post(even though its your own code) as a asynchronous operation, hence not inside initState(). Preferably write the logic in a separate class/file with packages like a provider package. Try this first and then post the error after that.

CodePudding user response:

You need to add Some delay , In this Delay you can show a loading icon . for delay you can use :

Future.delayed(const Duration(milliseconds: 500), () {

// Here you can write your code

  setState(() {
    // Here you can write your code for open new view
  });

});

This will solve your problem

  • Related