【Flutter】ElevatedButton の使い方

※本記事で使用している環境

<パソコン>
機種:MacBook Air(13inch)
OS:macOS Sonoma(ver.14.5)
チップ:Apple M3
シェル:zsh

<ソフトウェア>
・Flutter(ver.3.22.3)
・Xcode(ver.15.4)
・CocoaPods(ver.1.15.2)
・Android Studio(ver.2024.1)
・Visual Studio Code(ver.1.92.0)

前回は、StatefulWidget についての解説を行いました。

今回は、ElevatedButton Widget についての解説を行います。

記事を執筆するにあたって、以下の書籍を参考にしました。

参考にした書籍

目次

公式ドキュメントの該当箇所

公式ドキュメントの解説は、以下のページにあります。

https://api.flutter.dev/flutter/material/ElevatedButton-class.html

説明画像1

警告表示をオフにする

まずは、以下のコードを入力してください。

import 'package:flutter/material.dart';

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

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text("Hello Stateful Widget"),
        ),
        body: Column(
          children: [
            Text("何か表示されるエリア"),
            
          ],
        ),
      ),
    );
  }
}
STEP
青色の波線が表示されているのを確認
説明画像2
STEP
flutter_lints をオフにする
説明画像3

1: analysis_options.yaml をクリックします。

2: 10行目にカーソルを合わせ、

Mac command + K  command + C
Win Ctrl + K  Ctrl + C

を押して、コメントアウトします。

STEP
ファイルを保存する
説明画像4

Mac command + S
Win Ctrl + S

を押して、ファイルを保存します。

STEP
main.dart ファイルをクリック
説明画像5
STEP
青い波線が消えていることを確認
説明画像6

これで、準備完了です。

これからコードを書いていきます。

ElevatedButton を設置する

以下のコードになるように書いていきます。

import 'package:flutter/material.dart';

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

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text("Hello Stateful Widget"),
        ),
        body: Column(
          children: [
            Text("何か表示されるエリア"),
            ElevatedButton(
              onPressed: null,
              child: Text("Button"),
            ),
          ],
        ),
      ),
    );
  }
}
STEP
Text Widget の下に書いていく
説明画像7
STEP
「children」プロパティに、ElevatedButton Widget を設置する
説明画像8
STEP
「onPressed」プロパティに null を、「child」プロパティに Text Widget を設置する
説明画像9
STEP
デバッグする
説明画像10

iOSシミュレーターの画面が変わりました。

ただし、「onPress」プロパティに、null を書いているため、ボタンを押すことができなくなっています。

次は、このボタンを押した時の処理内容を記述し、ボタンを押せるようにしていきます。

ボタンを押した時の処理を記述する

以下のコードになるように書いていきます。

import 'package:flutter/material.dart';

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

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text("Hello Stateful Widget"),
        ),
        body: Column(
          children: [
            Text("何か表示されるエリア"),
            ElevatedButton(
              onPressed: () => print("おされました"),
              child: Text("Button"),
            ),
          ],
        ),
      ),
    );
  }
}
STEP
「onPress」プロパティにカーソルを合わせ、F12 を押す
説明画像11

「onPress」プロパティの情報を見ていきましょう。

その際、

F12

を押します。

STEP
onPress にカーソルを合わせ、F12 を押す
説明画像12
STEP
onPress にカーソルを合わせ、F12 を押す
説明画像13
STEP
VoidCallback? にカーソルを合わせ、F12 を押す
説明画像14
STEP
onPress には、何らかの関数の処理を書くということを理解する
説明画像15
STEP
main.dart ファイルにもどり、「onPress」プロパティに何らかの処理を書く
説明画像16

( ) は、名前のない関数を表しています。

そして { } を開き、その中に print 関数を記述しています。

STEP
ターミナルを開く
説明画像17

1: メニューバーにある ターミナル をクリックします。

2: 新しいターミナル をクリックします。

STEP
ターミナルが起動したことを確認する
説明画像18
STEP
iOS シミュレーターに表示されているボタンを押す
説明画像19

ボタンを押すと、ターミナル上に「ボタンが押されました」という表示が出ました。

STEP
処理内容を1行で記述する
説明画像20

これは、アロー関数というものです。

このように書くことで、簡潔に処理を記述できます。

実際に、iOS シミュレーターのボタンを押すと「おされました」と表示されます。

処理を分けて記述する

以下のコードになるように書いていきます。

import 'package:flutter/material.dart';

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

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text("Hello Stateful Widget"),
        ),
        body: Column(
          children: [
            Text("何か表示されるエリア"),
            ElevatedButton(
              onPressed: _onClick,
              child: Text("Button"),
            ),
          ],
        ),
      ),
    );
  }

  void _onClick() {
    print("メソッドの中です。ボタンが押されました。");
  }
}
STEP
「onPress」プロパティに、_onClick というメソッドを記述する
説明画像21
STEP
Create method ‘_onClick’ をクリック
説明画像22

_onClick にカーソルを合わせた状態で、以下のキーボードコマンドを押します。

Mac command + .
Win Ctrl + .

すると、様々な項目が表示されますので、「Create method ‘_onClick’」をクリックします。

STEP
_onClick method が作られたことを確認する
説明画像23
STEP
メソッドの中に処理内容を記述する
説明画像24

iOS シミュレーターに表示されているボタンを押してみましょう。

ターミナルに「メソッドの中です。ボタンが押されました。」と表示されているのがわかります。

よくある間違いを紹介します。

説明画像25

このように、_onClick( ) と ( ) を記述してしまうことがよくあります。

しかし、これは「関数(メソッド)を実行する」という意味になってしまいます。

ただし、今回作った _onClick は void 型ですので、引数を返しません。

よって、エラーが起きてしまいます。

スマホの画面表示が変わる処理を記述する

最後に、以下のコードになるように書いていきます。

import 'package:flutter/material.dart';

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

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _header = "何か表示されるエリア_プロパティ";
  int _counter = 0;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text("Hello Stateful Widget"),
        ),
        body: Column(
          children: [
            Text(_header),
            ElevatedButton(
              onPressed: _onClick,
              child: Text("Button"),
            ),
          ],
        ),
      ),
    );
  }

  void _onClick() {
    print("メソッドの中です。ボタンが押されました。");
    setState(() {
      _header = "ボタンが押されたので変化しました ${_counter++}";
    });
  }
}

これでようやく、「ボタンを押したら、画面の表示が変わる」という処理をかけるようになります。

STEP
Text Widget の中身が変化するようにする
説明画像26
STEP
変数を宣言して初期化
説明画像27
STEP
Text Widget の中に作った変数を記述する
説明画像28

iOS シミュレーターの表示が変わりました。

STEP
変数の値を変えてみる
説明画像29

またもや、表示が変わりました。

STEP
メソッドの中で変数に新しい値を代入する処理を記述する
説明画像30

iOS シミュレーターの画面に表示されているボタンを押してみましょう。

残念ながら、何も変化がありません。

実は、このように画面表示を変化させたい場合は、「setState」というメソッドを記述し、その中に処理内容を記述しなければなりません。

STEP
setState method を記述する
説明画像31

画面上のボタンを押すと、「ボタンが押されたので変化しました」という表示に変わりました。

これで、ボタンを押したら画面の表示が変わるという処理を記述することができました

STEP
新しく変数を作り、初期化する
説明画像32

今度は、ボタンを押した回数を記録して表示する、という処理内容を記述します。

STEP
先ほど作った変数の中で、新しく作った変数の中身を参照するようにする
説明画像33

変数の前に「$(ドルマーク)」をつけることで、変数の中身を表示することができます。

STEP
変数の値を、1ずつ増やしていく処理を記述する
説明画像34
STEP
画面のボタンを押す
説明画像35

このように、ボタンを押すと「1」から始まります。

STEP
もう一度ボタンを押して、数字が増えたことを確認する
説明画像36

ボタンを押した回数に応じて、数字が増えていきます。

STEP
2行の処理を1行にまとめる
説明画像37

「$(ドルマーク)」の後に「{ } (中括弧)」を開き、変数と演算子を一緒に記述することで、先ほど2行使っていた記述を1行にまとめることができます。

STEP
ボタンを押す
説明画像38

この記述では、「0」から始まることに注意してください。

STEP
もう一度ボタンを押す
説明画像39

ボタンを押した回数に応じて、数字が増えていきます。

STEP
0 から始まる処理を2行に分けて書く
説明画像40
_counter++;

この記述を、変数 _header の上に書くか下に書くかで、0 から始まるのか 1から始まるのかが変わります。


これにて、ElevatedButton Widget についての解説を終わります。

次は、Center Widget についての解説を行います。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

shimaのアバター shima ライター

20代のITライター。
ITやソフトウェアに関することをわかりやすくまとめ、多くの人にそれらを知ってもらおうと活動しています。
ご質問やご要望、お仕事依頼がございましたらお問合せフォームよりお願いいたします。

コメント

コメントする

CAPTCHA



reCaptcha の認証期間が終了しました。ページを再読み込みしてください。

目次