You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开启Material3后SmartRefresher刷新时子组件放大问题的解决方法咨询

Material3环境下SmartRefresher刷新子Widget放大异常的解决方法

当开启Material3(useMaterial3: true)后,使用SmartRefresher组件执行刷新操作时,其内部子Widget会出现异常放大的行为,这是因为Material3默认的ScrollBehavior启用了缩放手势,与SmartRefresher的下拉刷新动作产生冲突导致的。

解决方法

方法一:局部禁用缩放手势

给SmartRefresher的子Widget套上ScrollConfiguration,自定义ScrollBehavior并禁用缩放手势:

Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: const Text('SmartRefresher Auto Zoom'),
    ),
    body: SmartRefresher(
      onRefresh: () async {
        await Future.delayed(const Duration(seconds: 1));
        refreshController.refreshCompleted();
      },
      controller: refreshController,
      child: ScrollConfiguration(
        behavior: ScrollBehavior().copyWith(
          pinchZoomEnabled: false, // 禁用缩放手势,解决放大异常
          physics: const ClampingScrollPhysics(),
        ),
        child: CustomScrollView(
          slivers: [
            SliverList.builder(
              itemBuilder: (_, i) => Text('data $i'),
              itemCount: 20,
            ),
          ],
        ),
      ),
    ),
  );
}

方法二:修改SmartRefresher的滚动物理效果

直接给SmartRefresher设置physics为ClampingScrollPhysics,避免触发Material3的默认缩放逻辑:

Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: const Text('SmartRefresher Auto Zoom'),
    ),
    body: SmartRefresher(
      physics: const ClampingScrollPhysics(),
      onRefresh: () async {
        await Future.delayed(const Duration(seconds: 1));
        refreshController.refreshCompleted();
      },
      controller: refreshController,
      child: CustomScrollView(
        slivers: [
          SliverList.builder(
            itemBuilder: (_, i) => Text('data $i'),
            itemCount: 20,
          ),
        ],
      ),
    ),
  );
}

内容的提问来源于stack exchange,提问作者Anjar Naufal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 20:10:27