Flutter通过底部导航栏实现页面的跳转

news/2024/8/26 13:53:58 标签: 移动开发, ui

放自己定义的BottomNavigationWidget 这个组件的核心代码

import 'package:flutter/material.dart';
import 'pages/home.dart';
import 'pages/map.dart';
import 'pages/timer.dart';

void main(){
  runApp(BottomNavigationWidget());
}

class BottomNavigationWidget extends StatefulWidget {
  @override
  _BottomNavigationWidgetState createState() => _BottomNavigationWidgetState();
}

class _BottomNavigationWidgetState extends State<BottomNavigationWidget> {
  final _bottomColor = Colors.blue;
  int _currentIdex = 0;  //当前的页面索引
  List<Widget> pagelist = List();
  
  @override
  void initState(){
    pagelist
      ..add(Home())
      ..add(Map())
      ..add(Timer());
    super.initState();
  }
  
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: pagelist[_currentIdex],
      bottomNavigationBar: new BottomNavigationBar(
        items: [
          BottomNavigationBarItem(
            icon: Icon(Icons.home,color: _bottomColor),
            title: Text("首页"),
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.map,color: _bottomColor),
            title: Text("地图")
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.timer,color: _bottomColor),
            title: Text("计时")
          ),
        ],
        currentIndex: _currentIdex,
        onTap: (int index){
          setState(() {
           _currentIdex = index; 
          });
        },
        type: BottomNavigationBarType.fixed,
      )
    );
  }
}

上一篇博客实现了底部导航的UI效果,但是没有实现跳转功能,那这篇博客写跳转功能的实现。

  1. 首先声明一个用来储存Widget类型的列表组件。
List <Widget> pagelist = List()
  1. 然后重写我们的initState()方法,相当于把页面初始化到一个Widget数组(即上面声明的pagelist)里,
    有了数组就可以通过索引切换不同的页面辽,相当于是对页面进行重新加载(可能理解有错)。里面是用了dart语法中的…add方法,相当于
    pagelist = pagelist.add(Home());
    pagelist = pagelist.add(Map());
    pagelist = pagelist.add(Timer());
    最后使用super调用父类的initState()方法,这样这三个子页面的组件就可以根据组件里的索引得到。
  void initState(){
    pagelist
      ..add(Home())
      ..add(Map())
      ..add(Timer());
    super.initState();
  }
  1. 接下来重写build方法,body属性可以通过当前点击对象的index重构页面。
body: pagelist[_currentIdex]
  1. 然后设置底部导航栏组件中的currentIndex属性
currentIndex: _currentIdex,
  1. 处理点击事件(自己也没理解)
onTap: (int index){
          setState(() {
           _currentIdex = index; 
          });
        },

转载于:https://www.cnblogs.com/yfc0818/p/11072647.html


http://www.niftyadmin.cn/n/929229.html

相关文章

php审计--POST[‘id‘]二次注入-GET[‘id‘]宽字节注入

POST[‘id’]二次注入在网站业务在注入点出现在注册页reg.php 我们在注册的时候&#xff0c;如果’ union select 1,2,3,4#这样的语句能带入数据库&#xff0c;但没有直接利用办法&#xff0c;那就能通过查询search.php来sql注入 前端这里写一个Form <form action"reg…

Senparc.Weixin微信开发(1) 开发验证

官方系列教程 http://www.cnblogs.com/szw/archive/2013/05/20/3089479.html 登录微信公众平台后-左侧找到开发--启用服务器配置 这样&#xff0c;我们才可以将微信公众平台的功能整合到我们自己的网站上面 启用并设置服务器配置后&#xff0c;用户发给公众号的消息以及开发者需…

php审计-->回调与反向正则匹配代码执行-可控参数$a导致命令执行

这里说一点&#xff0c;代码执行和命令执行&#xff0c;都需要php.ini关闭safe_mode的情况下。。 如果不能获取环境变量&#xff0c;当然也可以通过com组件或全局变量&#xff0c;但我们只对这种类型 $cmd $_GET[cmd]代码执行&#xff0c;这里有两个传小马常用的危险函数 eval…

Build tool

什么是构建工具 构建工具能够帮助你创建一个可重复的、可靠的、携带的且不需要手动干预的构建。构建工具是一个可编程的工具&#xff0c;它能够让你以可执行和有序的任务来表达自动化需求。假设你想要编译源代码&#xff0c;将生成的class文件拷贝到某个目录&#xff0c;然后将…

php审计--任意文件上传配合目录文件包含getshell

在黑盒中 源码 数据库配置文件都是很不好找的&#xff0c;&#xff0c;但源码审计不同 所有的漏洞&#xff0c;成因都是相同的&#xff0c;但我们自以最基础的作为代表&#xff0c; 这里文件上传这个点可以配合文件包含一块利用&#xff0c;当某个站对数据处理不严时&#xff…

wpf 右下角弹出窗

wpf 右下角弹出窗 原文:wpf 右下角弹出窗自己写的wpf 弹出框&#xff0c;欢迎拍砖&#xff0c;动画都写在了后台代码&#xff0c;前台代码不太重要&#xff0c;用了一下iconfont&#xff0c;具体样式我就不贴出来了&#xff0c;本次主要是后台代码的动画 需要有父级窗口才可以使…

第八次作业(课堂实战)- 项目UML设计(团队)

1. 团队信息 队名&#xff1a;小白吃队成员&#xff1a; 后敬甲 031602409卢泽明 031602328蔡文斌 031602301葛亮 031602617刘浩 031602423黄泽 031602317黄婧茹 031602315组长&#xff1a;后敬甲2.团队分工 WBS Alpha版本 任务槽 登陆注册界面完成自选窗口的识别结算功能实现学…

php审计--灰盒角度来复现经典反序列化

站在巨人的肩膀上做反序列化复现&#xff0c;&#xff0c; 这里已经找了fwrite()函数和read()函数&#xff0c;file_get_contents($file);都不能代替fopen()函数做复现&#xff0c;&#xff0c;本人水平有限&#xff0c;希望读者不要介意&#xff0c; 我们从灰盒的角度做学习…