[英]Show and Hide AppBar on Screen Tap in Flutter
I want like the Above images.我想要上面的图片。 I want to create an app that will Hide and Show the AppBar and Bottom bar of the app on-screen tap.我想创建一个应用程序,它将隐藏和显示应用程序屏幕点击的应用程序栏和底部栏。
so I tried It by SetState method and worked great but The Problem is with this only所以我通过 SetState 方法尝试了它并且效果很好但问题仅在于此
When AppBar Hides the App Content Goes Up but I want that My Content should be fixed.当 AppBar 隐藏应用程序内容时,我希望我的内容应该被修复。
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
bool _showAppBar = true;
bool _showBottomBar = true;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: _showAppBar ? AppBar(title: Text('My App')) : null,
bottomNavigationBar: _showBottomBar ? BottomNavigationBar(items: [
BottomNavigationBarItem(icon: Icon(Icons.home), label: 'Home'),
BottomNavigationBarItem(icon: Icon(Icons.search), label: 'Search'),
]) : null,
body: SafeArea(
child: GestureDetector(
onTap: () {
setState(() {
_showAppBar = !_showAppBar;
_showBottomBar = !_showBottomBar;
});
},
child: Image.network('https://img.freepik.com/free-vector/funny-monkey-animal-cartoon-sticker_1308-75307.jpg?w=2000'),
),
),
);
}
}
You can use preferred size widget instead of appbar as below code and then you can change height as per your use您可以使用首选大小的小部件而不是 appbar 如下代码,然后您可以根据您的使用更改高度
appBar:_showAppBar
? PreferredSize(
preferredSize: const Size.fromHeight(100),
child: Container(color: Colors.red)
: PreferredSize(
preferredSize: const Size.fromHeight(100),
child: Container(color: Colors.transparent),
),
If You click on Widget the appbar is hide your appbar is hide successfully but you return it null please change this below hope its help to you.如果您单击小部件,应用栏被隐藏您的应用栏已成功隐藏,但您将其返回 null 请更改下面的内容,希望对您有所帮助。
appBar: _showAppBar ? AppBar(title: Text('My App')) : AppBar(backgroundColor: Colors.transparent,),
Full Code:完整代码:
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
bool _showAppBar = true;
bool _showBottomBar = true;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: _showAppBar ? AppBar(title: Text('My App')) : AppBar(backgroundColor: Colors.transparent,),
bottomNavigationBar: _showBottomBar ? BottomNavigationBar(items: [
BottomNavigationBarItem(icon: Icon(Icons.home), label: 'Home'),
BottomNavigationBarItem(icon: Icon(Icons.search), label: 'Search'),
]) : null,
body: SafeArea(
child: GestureDetector(
onTap: () {
setState(() {
_showAppBar = !_showAppBar;
_showBottomBar = !_showBottomBar;
});
},
child: Image.network('https://img.freepik.com/free-vector/funny-monkey-animal-cartoon-sticker_1308-75307.jpg?w=2000'),
),
),
);
}
}
Wrap your whole body
with Padding
and toggle it when you hide the appBar
and bottomNavigationBar
like so:用Padding
包裹你的整个body
,当你隐藏appBar
和bottomNavigationBar
时切换它,如下所示:
class _MyHomePageState extends State<MyHomePage> {
bool _showAppBar = true;
bool _showBottomBar = true;
double appBarHeight = 56.0; // default appBar height
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: _showAppBar ? AppBar(title: Text('My App')) : null,
bottomNavigationBar: _showBottomBar
? BottomNavigationBar(items: [
BottomNavigationBarItem(icon: Icon(Icons.home), label: 'Home'),
BottomNavigationBarItem(
icon: Icon(Icons.search), label: 'Search'),
])
: null,
body: Padding(
padding: EdgeInsets.symmetric(vertical: _showAppBar ? 0 : appBarHeight),
child: SafeArea(
child: GestureDetector(
onTap: () {
setState(() {
_showAppBar = !_showAppBar;
_showBottomBar = !_showBottomBar;
});
},
child: Image.network(
'https://img.freepik.com/free-vector/funny-monkey-animal-cartoon-sticker_1308-75307.jpg?w=2000'),
),
),
),
);
}
}
Try doing this way尝试这样做
@override
Widget build(BuildContext context) {
return Scaffold(
extendBodyBehindAppBar: true,
Then show or hide appbar normally.然后正常显示或隐藏appbar。 Use animations for smoother effects.使用动画以获得更流畅的效果。
Adding extendBodyBehindAppBar: true
will ensure that the body won't go up or down when showing or hiding appbar.添加extendBodyBehindAppBar: true
将确保在显示或隐藏 appbar 时 body 不会向上或向下 go 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.