フォームバリデーションといえば、Flutterでアプリ開発をするうえで避けては通れない機能の一つですよね。TextFormField
とvalidator
を組み合わせて手書きでルールを書くのが一般的ですが、複雑な条件が重なるとコードがゴチャつきがちです。
そんな悩みを解決してくれるのが今回紹介する「validify」というパッケージです。
validifyとは?
「validify」は、バリデーションロジックを再利用可能なルールとして管理できるFlutter用のバリデーションヘルパーパッケージです。
特徴をまとめると以下の通り:
- バリデーションロジックを関数で共通化できる
- 複数のバリデーションルールを組み合わせ可能
- 条件分岐のあるバリデーションも簡単に定義できる
FormField
やTextFormField
との相性が良い
コードの可読性・保守性を高めたい場合にとても便利です。
インストール方法
まずはpubspec.yaml
に追加します。
dependencies:
validify: ^1.0.1 # 最新バージョンはpub.devで確認
その後、flutter pub get
を実行します。
基本の使い方
たとえば、以下のようなバリデーションがあるとします:
- 空欄はNG
- メールアドレス形式である必要がある
- 文字数は最大50文字まで
これをvalidifyで定義すると以下のようになります。
import 'package:validify/validify.dart';
final emailValidator = Validator.combine([
Validators.required('メールアドレスを入力してください'),
Validators.email('正しいメールアドレスを入力してください'),
Validators.maxLength(50, '50文字以内で入力してください'),
]);
これをTextFormField
のvalidator
にそのまま渡すだけです。
TextFormField(
decoration: InputDecoration(labelText: 'メールアドレス'),
validator: emailValidator,
),
非常にスッキリ書けますし、ルールが変更になった場合も関数内だけを修正すれば済むのでメンテナンス性が高いのがポイントです。
他にも使えるバリデーション一覧
Validators
クラスには便利なルールが多数用意されています:
Validators.required(message)
Validators.email(message)
Validators.minLength(length, message)
Validators.maxLength(length, message)
Validators.match(pattern, message)
Validators.custom((value) => 条件, message)
custom
を使えば、独自のロジックも柔軟に追加できます。
実用例:パスワードと確認用パスワードの一致
final passwordValidator = Validator.combine([
Validators.required('パスワードを入力してください'),
Validators.minLength(8, '8文字以上で入力してください'),
]);
final confirmPasswordValidator = (String? value) {
if (value != passwordController.text) {
return 'パスワードが一致しません';
}
return null;
};
このように、外部の状態(他のフォーム値)と連携したバリデーションも簡単に組み込めます。
まとめ
validifyは、Flutterのフォームバリデーションをシンプルかつ柔軟に管理できる優れたパッケージです。
- 複数ルールの組み合わせが容易
- コードの可読性・再利用性が向上
- カスタムロジックにも対応
- 公式の
TextFormField
との親和性も高い
フォームのバリデーションロジックで毎回悩んでいる方、ぜひ一度導入を検討してみてください。