我正在创建一个默认情况下位于应用程序中心的Google地图卫星视图的应用程序,但是我的应用程序中还有其他工具,因此我想在所有屏幕中都保留相同的AppBar和相同的抽屉,避免一遍又一遍地创建它。我唯一要更改的是卫星视图,这样地图占用的空间将适合其他工具的功能。
有没有一种方法可以只创建一次AppBar和Drawer并在地图空间中适合其他工具的屏幕,而无需多次重新创建AppBar和Drawer?
谢谢!
答案 0 :(得分:1)
在脚手架中,将主体设置为AnimatedSwitcher,并将子代设置为变量。每当您希望将卫星视图换成另一个小部件时,请调用SetState并更改子变量。
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: MyAppBar(), //This will never change
body: DynamicContainer(),
);
}
ChangeWidget() {
myChangingWidget = Container();
}
}
class DynamicContainer extends StatefulWidget {
DynamicContainer({Key key}) : super(key: key);
_DynamicContainerState createState() =>
_DynamicContainerState(controller: controller);
}
class _DynamicContainerState extends State<DynamicContainer> {
Widget _myAnimatedWidget;
@override
void initState() {
super.initState();
_myAnimatedWidget = myListOfWidgets[0]; //The widget it will start as
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
return AnimatedSwitcher(
duration: Duration(milliseconds: 250),
child: _myAnimatedWidget, //Our dynamic widget
);
}
switchWidget() {
setState(() {
_myAnimatedWidget =
myListOfWidgets[1]; //Where you change the widget
});
}
}
这将在保持AppBar和Drawer的同时重画主体。在AnimatedSwitcher上观看Flutter的官方视频-https://youtu.be/2W7POjFb88g
**代码段已更新,应该正确。