Android 颤振-使用抽屉子窗口小部件onTap更改子窗口小部件

Android 颤振-使用抽屉子窗口小部件onTap更改子窗口小部件,android,dart,flutter,Android,Dart,Flutter,我是flatter初学者。 我将主页分成两个自定义小部件,topwidget和pagewidget。我有一个抽屉,里面有几个按钮,可以更改页面小部件的内容 我跟随并尝试按照按钮上的点击交换小部件 class MyHomePage extends StatefulWidget { MyHomePage({Key key, this.title}) : super(key: key); final String title; @override _MyHomePageState

我是
flatter
初学者。 我将主页分成两个自定义小部件,
top
widget和
page
widget。我有一个抽屉,里面有几个按钮,可以更改
页面
小部件的内容

我跟随并尝试按照按钮上的点击交换小部件

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
var currentpage = 'landing';

    Widget pageWidget;

    switch (currentpage) {
      case 'landing':
        pageWidget = new Landing();
        break;
      case 'visitors':
        pageWidget = new Visitors();
        break;
      default:
    }

return Scaffold(
body:new Container(
child: Container(
    child: Column(
      children: <Widget>[
        Header(), ///<-- widget declared in separated .dart file
        pageWidget
      ],
    )
    )
drawer: Drawer(
        child: ListView(
          children: <Widget>[
            DrawerHeader(
              child: Text(
                "UserN3",
                style: TextStyle(
                    fontSize: 20,
                    fontWeight: FontWeight.bold,
                    color: Colors.black54),
              ),
            ),
            new GestureDetector(
              onTap: (){
                print("landing");

                Future.delayed(Duration.zero,(){
                  setState(() {
                    currentpage = 'landing';
                  });
                });
              },
              child: new Text("landing"),
            ),
            new GestureDetector(
              onTap: (){
                print("visitors");
                Future.delayed(Duration.zero,(){
                  setState(() {
                    currentpage = 'visitors';
                  });
                });        
              },

              child: new Text("Visitors"),
            ),
          ],
        ),
      ),
);
}
类MyHomePage扩展StatefulWidget{
MyHomePage({Key,this.title}):超级(Key:Key);
最后的字符串标题;
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
@凌驾
小部件构建(构建上下文){
var currentpage='landing';
小部件页面小部件;
开关(当前页){
“着陆”案例:
pageWidget=newlanding();
打破
“访客”案例:
pageWidget=新访问者();
打破
违约:
}
返回脚手架(
主体:新容器(
子:容器(
子:列(
儿童:[

Header(),//您应该在
build
方法之外声明
currentPage
变量,因为每次调用
setState
时,都会再次调用
build
方法,并且变量不会更改

因此,请提出以下建议:

Widget build(BuildContext context) {
  var currentpage = 'landing';
为此:

var currentpage = 'landing';

Widget build(BuildContext context) {