zoukankan      html  css  js  c++  java
  • Flutter通过底部导航栏实现页面的跳转

    放自己定义的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; 
              });
            },
    
  • 相关阅读:
    《高效能人士的七个习惯》读书笔记
    《精进》读书摘要
    讲述测试自己的故事
    搭建项目自动化框架的搭建、改进与思考
    真是个信息爆炸的世界
    C#中的WebBrowser控件的使用
    C#动态调用webService出现 基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系。
    C#抓取网面上的html内容(JS动态生成的无法抓取)
    SQL还原数据库后,数据库显示受限制用户解决方法
    [Microsoft][ODBC 驱动程序管理器] 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配
  • 原文地址:https://www.cnblogs.com/yfc0818/p/11072648.html
Copyright © 2011-2022 走看看