LoginSignup
24
12

More than 3 years have passed since last update.

[Flutter]立体的なCardを作ってみよう(BoxShadowクラス)

Last updated at Posted at 2019-11-11

酪王カフェオレが美味しいので初投稿です。
今回、BoxShadowクラスという存在を知りました。なのでいじってみようと思います。

立体的なWidgetを作ってみよう

今回でこんな事ができるようになるよ。
スクリーンショット 2019-11-11 17.04.28.png

どうやって作るのか

Fuji「Boxshadowクラスを使うとできるようになるよ!!」
みんな「・・・・・」
Fuji「はい。ちゃんとやります。」

とりあえずカードを作ろう

丸パクリして確認したいなら↓

// 丸パクリ用のコード
import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Container(
          width: 200.0,
          height: 100.0,
          child: Card(
            color: Colors.blue,
            child: Center(
              child: Text('プリパラは神'),
            ),
          ),
        ),
      ),
    );
  }
}

カードのコードだけパクリたいなら↓

// カードだけを実装するコード
class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Container(
          width: 200.0,
          height: 100.0,
          child: Card(
            color: Colors.blue,
            child: Center(
              child: Text('プリパラは神'),
            ),
          ),
        ),
      ),
    );
  }
}

とりあえずこれでこんなカードが実装できます。
スクリーンショット 2019-11-11 17.10.44.png

立体にしよう!

立体にするにはこちら BoxShadow を使います。
て事で入れてみよう

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Container(
          /* ここから */
          decoration: BoxDecoration(
            boxShadow: [
              BoxShadow(
                color: Colors.black26,
                spreadRadius: 1.0,
                blurRadius: 10.0,
                offset: Offset(10, 10),
              ),
            ],
            /* ここまでを追加しました */
          ),
          width: 200.0,
          height: 100.0,
          child: Card(
            color: Colors.blue,
            child: Center(
              child: Text('プリパラは神'),
            ),
          ),
        ),
      ),
    );
  }
}

色々追加したので、順番に説明
1, 今回の実装はデコレーションの類に入るのでdecoration:を追加
2, decoration:にboxShadowを使うにはBoxDecoration()を使う必要があるので追加
3, boxShadowを使うためにboxShadow:を追加
4, boxShadow:はリストで持つ必要があるんで[]を追加
5, そしてついにBoxShadow()を追加したような感じです。

やったね、たえちゃん!立体になったよ!!
スクリーンショット 2019-11-11 17.04.28.png

少し遊んでみよう

理解を深めるためにコードを少しいじってみましょう。

color: をいじってみよう

// これを
color: Colors.black26,

// こうしてみよう
color: Colors.blue,

後ろのカラーが青くなるぞ!!
スクリーンショット 2019-11-11 17.36.46.png

spreadRadius: をいじってみよう

// これを
spreadRadius: 1.0,

// こうしてみよう
spreadRadius: 50.0,

後ろの「うわー」ってなってるところがでかくなるぞ!!(きもい)
スクリーンショット 2019-11-11 17.39.57.png

blurRadius: をいじってみよう

// これを
blurRadius: 10.0,

// こうしてみよう
blurRadius: 1.0,

不透明度をいじってるので、値を小さくすれば濃くなるぞ!!
スクリーンショット 2019-11-11 17.41.55.png

offset: をいじってみよう


// これを
offset: Offset(10, 10),

// こうしてみよう
offset: Offset(100, 100),

Offset(x軸にどれくらいズラすか, y軸にどれくらいズラすか)を設定しているので、値を大きくすればするほどズレていくぞ!!
スクリーンショット 2019-11-11 17.47.21.png

boxShadow: がリスト入力。なので複数入れてみよう

// これを
boxShadow: [
  BoxShadow(
   color: Colors.black26,
   spreadRadius: 1.0,
   blurRadius: 10.0,
   offset: Offset(10, 10),
  ),
]

// こうしてみよう
boxShadow: [
  BoxShadow(
   color: Colors.black26,
   spreadRadius: 1.0,
   blurRadius: 10.0,
   offset: Offset(10, 10),
  ),
  BoxShadow(
   color: Colors.blue,
   spreadRadius: 1.0,
   blurRadius: 10.0,
   offset: Offset(10, 10),
  ),
  BoxShadow(
   color: Colors.red,
   spreadRadius: 1.0,
   blurRadius: 10.0,
   offset: Offset(10, 10),
  ),
]

影の色を複数指定できるぞ!なのでレインボーなんてのもここで可能になるよ!!

スクリーンショット 2019-11-13 12.13.48.png

24
12
0

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
  3. You can use dark theme
What you can do with signing up
24
12