Flutter---底部导航栏(2)

效果图

底部导航栏

Dart 复制代码
import 'package:flutter/material.dart';
import 'package:my_flutter/http/second_page.dart';

import 'first_page.dart';


///底部导航栏
class DemoPage extends StatefulWidget {
  const DemoPage({super.key});

  @override
  State<DemoPage> createState() => _DemoPageState();
}

class _DemoPageState extends State<DemoPage> {

  static const _pageList = [FirstPage(),SecondPage()];
  var _pageIndex= 0;

  @override
  Widget build(BuildContext context) {
    return Stack(
      children: [
        _pageList[_pageIndex],

        //底部导航栏
        Positioned(
            bottom: 40,
            left: 0,
            right: 0,
            child: Center(
              child: Container(
                height: 68,
                width: 221,
                decoration: BoxDecoration(
                  borderRadius: BorderRadius.circular(45),
                  color: Colors.white,
                ),
                child:_pageIndex == 0 ? _buildDeviceRow() : _buildMyRow(),
              ),
            )
        ),
      ],
    );
  }



  //设备显示按钮
  Widget _buildDeviceRow(){
    return Row(
      mainAxisAlignment: MainAxisAlignment.spaceBetween,
      mainAxisSize: MainAxisSize.min,
      children: [


        Container(
          height: 60,
          width: 124,
          margin: EdgeInsets.only(left: 5),
          decoration: BoxDecoration(
            borderRadius: BorderRadius.circular(45),
            gradient: LinearGradient(
                begin: Alignment.topCenter,
                end: Alignment.bottomCenter,
                colors: [
                  Color(0xFFA3BCFF),
                  Color(0xFF58E7FD),
                ]
            ),
          ),
          child: Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Icon(Icons.device_hub,color: Colors.white,),
              SizedBox(width: 5,),
              Text("设备",style: TextStyle(color: Colors.white,fontSize: 18),)
            ],
          ),
        ),

        GestureDetector(
            onTap: (){
              setState(() {
                _pageIndex = 1;
              });
            },
            child: Container(
              height: 30,
              width: 30,
              margin: EdgeInsets.only(right: 35),
              child: Icon(Icons.radio,color: Colors.blue,),
            )
        ),


      ],
    );
  }

  //我的显示按钮
  Widget _buildMyRow(){
    return Row(
      mainAxisAlignment: MainAxisAlignment.spaceBetween,
      mainAxisSize: MainAxisSize.min,
      children: [




        GestureDetector(
          onTap: (){
            setState(() {
              _pageIndex = 0;
            });
          },
          child: Container(
            height: 30,
            width: 30,
            margin: EdgeInsets.only(left: 35),
            child: Icon(Icons.device_hub,color: Colors.blue,),
          ),
        ),

        Container(
          height: 60,
          width: 124,
          margin: EdgeInsets.only(right: 5),
          decoration: BoxDecoration(
            borderRadius: BorderRadius.circular(45),
            gradient: LinearGradient(
                begin: Alignment.topCenter,
                end: Alignment.bottomCenter,
                colors: [
                  Color(0xFFA3BCFF),
                  Color(0xFF58E7FD),
                ]
            ),
          ),
          child: Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text("我的",style: TextStyle(color: Colors.white,fontSize: 18),),

              SizedBox(width:5 ,),
              Icon(Icons.radio,color: Colors.white,),
            ],
          ),
        ),


      ],
    );
  }

}

两个子页面

Dart 复制代码
import 'package:flutter/material.dart';


class FirstPage extends StatefulWidget {
  const FirstPage({super.key});

  @override
  State<StatefulWidget> createState() => _FirstPageState();
}

class _FirstPageState extends State<FirstPage> with SingleTickerProviderStateMixin {



  @override
  Widget build(BuildContext context) {
    return Scaffold(
        backgroundColor: Colors.pink.withOpacity(0.1),
        body: Center(
          child: Text("FirstPage"),
        )
    );
  }




}




import 'package:flutter/material.dart';


class SecondPage extends StatefulWidget {
  const SecondPage({super.key});

  @override
  State<StatefulWidget> createState() => _SecondPageState();
}

class _SecondPageState extends State<SecondPage> with SingleTickerProviderStateMixin {



  @override
  Widget build(BuildContext context) {
    return Scaffold(
        backgroundColor: Colors.pink.withOpacity(0.1),
        body: Center(
          child: Text("SecondPage"),
        )
    );
  }




}
相关推荐
程序员老赵15 分钟前
Docker 部署 ZLMediaKit:轻松搭建高性能流媒体服务平台
前端·javascript·后端
拾年27525 分钟前
前后端分离开发,别再"傻等"后端接口了——聊聊前端接口工程
前端·javascript·react.js
SendTomo27 分钟前
SendTomo稳定传输三大核心策略
javascript·网络协议·webrtc·html5·p2p
不会代码的小猴28 分钟前
4. 控件学习2
开发语言·c++·笔记·qt
天才熊猫君42 分钟前
从“改自己”到“改布局”——拖拽调整的通用设计思路
前端·javascript
smallswan44 分钟前
《Rust七十二变》开源了
开发语言·后端·rust·ai编程
weixin_BYSJ19871 小时前
springboot小区物业管理小程序---附源码45555
java·javascript·spring boot·python·django·flask·php
默_笙1 小时前
🍳 受控组件和非受控组件,我纠结了一整天,最后用"房东和租客"讲明白了
前端·javascript
Hilaku1 小时前
高级前端如何优雅地拒绝不合理的产品需求?
前端·javascript·程序员
独立开阀者_FwtCoder1 小时前
这次更新:换新主题,同时把好计划分享出去
前端·javascript·vue.js