Флаттер бесконечной прокрутки (Ленивая загрузка) не работает - PullRequest
0 голосов
/ 06 февраля 2020

Я пытаюсь сделать бесконечный просмотр прокрутки с помощью Listview.builder, но он не работает, он не прокручивается. Я не знаю, где именно я делаю не так, вот мой исходный код

    class _BrandPageWidgetState extends StateMVC<BrandPageWidget> {
      BrandController _con;
      ScrollController _scrollController;
      int pageNum = 1;
      bool isPageLoading = false;
      int totalRecord = 0;
      _BrandPageWidgetState() : super(BrandController()) {
        _con = controller;
      }


  @override
  void initState() {
     super.initState();
    _con.listenForBrand(id: widget.routeArgument.id);
    _con.listenForGalleries(widget.routeArgument.id);
    _con.listenForBrandReviews(id: widget.routeArgument.id);
    _con.listenForBrandComplaints(widget.routeArgument.id);
    _scrollController = new ScrollController()..addListener(_scrollListener);


    _scrollController
  ..addListener(() {
    if (_scrollController.position.pixels ==
        _scrollController.position.maxScrollExtent) {
          _scrollController = new ScrollController()..addListener(_scrollListener);
    }
  });
  }

      @override
      void dispose() {
        _scrollController.removeListener(_scrollListener);
        super.dispose();
      }




                                     _con.brandComplaints.isEmpty
                                      ? SizedBox(height: 0)
                                      : ListView.builder(
                                          controller: _scrollController,
                                          //physics: AlwaysScrollableScrollPhysics(),
                                          padding: EdgeInsets.symmetric(
                                              vertical: 10, horizontal: 20),
                                          scrollDirection: Axis.vertical,
                                          shrinkWrap: true,
                                          primary: false,
                                          itemCount: _con.brandComplaints.length,
    //                                      separatorBuilder: (context, index) {
    //                                        return SizedBox(height: 20);
    //                                      },
                                          itemBuilder: (context, index) {
                                            return Padding(
                                              padding: const EdgeInsets.only(
                                                  bottom: 20.0),
                                              child: ComplaintItemWidget(
                                                heroTag: 'details_featured_food',
                                                complaint: _con.brandComplaints
                                                    .elementAt(index),
                                              ),
                                            );
                                          },
                                    ),

------------------------ Вот функция -------------------------------------------------- -------------

  _scrollListener() {
    if (totalRecord == _con.brandComplaints.length) {
      return;
    }
    print(_scrollController.position.extentAfter);
    if (_scrollController.position.extentAfter <= 0 &&
        isPageLoading == false) {}
  }

-------------------------- Вот Контроллер на другом файле дротика -----------------------------------------

 void listenForBrandComplaints(String idBrand) async {
    final Stream<Complaint> stream =
        await getBrandComplaints(idBrand, complaintOffset);
    stream.listen((Complaint _complaint) {
      setState(() => brandComplaints.add(_complaint));
    }, onError: (a) {
      print(a);
    }, onDone: () {
      //complaintOffset += brandComplaints.length;
    });
  }

------------------------ А вот модель тоже в другом дротике ----------- ------------------------

Future<Stream<Complaint>> getBrandComplaints(String brandId, int offset) async {
  User _user = await getCurrentUser();
  final String _apiToken = 'api_token=${_user.apiToken}&';
  final String url =
      '${GlobalConfiguration().getString('api_base_url')}complaint/brand?${_apiToken}&id=${brandId}&offset=${offset}&limit=3';
  developer.log(url, name: 'request-brand-complaints');
  final client = new http.Client();
  final streamedRest = await client.send(http.Request('get', Uri.parse(url)));

  return streamedRest.stream
      .transform(utf8.decoder)
      .transform(json.decoder)
      .map((data) {
        developer.log("123132132132132", name: 'response-brand-complaints');
        return Helper.getData(data);
      })
      .expand((data) => (data as List))
      .map((data) {
        return Complaint.fromJSON(data);
      });
}
...