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




}
相关推荐
白杨尚青1 小时前
C++进阶篇(二):多态——虚函数、重写、虚函数表与三个经典坑(附完整代码仓库)
开发语言·c++·多态·虚函数·重写·动态绑定
云浪9 小时前
Go 并发实战:从零实现一个高并发安全的任务调度器
javascript·后端·go
OpsEye18 小时前
大模型账单对账难:不同厂商 Token 统计口径差异怎么处理
javascript·ai编程
全栈项目管理程序猿18 小时前
ArcGIS JS 基础教程(32):体元系列 - VoxelSlice 体元切片
前端·javascript
WJ.Polar19 小时前
Java封装、继承、多态
java·开发语言
摇滚侠19 小时前
Java 中如何表示负数,有符号和无符号的区别,补码的计算规则,char byte short int long 的范围
java·开发语言
weixin_3077791320 小时前
C++代码实现MATLAB中的fitrtree函数功能
开发语言·c++·算法·matlab
Hilaku20 小时前
AI 流式输出都用 SSE,什么时候必须换 WebSocket?
前端·javascript·程序员
奇牙coding20 小时前
Codex CLI 升级后多文件编辑静默失效:config.yaml 枚举变更排查与修复指南
java·前端·javascript·ai
爱读书的小胖20 小时前
Codewars:Rot13(C)解题分析
c语言·开发语言