FlutterはGoogleが提供するクロスプラットフォームモバイルアプリ開発フレームワークです。FlutterのUI要素の1つであるTextFieldは、ユーザーがテキスト入力を行うために使用されるウィジェットです。この記事では、FlutterのTextFieldについて、使い方を含めて解説します。
TextFieldの基本的な使い方
TextFieldを使用するには、以下の手順に従います。
TextField
クラスをインポートします。
import 'package:flutter/material.dart';
TextField
ウィジェットを作成します。このとき、controller
プロパティに、TextFieldの入力値を取得するためのTextEditingController
オブジェクトを渡します。
TextEditingController _controller = TextEditingController();
TextField(
controller: _controller,
);
- 必要に応じて、他のプロパティを設定します。たとえば、
decoration
プロパティを使用して、TextFieldの外観をカスタマイズすることができます。
TextField(
controller: _controller,
decoration: InputDecoration(
border: OutlineInputBorder(),
hintText: 'Enter your name',
),
);
TextField
ウィジェットを、ウィジェットツリーに追加します。
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
TextEditingController _controller = TextEditingController();
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Image',
home: Scaffold(
appBar: AppBar(
title: Text('TextField'),
),
body: Center(
child: TextField(
controller: _controller,
decoration: InputDecoration(
border: OutlineInputBorder(),
hintText: 'Enter your name',
),
)),
));
}
}
TextFieldの詳細
入力値の取得
TextField
の入力値を取得するには、TextEditingController
オブジェクトを使用します。このオブジェクトを作成し、TextField
のcontroller
プロパティに渡します。
TextEditingController _controller = TextEditingController();
TextField(
controller: _controller,
);
TextEditingController
オブジェクトのtext
プロパティを使用して、TextField
の入力値を取得することができます。
String _name = _controller.text;
また、入力内容をリアルタイムで取得して、別のウィジットに表示することもonChanged
関数を利用することで可能です。下記は入力フィールドに入力した内容を下段の表示用フィールドに入力内容を表示するためのサンプルコード及び、実行結果です。
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Real-Time Text Input',
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final TextEditingController _controller = TextEditingController();
String _displayText = '';
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Real-Time Text Input'),
),
body: Column(
children: [
TextField(
controller: _controller,
decoration: InputDecoration(
border: OutlineInputBorder(),
hintText: 'Enter Something',
),
onChanged: (text) {
setState(() {
_displayText = text;
});
},
),
SizedBox(height: 20),
Text(
_displayText,
style: TextStyle(fontSize: 24),
),
],
),
);
}
}
キーボードの種類を指定する
TextField
のキーボードの種類を指定するには、TextInputType
プロパティを使用します。このプロパティには、TextInputType
列挙げられるキーボードタイプは、以下の通りです。
TextInputType.text
: デフォルトのテキストキーボード。TextInputType.multiline
: 複数行のテキストを入力するためのキーボード。TextInputType.number
: 数値のみを入力するためのキーボード。TextInputType.phone
: 電話番号を入力するためのキーボード。TextInputType.datetime
: 日付と時刻を入力するためのキーボード。TextInputType.emailAddress
: メールアドレスを入力するためのキーボード。TextInputType.url
: URLを入力するためのキーボード。
TextField(
controller: _controller,
keyboardType: TextInputType.emailAddress,
decoration: InputDecoration(
border: OutlineInputBorder(),
hintText: 'Enter E-Mail Adress',
),
)
フォーマットを指定する
TextField
に入力された値のフォーマットを指定するには、inputFormatters
プロパティを使用します。このプロパティには、TextInputFormatter
オブジェクトのリストを渡します。TextInputFormatter
は、入力されたテキストに対してフォーマットを適用するために使用されます。
たとえば、以下のコードは、TextField
に入力されたテキストを、英大文字のみ許容しています。
TextField(
controller: _controller,
inputFormatters: [
FilteringTextInputFormatter.allow(RegExp('[A-Z]')),
],
decoration: InputDecoration(
border: OutlineInputBorder(),
hintText: 'INPUT NAME',
),
)
テキストの最大長を指定する
TextField
に入力できるテキストの最大長を指定するには、maxLength
プロパティを使用します。入力欄右下に入力可能な最大文字数が表示されます。
TextField(
controller: _controller,
maxLength: 10,
);
テキストの入力の有無を制御する
TextField
にテキストの入力を制御するには、enabled
プロパティを使用します。このプロパティには、true
またはfalse
を渡します。
TextField(
controller: _controller,
enabled: false,
decoration: InputDecoration(
border: OutlineInputBorder(),
hintText: 'Enter your name',
),
)
まとめ
この記事では、FlutterのTextFieldについて、基本的な使い方や詳細な機能について解説しました。TextFieldは、ユーザーがテキストを入力するための重要なウィジェットであるため、理解しておくことが重要です。FlutterのTextFieldをうまく活用して、アプリの開発を効率化しましょう。