xuelongqy / flutter_easy_refresh

A flutter widget that provides pull-down refresh and pull-up load.
https://xuelongqy.github.io/flutter_easy_refresh/
MIT License
3.89k stars 633 forks source link

为header设置claming属性,刷新成功后页面无法回弹 #835

Closed GHkmmm closed 2 months ago

GHkmmm commented 4 months ago

问题描述

header设置claming为true后,在页面下拉刷新,状态变更为成功后无法回弹页面,需要手动点击页面任意处才能关闭;

image image

如果不设置claming,可以回弹页面但是下拉的幅度很大;

image

复现代码:

import 'package:easy_refresh/easy_refresh.dart';
import 'package:extended_nested_scroll_view/extended_nested_scroll_view.dart';
import 'package:flutter/material.dart';

class HomePage extends StatefulWidget {
  const HomePage({super.key});

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> with TickerProviderStateMixin {
  late TabController _tabController;
  final EasyRefreshController _easyRefreshController = EasyRefreshController(
    controlFinishRefresh: true,
    controlFinishLoad: true,
  );

  @override
  void initState() {
    _tabController = TabController(length: 2, vsync: this);
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return EasyRefresh.builder(
      controller: _easyRefreshController,
      header: ClassicHeader(
        clamping: true,
        position: IndicatorPosition.locator,
      ),
      footer: ClassicFooter(
        position: IndicatorPosition.locator,
      ),
      onRefresh: () async {
        await Future.delayed(const Duration(seconds: 2));
        _easyRefreshController.finishRefresh();
        // _easyRefreshController.resetFooter();
      },
      onLoad: () async {},
      childBuilder: (context, physics) => ScrollConfiguration(
        behavior: ERScrollBehavior(),
        child: ExtendedNestedScrollView(
          physics: physics,
          onlyOneScrollInBody: true,
          pinnedHeaderSliverHeightBuilder: () {
            return MediaQuery.of(context).padding.top + kToolbarHeight;
          },
          headerSliverBuilder: (context, boxIsScrolled) => [
            const HeaderLocator.sliver(
              clearExtent: false,
            ),
            SliverAppBar(
              pinned: true,
              expandedHeight: 120,
              flexibleSpace: FlexibleSpaceBar(
                title: Text(
                  'TabBarView',
                  style: TextStyle(
                      color: Theme.of(context).textTheme.titleLarge?.color),
                ),
                centerTitle: false,
              ),
              bottom: TabBar(
                controller: _tabController,
                tabs: <Widget>[
                  Tab(
                    text: '推荐',
                  ),
                  Tab(
                    text: '关注',
                  ),
                ],
              ),
            )
          ],
          body: SizedBox(
            height: 1000,
            child: TabBarView(
              controller: _tabController,
              children: [
                Tab(text: '推荐'),
                Tab(text: '关注'),
              ].map((Tab tab) => Placeholder()).toList(),
            ),
          ),
        ),
      ),
    );
  }
}

复现版本:

Flutter 3.22.1 • channel stable • https://github.com/flutter/flutter.git
Framework • revision a14f74ff3a (13 天前) • 2024-05-22 11:08:21 -0500
Engine • revision 55eae6864b
Tools • Dart 3.4.1 • DevTools 2.34.3
winter-tech commented 3 months ago

TabBarView里面的listview传入physics就可以。

xuelongqy commented 2 months ago

TabBarView的方案,请按照示例调整。这个方式很多问题可能得不到解决