Flutter导航栏实现

学了几天的flutter,似乎有点感觉了,今天来上手搞一个导航栏,实现类似android里面的ViewPager+Fragment的效果;

二话不说直接上代码;

import 'package:flutter/material.dart';
import 'package:mou/navigationbar/ActPage.dart';
import 'package:mou/navigationbar/HomePage.dart';
import 'package:mou/navigationbar/PersonPage.dart';

class NavigationPage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return new NavigationState();
  }
}

class NavigationState extends State<NavigationPage>
    with TickerProviderStateMixin {
  List<Widget> pageData;

  //当前页面
  int currentPosition = 0;

  // 两种动画类型
  BottomNavigationBarType animType = BottomNavigationBarType.fixed;

  @override
  Widget build(BuildContext context) {
    final BottomNavigationBar botNavBar = new BottomNavigationBar(
        items: [
          new BottomNavigationBarItem(
            icon: new Icon(
              Icons.home,
              color: currentPosition == 0 ? Colors.green : Colors.black87,),
            title: new Text(
              "主页",
              style: new TextStyle(
                color: currentPosition == 0 ? Colors.green : Colors.black87,
              ),
            ),
          ),

          new BottomNavigationBarItem(
            icon: new Icon(
              Icons.local_activity,
              color: currentPosition == 1 ? Colors.green : Colors.black87,),
            title: new Text("活动",
              style: new TextStyle(
                color: currentPosition == 1 ? Colors.green : Colors.black87,
              ),
            ),
          ),

          new BottomNavigationBarItem(
            icon: new Icon(
              Icons.person,
              color: currentPosition == 2 ? Colors.green : Colors.black87,),
            title: new Text(
              "个人中心",
              style: new TextStyle(
                color: currentPosition == 2 ? Colors.green : Colors.black87,
              ),
            ),
          ),
        ],
        currentIndex: currentPosition,
        type: animType,
        onTap: (index) {
          setState(() {
            currentPosition = index;
          });
        }
    );
    return new Scaffold(
      appBar: new AppBar(
        title: new Text("navigationBar"),
      ),
      body: pageData[currentPosition],
      bottomNavigationBar: botNavBar,
    );
  }

  @override
  void initState() {
    super.initState();
    pageData = new List();
    pageData..add(HomePage())..add(ActPage())..add(PersonalPage());
  }
}

Scaffold里面就可以设置navigationBar传入一个BottomNavigationBar 即可

这个navigationbar的动画有两种,默认就是有动画的;

下面是三个widget,类似android里面的三个fragment,只贴一个,意思差不多

import 'package:flutter/material.dart';

class HomePage extends StatefulWidget{
  @override
  State<StatefulWidget> createState() {
    return new HomeState();
  }
}

class HomeState extends State<HomePage>{
  @override
  Widget build(BuildContext context) {
    return new Container(
      child: new Center(
        child: new Text("主页",
          style: new TextStyle(
              fontSize: 26.0,
              color: Colors.green
          ),
        ),
      ),
    );
  }
}

最后看下效果;
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值