Я пытаюсь использовать плагин Flutter EasyRefre sh в Listbox Builder. https://pub.dev/packages/flutter_easyrefresh
Раньше я использовал контроллер прокрутки для загрузки дополнительных функций, и это работало, но теперь я решил добавить опускание в refre sh.
My код довольно длинный, но я пытаюсь уменьшить его для этого вопроса.
Future <List> getData() async{
if(endofrecord == false){
try{
var deviceid = '1234';
var uid = '999';
var bodyss = { "uid" : id, "deviceid": deviceid, "offset": offset};
var url = 'http://192.168.100.4:8080/get-followerdata.php';
// Starting Web API Call.
var response = await http.post(url, body: json.encode(bodyss)).timeout(Duration(seconds: 5),
onTimeout: (){
// throw Exception();
//or you can also
return null;
});
if(response.statusCode == 200){
final data = getFollowingFromJson(response.body);
setState(() {
_inProcess = false;
if(data.count == null){
count = 0;
}else{
offset = offset + 1;
print(offset);
count = data.count;
}
if(data.content.length > 0 && data.content[0].name != 'Empty'){
for (var i in data.content) {
lists.add(i);
}
}else{
nodata = 'No Record Found';
endofrecord = true;
}
});
print(lists.length);
}
}catch(e){
print("Exception Caught: $e");
}
return lists;
}
}
Вот еще один виджет, связанный с кодами.
body: EasyRefresh.custom(
enableControlFinishRefresh: false,
enableControlFinishLoad: true,
controller: _controllers,
header: ClassicalHeader(),
footer: ClassicalFooter(),
onRefresh: () async {
await Future.delayed(Duration(seconds: 2), () {
print('onRefresh');
setState(() {
_count = 2;
getData();
});
_controllers.resetLoadState();
});
},
onLoad: () async {
await Future.delayed(Duration(seconds: 2), () {
print('onLoad');
setState(() {
_count += 2;
getData();
});
_controllers.finishLoad(noMore: _count >= 4);
});
},
slivers: <Widget>[
SliverList(
delegate: SliverChildBuilderDelegate(
(context, index) {
return Container(
//child: Container(
height: MediaQuery.of(context).size.height,
width: MediaQuery.of(context).size.width,
child: Stack(
children: <Widget>[
TabBarView(
controller: _controller,
children: [
// Text("TAB ONE CONTENT"),
Container(
decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(25),
color: Colors.black87,
),
padding: EdgeInsets.only(top: 10, bottom: 5),
height: MediaQuery.of(context).size.height,
width: double.infinity,
child: ListView.builder(
// controller: _scrollcontroller,
itemCount: lists.length,
itemBuilder: (BuildContext context, int index) {
return buildList1(context, index);
}),
),
После загрузки данных в Listview.builder onRefre sh или функция onload не сработала. Проще говоря, после загрузки данных по ссылке sh или загрузки не произошло. Если я не загружал данные, я могу видеть при загрузке и опускаться до refre. sh запускается.
Edit: Я обнаружил, что onRefre sh запускается, но я нужно перетащить его в верхнюю часть экрана. Если я тяну от центра или низа, огонь не стреляет. Простыми словами, везде, где есть элемент списка, он не срабатывает.
Редактировать 2
Я подозреваю проблему в кодах ниже.
return Container(
//child: Container(
height: MediaQuery.of(context).size.height,
width: MediaQuery.of(context).size.width,
child: Stack(
children: <Widget>[
TabBarView(
controller: _controller,
children: [
// Text("TAB ONE CONTENT"),
Может, я неправильно его использую.