底部导航栏是App中必不可少的,这篇将实现三个版本的底部导航栏 Flutter && xml && Jetpack Compose 。
Flutter 版本
我之前写过一个自定义版的底部导航切换 自定义导航
在这里就实现一个比较基础的底部导航切换 可以通过定义一个页面列表和Flutter自带BottomNavigationBar组件来实现,总体实现比较简单。
效果 :
完整代码:
1 | dart复制代码import 'package:flutter/material.dart'; |
XML 版
不管是哪个版本的导航无非都是两部分组成,底部导航器和上面的页面。点击不同的导航器跳转到不同的页面。
xml部分
页面部分使用Fragment
视图
- 创建3个Fragment 并与对应的xml绑定
ProfileFragment.java
1 | java复制代码public class ProfileFragment extends Fragment { |
fragment_profile.xml
1 | xml复制代码<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" |
剩下两个Fragment略..
- 底部导航部分
menu
新建 bottom_nav_menu.xml
1 | xml复制代码<?xml version="1.0" encoding="utf-8"?> |
页面部分
页面的上面是 Fragment
底部是 menu
创建 activity_bottom.xml
1 | xml复制代码<?xml version="1.0" encoding="utf-8"?> |
创建一个 Activity
来显示页面以及处理导航跳转的逻辑
1 | java复制代码package com.example.wisteria; |
效果
Compose 版本
因为是通过查资料来写 Compose 许多文章都用的
BottomNavigation
,但是这个已经被弃用了,我还以为自己导包导错了。
想查看有哪些组件还是看官方文档靠谱点
Jetpack Compose 中的 Material 组件
代码实现
比较简单,还是通过底部导航的index来更改展示的页面
1 | kotlin复制代码package com.example.lily |
效果
kotlin 延伸
mutableStateOf
在 Kotlin 中,mutableStateOf
是一个用于创建可变状态的函数,通常与 Compose 中的 UI 组件一起使用。它创建一个包含可变状态的 MutableState
对象,可以通过修改其 value
属性来改变状态的值。这样做会触发 Compose 的重新组合机制,使得界面能够响应状态的变化并重新绘制。
sealed 关键字
在Kotlin中,sealed
关键字用于声明一个密封类(sealed class)。密封类是一种特殊的类,它允许你定义一组有限的子类,并且这些子类必须在密封类的同一个文件中声明。密封类在处理有限的类继承结构时非常有用,因为它们提供了更严格的类型检查
使用
1 | kotlin复制代码sealed class NavItem(var route: String, var icon: ImageVector, var title: String) { |
总结
感觉三个版本写下来最麻烦的是写XML,Compose和 Flutter,很像写起来也很简单,就是没学过kotlin,写kotlin 有点费劲,像没牙的老太太啃骨头!
本文转载自: 掘金