Flutterでのtooltipの使い方を説明していきます。
tooltipはwidgetの使い方のヒントに当たります。
TextFieldで言うところの、hintText
のようなものです。
この記事を読むことで、Tooltip
ウィジェットの使い方をマスターできます。
Tooltipを使用すれば、ユーザーがwidgetをタップ・ロングタップした際に、メッセージを表示することができるようになります。
ボタンやアイコンなどの補足説明を表示するものです。
Tooltip
使う場面としては、以下のようなケースがあると考えられます。
以下のようなシンプルなボタンにヘルプアイコンがついているUIの実装例をご紹介します。
?アイコンをタップした時に、メッセージが出てくるというwidgetを作成してみました。
Tooltip(
message: 'ヘルプボタンだよ。', //表示するメッセージ
height: 100, //吹き出しの高さ
padding: const EdgeInsets.all(20), //吹き出しのpadding
margin: const EdgeInsets.all(10), //吹き出しのmargin
verticalOffset: 20, //childのwidgetから垂直方向にどれだけ離すか
preferBelow: true, //メッセージを子widgetの上に出すか下に出すか
textStyle: TextStyle(fontSize: 18, fontWeight: FontWeight.bold), //メッセージの文字スタイル
decoration:
BoxDecoration(color: Colors.grey.shade300, borderRadius: BorderRadius.all(Radius.circular(100))),//吹き出しの形や色の調整
waitDuration: const Duration(seconds: 3), //ホバーしてからどれくらいでtoolTipが見えるか(スマホでは使用することはない)
showDuration: const Duration(milliseconds: 1500), //何秒間メッセージを見せるか(タップを終えた後から)
triggerMode: TooltipTriggerMode.tap, //どのような条件でメッセージを表示するか(ここではタップした際にしている)
enableFeedback: true, //メッセージが表示された際に何かしらのフィードバックがあるかどうか(例: androidならバイブレーション)
child: Icon(
CupertinoIcons.question_circle,
color: Colors.grey,
size: 30,
))
Flutterのversionが古いと、triggerMode
,enableFeedback
というプロパティがないかもしれません。
×ボタンを長押しすると、「閉じる」というヒントが表示されるダイアログを作成してみました。
SimpleDialog(
contentPadding: const EdgeInsets.all(16),
children: [
Align(
alignment: Alignment.centerRight,
child: Tooltip(
message: MaterialLocalizations.of(context).closeButtonTooltip,
child: GestureDetector(
onTap: () {
Navigator.pop(context);
},
child: Icon(Icons.close, size: 30))),
),
Text('テストダイアログです'),
const SizedBox(height: 100)
],
);
message: MaterialLocalizations.of(context).closeButtonTooltip
のように、Flutter側でデフォルトのtooltipをいくつか用意してくれています。
閉じるボタンは一般的でわかりやすいですが、Tooltip
をつけておくだけで、ユーザー体験を向上につながります。
サンプルで作成したコード全文を以下に示します。
Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: () async {
await showDialog(
context: context,
builder: (context) {
return SimpleDialog(
contentPadding: const EdgeInsets.all(16),
children: [
Align(
alignment: Alignment.centerRight,
child: Tooltip(
message: MaterialLocalizations.of(context).closeButtonTooltip,
child: GestureDetector(
onTap: () {
Navigator.pop(context);
},
child: Icon(Icons.close, size: 30))),
),
Text('テストダイアログです'),
const SizedBox(height: 100)
],
);
});
},
child: const Icon(Icons.comment)),
Tooltip(
message: 'ヘルプボタンだよ。',
height: 100,
padding: const EdgeInsets.all(20),
margin: const EdgeInsets.all(10),
verticalOffset: 20,
preferBelow: true,
textStyle: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
decoration:
BoxDecoration(color: Colors.grey.shade300, borderRadius: BorderRadius.all(Radius.circular(100))),
waitDuration: const Duration(seconds: 3),
showDuration: const Duration(milliseconds: 1500),
triggerMode: TooltipTriggerMode.tap,
enableFeedback: true,
child: Icon(
CupertinoIcons.question_circle,
color: Colors.grey,
size: 30,
)),
],
),
)
);
いかがでしたでしょうか。
Flutterのtooltipの使い方は理解できましたか。
しれっとボタンやアイコンに仕込んでおくだけで、ユーザーがアプリを使いこなす上でのヒントを提供できます。
プロジェクト内でtooltip付きのコンポーネントを用意しておくと良いかもしれません。
参考になれば幸いです。
可茂IT塾ではFlutterインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。
Read More可茂IT塾ではFlutterインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。
Read More