要避免在RefreshIndicator内部的StreamBuilder渲染子控件多次出现,可以采取以下方法:
示例代码如下:
bool _isFirstLoad = true;
RefreshIndicator(
onRefresh: () async {
setState(() {
// 进行刷新操作
});
},
child: StreamBuilder(
stream: // 你的Stream源,
builder: (context, snapshot) {
if (_isFirstLoad) {
// 渲染子控件
_isFirstLoad = false;
return // 子控件;
} else {
// 不进行渲染
return SizedBox.shrink();
}
},
),
);
示例代码如下:
StreamController _streamController;
@override
void initState() {
super.initState();
_streamController = StreamController();
}
@override
void dispose() {
_streamController.close();
super.dispose();
}
RefreshIndicator(
onRefresh: () async {
_streamController.close(); // 取消之前的订阅
_streamController = StreamController(); // 创建一个新的StreamController
// 进行新的订阅操作
setState(() {
// 进行刷新操作
});
},
child: StreamBuilder(
stream: _streamController.stream,
builder: (context, snapshot) {
// 渲染子控件
return // 子控件;
},
),
);
通过以上方法,我们可以避免在RefreshIndicator内部的StreamBuilder渲染子控件多次出现。这样可以提高程序的性能和用户体验。
领取专属 10元无门槛券
手把手带您无忧上云