抽屉避免无限活动创造
问题描述:
我用这个抽屉每个活动:抽屉避免无限活动创造
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。
希望有帮助!