flutter:bottomNavigationBar+PageView切换页面,使页面可以滑动切换

一,代码:

tabbar:

import 'package:flutter/material.dart';
import '../tabpages/MyHomePage.dart';
import '../tabpages/ProfilePage.dart';class MyTabBar extends StatefulWidget {const MyTabBar({super.key});@overrideState<MyTabBar> createState() => _MyTabBarState();
}class _MyTabBarState extends State<MyTabBar>with SingleTickerProviderStateMixin {final List<Widget> pages = const [MyHomePage(), ProfilePage()];/// PageView 控制器 , 用于控制 PageViewlate PageController _pageController;int _currentIndex = 0;@overridevoid initState() {super.initState();_pageController = PageController(/// 初始索引值initialPage: 0,);}@overridevoid dispose() {super.dispose();/// 销毁 PageView 控制器_pageController.dispose();}@overrideWidget build(BuildContext context) {return Scaffold(/// 滑动组件 , 界面的核心元素body: PageView(/// 控制跳转翻页的控制器controller: _pageController,/// 页面滑动/// 这里设置 PageView 页面也能滑动onPageChanged: (index) {setState(() {// 更新当前的索引值_currentIndex = index;});},/// Widget 组件数组 , 设置多个 Widget 组件/// 同一时间只显示一个页面组件children: pages,),bottomNavigationBar: BottomNavigationBar(currentIndex: _currentIndex,selectedItemColor: Colors.red,onTap: (index) {setState(() {//_pageController.jumpToPage(index);_pageController.animateToPage(index,duration: Duration(milliseconds: 300),curve: Curves.easeInOut,);_currentIndex = index;});},items: const [BottomNavigationBarItem(icon: Icon(Icons.home),label: 'Home',),BottomNavigationBarItem(icon: Icon(Icons.person),label: 'Profile',),],),);}
}

第一个页面:

import 'package:flutter/material.dart';class MyHomePage extends StatefulWidget {const MyHomePage({super.key});@overrideState<MyHomePage> createState() => _MyHomePageState();
}class _MyHomePageState extends State<MyHomePage> with AutomaticKeepAliveClientMixin {@overrideWidget build(BuildContext context) {print("Home build");super.build(context);return Scaffold(appBar: AppBar(title: const Text("Home标题",style: TextStyle(color: Colors.white),),centerTitle: true,backgroundColor: Colors.blue,),body: const Center(child: Text("Home内容"),),);}@overridebool get wantKeepAlive => true;
}

第二个页面:

import 'package:flutter/material.dart';class ProfilePage extends StatefulWidget {const ProfilePage({super.key});@overrideState<ProfilePage> createState() => _ProfilePageState();
}class _ProfilePageState extends State<ProfilePage> with AutomaticKeepAliveClientMixin{@overrideWidget build(BuildContext context) {print("Profile build");super.build(context);return Scaffold(appBar: AppBar(title: const Text("Profile标题",style: TextStyle(color: Colors.white),),centerTitle: true,backgroundColor: Colors.blue,),body: const Center(child: Text("Profile内容"),),);}@overridebool get wantKeepAlive => true;
}

 

二,效果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/903386.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

flutter:用底部导航栏切换页面

一,代码: tabbar页面: import package:flutter/material.dart; import ../tabpages/MyHomePage.dart; import ../tabpages/ProfilePage.dart;class MyTabBar extends StatefulWidget {const MyTabBar({super.key});@overrideState<MyTabBar> createState() => _MyTa…

ASE13N45-ASEMI照明驱动专用ASE13N45

ASE13N45-ASEMI照明驱动专用ASE13N45编辑:LL ASE13N45-ASEMI照明驱动专用ASE13N45 型号:ASE13N45 品牌:ASEMI 封装:TO-220F 最大漏源电流:13A 漏源击穿电压:450V 批号:最新 RDS(ON)Max:0.45Ω 引脚数量:3 沟道类型:N沟道MOS管 封装尺寸:如图 特性:MOS管、N沟道M…

CORIDIC算法学习记录

目录问题问题分析CORDIC算法原理逼近方法及步骤逼近过程中的符号确定根据角度计算正切值举个例子逼近\(\theta=50^{\degree}\)并求其正切值 CORDIC算法叫坐标旋转数字计算法,由J.Volder在1959年提出,可以快速且简单的计算角度的数值。 问题已知\(y,x\),如何快速计算角度\(\t…

郑州商转公直还办理流程-2025年3月

先叠个甲,因为时间、地点、银行及每个人的情况可能都不一样,最终流程和结果可能也不一样,建议根据自己情况提前咨询,以下为我个人真实经历,仅供参考。 时间线:1.2025.3.10周一,去贷款行办理《同意提前结清商业贷款函》、《同意提前结清商业贷款函》、余额证明,12号周三…

设计一种将方向盘的旋转角度转换为USB信号的装置,用于汽车驾驶模拟

量角器是一种专门的设备,用于高精度测量旋转角度,并通过USB将这些测量结果传输到主机。它集成了一个精确的编码器,能够以1度的精度测量角度。树莓派Pico通过可编程I/O (Programmable I/O)高速读取编码器信号,而TinyUSB库则用于与主机共享数据。该量角器的开发主要是为了解决…

郑州商转公直还办理流程

时间线:1.2025.3.10周一,去贷款行办理《同意提前结清商业贷款函》、《同意提前结清商业贷款函》、余额证明,12号周三电话我已出好,可以去公积金中心办商转公了;2.2025.3.17周一,去公积金中心办理商转公直还,周四下午收到已放款短信,周五早上接到贷款行电话提醒去办提前…

构建一个2.4GHz无线网络分析仪,可兼作远程(LoRa)收发器

快速预览 呈现DualCast !我最新的(也是最先进的)项目。它是一种紧凑型无线设备,除了能够通过LoRa技术发送915MHz AES-128加密的远程命令外,还能够分析2.4GHz Wi-Fi网络上的实时流量。(默认设置下最高可达一公里!)翻转180以激活Wi-Fi模式。此外,它还配备了许多传感器,如用于…

Vue3 关闭vueDevTools工具

1、文件 vite.config.ts 2、注释

SecureCRT SecureFX 9.6.2 for macOS, Linux, Windows - 跨平台的多协议终端仿真和文件传输

SecureCRT & SecureFX 9.6.2 for macOS, Linux, Windows - 跨平台的多协议终端仿真和文件传输SecureCRT & SecureFX 9.6.2 for macOS, Linux, Windows - 跨平台的多协议终端仿真和文件传输 rock-solid terminal emulation & flexible secure file transfer for com…

deepseek模型部署到本地使用+投喂数据训练

近期,由于国外大量攻击,导致 DeepSeek 经常无法使用;另外,许多朋友希望在本地搭建自己的知识库,以保护自己的资料不被外泄。因此,越来越多的人希望能够在本地部署 DeepSeek,但对于技术难度有所担忧。别担心,这篇教程将为你扫清所有障碍!从环境搭建到模型运行,每一步都…

Axure RP上使用 Font Awesome 图标库

Axure RP 可以使用 Web Fonts,这让置入 Font Awesome 变得非常方便。Font Awesome 是一种字体,只是主要针对图标使用,而非我们所熟知的中文/西文字体。 进行简单的几步设置,就可以在自己项目上面使用 Font Awesome 的 1609 个免费图标。图标覆盖广泛,风格也相对统一。 一、…