html 底部导航栏中间凸起效果源码,flutter 底部bottomNavigationBar凸起效果

此博客介绍了KBHome2页面组件,展示了一个使用PageView和BottomAppBar实现的动态页面切换,包括随机单词、电影评论、登录页面和自定义组件。通过PageController控制页面动画和底部导航栏的交互设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import 'package:flutter/material.dart';

import'package:flutter_app/src/pages/KBRandomWords.dart';

import"package:flutter_app/src/pages/KBWidgetPage.dart";

import'kb_movie_review.dart';

import'KBLoginPage.dart';

import'src/widgets/cookbook/SnackBarDemo.dart';

class KBHome2 extends StatefulWidget {

@override

StatecreateState() {return_KBHomeState2();

}

}

class _KBHomeState2 extends State{int _currentIndex = 0;

List_pages;

@overridevoidinitState() {

super.initState();

print("Home InitStatus");

_pages=[newRandomWords(

key: Key("random"),

),new KBMovieReview(key: Key("movie")),newKBLoginPage(),newKBWidgetPage(

key: Key("widget"),

),

];

}

@overridevoiddispose() {

super.dispose();

_pageController.dispose();

}var _pageController = PageController(initialPage: 0);

@override

Widget build(BuildContext context) {returnScaffold(

appBar: AppBar(

title: Text("测试抽屉"),

),//body: _pages[_currentIndex], // 只是这样写会导致在每次切换的时候 都rebuild 子控件

body: PageView.builder(

controller: _pageController,

onPageChanged: _pageChanged,

itemCount: _pages.length,

itemBuilder: (context, index)=>_pages[index]),

floatingActionButton: FloatingActionButton(

onPressed: () {},

child: Icon(

Icons.add,

color: Colors.white,

),

),

floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,

bottomNavigationBar: BottomAppBar(

color: Colors.red,

shape: CircularNotchedRectangle(),

child: Padding(

padding: EdgeInsets.fromLTRB(0, 6, 0, 6),

child: Row(

mainAxisSize: MainAxisSize.max,

mainAxisAlignment: MainAxisAlignment.spaceAround,

children:[

GestureDetector(

onTap: () {

onTap(0);

},

child: Column(

mainAxisSize: MainAxisSize.min,

children:[

Icon(Icons.home, color: getColor(0)),

Text("首页", style: TextStyle(color: getColor(0)))

],

)),

GestureDetector(

onTap: () {

onTap(1);

},

child: Column(

mainAxisSize: MainAxisSize.min,

children:[

Icon(Icons.forum, color: getColor(1)),

Text("论坛", style: TextStyle(color: getColor(1)))

],

)),

Column(

mainAxisSize: MainAxisSize.min,

children:[

Icon(

Icons.home,

color: Colors.transparent,

),

Text("发布", style: TextStyle(color: Color(0xFFEEEEEE)))

],

),

GestureDetector(

onTap: () {

onTap(2);

},

child: Column(

mainAxisSize: MainAxisSize.min,

children:[

Icon(Icons.mail, color: getColor(2)),

Text("消息", style: TextStyle(color: getColor(2)))

],

)),

GestureDetector(

onTap: () {

onTap(3);

},

child: Column(

mainAxisSize: MainAxisSize.min,

children:[

Icon(Icons.person, color: getColor(3)),

Text("我的", style: TextStyle(color: getColor(3)))

],

))

],

),

),

),

);

}

Color getColor(intvalue) {return this._currentIndex == value ? Theme.of(context).cardColor : Color(0XFFBBBBBB);

}void _pageChanged(intindex) {

setState(() {if (_currentIndex != index) _currentIndex =index;

});

}void onTap(intindex) {//_pageController.jumpToPage(index);

_pageController.animateToPage(index,

duration: const Duration(milliseconds:100), curve: Curves.easeOutSine);

}

}

### 实现 Android 底部导航栏中按钮凸起和凹陷设计 为了在 Android 中实现带有凸起按钮的底部导航栏,可以采用多种方法。一种常见的方式是通过自定义 `BottomNavigationView` 或者使用第三方库来简化开发过程。 #### 使用 convex_bottom_bar 库 对于 Flutter 开发而言,`convex_bottom_bar` 提供了一个简洁的方式来构建具有独特形状的底部导航栏[^1]: ```dart ConvexAppBar( style: TabStyle.fixedCircle, items: [ TabItem(icon: Icons.home, title: 'Home'), TabItem(icon: Icons.map, title: 'Discovery'), TabItem(icon: Icons.add, title: 'Add'), // 凸起按钮 TabItem(icon: Icons.message, title: 'Messages'), TabItem(icon: Icons.people, title: 'Profile') ], initialActiveIndex: 2, // 默认激活索引设为中位置 onTap: (int i) => print('click index=$i'), ) ``` 然而,在原生 Android 上并没有直接对应的官方组件支持这种样式。因此建议考虑以下两种方案之一: #### 自定义 BottomNavigationView 如果希望保持灵活性并完全控制 UI 细节,则可以从头开始绘制自定义视图。这涉及到重写 `onDraw()` 方法以描绘所需的图形路径,并处理触摸事件逻辑。 另一种更简便的选择是从现有开源项目获取灵感或直接利用成熟的解决方案。例如 EasyApp 项目展示了如何创建带弹出菜单功能的中心悬浮按钮[^2]。 #### 利用现有的 GitHub 资源 GitHub 用户分享了许多关于此主题的例子,其中一些已经封装成了易于集成的小部件。访问链接中的仓库页面寻找合适的依赖项加入到项目的 build.gradle 文件内即可快速上手。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值