[英]ListView.builder inside SliverList SliverChildBuilderDelegate not rendering Images on first load
[英]Flutter: ListView Builder inside SliverList
我正在嘗試在 Listbox Builder 中使用 Flutter EasyRefresh 插件。 https://pub.dev/packages/flutter_easyrefresh
早些時候,我使用 Scroll Controller 加載更多 function 並且它工作但現在我決定添加下拉刷新。
我的代碼很長,但我試圖將這個問題縮小。
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 中加載數據后,onRefresh 或 onload function 不會觸發。 簡而言之,一旦數據加載 onRefresh 或 on load 就不會發生。 如果我沒有加載數據,那么我可以看到加載並下拉刷新正在觸發。
編輯:我發現 onRefresh 正在觸發,但我需要將它拖到屏幕頂部。 如果我從中心或底部拖動,則它不會觸發。 用簡單的話來說,只要有一個列表視圖項目,它就不會觸發。
編輯 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"),
也許我沒有正確使用它。
您需要等待 getData(),而不是等待延遲 2 秒。 未來完成后,您應該更改小部件的 state
您的代碼應該類似於:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.