我要避免在更改使用的工具时重新创建AppBar和抽屉

时间:2019-08-26 21:58:50

标签: flutter flutter-layout

我正在创建一个默认情况下位于应用程序中心的Google地图卫星视图的应用程序,但是我的应用程序中还有其他工具,因此我想在所有屏幕中都保留相同的AppBar和相同的抽屉,避免一遍又一遍地创建它。我唯一要更改的是卫星视图,这样地图占用的空间将适合其他工具的功能。

有没有一种方法可以只创建一次AppBar和Drawer并在地图空间中适合其他工具的屏幕,而无需多次重新创建AppBar和Drawer?

谢谢!

1 个答案:

答案 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

**代码段已更新,应该正确。