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>[
        .....你的具体组件内容
相关推荐
Kapaseker1 小时前
Kotlin Toolchain 0.11 发布:主要是把 Amper 干没了
android·kotlin
三少爷的鞋2 小时前
Android 现代架构不需要事件总线进阶篇
android
杉氧17 小时前
深入理解 Compose 重组机制:快照系统如何驱动 UI 精准刷新?
android·架构·android jetpack
召钱熏17 小时前
状态枚举正确≠渲染正确:一个语音按钮的状态机边界修复实录
android·前端
杉氧18 小时前
深度解析:Jetpack Compose 核心架构与底层原理 —— 十年安卓老兵的“破茧重生”
android·架构·android jetpack
通玄18 小时前
Jetpack Compose 入门系列(七):ViewModel 与界面状态管理
android
落魄Android在线炒饭18 小时前
Android Framework 开发技巧:android.jar 生成与系统快速编译验证
android
如此风景19 小时前
Kotlin Flow操作符学习
android·kotlin
plainGeekDev19 小时前
GreenDAO → Room
android·java·kotlin
weiggle20 小时前
第八篇:ViewModel + Compose——生产级状态管理实践
android