Flutterでテキストフィールドフォームの入力内容を画面に表示する手順
Photo by NeONBRAND on Unsplash
はじめに
Flutterでテキストフィールドの内容を取得して画面に表示するまでの手順を説明します。
できるようになること
以下のGIF画像のように、テキストフィールドに入力して追加ボタンを押すと、入力した内容をリストに追加していきます。TextEditingController
を使うことでテキストフィールドの入力内容を管理することができます。
前提と環境
以下の通りです。
- Flutter 1.5.4-hotfix.2
- Dart 2.3.0
TextEditingControllerについて
テキストフィールドの入力内容を管理するためにTextEditingController
を使用します。別途パッケージをインストールする必要はなくデフォルトで使用可能です。
以下にTextEditingController
の使い方、例についての公式ドキュメントがあります。こちらを参考にしています。
In this recipe, we'll see how to retrieve the text a user has typed into a textfield.## Directions 1. Create a `TextEditingController` 2. Supply the `TextEditingController` to a `TextField` 3. Display the current value of the text field## 1. Create a `TextEditingController`In order to retrieve the text a user has...
TextEditingControllerの使い方
TextEditingController
のコントローラを作成し、後は入力した内容をmyController.text
というような形で取り出すことができます。myController
は適当に名前をつけたTextEditingController
のコントローラです。冒頭に載せたデモのコードを以下に載せます。なお、全体のコードはGitHubに載せています。
各説明は以下のコード内のコメントに含めます。なお、全体のコードは冒頭に載せたGitHub上に載せています。
class _MyCustomFormState extends State {
// テキストフィールドを管理するコントローラを作成
// 入力された内容をこのコントローラを使用して取り出します。
final myController = TextEditingController();
// 適当なリスト用データ
List> items = [
{ "id" : 1, "content" : "Content 1" },
{ "id" : 2, "content" : "Content 2" },
{ "id" : 3, "content" : "Content 3" }
];
// 上記リスト用IDカウンター
int _counter = 3;
// 追加ボタンが押されたときに実行する関数
void _addItem(String inputtext) {
setState(() {
_counter++;
items.add({ "id": _counter, "content": inputtext});
});
}
@override
// widgetの破棄時にコントローラも破棄する
void dispose() {
myController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Text Input Sample'),
),
body: Container (
child: Column(
// mainAxisAlignment: MainAxisAlignment.center,
children: [
Padding(
padding: const EdgeInsets.all(16.0),
child: TextField(
controller: myController,
),
),
Expanded(
child:ListView.builder(
scrollDirection: Axis.vertical,
shrinkWrap: true,
itemCount: items.length,
itemBuilder: (BuildContext context, int index) {
final item = items[index];
return new Card(
child: ListTile(
leading: FlutterLogo(),
title: Text(item["id"].toString() + " : " + item["content"]),
),
);
}),
),
]),
),
// テキストフィールド送信用ボタン
floatingActionButton: FloatingActionButton(
// onPressedでボタンが押された時の動作を渡す
onPressed: () {
// myController.text で入力されたテキストフィールドの内容を取得
// 以下の_addItemは自分で定義済の関数
_addItem(myController.text);
// テキストフィールドの内容をクリアする
myController.clear();
},
child: Icon(Icons.add),
),
);
}
}
上記のコードでは、テキストフィールドに入力された内容を、追加ボタンによってitems
に追加しています。そしてそれとリアクティブに画面内容のListView
も更新されます。
まとめ
簡単なデモですが、基本的な機能でもあるので使う場面も多いと思います。
関連記事
- 公開日:2022/08/30 更新日:2022/08/30
FlutterアプリでAndroid StudioのGenerate Signed Bundle/APKが表示されない時の対処法
FlutterアプリをGoogle Play Storeに公開するためにAndroid Studioを使ってアップロード鍵を生成しようとしたところ、公式ドキュメントに書かれている「Build」→「Generate Signed Bundle/APK」というメニューが見つかりませんでした。この解決法をメモします。
- 公開日:2022/08/15 更新日:2022/08/15
webview_flutterを使ってFlutterアプリ内でWebページを開く
FlutterでURLをタップした時にアプリ内でそのURLのWebページを開く方法についてまとめます。この記事では、Flutter公式のプラグインであるwebview_flutterを使用した実装例をメモします。
- 公開日:2022/08/14 更新日:2022/08/14
FlutterでURLへのリンクを作成してアプリ外でWebページを開く
FlutterでURLをタップしたらブラウザが開いてそこでURL先を表示したい場合があります。この記事では、Flutter公式のプラグインを使用した実装例をメモします。
- 公開日:2019/12/03 更新日:2019/12/03
Android App Bundleを実機にインストールして試すために使うbundletoolの使い方
Flutterなどで開発したAndroidアプリを自分の手元にある実機にインストールして試したい場合はbundletoolを使用するよう公式ドキュメントに記載されています。ただ、常識であるためなのか詳しい使い方が書かれておらず戸惑ったのでメモしておきます。
- 公開日:2019/12/02 更新日:2019/12/02
Flutterでアプリの復帰やサスペンドを検出して処理を実行する
Flutterで開発したアプリが復帰した時やサスペンドした時を検出して任意の処理を実行するための手順をまとめます。