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




}
相关推荐
chenbingjie_c6 小时前
C++ 进阶核心知识点总结:模板、内存分区、new/delete、内存池
开发语言·c++
福兮说7 小时前
前端下载大文件,点了按钮半天没反应:fetch + blob 的三个问题和三种替代写法
前端·javascript·性能优化·文件下载
Escalating_xu7 小时前
【C 语言】深入理解指针(1·下):指针运算、野指针、assert 与传址实战
java·c语言·开发语言
实心儿儿7 小时前
Qt — Qt 事件
开发语言·qt
周杰偷奶茶8 小时前
【Java】数据类型与变量
java·开发语言
code斗8 小时前
Java数据结构:堆详解
java·开发语言·数据结构
重生之小比特8 小时前
【C++进阶】map和set
java·开发语言·c++
lie..8 小时前
30天从零开始学AI应用开发(Day 12):像产品一样稳:流式输出、报错重试、花钱控制
开发语言·人工智能·php
傻啦嘿哟8 小时前
Python的默认参数把我坑惨了,原来写[]和写None的区别这么大
开发语言·python·机器学习
DeepAgent9 小时前
AI Agent 工程实践(49):一次真实优化——从 Agent v1 到 v2
开发语言·人工智能·agent