如何在背景 open/close 抖动期间更改 AppBar 文本
How to change AppBar text during backdrop open/close flutter
我在我的应用程序中实现了背景。我想在背景 open/close 期间更改 AppBar 文本。我尝试在 IconButton onPressed 期间使用 Boolean isOpen 使其 true/false 正常工作,但我想知道哪种方法最完美。是否有 api 检测背景 open/close?。
import 'package:expense_manager_app/widget/navigation_panel.dart';
import 'package:flutter/material.dart';
class BackDropPage extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _BackDropState();
}
}
class _BackDropState extends State<BackDropPage>
with SingleTickerProviderStateMixin {
AnimationController controller;
var mTitle = "Home";
var mIsOpen = false;
@override
void initState() {
super.initState();
controller = AnimationController(
vsync: this, duration: Duration(milliseconds: 100), value: 1.0);
}
@override
void dispose() {
super.dispose();
controller.dispose();
}
bool get isPanelVisible {
final AnimationStatus status = controller.status;
return status == AnimationStatus.completed ||
status == AnimationStatus.forward;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('$mTitle'),
elevation: 0.0,
leading: new IconButton(
onPressed: () {
controller.fling(velocity: isPanelVisible ? -1.0 : 1.0);
setState(() {
if (mIsOpen) {
mIsOpen = false;
mTitle = "Home";
} else {
mTitle = "Menu";
mIsOpen = true;
}
});
},
icon: new AnimatedIcon(
icon: AnimatedIcons.close_menu,
progress: controller.view,
),
),
),
body: NavigationPanelPage(controller: controller),
);
}
}
最后我自己使用 isPanelVisible bool 完成了。
appBar: AppBar(
title: Text('$mTitle'),
elevation: 0.0,
leading: new IconButton(
onPressed: () {
controller.fling(velocity: isPanelVisible ? -1.0 : 1.0);
setState(() {
if (isPanelVisible) {
mTitle = "Home";
} else {
mTitle = "Menu";
}
});
},
icon: new AnimatedIcon(
icon: AnimatedIcons.close_menu,
progress: controller.view,
),
),
),
我在我的应用程序中实现了背景。我想在背景 open/close 期间更改 AppBar 文本。我尝试在 IconButton onPressed 期间使用 Boolean isOpen 使其 true/false 正常工作,但我想知道哪种方法最完美。是否有 api 检测背景 open/close?。
import 'package:expense_manager_app/widget/navigation_panel.dart';
import 'package:flutter/material.dart';
class BackDropPage extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _BackDropState();
}
}
class _BackDropState extends State<BackDropPage>
with SingleTickerProviderStateMixin {
AnimationController controller;
var mTitle = "Home";
var mIsOpen = false;
@override
void initState() {
super.initState();
controller = AnimationController(
vsync: this, duration: Duration(milliseconds: 100), value: 1.0);
}
@override
void dispose() {
super.dispose();
controller.dispose();
}
bool get isPanelVisible {
final AnimationStatus status = controller.status;
return status == AnimationStatus.completed ||
status == AnimationStatus.forward;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('$mTitle'),
elevation: 0.0,
leading: new IconButton(
onPressed: () {
controller.fling(velocity: isPanelVisible ? -1.0 : 1.0);
setState(() {
if (mIsOpen) {
mIsOpen = false;
mTitle = "Home";
} else {
mTitle = "Menu";
mIsOpen = true;
}
});
},
icon: new AnimatedIcon(
icon: AnimatedIcons.close_menu,
progress: controller.view,
),
),
),
body: NavigationPanelPage(controller: controller),
);
}
}
最后我自己使用 isPanelVisible bool 完成了。
appBar: AppBar(
title: Text('$mTitle'),
elevation: 0.0,
leading: new IconButton(
onPressed: () {
controller.fling(velocity: isPanelVisible ? -1.0 : 1.0);
setState(() {
if (isPanelVisible) {
mTitle = "Home";
} else {
mTitle = "Menu";
}
});
},
icon: new AnimatedIcon(
icon: AnimatedIcons.close_menu,
progress: controller.view,
),
),
),