flutter_easy_refresh在3.38.3配合NestedScrollView的注意要点。

背景

easy_refresh已经有一段时间没有更新了,不知道这个问题跟flutter版本有没有关系。

问题点

下拉刷新松开之后,刷新完成,会导致大片头部区域空白,一直不消失。

问题原因

当手势松开之后flutter-sdk里面会调用ScrollPositionwithsinglecontext.goBallistic,导致NestScrollViewgoBallistic无法被通知,如下图。

然后结果就是EasyRefresh的头部指示器已经消失,但是滑动控制器的滑动并没有被触发。

相关代码位置

【计算位置】overExtent of D:\Pub\hosted\pub.flutter-io.cn\easy_refresh-3.4.0\lib\src\notifier\indicator_notifier.dart
【返回结果刷新结果】: _onRefresh of D:\Pub\hosted\pub.flutter-io.cn\easy_refresh-3.4.0\lib\src\easy_refresh.dart
【指示器计算位置】_calculateOffset of D:\Pub\hosted\pub.flutter-io.cn\easy_refresh-3.4.0\lib\src\notifier\indicator_notifier.dart
监听用户滑动到的位置:_onUserOffset of D:\Pub\hosted\pub.flutter-io.cn\easy_refresh-3.4.0\lib\src\notifier\indicator_notifier.dart

解决方案

使用EasyRefresh.builder配合取innerController,复用physics最好。

示例代码

dart 复制代码
class _RoomListContent extends StatefulWidget {
  const _RoomListContent({required this.topPadding});

  final bool topPadding;

  @override
  State<_RoomListContent> createState() => _RoomListContentState();
}

class _RoomListContentState extends State<_RoomListContent> {
  late final ScrollController innerController = PrimaryScrollController.of(context);

  @override
  Widget build(BuildContext context) {
    return EasyRefresh.builder(
      scrollController: innerController,
      onRefresh: () => provider.refresh(),
      onLoad: () => provider.loadMore(),
      childBuilder: (BuildContext context, ScrollPhysics physics) => CustomScrollView(
        controller: innerController,
        physics: physics,
        slivers: <Widget>[
        .....你的具体组件内容
相关推荐
装不满的克莱因瓶3 分钟前
Android Studio 的模拟器如何上传本地图片到手机相册
android·智能手机·android studio
[H*]9 分钟前
Flutter框架跨平台鸿蒙开发——Material Icons图标库
flutter
南村群童欺我老无力.24 分钟前
Flutter 框架跨平台鸿蒙开发 - 每日食谱推荐应用开发教程
flutter·华为·harmonyos
猛扇赵四那边好嘴.28 分钟前
Flutter 框架跨平台鸿蒙开发 - 表情包本地管理器应用开发教程
flutter·华为·harmonyos
不会写代码00028 分钟前
Flutter 框架跨平台鸿蒙开发 - 节日礼物清单应用开发教程
flutter·华为·harmonyos·节日
三金121381 小时前
深入解析MySQL EXPLAIN
android
_李小白1 小时前
【Android 美颜相机】第十一天:GPUImageFilter解析
android·数码相机
南村群童欺我老无力.1 小时前
Flutter 框架跨平台鸿蒙开发 - 屏幕尺子工具应用开发教程
flutter·华为·harmonyos
dawudayudaxue1 小时前
sqlite在安卓下使用ndk的交叉编译
android·数据库·sqlite
YIN_尹1 小时前
【MySQL】表的约束(下)
android·数据库·mysql