'flutter lazyload loading page twice

so im trying to build a lazyload, from my backend i already made per page 5 items. but i dont understand why when i try in flutter the first page is always loaded twice?

for example if i scroll up to page 5, the order of the page will be 1,1,2,3,4 then when i try to refresh, it will show page 5, refresh again then it will show page 1, any idea why?

class ProgressScreen extends StatefulWidget {
  @override
  _ProgressScreenState createState() => _ProgressScreenState();
}

class _ProgressScreenState extends State<ProgressScreen> {
  late MainProgressStore _mainProgressStore;
  late UserStore _userStore;
  int currentPage = 1;
  late int totalPages;

  @override
  void initState() {
    super.initState();
  }

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();

    // initializing stores
    _mainProgressStore = Provider.of<MainProgressStore>(context);
    _userStore = Provider.of<UserStore>(context);

    if (!_userStore.loading) {
      _userStore.getUser();
    }
    if (!_mainProgressStore.loading) {
      _mainProgressStore.postMainProgress(
          'loading', 'all', 'desc', 3, 0, currentPage);
    }
  }

  List<Datum> mainProgress = [];
  final RefreshController refreshController =
      RefreshController(initialRefresh: true);

  Future<bool> getmainProgress({bool isRefresh = false}) async {
    if (isRefresh) {
      currentPage = 1;
    } else {
      if (currentPage >= totalPages) {
        refreshController.loadNoData();
        return false;
      }
    }
    final response = await _mainProgressStore.postMainProgress(
        'loading', 'all', 'desc', 3, 0, currentPage);

    if (_mainProgressStore.success == true) {
      final result = _mainProgressStore.mainProgress!.mainProgress;
      if (isRefresh) {
        mainProgress = result.response;
      } else {
        mainProgress.addAll(result.response);
      }
      currentPage++;
      totalPages = 10;
      print(result.response);
      setState(() {});
      return true;
    } else {
      return false;
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppNavBar(),
      drawer: DrawerNavBar(userStore: _userStore),
      body: _buildMainContent(),
    );
  }

  Widget _buildMainContent() {
    return Observer(
      builder: (context) {
        return _mainProgressStore.success
            ? _buildRefresh(_mainProgressStore)
            : CustomProgressIndicatorWidget();
      },
    );
  }

  Widget _buildRefresh(_mainProgressStore) {
    return Platform.isIOS
        ? _buildIOSList(_mainProgressStore)
        : _refreshView(_mainProgressStore);
  }

  Widget _refreshView(_mainProgressStore) {
    return SmartRefresher(
        controller: refreshController,
        enablePullUp: true,
        onRefresh: () async {
          final result = await getmainProgress(isRefresh: true);
          if (result) {
            refreshController.refreshCompleted();
          } else {
            refreshController.refreshFailed();
          }
        },
        onLoading: () async {
          final result = await getmainProgress();
          if (result) {
            refreshController.loadComplete();
          } else {
            refreshController.loadFailed();
          }
        },
        child: _buildBody(_mainProgressStore));
  }

  Widget _buildIOSList(_mainProgressStore) {
    return Container(
      child: CustomScrollView(
        slivers: [
          CupertinoSliverRefreshControl(
            onRefresh: () async {
              _mainProgressStore.getHomepage(currentPage);
            },
          ),
          SliverList(
              delegate: SliverChildBuilderDelegate((context, index) {
            return _buildBody(_mainProgressStore);
          }, childCount: _mainProgressStore.response.length))
        ],
      ),
    );
  }

  Widget _buildBody(_mainProgressStore) {
    return SingleChildScrollView(
        child: Column(children: <Widget>[
      Align(
        alignment: Alignment.centerLeft,
        child: Container(
          padding: EdgeInsets.only(
              top: DeviceUtils.getScaledHeight(context, 0.03),
              left: DeviceUtils.getScaledWidth(context, 0.06),
              bottom: DeviceUtils.getScaledHeight(context, 0.03)),
          child: Text(
            'MY ORDERS',
            style: TextStyle(
                fontWeight: FontWeight.bold,
                fontSize: DeviceUtils.getScaledWidth(context, 0.035),
                color: Colors.black),
          ),
        ),
      ),
      SearchProgress(
          currentPage: currentPage, mainProgressStore: _mainProgressStore),
      OrderInfo(
          progressData: mainProgress, mainProgressStore: _mainProgressStore),
    ]));
  }
}


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source