見出し画像

【Flutter】Drawerの背景色を透過させる方法

我々ハッチアウトスクールのHPも、この透過の技術を使ってDrawerを実装しています。

この記事を通して何ができる様になるのか、良ければ一度HPのDrawerをチェックしてみてください。(スマホサイズ時にDrawer実装中)

アプリによく見られるDrawer。Flutterでは簡単に実装することができます。

まずはシンプルなDrawerの実装方法を確認してみましょう。

Drawerの実装方法

画像1

上記GIFのようなDrawerを実装してみます。

実装方法はシンプルで、ScaffoldのdrawerプロパティにDrawerウィジェットを追加するだけです。

コードは以下です。

  Widget build(BuildContext context) {
   return Scaffold(
     appBar: AppBar(
       title: Text('Drawer透過方法'),
     ),
     drawer: Drawer(),
     body: Center(
       child: Text('Drawerを実装してみるよ!'),
     ),
   );
 }

これでDrawerの実装は完了です。

次にDrawerの背景色を変更する方法を紹介します。

Drawerの背景色を変更する方法

画像2

上記GIFのようにDrawerの背景色を変更してみましょう。

よく紹介されている方法が、Drawerのchildプロパティに色付きのContainerウィジェットを追加する方法です。

こちらも紹介しておくと以下のコードになります。

  Widget build(BuildContext context) {
   return Scaffold(
     appBar: AppBar(
       title: Text('Drawer透過方法'),
     ),
     drawer: Drawer(
       child: Container(
         color: Colors.red,
       ),
     ),
     body: Center(
       child: Text('Drawerの背景色を変更してみるよ!'),
     ),
   );
 }

これで背景色を変更することは可能です...がこのやり方だと透過させることはできないです。

ので次で透過させる方法を紹介していきます!

Drawerの背景色を透過させる方法

画像3

いよいよ本題です。上記GIFのように背景色を透過させる方法をみていきましょう。

やることは3つです。

①DrawerをThemeウィジェットで包容する。

②ThemeのdataプロパティにThemeDataウィジェットを追加する。

③ThemeDataのcanvasColorプロパティの指定をColors.transparentにする。

コードは以下です。

  Widget build(BuildContext context) {
   return Scaffold(
     appBar: AppBar(
       title: Text('Drawer透過方法'),
     ),
     drawer: Theme(
       data: ThemeData(
         canvasColor: Colors.transparent,
       ),
       child: Drawer(),
     ),
     body: Center(
       child: Text('Drawerの背景色を透過してみるよ!'),
     ),
   );
 }

これでDrawerの背景を透過させることができます。

まとめ

以上がDrawerの背景色を透過させる方法でした。

ThemeDataのcanvasColorがDrawerの背景色を司っているようですね。

その初期値がColors.whiteの為、デフォルトでは背景が白くなっています。

自分の思い描くDrawerを実装してみてください!

以下コード全文

import 'package:flutter/material.dart';

void main() {
 runApp(MyApp());
}

class MyApp extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
   return MaterialApp(
     title: 'ハッチアウトスクール',
     theme: ThemeData(
       primarySwatch: Colors.blue,
       visualDensity: VisualDensity.adaptivePlatformDensity,
     ),
     home: Test(),
   );
 }
}

class Test extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
   return Scaffold(
     appBar: AppBar(
       title: Text('Drawer透過方法'),
     ),
     drawer: Theme(
       data: ThemeData(
         canvasColor: Colors.transparent,
       ),
       child: Drawer(),
     ),
     body: Center(
       child: Text('Drawerの背景色を透過してみるよ!'),
     ),
   );
 }
}

この記事が気に入ったらサポートをしてみませんか?