フォームに値を入力する際に、出てきたキーボードでフォームが隠れてしまうことがあると思います。
今回はフォームを隠さずにキーボードを表示させる方法を解説します。
- Before
- After
開発環境
- MacBook Pro (macOS Catalina バージョン10.15.3)
- Flutter 1.12.13+hotfix.5 channel stable
- Dart 2.7.0
キーボードの表示分のBottomを確保する
キーボードが表示されたら、キーボードの高さ分Widgetを上に移動させることでフォームが隠れないようにします。
最初にキーボードの高さを取得します。
final bottomSpace= MediaQuery.of(context).viewInsets.bottom;
※上記のやり方だとキーボードが表示されていない時のbottomが0になるので、フォームが下に寄ってしまいます。
私は、画面の高さを取得してbottomSpaceにプラスすることで、キーボード非表示時にもフォームを中央に寄せています。
SingleChildScrollViewでラップする
スクロール可能にするためにSingleChiledScrollViewで全体をラップします。
この時スクロールの向きを逆にするために、reverseにtrueを指定します。
final bottomSpace = MediaQuery.of(context).viewInsets.bottom;
Widget build{
return Scaffold(
body: SingleChildScrollView(
reverse: true,
child: Form(
〜省略〜
),
),
);
}
Scaffoldにプロパティを追加
今回は自前で高さ対応するので、resizeToAvoidBottomInsetプロパティをfalseに設定します。
final bottomSpace = MediaQuery.of(context).viewInsets.bottom;
Widget build{
return Scaffold(
resizeToAvoidBottomInset: false,
body: SingleChildScrollView(
reverse: true,
child: Form(
〜省略〜
),
),
);
}
最後にPaddingを追加
Paddingを追加して、取得したbottom分の余白をとるようにします。
final bottomSpace = MediaQuery.of(context).viewInsets.bottom; Widget build{ return Scaffold( resizeToAvoidBottomInset: false, body: SingleChildScrollView( reverse: true, child: Padding( padding: EdgeInsets.only(bottom: bottomSpace), child: Form( 〜省略〜 ), ), ), ); }
以上で終了です。
これでキーボードが表示された際にフォームが上に移動するようになりました。
Flutterでアプリをリリースしたのでぜひチェックしてみてください 。
コメント