如何在 flutter 中使用 2 个按钮控制抽屉和 endDrawer
how to contronl drawer and endDrawer with 2 button in flutter
我想设置 2 个按钮:第一个打开 Drawer
,第二个打开 endDrawer
。
我用的第一个按钮
onTap: () => _drawerKey.currentState.openEndDrawer(),
我用的第二个
onTap: () => _drawerKey.currentState.openDrawer(),
但代码无效
制作脚手架的全局键并放入你的脚手架......
class _AppState extends State<MyHome> {
final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
@override
Widget build(BuildContext context) {
return Scaffold(
key: _scaffoldKey,
appBar: PreferredSize(
preferredSize: Size(null, 180),
child: _getAppBar(
_selectedDrawerIndex), //CustomAppBar(_scaffoldKey, controller),
),
drawer: createDrwaer(),
body: WillPopScope(
child: _getDrawerFragment(_selectedDrawerIndex),
onWillPop: () {
if (_selectedDrawerIndex == 1) {
_onSelectItem(0);
} else {
Navigator.of(context).pop();
}
},
) //_getDrawerFragment(_selectedDrawerIndex),
);
}
}
然后点击按钮使用它...
onTap: () =>_scaffoldKey.currentState.openDrawer(),
一定要让你的class有状态
试试这个代码,
class Act_Drawer extends StatefulWidget {
@override
_Act_DrawerState createState() => _Act_DrawerState();
}
class _Act_DrawerState extends State<Act_Drawer> {
final GlobalKey<ScaffoldState> _scaffoldkey = new GlobalKey();
@override
Widget build(BuildContext context) {
return Scaffold(
key: _scaffoldkey,
appBar: AppBar(
title: Text("Drawer Demo"),
automaticallyImplyLeading: false,
leading: StatefulBuilder(
builder: (BuildContext context, setState) {
return IconButton(
icon: Icon(Icons.format_align_left),
onPressed: () {
_scaffoldkey.currentState.openDrawer();
},
);
},
),
actions: <Widget>[
StatefulBuilder(builder: (BuildContext context, setState) {
return IconButton(
icon: Icon(Icons.format_align_right),
onPressed: () {
_scaffoldkey.currentState.openEndDrawer();
},
);
},
)
],
),
drawer: Drawer(),
endDrawer: Drawer(),
body: Container(),
);
}
}
方法 'openDrawer' 被调用为 null。接收者:null 尝试调用:openDrawer()
如果你得到这个错误:那是因为你没有在你的第二个(嵌套脚手架)中声明全局键。
final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();// this is declared inside your State
下面是一个工作示例
@override
Widget build(BuildContext context) {
return Container(
color: Colors.white,
child: Scaffold(
primary: true,
appBar: actionBar(),
drawer: MainNavigationDrawer(),
body: Scaffold(
key: _scaffoldKey,// VERY IMPORTANT YOU CALL THIS otherwise you will get the error above
endDrawer: MainNavigationDrawer(),
body: singleScrollView()),
),
);
}
这正是我所需要的
Scaffold.of(context).openEndDrawer();
我想设置 2 个按钮:第一个打开 Drawer
,第二个打开 endDrawer
。
我用的第一个按钮
onTap: () => _drawerKey.currentState.openEndDrawer(),
我用的第二个
onTap: () => _drawerKey.currentState.openDrawer(),
但代码无效
制作脚手架的全局键并放入你的脚手架......
class _AppState extends State<MyHome> {
final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
@override
Widget build(BuildContext context) {
return Scaffold(
key: _scaffoldKey,
appBar: PreferredSize(
preferredSize: Size(null, 180),
child: _getAppBar(
_selectedDrawerIndex), //CustomAppBar(_scaffoldKey, controller),
),
drawer: createDrwaer(),
body: WillPopScope(
child: _getDrawerFragment(_selectedDrawerIndex),
onWillPop: () {
if (_selectedDrawerIndex == 1) {
_onSelectItem(0);
} else {
Navigator.of(context).pop();
}
},
) //_getDrawerFragment(_selectedDrawerIndex),
);
}
}
然后点击按钮使用它...
onTap: () =>_scaffoldKey.currentState.openDrawer(),
一定要让你的class有状态
试试这个代码,
class Act_Drawer extends StatefulWidget {
@override
_Act_DrawerState createState() => _Act_DrawerState();
}
class _Act_DrawerState extends State<Act_Drawer> {
final GlobalKey<ScaffoldState> _scaffoldkey = new GlobalKey();
@override
Widget build(BuildContext context) {
return Scaffold(
key: _scaffoldkey,
appBar: AppBar(
title: Text("Drawer Demo"),
automaticallyImplyLeading: false,
leading: StatefulBuilder(
builder: (BuildContext context, setState) {
return IconButton(
icon: Icon(Icons.format_align_left),
onPressed: () {
_scaffoldkey.currentState.openDrawer();
},
);
},
),
actions: <Widget>[
StatefulBuilder(builder: (BuildContext context, setState) {
return IconButton(
icon: Icon(Icons.format_align_right),
onPressed: () {
_scaffoldkey.currentState.openEndDrawer();
},
);
},
)
],
),
drawer: Drawer(),
endDrawer: Drawer(),
body: Container(),
);
}
}
方法 'openDrawer' 被调用为 null。接收者:null 尝试调用:openDrawer() 如果你得到这个错误:那是因为你没有在你的第二个(嵌套脚手架)中声明全局键。
final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();// this is declared inside your State
下面是一个工作示例
@override
Widget build(BuildContext context) {
return Container(
color: Colors.white,
child: Scaffold(
primary: true,
appBar: actionBar(),
drawer: MainNavigationDrawer(),
body: Scaffold(
key: _scaffoldKey,// VERY IMPORTANT YOU CALL THIS otherwise you will get the error above
endDrawer: MainNavigationDrawer(),
body: singleScrollView()),
),
);
}
这正是我所需要的
Scaffold.of(context).openEndDrawer();