Я пытаюсь сделать бесконечный просмотр прокрутки с помощью 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);
});
}