// Copyright 2015 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import 'package:flutter/services.dart'; import 'package:flutter/widgets.dart'; import 'input_decorator.dart'; import 'text_field.dart'; /// A [FormField] that contains a [TextField]. /// /// This is a convenience widget that simply wraps a [TextField] widget in a /// [FormField]. /// /// A [Form] ancestor is not required. The [Form] simply makes it easier to /// save, reset, or validate multiple fields at once. To use without a [Form], /// pass a [GlobalKey] to the constructor and use [GlobalKey.currentState] to /// save or reset the form field. /// /// For a documentation about the various parameters, see [TextField]. /// /// See also: /// /// * <https://material.google.com/components/text-fields.html> /// * [TextField], which is the underlying text field without the [Form] /// integration. /// * [InputDecorator], which shows the labels and other visual elements that /// surround the actual text editing widget. class TextFormField extends FormField<String> { /// Creates a [FormField] that contains a [TextField]. /// /// For documentation about the various parameters, see the [TextField] class /// and [new TextField], the constructor. TextFormField({ Key key, TextEditingController controller, FocusNode focusNode, InputDecoration decoration: const InputDecoration(), TextInputType keyboardType: TextInputType.text, TextStyle style, bool autofocus: false, bool obscureText: false, bool autocorrect: true, int maxLines: 1, FormFieldSetter<String> onSaved, FormFieldValidator<String> validator, List<TextInputFormatter> inputFormatters, }) : assert(keyboardType != null), assert(autofocus != null), assert(obscureText != null), assert(autocorrect != null), assert(maxLines == null || maxLines > 0), super( key: key, initialValue: controller != null ? controller.value.text : '', onSaved: onSaved, validator: validator, builder: (FormFieldState<String> field) { return new TextField( controller: controller, focusNode: focusNode, decoration: decoration.copyWith(errorText: field.errorText), keyboardType: keyboardType, style: style, autofocus: autofocus, obscureText: obscureText, autocorrect: autocorrect, maxLines: maxLines, onChanged: field.onChanged, inputFormatters: inputFormatters, ); }, ); }