Flutterでテキストフィールドフォームで入力データを表示する方法を整理しました。
【はじめに】テキストフィールドに入力したデータを画面に表示
以下実行例のように、Flutterでテキストフィールドに入力したデータを画面に表示していくアプリを作っていきます。
実行例
TextEditingControllerでテキストフィールドの入力内容を管理(内容を取得したりなど)できます。
サンプルコード
Flutter + Dartで実装したサンプルコードは以下の通りです。
■lib/main.dart
import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'サンプルアプリ', theme: new ThemeData.dark(), home: InputDataForm(), ); } } class InputDataForm extends StatefulWidget { @override _InputDataFormState createState() => _InputDataFormState(); } class _InputDataFormState extends State{ // テキストフィールドを管理するコントローラを作成(入力内容の取得用) final textController = TextEditingController(); // 入力データ格納用のリスト List<Map<String, dynamic>> items = []; // ID(カウンタ変数) int _counter = 0; // 追加ボタンが押されたときの処理(リストにIDと入力データを新規追加) void _addItem(String inputText) { setState(() { _counter++; items.add({ "id": _counter, "content": inputText}); }); } @override // widgetの破棄時にコントローラも破棄 void dispose() { textController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('データ入力・表示'), ), body: Container ( child: Column( children: [ Padding( padding: const EdgeInsets.all(16.0), child: TextField( controller: textController, ), ), 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: () { //テキストフィールドの内容を取得し、アイテムリストに追加 _addItem(textController.text); // テキストフィールドの内容をクリア textController.clear(); }, child: Icon(Icons.add), ), ); } }
テキストフィールドに入力された内容を、追加ボタンを押すごとにリスト(items)へ追加します。
そしてリアクティブに画面内容(ListView)が更新されます。
【カスタマイズ】入力キーボードを数値のみに制限
以下実行例のように、Flutterでテキストフィールドに入力する際に表示されるキーボードを数値、電話番号、文字、メールアドレスなどに制限します。
実行例(数値のみ)
TextEditingControllerでテキストフィールドの入力内容を管理(内容を取得したりなど)できます。
サンプルコード
Flutter + Dartで実装したサンプルコードは以下の通りです。
■lib/main.dart
import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'サンプルアプリ', theme: new ThemeData.dark(), home: InputDataForm(), ); } } class InputDataForm extends StatefulWidget { @override _InputDataFormState createState() => _InputDataFormState(); } class _InputDataFormState extends State{ // テキストフィールドを管理するコントローラを作成(入力内容の取得用) final textController = TextEditingController(); // 入力データ格納用のリスト List<Map<String, dynamic>> items = []; // ID(カウンタ変数) int _counter = 0; // 追加ボタンが押されたときの処理(リストにIDと入力データを新規追加) void _addItem(String inputText) { setState(() { _counter++; items.add({ "id": _counter, "content": inputText}); }); } @override // widgetの破棄時にコントローラも破棄 void dispose() { textController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('データ入力・表示'), ), body: Container ( child: Column( children: [ Padding( padding: const EdgeInsets.all(16.0), child: TextField( controller: textController, keyboardType: TextInputType.number, // キーボードは数値のみ // フォームの装飾を定義 decoration: InputDecoration( labelText: "数値を入力してください。", hintText: '例(114514)', icon: Icon(Icons.person_outline), fillColor: Colors.white, ), ), ), 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: () { //テキストフィールドの内容を取得 _addItem(textController.text); // テキストフィールドの内容をクリア textController.clear(); }, child: Icon(Icons.add), ), ); } }
【Flutter/Dart】入力キーボードの制限(数値、電話番号、文字、メールアドレスなど)
Flutterでテキストフィールドフォームの入力キーボードを数値のみに制限する方法を整理しました。【テキストフィールドフォーム】入力キーボードを数値のみに制限以下実行例のように、Flutterでテキストフィールドに入力する際に表示されるキー...
【応用】テキストフィールドとリストビューを並べて表示
【Flutter】テキストフィールドとリストビューを並べて表示
FlutterでDテキストフィールドとリストビューを並べて表示する方法について紹介します。
【Flutter超入門】使い方とサンプルアプリを解説
Flutterの使い方とサンプルアプリ(iOS、Android、Windows)について入門者向けに解説します。
コメント