Facing UI issues with Flutter Pagination

Viewed 39

In this UI when i run the application first 10 data loads but pagination does not work so it does not load next 10 items, but when I make some changes on UI and run hot reload it works just right.API is working perfectly I don't know why UI is behaving like this. I need help on this please look at the below code.

Thanks

The UI

child: FutureBuilder(
    future: getData('0'),
    builder: (context, snapshot){
    if (snapshot.connectionState == ConnectionState.done) {
    if (contactModel.status == 'true'){
       return ListView.builder(
       controller: scrollController,
       itemCount: contacts.length,
       itemBuilder: (BuildContext context, int index) {
       return listViewItem(contacts[index]);
    });
    }
    else{
    return Center();
    }
    }
     else {
    return Center(child: CircularProgressIndicator());
    }
    }
                            ),

Data Calling

    Future<ContactModel> getData(String lastId) async {

    empid = await SharedPreferencesClass().getempid();
    tkc_id = await SharedPreferencesClass().gettkcid();
    try {
      Dio dio = new Dio();
      dio.options.connectTimeout = 50000;
      dio.options.contentType = "multipart/form-data";

      FormData formData;
      formData = FormData.fromMap({
        "emp_id": '11409',
        "tkc_id": 'TKC0011',
        "selected_tkcid": 'TKC0011',
        "last_id":  lastId,
        "contactval":'A',
        "locality":'A',
        "custtype":'A',
      });

      Response response = await dio.post(HttpUrl.getcrmcustomerlist, data: formData);
      // print('Server response: ' + response.toString());
      if (response.statusCode == 200) {
        Map<String, dynamic> responseBody = response.data;
        contactModel = ContactModel.fromJson(responseBody);
        contacts.addAll(contactModel.contacts);
      } else {
        Fluttertoast.showToast(
          msg: "Please Try After Some Time",
          toastLength: Toast.LENGTH_SHORT,
          gravity: ToastGravity.BOTTOM,
          timeInSecForIosWeb: 1,

        );
      }

    } catch (e) {
      print(e);

    }
    return new ContactModel();

  }

Scroll Controller on InitState

void initState() {
    super.initState();
    scrollController.addListener(() {
      if(scrollController.position.pixels >= scrollController.position.maxScrollExtent ){
        // print('Data Called');
        Future.delayed(Duration(milliseconds: 2000));
        getData(contacts.last.customer_id);
      }
    });
  }

I believe the issue will resolve on adding setState, Like but it does not load any data

    if (response.statusCode == 200) {
        Map<String, dynamic> responseBody = response.data;
        contactModel = ContactModel.fromJson(responseBody);
                setState(() {
contacts.addAll(contactModel.contacts);
      })
} else {
        Fluttertoast.showToast(
          msg: "Please Try After Some Time",
          toastLength: Toast.LENGTH_SHORT,
          gravity: ToastGravity.BOTTOM,
          timeInSecForIosWeb: 1,

        );
1 Answers

I resolved this issue on my own Yeah I guessed it correct it was some setState issue only.

Here I have wrapped contacts with setState but later I realized I should have Wrapped contactModel also.

 if (response.statusCode == 200) {
        Map<String, dynamic> responseBody = response.data;
        contactModel = ContactModel.fromJson(responseBody);
                setState(() {
contacts.addAll(contactModel.contacts);
      })

Like This

if (response.statusCode == 200) {
        Map<String, dynamic> responseBody = response.data;
        setState(() {
          contactModel = ContactModel.fromJson(responseBody);
          contacts.addAll(contactModel.contacts);
        });
      }
Related