搜尋套件、儲存庫與 APP 分類

GitHub 儲存庫nghinguyengr/flutter_reactive_form

flutter_reactive_form

處理表單輸入和驗證。

flutter_reactive_form 專案封面
星標
0
分支
0
最近推送(UTC)
2025年1月17日
專案狀態
未封存

原始 README

以下為英文專案原文快照,最新內容請造訪 GitHub。

Minimum Requirements

  • Dart SDK: >=2.18.6 <4.0.0
  • Flutter: >=1.17.0

Installation and Usage

Once you're familiar with Flutter you may install this package adding flutter_reactive_form to the dependencies list of the pubspec.yaml file as follow:

dependencies:
  flutter:
    sdk: flutter

  flutter_reactive_form: ^0.0.1

Then run the command flutter packages get on the console.

Creating a form

A form is composed by multiple field controls.

To declare a form with the fields name and birthday is as simple as:

  • name have a default value.
  • birthday is null by default.
final form = ReactiveForm(
    onChanged: (formData, fieldChanged) {
        /// Handle the change.
    },
    formGroup:{
        "name": FormFieldControl<String>(
          fieldEnum: "name",
          name: "Name",
          isRequired: true,
          isEnabled: true,
          data: "Nghi",
        ),
        "birthday": FormFieldControl<DateTime?>(
          fieldEnum: "birthday",
          name: "Birthday",
          isRequired: true,
          isEnabled: true,
          data: null,
        ),
    },
);

How to get/set Form's data

You can get the value of a field:

String get name => _reactiveForm.getFieldData<String>(fieldEnum: 'name');
DateTime? get birthday => _reactiveForm.getFieldData<DateTime>(fieldEnum: 'birthday');

To set value to fields:

_reactiveForm.setFieldData(fieldEnum: 'name', data: "Kate");

Validations

Set up your validations as follows:

_reactiveForm.setFormatValidationMap({
    'birthday': (birthday) {
      if (birthday == null || birthday.isAfter(DateTime.now())) {
         return "The time is invalid";
       }
       return '';
    },  
});

To validate a field:

final fieldControl = _reactiveForm.getField(fieldEnum: 'name');
final error = _reactiveForm.validateFormatField(fieldControl!);

To validate a form:

final errors = _reactiveForm.validateFormatFields();

Using mixin

There're available functions in ReactiveFormMixin that interface with the form internally:

class ProfileFormController with ReactiveFormMixin {
  /// You can call it in state.initState()
  void init() {
    final form = ReactiveForm(
      onChanged: (formData, fieldChanged) {
        /// Handle the change.
      },
      formGroup: {
        "name": FormFieldControl<String>(
          fieldEnum: "name",
          name: "Name",
          isRequired: true,
          isEnabled: true,
          data: "Nghi",
        ),
        "birthday": FormFieldControl<DateTime?>(
          fieldEnum: "birthday",
          name: "Birthday",
          isRequired: true,
          isEnabled: true,
          data: null,
        ),
      },
    );
    initForm(form);
    setFormatValidationMap({
      'birthday': (birthday) {
        if (birthday == null || birthday.isAfter(DateTime.now())) {
          return "The time is invalid";
        }
        return '';
      },
    });
  }

  /// Interact with UI
  String? getName() {
    return getFieldData<String>(fieldEnum: 'name');
  }

  DateTime? getBirthday() {
    return getFieldData<DateTime>(fieldEnum: 'birthday')!;
  }

  void setName(String name) {
    setFieldData(fieldEnum: 'name', data: name);
  }

  void setBirthday(DateTime birthday) {
    setFieldData(fieldEnum: 'birthday', data: birthday);
  }
  ///
}
nghinguyen.gr GitHub avatar
GitHub 作者

nghinguyen.gr ↗

語言C++CMakeDartSwiftCHTMLKotlinObjective-C

如何選擇適合專案的儲存庫?

先依使用情境篩選,再比較專案活躍情況,最後到原始儲存庫確認使用要求。

  1. 透過儲存庫名稱、作者或描述搜尋,再依技術分類縮小範圍。
  2. 綜合星標、分支與最近推送比較專案;星標反映社群關注,不保證品質。
  3. 使用前在 GitHub 確認 README、授權條款與 Issues。

來源與維護

“A repository is the most basic element of GitHub.”

GitHub Docs — About repositories ↗