Flutter Widget => BottomAppBar

缺乏、安全感 2021-10-01 10:20 427阅读 0赞

BottomAppBar 是 底部工具栏的意思,这个要比BottomNavigationBar widget灵活很多,可以放置文字和图标,当然也可以放置容器。
BottomAppBar的常用属性:

color:这个不用多说,底部工具栏的颜色。
shape:设置底栏的形状,一般使用这个都是为了和floatingActionButton融合,所以使用的值都是CircularNotchedRectangle(),有缺口的圆形矩形。

child : 里边可以放置大部分Widget,让我们随心所欲的设计底栏。

5439590-196a757ae0ed69a1.gif

image

代码

  1. import 'package:flutter/material.dart';
  2. void main() => runApp(MyApp());
  3. class MyApp extends StatelessWidget {
  4. @override
  5. Widget build(BuildContext context) {
  6. // TODO: implement build
  7. return new MaterialApp(
  8. title: "flutter demo",
  9. theme: ThemeData(
  10. primarySwatch: Colors.lightBlue //primarySwatch :现在支持18种主题样本。
  11. ),
  12. home: _home(),
  13. );
  14. }
  15. }
  16. class _home extends StatefulWidget {
  17. @override
  18. State<StatefulWidget> createState() {
  19. // TODO: implement createState
  20. return _homeState();
  21. }
  22. }
  23. class _homeState extends State<_home> {
  24. List<Widget> _viewList; //创建视图数组
  25. int _index = 0; //数组索引,通过改变索引值改变视图
  26. @override
  27. void initState() {
  28. super.initState();
  29. _viewList = List();
  30. _viewList..add(EachView("HOME"))..add(EachView("CLOCK"));
  31. }
  32. _openNewPage() {
  33. Navigator.of(context)
  34. .push(MaterialPageRoute(builder: (BuildContext context) {
  35. return EachView("new Pager");
  36. }));
  37. }
  38. @override
  39. Widget build(BuildContext context) {
  40. // TODO: implement build
  41. return new Scaffold(
  42. floatingActionButton: FloatingActionButton(
  43. onPressed: _openNewPage,
  44. child: Icon(
  45. Icons.add,
  46. color: Colors.white,
  47. )),
  48. floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
  49. //和底栏进行融合
  50. bottomNavigationBar: BottomAppBar(
  51. color: Colors.lightBlue, //底部工具栏的颜色。
  52. shape: CircularNotchedRectangle(),
  53. //设置底栏的形状,一般使用这个都是为了和floatingActionButton融合,
  54. // 所以使用的值都是CircularNotchedRectangle(),有缺口的圆形矩形。
  55. child: Row(
  56. //里边可以放置大部分Widget,让我们随心所欲的设计底栏
  57. mainAxisAlignment: MainAxisAlignment.spaceAround,
  58. mainAxisSize: MainAxisSize.max,
  59. children: <Widget>[
  60. IconButton(
  61. icon: Icon(
  62. Icons.home,
  63. color: Colors.white,
  64. ),
  65. color: Colors.white,
  66. onPressed: () {
  67. setState(() {
  68. _index = 0;
  69. });
  70. },
  71. ),
  72. IconButton(
  73. icon: Icon(Icons.access_alarms, color: Colors.white),
  74. color: Colors.white,
  75. onPressed: () {
  76. setState(() {
  77. _index = 1;
  78. });
  79. },
  80. ),
  81. ],
  82. ),
  83. ),
  84. body: _viewList[_index],
  85. );
  86. }
  87. }
  88. //子页面
  89. //代码中设置了一个内部的_title变量,这个变量是从主页面传递过来的,然后根据传递过来的具体值显示在APP的标题栏和屏幕中间。
  90. class EachView extends StatefulWidget {
  91. String _title;
  92. EachView(this._title);
  93. @override
  94. _EachViewState createState() => _EachViewState();
  95. }
  96. class _EachViewState extends State<EachView> {
  97. @override
  98. Widget build(BuildContext context) {
  99. return Scaffold(
  100. appBar: AppBar(title: Text(widget._title)),
  101. body: Center(child: Text(widget._title)),
  102. );
  103. }
  104. }

发表评论

表情:
评论列表 (有 0 条评论,427人围观)

还没有评论,来说两句吧...

相关阅读

    相关 flutter Widget基础

    首先,我们先附上官网教程中关于flutter框架的介绍,作为补充。 Flutter官方提供的Flutter框架图 ![在这里插入图片描述][watermark_type_

    相关 Flutter widget目录

    这是个Flutter教学系列的文章,会从Flutter基础入门开始讲解,带领大家从零开始学习Flutter,从基础组件一个一个的过,可以保证每个没有Flutter开发基础的同学

    相关 Flutter Widget大全

    还没有做完,应该是目前最全的Widget介绍了,如果需要使用什么控件在这里找就行,如果还没有就得自定义Widget了,欢迎点赞支持我继续把图做完,这个图没什么技术含量,大部分就