Открыть ящик при нажатии AppBar
Если вы создаете Scafold, есть опция для ящика. Если вы теперь создаете этот ящик, вы автоматически включаете значок меню в ведущей позиции панели приложений. Но я хочу другой значок, который открывает ящик. Я попытался сделать сам значок на ведущей позиции, но эта кнопка не может открыть ящик даже с помощью "Scafold.of (контекст).openDrawer()", он не может открыть его.
Есть ли возможность заменить значок кнопки ящика?
Ответы
Ответ 1
Используйте Key
в своем Scaffold
и покажите ящик, вызвав myKey.currentState.openDrawer()
, вот рабочий код:
import "package:flutter/material.dart";
class Test extends StatefulWidget {
@override
_TestState createState() => new _TestState();
}
class _TestState extends State<Test> {
final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
@override
Widget build(BuildContext context) {
return new Scaffold(
key: _scaffoldKey,
drawer: new Drawer(),
appBar: new AppBar(
leading: new IconButton(icon: new Icon(Icons.settings),
onPressed: () => _scaffoldKey.currentState.openDrawer()),
),
);
}
}
Ответ 2
Альтернатива принятому ответу, который не требует GlobalKey
:
class _TestState extends State<Test> {
@override
Widget build(BuildContext context) {
return new Scaffold(
drawer: new Drawer(),
appBar: new AppBar(
leading: Builder(
builder: (context) => IconButton(
icon: new Icon(Icons.settings),
onPressed: () => Scaffold.of(context).openDrawer(),
),
),
),
);
}
}
Ответ 3
вам нужно инициализировать scaffoldKey
после этого
Открыть ящик и закрыть ящик
GestureDetector(
onTap: () {
if(scaffoldKey.currentState.isDrawerOpen){
scaffoldKey.currentState.openEndDrawer();
}else{
scaffoldKey.currentState.openDrawer();
}
},
child: LeadingIcon(icon: Icons.menu),//your button
),