flutter - 在 Flutter 的后台如何隐藏应用栏?
问题描述
当我显示后台应用程序列表时,我想隐藏应用程序栏。
这是源代码
class HomePageState extends State<HomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Hellow World'),
),
body: Center (child: Text('Hello world')));
}
}
我试图在应用程序进入后台时隐藏应用程序栏,并在应用程序回到前台时显示它,但它不起作用。
class HomePageState extends State<HomePage> with WidgetsBindingObserver {
bool _appbar = true;
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: PreferredSize(
preferredSize: Size(double.infinity, 56),
child: Visibility(
visible: _appbar,
child: AppBar(
backgroundColor: Colors.green,
elevation: 0.0,
title: Text('Title'),
),
),
),
body: Center(
child: Text('Test'),
));
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
switch (state) {
case AppLifecycleState.resumed:
setState(() {
_appbar = true;
});
break;
case AppLifecycleState.inactive:
setState(() {
_appbar = false;
});
break;
case AppLifecycleState.paused:
break;
case AppLifecycleState.detached:
break;
}
}
}
解决方案
您可以尝试在为“最近的应用程序”视图拍摄快照之前更新屏幕。将WidgetsBindingObserver添加到您的屏幕以检查状态更改。
class HomePage extends StatefulWidget with WidgetsBindingObserver{
...
}
向当前的 WidgetsBinding 实例添加一个观察者,并在对象从屏幕上移除时移除观察者的方法。
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
然后您可以在应用程序状态更改时更新屏幕。“最近使用的应用程序”的屏幕快照是在应用程序暂停之前拍摄的。我建议更新屏幕inactive
状态,因为它是之前的状态paused
。然后在应用状态为 时再次更新屏幕resumed
。
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
switch (state) {
case AppLifecycleState.resumed:
// TODO: update screen to add app bar again
break;
case AppLifecycleState.inactive:
// TODO: update screen to remove app bar
break;
case AppLifecycleState.paused:
break;
case AppLifecycleState.detached:
break;
}
}
这似乎是一个奇怪的用例,但这里的另一个选择是一直隐藏应用栏。
推荐阅读
- java - RESTful Web 服务返回类型
- sql-server - 带有字符串的动态 SQL,包括 SQL Server 中的变量声明
- web - 在单个表单中有多个选项卡的 Web 应用程序中,使用一个保存按钮来保存所有选项卡或多个保存按钮
- html - 当 flexwrap 发生时,flexbox 父 div 的宽度不会缩小
- ruby - WebStorm 的文件观察器用 Dart 编译 SCSS
- typescript - SAPUI5 扩展方法以使用构造函数参数创建对象
- java - 使用 Java 的远程 PC 名称和 IP
- c++ - 使用 C++ 将图像写入 RabbitMQ 队列
- php - 为什么我的数据在 MySQL 中插入了两次
- python-3.x - 在python中访问结构中的位置