Closed4

Flutterで躓いたことまとめ

𝙨𝙝𝙞𝙣𝙩𝙖𝙧𝙤𝙨𝙝𝙞𝙣𝙩𝙖𝙧𝙤

TextFieldで正の実数だけを入力したい場合は以下...のはずなんだけど、iOSシミュレータで小数点は出てこないし、inputFormatters使うと入力もできない。。

TextField(
  keyboardType: TextInputType.number,
  inputFormatters: [
    FilteringTextInputFormatter.allow(RegExp(r'^(\d+)?(\.\d+)?$'))
  ],
  decoration: InputDecoration(
    labelText: 'Height',
    hintText: '150.0',
    icon: Icon(Icons.person)
  ),
),

𝙨𝙝𝙞𝙣𝙩𝙖𝙧𝙤𝙨𝙝𝙞𝙣𝙩𝙖𝙧𝙤

DartPadで正規表現をコネコネしつつ、見直し。

結論

TextField(
  keyboardType: TextInputType.number,
  inputFormatters: [
    FilteringTextInputFormatter.allow(RegExp(r'^(\d+)?(\.\d*)?$'))
  ],
  decoration: InputDecoration(
    labelText: 'Height',
    hintText: '150.0',
    icon: Icon(Icons.person)
  ),
),

165165.0を入力する過程で165.を通過するが、それが例外となることが問題だった。
なので、小数点以下の数字が入力されていなくても良いように+(1回以上のマッチ)から*(0回以上のマッチ)へ変更。
(165.165.0とみなす方向で妥協(数論的にはイマイチやけども...))

𝙨𝙝𝙞𝙣𝙩𝙖𝙧𝙤𝙨𝙝𝙞𝙣𝙩𝙖𝙧𝙤

一応BMIを計算してprintするところまではできた。
同じ画面上に結果を表示するためにはStatefulWidgetにしてStateを作らないといけないっぽいので、いったんサンプルアプリと同じく別画面に結果を表示することにする。

このスクラップは2024/04/25にクローズされました