网站首页 > 教程分享 正文
平时我们在使用 app 时经常会看到底部导航栏,而在 flutter 中它的实现也较为简单.
需要用到的组件:
- BottomNavigationBar 导航栏的主体
- BottomNavigationBarItem 导航栏用到的条目
使用方法:
- 为了使用导航栏,我们需要先创建一个 StatefulWidget来承载我们的导航栏
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _currentIndex = 0;
List<Widget> list = <Widget>[];
@override
void initState() {
list
..add(const HomePage())
..add(const MePage());
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: list[_currentIndex],
bottomNavigationBar: BottomNavigationBar(
currentIndex: _currentIndex,
items: const <BottomNavigationBarItem>[
BottomNavigationBarItem(icon: Icon(Icons.shop_outlined), label: "首页"),
BottomNavigationBarItem(icon: Icon(Icons.person), label: "我的"),
],
onTap: (int index) {
setState(() {
_currentIndex = index;
});
},
),
);
}
}
这里我们使用了 Scaffold 布局,它默认提供了一个 bottomNavigationBar 的属性,我们只需要把我们的导航栏赋值给它即可.
BottomNavigationBar 用于存放我们的导航条目,由于 items 是一个数组,所以必定会有一个值来存放当前的选中条目的索引, bottomNavigationBar 为我们提供了 currentIndex 属性,这里我们设置为_currentIndex,默认为0.
当用户点击不同条目,需要显示不同的页面,bottomNavigationBar 为我们提供了 onTap 方法,方便在用户点击后来修改当前选中的索引.这样当用户点击条目会,body中对应的组件便会更新.
这里我们定义了两个页面 HomePage 和 MePage.
import 'package:flutter/material.dart';
class HomePage extends StatefulWidget {
const HomePage({Key? key}) : super(key: key);
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Center(
child: Text("首页"),
),
),
);
}
}
页面很简单,只有一个标题.
总结:
使用 BottomNavigationBar分为 步
- 使用 Scaffold 布局并添加 bottomNavigationBar
- 定义当前索引值变量 _currentIndex
- 定义条目对应的视图,如上 HomePage并添加到 list 变量中放于 body 属性中用于展示.
猜你喜欢
- 2025-04-24 DevExpress 2016.1新版预告:Office Navigation Bar
- 2025-04-24 源码推荐(03.25):仿QQ弹出菜单, 响应式NavigationBar
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- css导航条 (66)
- sqlinsert (63)
- js提交表单 (60)
- param (62)
- parentelement (65)
- jquery分享 (62)
- check约束 (64)
- curl_init (68)
- sql if语句 (69)
- import (66)
- chmod文件夹 (71)
- clearinterval (71)
- pythonrange (62)
- 数组长度 (61)
- javafx (59)
- 全局消息钩子 (64)
- sort排序 (62)
- jdbc (69)
- php网页源码 (59)
- assert h (69)
- httpclientjar (60)
- postgresql conf (59)
- winform开发 (59)
- mysql数字类型 (71)
- drawimage (61)
本文暂时没有评论,来添加一个吧(●'◡'●)