在控制器中:
RefreshController refreshController = RefreshController(initialRefresh: false);
@override
void onInit() {
fetchServices();
fetchCategory();
super.onInit();
}
Future<bool> fetchServices({bool isRefresh = false}) async {
if (isRefresh) {
currentPage = 1;
} else {
if (currentPage > totalPages) {
refreshController.loadNoData();
return false;
}
}
try {
isLoading(true);
var servicesData = await ServicesDb.fetchServices(currentPage);
var services = servicesData.data;
if (services != null) {
if(isRefresh) {
servicesList.value = services;
} else {
servicesList.value.addAll(services);
}
currentPage++;
totalPages = servicesData.meta.lastPage;
return true;
} else {
return false;
}
} finally {
isLoading(false);
}
}
并在视图中:
Widget build(BuildContext context) {
return Obx(() {
if(controller.isLoading.value == true || controller.isLoadingSearch.value == true) {
return const Center(child: CircularProgressIndicator(color: Colors.black,));
} else {
return SizedBox(
height: MediaQuery.of(context).size.height,
child: SmartRefresher(
controller: controller.refreshController ,
enablePullUp: true,
onRefresh: ()=> controller.onRefresh(),
onLoading: () => controller.onLoading(),
child: StaggeredGridView.countBuilder(
crossAxisCount: 2,
itemCount: controller.servicesList.length,
crossAxisSpacing: 16,
mainAxisSpacing: 16,
itemBuilder: (context, index) {
我收到这个错误:当进行热重新加载时,或将oreintaion从纵向更改为横向,反之亦然。当再次进行热重载时错误消失>>
======== Exception caught by widgets library =======================================================
The following assertion was thrown building Obx(has builder, state: _ObxState#8fd5c):
Don't use one refreshController to multiple SmartRefresher,It will cause some unexpected bugs mostly in TabBarView
'package:pull_to_refresh/src/smart_refresher.dart':
Failed assertion: line 608 pos 12: '_refresherState == null'
The relevant error-causing widget was:
Obx Obx:file:///F:/myServices/my_services/lib/ui/widgets/services_widget.dart:13:12
When the exception was thrown, this was the stack:
#2 RefreshController._bindState (package:pull_to_refresh/src/smart_refresher.dart:608:12)
#3 SmartRefresherState.initState (package:pull_to_refresh/src/smart_refresher.dart:519:23)
#4 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4805:57)
#5 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4638:5)
... Normal element mounting (50 frames)
#55 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3673:14)
#56 Element.updateChild (package:flutter/src/widgets/framework.dart:3425:18)
#57 SliverMultiBoxAdaptorElement.updateChild (package:flutter/src/widgets/sliver.dart:1242:37)
#58 SliverMultiBoxAdaptorElement.createChild.<anonymous closure> (package:flutter/src/widgets/sliver.dart:1227:20)
#59 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2573:19)
#60 SliverMultiBoxAdaptorElement.createChild (package:flutter/src/widgets/sliver.dart:1220:12)
#61 RenderSliverMultiBoxAdaptor._createOrObtainChild.<anonymous closure> (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:349:23)
#62 RenderObject.invokeLayoutCallback.<anonymous closure> (package:flutter/src/rendering/object.dart:1968:59)
#63 PipelineOwner._enableMutationsToDirtySubtrees (package:flutter/src/rendering/object.dart:916:15)
#64 RenderObject.invokeLayoutCallback (package:flutter/src/rendering/object.dart:1968:14)
#65 RenderSliverMultiBoxAdaptor._createOrObtainChild (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:338:5)
#66 RenderSliverMultiBoxAdaptor.insertAndLayoutChild (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:484:5)
#67 RenderSliverList.performLayout.advance (package:flutter/src/rendering/sliver_list.dart:239:19)
#68 RenderSliverList.performLayout (package:flutter/src/rendering/sliver_list.dart:282:12)
#69 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#70 RenderSliverEdgeInsetsPadding.performLayout (package:flutter/src/rendering/sliver_padding.dart:137:12)
#71 RenderSliverPadding.performLayout (package:flutter/src/rendering/sliver_padding.dart:371:11)
#72 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#73 RenderViewportBase.layoutChildSequence (package:flutter/src/rendering/viewport.dart:510:13)
#74 RenderShrinkWrappingViewport._attemptLayout (package:flutter/src/rendering/viewport.dart:1923:12)
#75 RenderShrinkWrappingViewport.performLayout (package:flutter/src/rendering/viewport.dart:1881:20)
#76 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#77 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#78 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#79 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#80 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#81 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#82 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#83 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#84 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#85 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#86 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#87 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#88 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#89 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#90 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#91 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#92 RenderCustomPaint.performLayout (package:flutter/src/rendering/custom_paint.dart:545:11)
#93 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#94 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#95 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#96 MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:171:12)
#97 _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:1097:7)
#98 MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:240:7)
#99 RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:404:14)
#100 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#101 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#102 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#103 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#104 _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1388:11)
#105 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#106 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#107 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#108 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#109 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#110 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#111 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#112 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#113 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#114 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#115 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#116 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#117 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#118 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#119 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#120 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#121 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#122 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#123 RenderOffstage.performLayout (package:flutter/src/rendering/proxy_box.dart:3422:13)
#124 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#125 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#126 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#127 _RenderTheatre.performLayout (package:flutter/src/widgets/overlay.dart:745:15)
#128 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#129 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#130 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#131 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#132 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#133 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#134 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#135 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#136 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#137 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#138 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#139 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#140 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#141 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#142 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#143 RenderView.performLayout (package:flutter/src/rendering/view.dart:165:14)
#144 RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1713:7)
#145 PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:885:18)
#146 RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:453:19)
#147 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:883:13)
#148 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:319:5)
#149 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1143:15)
#150 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1080:9)
#151 SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:996:5)
#155 _invoke (dart:ui/hooks.dart:166:10)
#156 PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:270:5)
#157 _drawFrame (dart:ui/hooks.dart:129:31)
(elided 5 frames from class _AssertionError and dart:async)
====================================================================================================
7条答案
按热度按时间os8fio9y1#
在Widget构建(Context上下文)中初始化RefreshController & onRefresh函数......像这样
//这是我的项目代码
...
对我很有效。
2mbi3lxu2#
我在选项卡视图中使用SmartRefresher,所以当我导航到所有选项卡都在其中的MainActivity时,SmartRefresher给出了相同的错误。
这是因为SmartRefresher丢失了状态。
解决方法:初始化SmartRefresher如下:
在我的例子中,当用户注销并再次登录时,mainactivity给出错误,因为它正在获取以前的状态,因为我正在使用getx,但smartrefresher已经失去了它的状态。为了解决这个问题:
dzhpxtsq3#
只需为每个SmartRefresher创建多个RefreshController示例。
3ks5zfa04#
我解决了这个问题
在我的逻辑类和小部件类中
o4tp2gmn5#
使您的控制器一样,它不会失去他的状态了你的欢迎
kr98yfug6#
这是因为您对两个或多个SmartRefresher小部件使用了相同的RefreshController。
fxnxkyjh7#
我用这个解决