LoginSignup
5

FlutterでDrawerのアイコンをカスタマイズする

Last updated at Posted at 2020-02-19

はじめに

Flutterで、例えばアイコンの下に文字を入れるなど、Drawerのアイコンをカスタマイズしたいときがあります。
image.png

こうしたときは、次のようにScaffoldStateを使うことで、カスタマイズできます。(ここでは、右側にボタンを配置するendDrawerで解説しています)

実装

class _HomePageState extends State<HomePage> {
  @override
  void initState() {
    super.initState();
  }

  final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();

@override
  Widget build(BuildContext context) {
    return Scaffold(
      key: _scaffoldKey,
      appBar: AppBar(
        actions: <Widget>[
          // カスタムしたボタン
          InkWell(
            onTap: () => _scaffoldKey.currentState.openEndDrawer(),
            child: Column(
              mainAxisSize: MainAxisSize.min,
              children: <Widget>[
                Icon(Icons.menu),
                const Text(
                  'メニュー',
                  style: TextStyle(
                    fontSize: 14,
                  ),
                ),
              ],
            ),
          ),
        ],
      ),
      endDrawer: Drawer(),
    );
  }
}

ScaffoldにGlobalKeyを指定して、Scaffoldの状態を保持しているScaffoldStateを参照できるようにします。
Scaffoldのactionsにボタンを作成し、 タップ時に _scaffoldKey.currentState.openEndDrawer() でドロワーを開けるようにします。
こうすると、本来endDrawerにDrawerを指定すると生成されるボタンが生成されず、代わりにactionsで生成したボタンを通じてドロワーを開けるようになります。

参考

Flutter Custom Drawer Icon (use keys) · GitHub

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
5