抽屉避免无限活动创造

问题描述:

我用这个抽屉每个活动:抽屉避免无限活动创造

final MyDrawer _drawer = new MyDrawer(); 

class MyDrawer extends StatefulWidget { 
    @override 
    _MyDrawerState createState() => new _MyDrawerState(); 
} 

class _MyDrawerState extends State<MyDrawer> { 
    @override 
    Widget build(BuildContext context) { 
    return new Drawer(
     child: new ListView(
      children: <Widget> [ 
      new DrawerHeader(
       child: new Text("Header"), 
      ), 
      new ListTile(
       leading: new Icon(Icons.home), 
       title: new Text("Home"), 
       onTap:() { 
       Navigator.popAndPushNamed(context, "/"); 
       }, 

      ), 
      new ListTile(
       leading: new Icon(Icons.android), 
       title: new Text("Another Page"), 
       onTap:() { 
        Navigator.popAndPushNamed(context, AnotherPage.routeName); 
       }, 

      ),new ListTile(
       leading: new Icon(Icons.email), 
       title: new Text("Third Page"), 
       onTap:() { 
        Navigator.popAndPushNamed(context, ThirdPage.routeName); 
       } 
      ) 
      ] 
    ), 
    ); 
    } 
} 

每一页是有状态的小部件,它们共享相同的抽屉:

drawer: _drawer 

我正在寻找一种方式来只有一个活动实例,而不是每次单击菜单项时创建一个新活动,我试过了:

ThirdPage.routeName: (BuildContext context) => 
     _thirdPage == null ? _thirdPage = new ThirdPage(title: "Third Page") : _thirdPage 

是否可以根据当前活动调整抽屉实例?

我想你试图实现单例类,即类只有一个实例。

一个Singleton类的一个实例:

class MyDrawer extends StatefulWidget{ 
    static final MyDrawer _drawer = new MyDrawer._internal(); 

    factory MyDrawer() { 
    return _drawer; 
    } 

    MyDrawer._internal(); 

    @override 
    Widget build(BuildContext context){ 
    return new Text("Drawer") 
    } 
} 

其他方式来实现镖单例类,你可以看看答案here

希望有帮助!