Flutter,ボタンを押したらダイアログを表示する

1,はじめに

過去にFlutterについての記事を書いた。

だが、Flutterの動作確認のみにとどまり、開発をしていなかった。

今回DebianにFlutter開発環境を構築したので、ついでにFlutterで遊んでみた。

まずは、ボタンを押したらダイアログが表示されるものを作ってみたい。

2,各フェーズについて

(1)ボタンを表示

Flutterの開発経験に乏しいため、サンプルアプリのコードにくっついていた、
floatingActionButtonをそのまま使用する。

下記のコードにより画面にボタンが配置される。

// 画面の下にボタンをセット
floatingActionButton: FloatingActionButton(
  // ボタンアイコン
  child: Icon(Icons.alarm_add),
),
// とりま、中央寄せで配置する。
floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,

これにより、ボタンがアプリ上に表示される。

Flutter Hello World Pic 1
Flutter ボタン

(2)ボタン押下時動作

次に、上記で作成したボタンが押下された場合の挙動についてコードを追加する。

floatingActionButton: FloatingActionButton(
  // ボタン押下時処理
  onPressed: () {
    // 何らかの処理
  },

  child: Icon(Icons.alarm_add),
),

(3)ダイアログを表示する

ボタンが押下された場合に、ダイアログを表示する。

// 画面の下にボタンをセット
floatingActionButton: FloatingActionButton(
  // ボタン押されたらダイアログ出そうか。
  onPressed: () {
    showDialog(
      context: context,
      builder: (_) => AlertDialog(
        title :Text("Hello !"),
        content: Text("Welcome to Flutter World !"),
      )
    );
  },

  child: Icon(Icons.alarm_add),
),

3,作成したコード

以上を踏まえて作製したアプリは、ボタンが押下されるとダイアログを出力する。

Flutter Hello World Pic 2
Show dialog

本アプリケーションのコードは下記の通りである。

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Hello World App',
      theme: ThemeData(
        primarySwatch: Colors.orange,
      ),
      home: MyHomePage(title: 'Hello World'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

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

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),

      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Hello World !',
            ),
          ],
        ),
      ),

      bottomNavigationBar: BottomAppBar(
        // 画面の下に70pxの余白を作り、
        // アラートボタンが画面の下にくっつく見栄えの悪い現象を回避する。
        child: Container(height: 70.0,),
      ),

      // 画面の下にボタンをセット
      floatingActionButton: FloatingActionButton(
        // ボタン押されたらダイアログ出そうか。
        onPressed: () {
          showDialog(
            context: context,
            builder: (_) => AlertDialog(
              title :Text("Hello !"),
              content: Text("Welcome to Flutter World !"),
            )
          );
        },

        // アイコン
        child: Icon(Icons.alarm_add),
      ),
      // とりま、中央寄せで配置する。
      floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
    );
  }
}

4,おわりに

Flutter で開発する場合、全てウィジェットという考え方があるようだ。

当初、AlertDialogのtitleやcontentに普通に文字列をセットしたのだが、だめで悩んだ。

結局Textオブジェクトを使用すれば良いようだが、ようわからん。

クロスプラットホーム開発で有名とのことなので、勉強していきたい技術だなと思った。

5,参考文献

  1. FlutterでDialog表示 – Flutter – ごろつきめも
  2. dart – Flutter – SimpleDialog in FloatingActionButton – Stack Overflow

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA