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"),
        )
    );
  }




}
相关推荐
颜x小几秒前
[C#] C++与c#语法对比
开发语言·c++·c#
weixin_4236521310 分钟前
C#使用JObject
开发语言·c#
国科安芯20 分钟前
FreeRTOS RISC-V 浮点上下文切换移植:在 IAR 工程中完整保存 FPU 寄存器
java·开发语言·单片机·嵌入式硬件·算法·系统架构·risc-v
Hilaku1 小时前
工作 5 年后,决定你薪资上限的究竟是什么?
前端·javascript·程序员
weixin_BYSJ19871 小时前
springboot校园自习室管理小程序---附源码32142
java·javascript·spring boot·python·django·flask·php
霸道流氓气质2 小时前
Java中集成Smile 技术教程:从入门到工程实践
java·开发语言
gis开发之家2 小时前
《Vue3 从入门到大神40篇》Vue3 源码详解(十):diff 算法全解析 —— 为什么 Vue3 比 Vue2 更快?
javascript·算法·typescript·前端框架·vue3·vue3源码
BerrySen1782 小时前
迈向 Next-Gen Java:企业级高并发架构演进与大模型 Agent 落地深度实战
java·开发语言·架构
Nebula_g3 小时前
Java实现本地Socket通信(三)
java·开发语言·学习·socket·可视化
一水3 小时前
java运行排错,新码旧jar
java·开发语言·jar