Widgets 07 | AppBar
In this tutorial, you will learn more detail about the AppBar in the flutter.
In every tutorial, we need create a page to contain our code to show. So let's look at our code.
import "package:flutter/material.dart";
import 'package:flutter_widgets/const/_const.dart';
class AppBarPage extends StatefulWidget {
@override
_AppBarState createState() => _AppBarState();
}
class _AppBarState extends State<AppBarPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(PageName.APP_BAR),
),
body: Text("body"));
}
}
We have used the
AppBar
in our code above, just a simple one. It will show a app bar with a title. It is easy to use. It usually use with the appBar
parameter of the Scaffold
. But in this tutorial, I will try to use it as a common widget to describe its parameter. Hope you do not misunderstand my style.
We have use the
AppBar
above, So let's look at its constructor.AppBar({
Key key,
this.leading,
this.automaticallyImplyLeading = true,
this.title,
this.actions,
this.flexibleSpace,
this.bottom,
this.elevation = 4.0,
this.backgroundColor,
this.brightness,
this.iconTheme,
this.textTheme,
this.primary = true,
this.centerTitle,
this.titleSpacing = NavigationToolbar.kMiddleSpacing,
this.toolbarOpacity = 1.0,
this.bottomOpacity = 1.0,
})
So let's look at the its parameters as follows.
If you don't want the left-arrow on the app bar. you can use this parameter to hide it.
AppBar _autoLeadBar() => AppBar(
title: Text(PageName.APP_BAR),
automaticallyImplyLeading: false,
);

But you should know, if you the leading is not null, then this parameter hasn't effect.
This parameter controls the space as the left-arrow. So if you want to use some special function here. You can use this parameter, it is just a widget, but the space is strict. I often use the
InkWell
with a Icon
as below. AppBar _leadingBar() => AppBar(
title: Text(PageName.APP_BAR),
leading: InkWell(
child: Icon(Icons.menu),
onTap: () {
print("click menu");
},
),
);

If you want to add some widget in the right, the actions parameter you should know to use.
AppBar _actionBar() => AppBar(
title: Text(PageName.APP_BAR),
actions: <Widget>[
InkWell(
child: Icon(Icons.search),
onTap: () {
print("click search");
},
),
SizedBox(width: 10),
InkWell(
child: Icon(Icons.more_vert),
onTap: () {
print("click more");
},
),
SizedBox(width: 20)
],
);
We have added the search and more icon at the right of the app bar.

When we look at the definition of the bottom parameter. we can see it is
PreferredSizeWidget
. final PreferredSizeWidget bottom;
It is an abstract class.So we need use its subclass. The
PreferredSize
is a good choice to use. The child
is a widget, the preferredSize
is the Size
. Widget _bottomBar() => AppBar(
title: Text(PageName.APP_BAR),
bottom: PreferredSize(
child: Container(
alignment: Alignment.center,
color: RED,
constraints: BoxConstraints.expand(height: 50),
child: Text(
"bottom",
style: TextStyle(fontSize: 30),
),
),
preferredSize: Size(50, 50),
),
);
It will show as follows.

This parameter controls the shadow of the
AppBar
.It is similar with RaiseButton
I have tell before. Widget _elevationBar() => AppBar(
title: Text(PageName.APP_BAR),
elevation: 10,
);
This will show as right in the picture below.The left one is
elevation = 4
.
If you want to change the color of the
AppBar
, you can use the backgroundColor
as follows. Widget _backgroundBar() => AppBar(
title: Text(PageName.APP_BAR),
backgroundColor: PURPLE,
);

The parameter will change the text, icon color of the status bar.
Widget _brightBar() => AppBar(
title: Text(PageName.APP_BAR),
brightness: Brightness.dark,
);

When we look at the parameter carefully, we can see it is
IconThemeData
, its constructor is below. We have used the color, size several times, so I do not explain it. The opacity
controls the transparency of the Icon
. The value is from 0 to 1.IconThemeData({this.color, double opacity, this.size})
Let's use it.
Widget _iconThemeBar() => AppBar(
title: Text(PageName.APP_BAR),
iconTheme: IconThemeData(color: Colors.white, size: 20, opacity: 0.9),
);
The left-arrow will change to white.

But you should know, if you change the size, it doesn't have an effect.
This will control the title of the Text.
Widget _textThemeBar() => AppBar(
title: Text(PageName.APP_BAR),
textTheme: TextTheme(title: TextStyle(color: Colors.white,fontSize: 30)),
);
It will change the color of the title to white and the
fontSize
to 30.
The default value of this parameter is true. When we set to false, the icon and title will move up.
Widget _primaryBar() => AppBar(
title: Text(PageName.APP_BAR),
primary: false,
);

This parameter is bool, the default value is false.It controls the title whether or not show in the center of the AppBar.
Widget _centerBar() => AppBar(
title: Text(PageName.APP_BAR),
centerTitle: true,
);

This parameter will change the distance of the title from left. So the direction is horizontal and the default value is zero.
Widget _spaceBar() => AppBar(
title: Text(PageName.APP_BAR),
titleSpacing: 20,
);

It will change the transparency of the elements of the
AppBar
. Widget _toolBar() =>
AppBar(
title: Text(PageName.APP_BAR),
toolbarOpacity: 0.5,
);

We have used the
bottom
above, so the bottomOpacity
will control the transparency of the part of the bottom
. Widget _bottomOpBar() => AppBar(
title: Text(PageName.APP_BAR),
bottomOpacity: 0.5,
bottom: PreferredSize(
child: Container(
alignment: Alignment.center,
color: RED,
constraints: BoxConstraints.expand(height: 50),
child: Text(
"bottom with bottomOpacity = 0.5 ",
style: TextStyle(fontSize: 20),
),
),
preferredSize: Size(50, 50),
),
);

I put this parameter in the last, because it is a bit difficult to use. But if you use it in the
AppBar
, it is not so useful. So I will use a SliverAppBar
to replace the AppBar
to describe this parameter. Scaffold(
body: CustomScrollView(
slivers: <Widget>[
SliverAppBar(
// title: Text("hello"),
expandedHeight: 100,
pinned: true,
flexibleSpace: FlexibleSpaceBar(
title: Text(PageName.APP_BAR),
centerTitle: false,
collapseMode: CollapseMode.parallax,
background: Container(
color: RED,
constraints: BoxConstraints.expand(height: 100),
child: Image.asset(
PageImage.FLUTTER_OPEN,
fit: BoxFit.cover,
),
),
),
),
SliverList(
delegate: SliverChildListDelegate([
SizedBox(
height: 1000,
),
]),
)
],
),
);
We should replace all code of the Scaffold with these code. It will show as below.

default
When you scroll to top, It will show as follows.

That's nice!
We have learned how to use the
AppBar
in the flutter. It is so common and important to us. So just keep going, we can learn very well about the widgets in the flutter.Thanks for your reading!
The end.
Facebook Page | Twitter | GitHub | QQ Group |
963828159 |
Last modified 4yr ago