Code It!

コーディング中に調べたことをまとめています。

【殴り書き】ダイアルページを作成するにあたって苦労したところ

Flutterで学んだことを実践するためにiPhoneの電話アプリを再現している。 以下ダイアルパッドのページを作成するにあたって苦労した点を箇条書きしていく。

Widgetを非表示にする方法

数字ボタンを押したら表示され、数字がすべてなくなると非表示になる「番号を追加」ボタンの制御方法がわからなかった。

→Visibility Widgetを使い解決

ダイアルパッドは画面下部に寄せて、番号表示などは上寄せにする方法

Columnを

mainAxisAlignment: MainAxisAlignment.end,

で下寄せにするも、Column内のすべての要素が下寄せになってしまい、画面上部がすかすかになってしまった。

「番号を追加」ボタンとダイアルパッドの間にSpacer()を追加することで解決。

Spacerは

Expanded(child: Container()) と同じ意味(Spacerの方が新しく便利)。

backspaceのアイコン

ElevatedButtonの左辺を三角にする方法がわからないため、Icons.backspaceで代用。

しかし、アイコンの色を灰色にすると✗マークが白抜きのため見づらくなってしまった。

Stackで背景に黒色のContainerを追加し、ゴリ押しで✗が黒く見えるようにした。

backspaceのアイコンをタップできるようにしたが、Inkwellの表示がおかしい

Iconをタップ可能にするためにInkwell Widgetを使った。似た用途のWidgetとしてGestuorDetectorがあるがそちらはタップ時のアニメーションがなく、タップしたかどうかが分からないのでInkwellを採用した。

ただ、InkwellがIconの形を考慮しないので、四角い背景がタップするときに表示されてしまう。未解決。

テキストを改行する方法

ElevatedButtonのテキストにはColumnが使えないのでテキストだけで改行を実現する必要がある。

2つの方法があり、1つは改行記号(\n)を使う方法、2つ目が''' '''で囲みソースコード中で改行する方法。

今回はシンプルに数字とアルファベットの2行だけだったので、改行記号の方法を採用。

一つのテキストの中で一部だけ文字を小さくする方法

htmlであればspanで囲って、一部だけ文字を小さくしたりアンダーラインを引いたりするのは簡単だが、dartでどうやるか分からなかった。

RichText(

  text: [TextSpan(), TextSpan(style: TextStyle())]

でspanごとに設定できた。

「1」だけ上の方にずれてしまう

2行目に何も表示するものがないと、1行目が上寄せになってしまった。 半角スペースを2行目に表示させることで解決。

アスタリスクが上にずれてしまう

と#は中央揃えにしたかったため、改行記号による改行はしていない。 #は期待通り真ん中に表示されたが、は上の方にずれていた。 *の前に改行記号を入れることで真ん中に表示されるようになった。(なぜ?)