【flutter项目实战】第六节在flutter项目中使用getx创建底部tab如何实现左右页面切换

一 使用PageView实现左右切换

修改lib\app\modules\tabs\\controllers\\tabs_controller.dart

 //增加一个新的变量,默认值为0
 PageController pageController = PageController(initialPage: 0);

修改 lib\app\modules\tabs\\views\\tabs_view.dart

import 'package:flutter/material.dart';

import 'package:get/get.dart';

import '../controllers/tabs_controller.dart';

class TabsView extends GetView<TabsController> {
  const TabsView({Key? key}) : super(key: key);

  
  Widget build(BuildContext context) {
    return Obx(() => Scaffold(
          //删除原先的Body,用PageView包裹
          body: PageView(
            controller: controller.pageController,
            children: controller.pages,
            onPageChanged: (index){
              controller.setCurrentIndex(index);
            },
          ),
          bottomNavigationBar: BottomNavigationBar(
            fixedColor: Colors.red,
            currentIndex: controller.currentIndex.value,
            type: BottomNavigationBarType.fixed,
            onTap: (index) {
              controller.setCurrentIndex(index);
              //增加跳转页面功能,否则底部tab不会切换
              controller.pageController.jumpToPage(index);
            },
            items: const [
              BottomNavigationBarItem(
                icon: Icon(Icons.home),
                label: "首页",
              ),
              BottomNavigationBarItem(
                icon: Icon(Icons.shopping_cart),
                label: "购物车",
              ),
              BottomNavigationBarItem(
                icon: Icon(Icons.people),
                label: "用户",
              ),
            ],
          ),
        ));
  }
}

至此,功能已完成

git地址:git@github.com:winnietherpooh/learn-flutter.git

### 使用 GetX 实现 Flutter TabBar 在 Flutter 应用程序中使用 GetX 来管理 `TabBar` 的状态和行为能够简化代码并提高可维护性。下面展示了一个完整的例子来说明如何通过 GetX 控制 `TabBar`。 #### 创建控制器类 首先定义一个继承自 `GetxController` 的控制器类,该类负责存储当前选中的标签页索引以及提供改变此索引的方法: ```dart import 'package:get/get.dart'; class TabsController extends GetxController { final PageController pageController = PageController(initialPage: 0); var tabIndex = 0.obs; void changeTabIndex(int index) { tabIndex.value = index; pageController.jumpToPage(index); // 同步页面跳转 } } ``` 这里利用了 `.obs` 将属性标记为响应式的,并且每当调用了 `changeTabIndex()` 方法更新索引时都会触发 UI 刷新[^3]。 #### 构建视图层 接着是在界面布局文件里构建实际的 `TabBar` 组件及其对应的子页面列表。注意要绑定之前创建好的控制器实例以便于数据共享: ```dart import 'package:flutter/material.dart'; import '../controllers/tabs_controller.dart'; class HomeView extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('GetX TabBar Example'), bottom: PreferredSize( preferredSize: Size.fromHeight(kToolbarHeight), child: Obx(() => TabBar( tabs: [ Tab(text: "Home"), Tab(text: "Profile"), Tab(text: "Settings") ], controller: Get.find<TabsController>().pageController, onTap: (index) => Get.find<TabsController>().changeTabIndex(index), )), ), ), body: PageView.builder( itemCount: 3, // 假设有三个选项卡 itemBuilder: (_, int index) { switch (index){ case 0: return Center(child: Text("Home Content")); case 1: return Center(child: Text("Profile Content")); default: return Center(child: Text("Settings Content")); } }, onPageChanged: (int index) => Get.find<TabsController>().changeTabIndex(index)[^4], physics: NeverScrollableScrollPhysics(), // 防止滑动切换 tab controller: Get.find<TabsController>().pageController, ) ); } } ``` 上述代码片段展示了如何设置顶部导航栏内的 `TabBar` 并关联至下方的内容区域 (`PageView`) 。当点击不同的标签项或是滚动到新的页面时会自动同步两个组件之间的状态变化[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Call me 兽医

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值