flutter实现底部导航栏切换
作者:派大星? 发布时间:2023-05-30 14:43:40
标签:flutter,导航栏,切换
本文实例为大家分享了flutter实现底部导航栏切换的具体代码,供大家参考,具体内容如下
思路:MaterialApp是提供了bottomnavigationbar的,可以使用,这个已经提供了的widget,再利用每次点击tab的时候使用set state方法来更新屏幕,切换中间的body的widget;
main文件:
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_app1/MyBottomNavigationBar.dart';
void main(){
? runApp(new MyApp());
}
class MyApp extends StatelessWidget{
? @override
? Widget build(BuildContext context) {
? ? // TODO: implement build
? ? // throw UnimplementedError();
? ? return new MaterialApp(
? ? ? title:" MyNavigationBar",
? ? ? home: new MyBottomNavigationBar(),
? ? );
? }
}
MyBottomNavigationBar():
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_app1/pages/AddScreen.dart';
import 'package:flutter_app1/pages/HomeScreen.dart';
import 'package:flutter_app1/pages/PersonScreen.dart';
class MyBottomNavigationBar extends StatefulWidget{
? @override
? MyNavigationBarState createState() {
? ? // TODO: implement createState
? ? // throw UnimplementedError();
? ? return new MyNavigationBarState();
? }
}
class MyNavigationBarState extends State<MyBottomNavigationBar>{
?List<Widget> pagesList=[];
?int cunrrentIndex=0;
?@override
? void initState() {
? ?pagesList=pagesList..add(new HomeScreen())
? ? ? ?..add(new AddScreen())
? ? ? ?..add(new PersonScreen());
? }
? @override
? Widget build(BuildContext context) {
? ? // TODO: implement build
? ? // throw UnimplementedError();
? ? return new Scaffold(
? ? ? appBar: new AppBar(
? ? ? ? title: new Text("MyNavigationBar"),
? ? ? ),
? ? ? body: pagesList[cunrrentIndex],
? ? ? bottomNavigationBar: new BottomNavigationBar(
? ? ? ? items: [
? ? ? ? ? new BottomNavigationBarItem(
? ? ? ? ? ? icon: new Icon(Icons.home),
? ? ? ? ? ? label:"Home"
? ? ? ? ? ),
? ? ? ? ? new BottomNavigationBarItem(
? ? ? ? ? ? ? icon: new Icon(Icons.add),
? ? ? ? ? ? ? label:"Add"
? ? ? ? ? ),
? ? ? ? ? new BottomNavigationBarItem(
? ? ? ? ? ? ? icon: new Icon(Icons.person),
? ? ? ? ? ? ? label:"Person"
? ? ? ? ? )
? ? ? ? ],
? ? ? ? onTap:(index){
? ? ? ? ? setState(() {
? ? ? ? ? ? cunrrentIndex=index;
? ? ? ? ? });
? ? ? ? },
? ? ? ? currentIndex: cunrrentIndex,
? ? ? )
? ? );
? }
}
addScreen:
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class AddScreen extends StatelessWidget{
? @override
? Widget build(BuildContext context) {
? ? // TODO: implement build
? ? // throw UnimplementedError();
? ? return new Scaffold(
? ? ? appBar: new AppBar(
? ? ? ? title: new Text("AddPage"),
? ? ? ),
? ? ? body: new Center(
? ? ? ? child: new Text("Add"),
? ? ? ),
? ? );
? }
}
HomeScreen
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class HomeScreen extends StatelessWidget{
? @override
? Widget build(BuildContext context) {
? ? // TODO: implement build
? ? // throw UnimplementedError();
? ? return new Scaffold(
? ? ? appBar: new AppBar(
? ? ? ? title: new Text("HomePage"),
? ? ? ),
? ? ? body: new Center(
? ? ? ? child:Image.asset("images/cat.png"),
? ? ? ),
? ? );
? }
}
PersonScreen :
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class PersonScreen extends StatelessWidget{
? @override
? Widget build(BuildContext context) {
? ? // TODO: implement build
? ? // throw UnimplementedError();
? ? return new Scaffold(
? ? ? appBar: new AppBar(
? ? ? ? title: new Text("PersonPage"),
? ? ? ),
? ? ? body: new Center(
? ? ? ? child: new Text("Person"),
? ? ? ),
? ? );
? }
}
最终效果:
来源:https://blog.csdn.net/qq_44280408/article/details/110140247


猜你喜欢
- 在日常开发过程中时常需要用到设计模式,但是设计模式有23种,如何将这些设计模式了然于胸并且能在实际开发过程中应用得得心应手呢?和我一起跟着《
- Android设备多分辨率的问题 Android浏览器默认预览模式浏览 会缩小页面 WebView中则会以原始大小显示 Android浏览器
- idea如何设置系统环境变量背景最近在接入阿里云的短信服务,在使用阿里云短信服务的SDK过程中想看看SDK中HttpUtil 中public
- 软件需求VS2019社区版、win10操作系统、opencv4.1.0VS2019社区版(免费) 下载地址OpenCV4.1.0 下载地址配
- 可能经常看面经的同学都知道,面试所遇到的排序算法,快速排序占主要位置,热度只增不减啊,其次就是归并和堆排序。其实以前写过一篇排序的文章,写的
- 关于Android开发可以使用的工具有eclipse和Android studio等,这两个工具都各有各的好处和不足。studio是谷歌推出
- 文件流输出文件名中文不显示response返回文件流 用response.setHeader(“Content-disp
- 字符串是由零个或多个字符组成的有限序列,是几乎所有编程语言中可以实现的非常重要和有用的数据类型。在C#语言中,字符串是System.Stri
- 前面有写到Spring+SpringMVC+MyBatis深入学习及搭建(二)——MyBatis原始Dao开发和mapper代理开发MyBa
- 在上篇文章跟大家介绍了Android之使用Android-query框架开发实战(一),本文继续跟大家介绍有关Android-query框架
- 1.初始化顺序当Java创建一个对象时,系统先为该对象的所有实例属性分配内存(前提是该类已经被加载过了),接着程序开始对这些实例属性执行初始
- 前言Inotify会对工程内的所有文件夹设置”watch handle”。不幸的是,Linux默认的watch handle的限值不能满足实
- WebService是一个SOA(面向服务的编程)的架构,它是不依赖于语言,不依赖于平台,可以实现不同的语言间的相互调用,通过Interne
- 不过在实际的工作中,很少会直接用到它。通常都是用的spring-quartz组件,直接通过配置,让spring框架来自动装配如下就是spri
- 1.获取String osName =System.getProperties().getProperty(&quo
- String和StringBuilder和StringBuffer,这三个都是值得深究一翻的,可能很多人会说,实在不行的话,都全部用Stri
- HashMap的get()方法的NullPointerException今天写代码发现一个 bug,HashMap的 get() 方法一直报
- 上一篇,我们已经详细讲解了Android微信支付,今天接着为大家带来支付宝支付,支付宝支付相对微信支付要简单一些,吐槽一下,而且支付宝文档确
- 一、项目简述本系统主要实现的功能有:社区疫情流动人员管理系统,住户管理,出入管理,访客管理,体温录入,高风险警示等等。二、项目运行环境配置:
- 创建SpringBoot项目,启动后,默认的访问路径即主机IP+默认端口号8080:http://localhost:8080/此时,我们就