大事な通知をユーザーにしっかり伝えるアラートダイアログ

ダイアログはユーザーに最大限の注意を払わせて、必要な入力を促すためにあります。例えば、利用規約の合意の有無や、 センサー等を利用するパーミッションの許可不許可のように、重要な入力を促すにはダイアログを使います。

このように簡単かつ重要な情報の入力を促すのは、AlertDialog を利用します。

複数の選択肢を提示する場合は通常 シンプルダイアログ (SimpleDialog) を使います。

AlertDialog は通常次の例のように、showDialog 関数の中で作成します。 スクリムのタップによってダイアログを閉じないようにするには、barrierDismissiblefalse にします。

import 'package:flutter/material.dart';
import 'dart:async';

void main() => runApp(
      MaterialApp(
        debugShowCheckedModeBanner: false,
        home: MyApp(),
      ),
    );

class MyApp extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _State();
  }
}

class _State extends State<MyApp> {
  String _label = '';

  _useCamera(BuildContext context, bool b) {
    setState(() {
      _label = 'You select ' + (b ? 'AGREE' : 'CANCEL');
    });
    Navigator.pop(context);
  }

  Future _showAlertDialog(BuildContext context) async {
    return showDialog<void>(
      context: context,
      barrierDismissible: false,
      builder: (BuildContext context) {
        return AlertDialog(
          title: Text('Use camera?'),
          content: Text('Description goes here.'),
          actions: <Widget>[
            FlatButton(
              child: Text('CANCEL'),
              onPressed: () => _useCamera(context, false),
            ),
            FlatButton(
              child: Text('AGREE'),
              onPressed: () => _useCamera(context, true),
            ),
          ],
        );
      },
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Alert Dialog test'),
      ),
      body: Center(
        child: Column(
          children: <Widget>[
            Container(
              padding: EdgeInsets.all(20),
              child: RaisedButton(
                child: Text(
                  'OK',
                  style: TextStyle(
                    color: Colors.white,
                  ),
                ),
                onPressed: () => _showAlertDialog(context),
                color: Theme.of(context).primaryColor,
              ),
            ),
            Text(
              _label,
              style: TextStyle(fontSize: 16),
            )
          ],
        ),
      ),
    );
  }
}

ちなみに、アラートダイアログのタイトルの付け方は、Material Design のガイドラインによれば、簡潔で明確な質問をすることになっています。

例えば「カメラを使いますか?」「位置情報サービスを使いますか?」「利用規約に合意しますか?」などです。逆に避けるべきとされているのは、 「本当ですか?」などの不明瞭な質問です。

選択肢がある場合は AlertDialog よりも SimpleDialog を使うのが推奨されています。「シンプルダイアログの使いか」をみてください。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Flutter 入門