大号在练葵花宝典 发表于 2025-4-10 14:27:25

Flutter 实现上滑悬浮吸顶效果

在 Flutter 开辟中,实现一个具有上滑悬浮吸顶效果的界面是一个常见的需求。这种效果通常用于商品列表、新闻资讯等场景,能够提升用户体验。本文将通过一个具体的案例,介绍怎样使用 RefreshIndicator、NestedScrollView、TabBar、TabView 和 SmartRefresher 来实现一个支持下拉革新和上拉加载的 Tab 吸顶效果。
   1. 场景描述

   我们希望实现一个包罗以下功能的页面:
   
   
[*]页面顶部有一个轮播图(Swiper)。   
[*]轮播图下方是一个可滑动的 TabBar,每个 Tab 对应一个商品分类。   
[*]滑动页面时,TabBar 会悬浮在顶部(吸顶效果)。   
[*]每个 Tab 的内容地域支持下拉革新和上拉加载更多数据。   
[*]使用 SmartRefresher 来实现更机动的革新和加载效果。   
   https://i-blog.csdnimg.cn/img_convert/d7758923de2719256da18ae9dba076cd.jpeg
   https://i-blog.csdnimg.cn/img_convert/0e4b7ff81d1f7dea73088b1b1a57b205.jpeg
   2. 依赖库

   为了实现上述功能,我们需要以下依赖库:
   
   
[*]pull_to_refresh: ^2.0.0:用于实现下拉革新和上拉加载。   
[*]flutter_swiper: ^1.1.6:用于实现轮播图效果。   
   在 pubspec.yaml 文件中添加以下依赖:
   yaml复制
                                 登录后复制                         dependencies:
flutter:
    sdk: flutter
pull_to_refresh: ^2.0.0
flutter_swiper: ^1.1.6      
      
[*]1.      
[*]2.      
[*]3.      
[*]4.      
[*]5.      
                     3. 页面结构设计

   3.1 主页面结构

   主页面使用 Scaffold 包裹,包罗一个自定义的 AppBar 和一个 NestedScrollView。NestedScrollView 的 headerSliverBuilder 用于构建轮播图和 TabBar,而 body 则是一个 TabBarView,每个 Tab 的内容是一个 SmartRefresher。
   dart复制
                                 登录后复制                         class ListPage extends StatefulWidget {
         
@override
State<StatefulWidget> createState() => _ListPageState();
}

class _ListPageState extends State<ListPage>
    with AutomaticKeepAliveClientMixin, TickerProviderStateMixin {
         
// 省略部分变量定义...

@override
Widget build(BuildContext context) {
         
    return Scaffold(
      appBar: CustomAppBar(
      // 自定义AppBar样式
      ),
      body: RefreshIndicator(
      notificationPredicate: (notifation) {
         
          // 避免下拉刷新与NestedScrollView滑动冲突
          return true;
      },
      child: NestedScrollView(
          headerSliverBuilder: (BuildContext context, bool b) {
         
            return ;
          },
          body: _goodsListView(),
      ),
      onRefresh: () async {
         
          pageNum = 1;
          getData();
          return Future.value(true);
      },
      ),
    );
}
}      
      
[*]1.      
[*]2.      
[*]3.      
[*]4.      
[*]5.      
[*]6.      
[*]7.      
[*]8.      
[*]9.      
[*]10.      
[*]11.      
[*]12.      
[*]13.      
[*]14.      
[*]15.      
[*]16.      
[*]17.      
[*]18.      
[*]19.      
[*]20.      
[*]21.      
[*]22.      
[*]23.      
[*]24.      
[*]25.      
[*]26.      
[*]2      

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Flutter 实现上滑悬浮吸顶效果