• Flutter页面滑动回调处理解决方法


    请添加图片描述

    TabBarView

    TabBarView简介

    TabBarView 是 Flutter 中的一个用于显示选项卡视图的小部件。它通常与 TabBar 一起使用,用于实现选项卡式导航,允许用户在不同的选项卡之间切换内容。

    TabBarView详细介绍

    以下是 TabBarView 的详细介绍:

    1. 基本用法: TabBarView 允许你在不同的选项卡之间切换内容。它接受一个 controller 属性,用于控制选项卡的切换。通常,你会将 TabController 与 TabBar 共享,以便它们可以保持同步。
    TabController _tabController;
    
    _tabController = TabController(length: 3, vsync: this);
    
    // 在 TabBar 和 TabBarView 中使用相同的 controller
    TabBar(
      controller: _tabController,
      tabs: [
        Tab(text: "Tab 1"),
        Tab(text: "Tab 2"),
        Tab(text: "Tab 3"),
      ],
    ),
    TabBarView(
      controller: _tabController,
      children: [
        // 内容视图
        Tab1Content(),
        Tab2Content(),
        Tab3Content(),
      ],
    ),
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    1. 子视图: 你可以在 TabBarView 的 children 属性中传递一个子小部件列表,每个子小部件代表一个选项卡的内容。当用户切换选项卡时,TabBarView 会显示相应的子小部件。

    2. 索引控制: 你可以使用 initialIndex 属性来指定默认显示的选项卡索引。还可以通过 TabController 控制选项卡的切换,这允许你手动控制选项卡的切换,执行自定义逻辑,或在选项卡之间添加动画效果。

    3. 物理效果: 你可以通过 physics 属性来指定滚动的物理效果,例如禁用滚动(NeverScrollableScrollPhysics)、使用弹性滚动(BouncingScrollPhysics)等。

    4. 滚动方向: TabBarView 支持水平和垂直滚动。你可以使用 scrollDirection 属性来指定滚动方向,例如 Axis.horizontal 或 Axis.vertical。

    TabBarView(
      controller: _tabController,
      children: [
        // 内容视图
        Tab1Content(),
        Tab2Content(),
        Tab3Content(),
      ],
      scrollDirection: Axis.vertical, // 设置为垂直滚动
    ),
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    1. 懒加载: 默认情况下,TabBarView 中的所有子小部件都会一次性加载。如果你希望在用户切换到特定选项卡时再加载内容,可以使用 lazy 属性,并将其设置为 true。
    TabBarView(
      controller: _tabController,
      children: [
        // 内容视图
        Tab1Content(),
        Tab2Content(),
        Tab3Content(),
      ],
      lazy: true, // 启用懒加载
    ),
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    1. 注意事项: 使用 TabBarView 时,确保 TabController 和 TabBarView 之间的同步,以便它们可以协同工作。还要注意,每个选项卡的内容应该是独立的 Scaffold 或 ListView,以便正确显示 appBar 和滚动效果。

    TabBarView 是一个强大的小部件,用于创建选项卡式导航,并允许用户在不同的选项卡之间切换内容。通过合理配置 TabController、physics 和其他属性,你可以实现各种交互效果和用户体验。

    TabBarView滑动时如何处理事务

    TabBarView 默认不提供滑动时的回调函数,但你可以使用 PageController 来监听页面切换的情况,从而执行自定义的回调函数。

    例子

    以下是一个示例:

    import 'package:flutter/material.dart';
    
    class MainPage extends StatefulWidget {
      
      _MainPageState createState() => _MainPageState();
    }
    
    class _MainPageState extends State<MainPage> {
      final PageController _pageController = PageController();
      int _currentPage = 0; // 当前页面的索引
    
      
      void initState() {
        super.initState();
        // 添加页面切换监听
        _pageController.addListener(() {
          setState(() {
            _currentPage = _pageController.page?.round() ?? 0;
          });
          // 在这里执行页面切换时的自定义逻辑
          // 例如,你可以根据 _currentPage 执行不同的操作
          if (_currentPage == 0) {
            // 切换到第一个页面
          } else if (_currentPage == 1) {
            // 切换到第二个页面
          } else if (_currentPage == 2) {
            // 切换到第三个页面
          }
        });
      }
    
      
      void dispose() {
        _pageController.dispose();
        super.dispose();
      }
    
      
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text("Main Page"),
          ),
          body: PageView(
            controller: _pageController,
            children: [
              SportsShow(),
              ConfigsPage(),
              SettingsPage(),
            ],
          ),
          bottomNavigationBar: BottomNavigationBar(
            currentIndex: _currentPage,
            onTap: (index) {
              setState(() {
                _currentPage = index;
              });
              _pageController.animateToPage(
                index,
                duration: Duration(milliseconds: 500),
                curve: Curves.ease,
              );
            },
            items: [
              BottomNavigationBarItem(
                label: "Sports",
                icon: Icon(Icons.sports),
              ),
              BottomNavigationBarItem(
                label: "Configs",
                icon: Icon(Icons.settings),
              ),
              BottomNavigationBarItem(
                label: "Settings",
                icon: Icon(Icons.build),
              ),
            ],
          ),
        );
      }
    }
    
    • 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
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81

    在上述示例中,我们使用 PageController 监听页面切换的情况,然后在 addListener 回调中执行自定义的逻辑。你可以根据 _currentPage 的值来执行不同的操作,例如在每次页面切换时更新 UI 或执行其他自定义操作。当用户点击底部导航栏时,我们还通过 animateToPage 方法切换页面并更新当前页的索引。这样,你可以在滑动和点击底部导航栏时执行自定义操作。

    PageController

    PageController介绍

    PageController 是 Flutter 中的一个控制器,用于控制可滚动页面的行为,通常与 PageView 一起使用。它提供了一种方便的方式来实现页面之间的滚动和切换。

    PageController 的详细介绍

    以下是关于 PageController 的详细介绍:

    1. 创建和初始化: 要使用 PageController,你可以创建一个新的实例,并在构造函数中提供一些参数,例如:
    PageController _pageController = PageController(
      initialPage: 0,       // 初始页面索引
      viewportFraction: 0.8, // 可见视口占比
    );
    
    • 1
    • 2
    • 3
    • 4

    initialPage:指定初始页面的索引。默认为 0,表示从第一页开始。
    viewportFraction:指定可见视口的占比,范围为 0 到 1。它允许你控制一页显示多少内容。例如,设置为 0.8 表示一页的宽度为视口宽度的 80%。
    2. 控制页面切换: 通过 PageController,你可以控制页面的切换。例如,你可以使用以下方法来实现页面的滚动:

    jumpToPage(int page):立即跳转到指定页面。
    animateToPage(int page, {duration, curve}):通过动画效果滚动到指定页面,可以设置动画的持续时间和曲线。

    
    _pageController.jumpToPage(2); // 立即跳转到第三页
    _pageController.animateToPage(1, duration: Duration(seconds: 1), curve: Curves.ease); // 通过动画滚动到
    第二页
    
    • 1
    • 2
    • 3
    • 4
    1. 获取当前页面索引: 你可以使用 pageController.page 属性来获取当前页面的索引。这允许你在需要时知道用户正在查看的页面。
    int currentPage = _pageController.page?.round() ?? 0;
    
    • 1
    1. 事件监听: 你可以使用 addListener 方法来监听页面切换事件。这允许你在页面切换时执行自定义的逻辑。
    _pageController.addListener(() {
      int currentPage = _pageController.page?.round() ?? 0;
      // 在页面切换时执行自定义逻辑
    });
    
    • 1
    • 2
    • 3
    • 4
    1. 销毁: 当不再需要 PageController 时,应该调用 dispose 方法来释放资源,以防止内存泄漏。
    _pageController.dispose();
    
    • 1

    PageController 是一个强大的控制器,用于控制 PageView 或其他可滚动页面的行为。它允许你实现滚动、切换页面,获取当前页面索引,并监听页面切换事件。通过适当配置 PageController,你可以实现各种滚动效果和用户交互体验。


    结束语
    Flutter是一个由Google开发的开源UI工具包,它可以让您在不同平台上创建高质量、美观的应用程序,而无需编写大量平台特定的代码。我将学习和深入研究Flutter的方方面面。从基础知识到高级技巧,从UI设计到性能优化,欢饮关注一起讨论学习,共同进入Flutter的精彩世界!
  • 相关阅读:
    Python入门(四)
    IO多路复用(select模型实现监控两个设备:自定义设备和鼠标设备)
    在ubuntu16.04系统利用eBPF获取TCP网络状态信息
    Spring Boot 中使用 tkMapper
    .net core 自定义授权策略提供程序进行权限验证
    Docker 基本管理
    周末折腾了两天,踩了无数个坑,终于把win7装成了centos7
    计算机网络期末98+冲刺笔记
    FPGA——时钟分频
    Android车载开发小结之sensor,carmanager,carservice串接
  • 原文地址:https://blog.csdn.net/yikezhuixun/article/details/134007774