Flutter - How can I dynamically show or hide App Bars on pages
Screenshot (Null Safe):
Create this class.
class SlidingAppBar extends StatelessWidget implements PreferredSizeWidget {
SlidingAppBar({
required this.child,
required this.controller,
required this.visible,
});
final PreferredSizeWidget child;
final AnimationController controller;
final bool visible;
@override
Size get preferredSize => child.preferredSize;
@override
Widget build(BuildContext context) {
visible ? controller.reverse() : controller.forward();
return SlideTransition(
position: Tween<Offset>(begin: Offset.zero, end: Offset(0, -1)).animate(
CurvedAnimation(parent: controller, curve: Curves.fastOutSlowIn),
),
child: child,
);
}
}
Usage:
class MyPage extends StatefulWidget {
@override
_MyPageState createState() => _MyPageState();
}
class _MyPageState extends State<MyPage> with SingleTickerProviderStateMixin {
bool _visible = true;
late final AnimationController _controller;
@override
void initState() {
super.initState();
_controller = AnimationController(
vsync: this,
duration: Duration(milliseconds: 400),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
// extendBodyBehindAppBar: !_visible, // Uses entire screen after hiding AppBar
floatingActionButton: FloatingActionButton.extended(
label: Text(_visible ? 'Hide' : 'Show'),
onPressed: () => setState(() => _visible = !_visible),
),
appBar: SlidingAppBar(
controller: _controller,
visible: _visible,
child: AppBar(title: Text('AppBar')),
),
);
}
}
You can try this way
appBar: boolTrue ? AppBar(...) : null
You can make use of preferredSize widget like this:
true ? Appbar() : PreferredSize(preferredSize: Size(0.0, 0.0),child: Container(),)
This will hide the appbar if the condition is false.