Simple form maker for Flutter Framework

Overview

Buy me a coffee

Flutter FormBuilder - flutter_form_builder

This package helps in creation of data collection forms in Flutter by removing the boilerplate needed to build a form, validate fields, react to changes, and collect final user input.

Pub Version GitHub Workflow Status Codecov CodeFactor Grade

GitHub OSS Lifecycle Gitter

Simple Usage

To use this plugin, add flutter_form_builder as a dependency in your pubspec.yaml file.

Flutter Version Guide

  • Flutter 1.20 => v4.*
  • Flutter 2.* with no null-safety => v5.*
  • Flutter 2.* null-safety => v6.* - some dependencies (and therefore fields)* were removed to achieve null safety

New Video Tutorial

Youtube Video Tutorial
Check out the video tutorial from SyntacOps on Youtube

Example

final _formKey = GlobalKey<FormBuilderState>();

@override
Widget build(BuildContext context) {
  return Column(
    children: <Widget>[
      FormBuilder(
        key: _formKey,
        autovalidate: true,
        child: Column(
          children: <Widget>[
            FormBuilderFilterChip(
              name: 'filter_chip',
              decoration: InputDecoration(
                labelText: 'Select many options',
              ),
              options: [
                FormBuilderFieldOption(
                    value: 'Test', child: Text('Test')),
                FormBuilderFieldOption(
                    value: 'Test 1', child: Text('Test 1')),
                FormBuilderFieldOption(
                    value: 'Test 2', child: Text('Test 2')),
                FormBuilderFieldOption(
                    value: 'Test 3', child: Text('Test 3')),
                FormBuilderFieldOption(
                    value: 'Test 4', child: Text('Test 4')),
              ],
            ),
            FormBuilderChoiceChip(
              name: 'choice_chip',
              decoration: InputDecoration(
                labelText: 'Select an option',
              ),
              options: [
                FormBuilderFieldOption(
                    value: 'Test', child: Text('Test')),
                FormBuilderFieldOption(
                    value: 'Test 1', child: Text('Test 1')),
                FormBuilderFieldOption(
                    value: 'Test 2', child: Text('Test 2')),
                FormBuilderFieldOption(
                    value: 'Test 3', child: Text('Test 3')),
                FormBuilderFieldOption(
                    value: 'Test 4', child: Text('Test 4')),
              ],
            ),
            FormBuilderColorPickerField(
              name: 'color_picker',
              // initialValue: Colors.yellow,
              colorPickerType: ColorPickerType.MaterialPicker,
              decoration: InputDecoration(labelText: 'Pick Color'),
            ),
            FormBuilderChipsInput(
              decoration: InputDecoration(labelText: 'Chips'),
              name: 'chips_test',
              onChanged: _onChanged,
              initialValue: [
                Contact('Andrew', '[email protected]',
                    'https://d2gg9evh47fn9z.cloudfront.net/800px_COLOURBOX4057996.jpg'),
              ],
              maxChips: 5,
              findSuggestions: (String query) {
                if (query.isNotEmpty) {
                  var lowercaseQuery = query.toLowerCase();
                  return contacts.where((profile) {
                    return profile.name
                            .toLowerCase()
                            .contains(query.toLowerCase()) ||
                        profile.email
                            .toLowerCase()
                            .contains(query.toLowerCase());
                  }).toList(growable: false)
                    ..sort((a, b) => a.name
                        .toLowerCase()
                        .indexOf(lowercaseQuery)
                        .compareTo(b.name
                            .toLowerCase()
                            .indexOf(lowercaseQuery)));
                } else {
                  return const <Contact>[];
                }
              },
              chipBuilder: (context, state, profile) {
                return InputChip(
                  key: ObjectKey(profile),
                  label: Text(profile.name),
                  avatar: CircleAvatar(
                    backgroundImage: NetworkImage(profile.imageUrl),
                  ),
                  onDeleted: () => state.deleteChip(profile),
                  materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
                );
              },
              suggestionBuilder: (context, state, profile) {
                return ListTile(
                  key: ObjectKey(profile),
                  leading: CircleAvatar(
                    backgroundImage: NetworkImage(profile.imageUrl),
                  ),
                  title: Text(profile.name),
                  subtitle: Text(profile.email),
                  onTap: () => state.selectSuggestion(profile),
                );
              },
            ),
            FormBuilderDateTimePicker(
              name: 'date',
              // onChanged: _onChanged,
              inputType: InputType.time,
              decoration: InputDecoration(
                labelText: 'Appointment Time',
              ),
              initialTime: TimeOfDay(hour: 8, minute: 0),
              // initialValue: DateTime.now(),
              // enabled: true,
            ),
            FormBuilderDateRangePicker(
              name: 'date_range',
              firstDate: DateTime(1970),
              lastDate: DateTime(2030),
              format: DateFormat('yyyy-MM-dd'),
              onChanged: _onChanged,
              decoration: InputDecoration(
                labelText: 'Date Range',
                helperText: 'Helper text',
                hintText: 'Hint text',
              ),
            ),
            FormBuilderSlider(
              name: 'slider',
              validator: FormBuilderValidators.compose([
                FormBuilderValidators.min(context, 6),
              ]),
              onChanged: _onChanged,
              min: 0.0,
              max: 10.0,
              initialValue: 7.0,
              divisions: 20,
              activeColor: Colors.red,
              inactiveColor: Colors.pink[100],
              decoration: InputDecoration(
                labelText: 'Number of things',
              ),
            ),
            FormBuilderCheckbox(
              name: 'accept_terms',
              initialValue: false,
              onChanged: _onChanged,
              title: RichText(
                text: TextSpan(
                  children: [
                    TextSpan(
                      text: 'I have read and agree to the ',
                      style: TextStyle(color: Colors.black),
                    ),
                    TextSpan(
                      text: 'Terms and Conditions',
                      style: TextStyle(color: Colors.blue),
                    ),
                  ],
                ),
              ),
              validator: FormBuilderValidators.equal(
                context,
                true,
                errorText:
                    'You must accept terms and conditions to continue',
              ),
            ),
            FormBuilderTextField(
              name: 'age',
              decoration: InputDecoration(
                labelText:
                    'This value is passed along to the [Text.maxLines] attribute of the [Text] widget used to display the hint text.',
              ),
              onChanged: _onChanged,
              // valueTransformer: (text) => num.tryParse(text),
              validator: FormBuilderValidators.compose([
                FormBuilderValidators.required(context),
                FormBuilderValidators.numeric(context),
                FormBuilderValidators.max(context, 70),
              ]),
              keyboardType: TextInputType.number,
            ),
            FormBuilderDropdown(
              name: 'gender',
              decoration: InputDecoration(
                labelText: 'Gender',
              ),
              // initialValue: 'Male',
              allowClear: true,
              hint: Text('Select Gender'),
              validator: FormBuilderValidators.compose(
                  [FormBuilderValidators.required(context)]),
              items: genderOptions
                  .map((gender) => DropdownMenuItem(
                        value: gender,
                        child: Text('$gender'),
                      ))
                  .toList(),
            ),
            FormBuilderTypeAhead(
              decoration: InputDecoration(
                labelText: 'Country',
              ),
              name: 'country',
              onChanged: _onChanged,
              itemBuilder: (context, country) {
                return ListTile(
                  title: Text(country),
                );
              },
              controller: TextEditingController(text: ''),
              initialValue: 'Uganda',
              suggestionsCallback: (query) {
                if (query.isNotEmpty) {
                  var lowercaseQuery = query.toLowerCase();
                  return allCountries.where((country) {
                    return country.toLowerCase().contains(lowercaseQuery);
                  }).toList(growable: false)
                    ..sort((a, b) => a
                        .toLowerCase()
                        .indexOf(lowercaseQuery)
                        .compareTo(
                            b.toLowerCase().indexOf(lowercaseQuery)));
                } else {
                  return allCountries;
                }
              },
            ),
            FormBuilderRadioList(
              decoration:
                  InputDecoration(labelText: 'My chosen language'),
              name: 'best_language',
              onChanged: _onChanged,
              validator: FormBuilderValidators.compose(
                  [FormBuilderValidators.required(context)]),
              options: ['Dart', 'Kotlin', 'Java', 'Swift', 'Objective-C']
                  .map((lang) => FormBuilderFieldOption(
                        value: lang,
                        child: Text('$lang'),
                      ))
                  .toList(growable: false),
            ),
            FormBuilderTouchSpin(
              decoration: InputDecoration(labelText: 'Stepper'),
              name: 'stepper',
              initialValue: 10,
              step: 1,
              iconSize: 48.0,
              addIcon: Icon(Icons.arrow_right),
              subtractIcon: Icon(Icons.arrow_left),
            ),
            FormBuilderRating(
              decoration: InputDecoration(labelText: 'Rate this form'),
              name: 'rate',
              iconSize: 32.0,
              initialValue: 1.0,
              max: 5.0,
              onChanged: _onChanged,
            ),
          ],
        ),
      ),
      Row(
        children: <Widget>[
          Expanded(
            child: MaterialButton(
              color: Theme.of(context).accentColor,
              child: Text(
                "Submit",
                style: TextStyle(color: Colors.white),
              ),
              onPressed: () {
                _formKey.currentState.save();
                if (_formKey.currentState.validate()) {
                  print(_formKey.currentState.value);
                } else {
                  print("validation failed");
                }
              },
            ),
          ),
          SizedBox(width: 20),
          Expanded(
            child: MaterialButton(
              color: Theme.of(context).accentColor,
              child: Text(
                "Reset",
                style: TextStyle(color: Colors.white),
              ),
              onPressed: () {
                _formKey.currentState.reset();
              },
            ),
          ),
        ],
      )
    ],
  );
}

l10n

Just add the FormBuilderLocalizations.delegate in the list of your app's localizationsDelegates

  return MaterialApp(
      supportedLocales: [
        Locale('en'),
        Locale('it'),
        Locale('fr'),
        Locale('es'),
      ],
      localizationsDelegates: [
        FormBuilderLocalizations.delegate,
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
      ],

Input widgets

The currently supported fields include:

  • FormBuilderCheckbox - Single Checkbox field
  • FormBuilderCheckboxList - List of Checkboxes for multiple selection
  • FormBuilderChipsInput - Takes a list of Chips as input and suggests more options on typing
  • FormBuilderChoiceChip - Creates a chip that acts like a radio button.
  • FormBuilderColorPicker - For Color input selection
  • FormBuilderDateRangePicker - For selection of a range of dates
  • FormBuilderDateTimePicker - For Date, Time and DateTime input
  • FormBuilderDropdown - Used to select one value from a list as a Dropdown
  • FormBuilderFilterChip - Creates a chip that acts like a checkbox.
  • FormBuilderRadioGroup - Used to select one value from a list of Radio Widgets
  • FormBuilderRangeSlider - Used to select a range from a range of values
  • FormBuilderRating - For selection of a numerical value as a rating
  • FormBuilderSearchableDropdown - Field for selecting value(s) from a searchable list
  • FormBuilderSegmentedControl - For selection of a value from the CupertinoSegmentedControl as an input
  • FormBuilderSignaturePad - Field with drawing pad on which user can doodle
  • FormBuilderSlider - For selection of a numerical value on a slider
  • FormBuilderSwitch - On/Off switch field
  • FormBuilderTextField - A Material Design text field input.
  • FormBuilderTouchSpin - Selection of a number by tapping on a plus or minus icon
  • FormBuilderTypeAhead - Auto-completes user input from a list of items

In order to create an input field in the form, along with the label, and any applicable validation, there are several attributes that are supported by all types of inputs namely:

Attribute Type Default Required Description
name String Yes This will form the key in the form value Map
initialValue T null No The initial value of the input field
enabled bool true No Determines whether the field widget will accept user input.
decoration InputDecoration InputDecoration() No Defines the border, labels, icons, and styles used to decorate the field.
validator FormFieldValidator<T> null No A FormFieldValidator that will check the validity of value in the FormField
onChanged ValueChanged<T> null No This event function will fire immediately the the field value changes
valueTransformer ValueTransformer<T> null No Function that transforms field value before saving to form value. e.g. transform TextField value for numeric field from String to num
The rest of the attributes will be determined by the type of Widget being used.

Additional input fields

To make this package compartible with as many platforms as Flutter supports, we separated some input fields into their own packages because they depend on platform-specific plugins. Here's are the links to some of the packages that could be used with FormBuilder

Building your own custom field

To build your own field within a FormBuilder, we use FormBuilderField which will require that you define your own field.

var options = ["Option 1", "Option 2", "Option 3"];
FormBuilderField(
  name: "name",
  validator: FormBuilderValidators.compose([
    FormBuilderValidators.required(context),
  ]),
  builder: (FormFieldState<dynamic> field) {
    return InputDecorator(
      decoration: InputDecoration(
        labelText: "Select option",
        contentPadding:
            EdgeInsets.only(top: 10.0, bottom: 0.0),
        border: InputBorder.none,
        errorText: field.errorText,
      ),
      child: Container(
        height: 200,
        child: CupertinoPicker(
          itemExtent: 30,
          children: options.map((c) => Text(c)).toList(),
          onSelectedItemChanged: (index) {
            field.didChange(options[index]);
          },
        ),
      ),
    );
  },
),

Programmatically changing field value

You can either change the value of one field at a time like so:

_formKey.currentState.fields['color_picker'].didChange(Colors.black);

Or multiple fields value like so:

_formKey.currentState.patchValue({
  'age': '50',
  'slider': 6.7,
  'filter_chip': ['Test 1'],
  'choice_chip': 'Test 2',
  'rate': 4,
  'chips_test': [
    Contact('Andrew', '[email protected]', 'https://d2gg9evh47fn9z.cloudfront.net/800px_COLOURBOX4057996.jpg'),
  ],
});

Validation

The validator attribute in fields take in a FormFieldValidator which checks the validity of the field. A FormFieldValidator returns null if validation is successful and a String for the errorText if validation fails.

Built-in Validators

This package comes with several most common FormFieldValidators such as required, numeric, mail, URL, min, max, minLength, maxLength, IP, credit card etc. with default errorText.

Available built-in validators include:

  • FormBuilderValidators.creditCard() - requires the field's value to be a valid credit card number.
  • FormBuilderValidators.date() - requires the field's value to be a valid date string.
  • FormBuilderValidators.email() - requires the field's value to be a valid email address.
  • FormBuilderValidators.equal() - requires the field's value be equal to provided object.
  • FormBuilderValidators.integer() - requires the field's value to be an integer.
  • FormBuilderValidators.ip() - requires the field's value to be a valid IP address.
  • FormBuilderValidators.match() - requires the field's value to match the provided regex pattern.
  • FormBuilderValidators.max() - requires the field's value to be less than or equal to the provided number.
  • FormBuilderValidators.maxLength() - requires the length of the field's value to be less than or equal to the provided maximum length.
  • FormBuilderValidators.min() - requires the field's value to be greater than or equal to the provided number.
  • FormBuilderValidators.minLength() - requires the length of the field's value to be greater than or equal to the provided minimum length.
  • FormBuilderValidators.numeric() - requires the field's value to be a valid number.
  • FormBuilderValidators.required() - requires the field have a non-empty value.
  • FormBuilderValidators.url() - requires the field's value to be a valid url.

Using multiple validators

FormBuilderValidators class comes with a very useful static function named compose() which takes any number of FormFieldValidator functions. On validation each validator is run and if any returns a non-null value (i.e. a String), validation fails and the errorText for the field is set as the returned string.

Validation example:

FormBuilderTextField(
  name: 'age',
  decoration: InputDecoration(labelText: 'Age'),
  validator: FormBuilderValidators.compose([
    FormBuilderValidators.numeric(context, errorText: 'La edad debe ser numérica.'),
    FormBuilderValidators.max(context, 70),
    (val){
      if(val < 0)
        return 'We cannot have a negative age';
      return null;
    }
  ]),
),

Programmatically inducing an error

Declare a variable to hold your error:

String _emailError;

Use the variable as the errorText within InputDecoration

FormBuilderTextField(
  name: 'email',
  decoration: InputDecoration(
    labelText: 'Email',
    errorText: _emailError,
  ),
  validator: FormBuilderValidators.compose([
      FormBuilderValidators.required(context),
      FormBuilderValidators.email(context),
  ]),
),

Set the error text

RaisedButton(
  child: Text('Submit'),
  onPressed: () async {
    setState(() => _emailError = null);
    if(checkIfEmailExists()){
      setState(() => _emailError = 'Email already taken.');
    }
  },
),

Conditional validation

You can also validate a field based on the value of another field

FormBuilderRadioGroup(
  decoration: InputDecoration(labelText: 'My best language'),
  name: 'my_language',
  validator: FormBuilderValidators.required(context),
  options: [
    'Dart',
    'Kotlin',
    'Java',
    'Swift',
    'Objective-C',
    'Other'
  ]
    .map((lang) => FormBuilderFieldOption(value: lang))
    .toList(growable: false),
  ),
  FormBuilderTextField(
    name: 'specify',
    decoration:
        InputDecoration(labelText: 'If Other, please specify'),
    validator: (val) {
      if (_formKey.currentState.fields['my_language']?.value ==
              'Other' &&
          (val == null || val.isEmpty)) {
        return 'Kindly specify your language';
      }
      return null;
    },
  ),

SUPPORT

Issues and PRs

Any kind of support in the form of reporting bugs, answering questions or PRs is always appreciated.

We especially welcome efforts to internationalize/localize the package by translating the default validation errorText strings.

Localizing messages

  1. With the app’s root directory as the current directory, generate l10n/intl_messages.arb from lib/localization/form_builder_localizations.dart:

    flutter pub pub run intl_translation:extract_to_arb --output-dir=lib/l10n lib/localization/form_builder_localizations.dart

  2. The intl_messages.arb file is a JSON format map with one entry for each Intl.message() function defined in lib/localization/form_builder_localizations.dart. This file serves as a template for the different translations (for example intl_en.arb and intl_es.arb are English and Spanish translations respectively). You are therefore you are required to copy the intl_messages.arb and put the content in a new file with the name of your locale with a name with format intl_<locale>.arb (e.g. intl_fr.arb for French Translations).

  3. Translate the messages in the new file to the required language.

  4. With the app’s root directory as the current directory, generate intl_messages_<locale>.dart for your intl_<locale>.arb file and update intl_messages_all.dart, which imports all of the messages files:

flutter pub run intl_translation:generate_from_arb --output-dir=lib/l10n --no-use-deferred-loading lib/localization/form_builder_localizations.dart lib/l10n/intl_<en>.arb lib/l10n/intl_messages.arb

e.g. To generate for French run: flutter pub run intl_translation:generate_from_arb --output-dir=lib/l10n --no-use-deferred-loading lib/localization/form_builder_localizations.dart lib/l10n/intl_fr.arb lib/l10n/intl_messages.arb

  • Alternatively you could run the following command to generate Dart translation files for all the intl_<locale>.arb files in the l10n/ directory:

flutter pub pub run intl_translation:generate_from_arb --output-dir=lib/l10n --no-use-deferred-loading lib/localization/form_builder_localizations.dart lib/l10n/intl_*.arb

  1. Include your new language to FormBuilderLocalization's supported languages. Go to lib/localization/form_builder_localizations.dart and include the language like so:

@override
  bool isSupported(Locale locale) {
    return ['en', 'es', 'fr'].contains(locale.languageCode);
  }

  1. Submit your PR and be of help to millions of people all over the world!

Coffee :-)

If this package was helpful to you in delivering your project or you just wanna to support this package, a cup of coffee would be highly appreciated ;-)

Buy me a coffee

CREDITS

Contributors

Made with contributors-img.

Comments
  • Error: Type 'RangeSemanticFormatterCallback' not found.

    Error: Type 'RangeSemanticFormatterCallback' not found.

    The package is not usable, I am getting this error

    class DatePickerTheme with DiagnosticableMixin {
                               ^^^^^^^^^^^^^^^^^^^
    ../../.pub-cache/hosted/pub.dartlang.org/flutter_datetime_picker-1.3.8/lib/src/datetime_picker_theme.dart:6:7: Error: The type 'DiagnosticableMixin' can't be mixed in.
    class DatePickerTheme with DiagnosticableMixin {
          ^
    ../../.pub-cache/hosted/pub.dartlang.org/flutter_chips_input-1.8.3/lib/src/chips_input.dart:88:7: Error: The non-abstract class 'ChipsInputState' is missing implementations for these members:
     - TextInputClient.currentAutofillScope
    Try to either
     - provide an implementation,
     - inherit an implementation from a superclass or mixin,
     - mark the class as abstract, or
     - provide a 'noSuchMethod' implementation.
    
    class ChipsInputState<T> extends State<ChipsInput<T>>
          ^^^^^^^^^^^^^^^
    ../../development/flutter/packages/flutter/lib/src/services/text_input.dart:801:21: Context: 'TextInputClient.currentAutofillScope' is defined here.
      AutofillScope get currentAutofillScope;
                        ^^^^^^^^^^^^^^^^^^^^
    ../../.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-4.0.0-alpha.8/lib/src/fields/form_builder_range_slider.dart:15:9: Error: 'RangeSemanticFormatterCallback' isn't a type.
      final RangeSemanticFormatterCallback semanticFormatterCallback;
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
    bug 
    opened by carlomigueldy 36
  • After upgraded to the lastest version, I got this...

    After upgraded to the lastest version, I got this...

    Compiler message: /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.13.0/lib/src/fields/form_builder_checkbox.dart:28:9: Error: Type 'MouseCursor' not found. final MouseCursor mouseCursor; ^^^^^^^^^^^ /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.13.0/lib/src/fields/form_builder_date_time_picker.dart:151:9: Error: Type 'TimePickerEntryMode' not found. final TimePickerEntryMode timePickerInitialEntryMode; ^^^^^^^^^^^^^^^^^^^ /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.13.0/lib/src/fields/form_builder_slider.dart:36:9: Error: Type 'MouseCursor' not found. final MouseCursor mouseCursor; ^^^^^^^^^^^ /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.13.0/lib/src/fields/form_builder_switch.dart:67:9: Error: Type 'MouseCursor' not found. final MouseCursor mouseCursor; ^^^^^^^^^^^ /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_chips_input-1.9.0/lib/src/chips_input.dart:393:3: Error: Type 'AutofillScope' not found. AutofillScope get currentAutofillScope => null; ^^^^^^^^^^^^^ /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.13.0/lib/src/fields/form_builder_checkbox.dart:28:9: Error: 'MouseCursor' isn't a type. final MouseCursor mouseCursor; ^^^^^^^^^^^ /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.13.0/lib/src/fields/form_builder_checkbox.dart:101:7: Error: No named parameter with the name 'mouseCursor'. mouseCursor: widget.mouseCursor, ^^^^^^^^^^^ /C:/src/flutter/packages/flutter/lib/src/material/checkbox.dart:58:9: Context: Found this candidate, but the arguments don't match. const Checkbox({ ^^^^^^^^ /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.13.0/lib/src/fields/form_builder_date_time_picker.dart:151:9: Error: 'TimePickerEntryMode' isn't a type. final TimePickerEntryMode timePickerInitialEntryMode; ^^^^^^^^^^^^^^^^^^^ /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.13.0/lib/src/fields/form_builder_date_time_picker.dart:400:9: Error: No named parameter with the name 'currentDate'. currentDate: widget.currentDate, ^^^^^^^^^^^ /C:/src/flutter/packages/flutter/lib/src/material/pickers/date_picker_dialog.dart:91:18: Context: Found this candidate, but the arguments don't match. Future showDatePicker({ ^^^^^^^^^^^^^^ /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.13.0/lib/src/fields/form_builder_date_time_picker.dart:433:9: Error: No named parameter with the name 'initialEntryMode'. initialEntryMode: widget.timePickerInitialEntryMode, ^^^^^^^^^^^^^^^^ /C:/src/flutter/packages/flutter/lib/src/material/time_picker.dart:1803:19: Context: Found this candidate, but the arguments don't match. Future showTimePicker({ ^^^^^^^^^^^^^^ /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.13.0/lib/src/fields/form_builder_slider.dart:36:9: Error: 'MouseCursor' isn't a type. final MouseCursor mouseCursor; ^^^^^^^^^^^ /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.13.0/lib/src/fields/form_builder_slider.dart:138:19: Error: No named parameter with the name 'focusNode'. focusNode: widget.focusNode, ^^^^^^^^^ /C:/src/flutter/packages/flutter/lib/src/material/slider.dart:114:9: Context: Found this candidate, but the arguments don't match. const Slider({ ^^^^^^ /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.13.0/lib/src/fields/form_builder_switch.dart:67:9: Error: 'MouseCursor' isn't a type. final MouseCursor mouseCursor; ^^^^^^^^^^^ /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.13.0/lib/src/fields/form_builder_switch.dart:179:17: Error: No named parameter with the name 'mouseCursor'. mouseCursor: widget.mouseCursor, ^^^^^^^^^^^ /C:/src/flutter/packages/flutter/lib/src/material/switch.dart:65:9: Context: Found this candidate, but the arguments don't match. const Switch({ ^^^^^^ /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.13.0/lib/src/fields/form_builder_text_field.dart:199:7: Error: No named parameter with the name 'autofillHints'. autofillHints: widget.autofillHints, ^^^^^^^^^^^^^ /C:/src/flutter/packages/flutter/lib/src/material/text_form_field.dart:131:3: Context: Found this candidate, but the arguments don't match. TextFormField({ ^^^^^^^^^^^^^

    Compiler message: /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.13.0/lib/src/fields/form_builder_checkbox.dart:28:9: Error: Type 'MouseCursor' not found. final MouseCursor mouseCursor; ^^^^^^^^^^^ /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.13.0/lib/src/fields/form_builder_date_time_picker.dart:151:9: Error: Type 'TimePickerEntryMode' not found. final TimePickerEntryMode timePickerInitialEntryMode; ^^^^^^^^^^^^^^^^^^^ /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.13.0/lib/src/fields/form_builder_slider.dart:36:9: Error: Type 'MouseCursor' not found. final MouseCursor mouseCursor; ^^^^^^^^^^^ /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.13.0/lib/src/fields/form_builder_switch.dart:67:9: Error: Type 'MouseCursor' not found. final MouseCursor mouseCursor; ^^^^^^^^^^^ /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_chips_input-1.9.0/lib/src/chips_input.dart:393:3: Error: Type 'AutofillScope' not found. AutofillScope get currentAutofillScope => null; ^^^^^^^^^^^^^ /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.13.0/lib/src/fields/form_builder_checkbox.dart:28:9: Error: 'MouseCursor' isn't a type. final MouseCursor mouseCursor; ^^^^^^^^^^^ /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.13.0/lib/src/fields/form_builder_checkbox.dart:101:7: Error: No named parameter with the name 'mouseCursor'. mouseCursor: widget.mouseCursor, ^^^^^^^^^^^ /C:/src/flutter/packages/flutter/lib/src/material/checkbox.dart:58:9: Context: Found this candidate, but the arguments don't match. const Checkbox({ ^^^^^^^^ /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.13.0/lib/src/fields/form_builder_date_time_picker.dart:151:9: Error: 'TimePickerEntryMode' isn't a type. final TimePickerEntryMode timePickerInitialEntryMode; ^^^^^^^^^^^^^^^^^^^ /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.13.0/lib/src/fields/form_builder_date_time_picker.dart:400:9: Error: No named parameter with the name 'currentDate'. currentDate: widget.currentDate, ^^^^^^^^^^^ /C:/src/flutter/packages/flutter/lib/src/material/pickers/date_picker_dialog.dart:91:18: Context: Found this candidate, but the arguments don't match. Future showDatePicker({ ^^^^^^^^^^^^^^ /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.13.0/lib/src/fields/form_builder_date_time_picker.dart:433:9: Error: No named parameter with the name 'initialEntryMode'. initialEntryMode: widget.timePickerInitialEntryMode, ^^^^^^^^^^^^^^^^ /C:/src/flutter/packages/flutter/lib/src/material/time_picker.dart:1803:19: Context: Found this candidate, but the arguments don't match. Future showTimePicker({ ^^^^^^^^^^^^^^ /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.13.0/lib/src/fields/form_builder_slider.dart:36:9: Error: 'MouseCursor' isn't a type. final MouseCursor mouseCursor; ^^^^^^^^^^^ /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.13.0/lib/src/fields/form_builder_slider.dart:138:19: Error: No named parameter with the name 'focusNode'. focusNode: widget.focusNode, ^^^^^^^^^ /C:/src/flutter/packages/flutter/lib/src/material/slider.dart:114:9: Context: Found this candidate, but the arguments don't match. const Slider({ ^^^^^^ /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.13.0/lib/src/fields/form_builder_switch.dart:67:9: Error: 'MouseCursor' isn't a type. final MouseCursor mouseCursor; ^^^^^^^^^^^ /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.13.0/lib/src/fields/form_builder_switch.dart:179:17: Error: No named parameter with the name 'mouseCursor'. mouseCursor: widget.mouseCursor, ^^^^^^^^^^^ /C:/src/flutter/packages/flutter/lib/src/material/switch.dart:65:9: Context: Found this candidate, but the arguments don't match. const Switch({ ^^^^^^ /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.13.0/lib/src/fields/form_builder_text_field.dart:199:7: Error: No named parameter with the name 'autofillHints'. autofillHints: widget.autofillHints, ^^^^^^^^^^^^^ /C:/src/flutter/packages/flutter/lib/src/material/text_form_field.dart:131:3: Context: Found this candidate, but the arguments don't match. TextFormField({ ^^^^^^^^^^^^^ Target kernel_snapshot failed: Exception: Errors during snapshot creation: null build failed.

    bug 
    opened by pulstar 18
  • FormBuilderRadio vs FormBuilderRadioGroup

    FormBuilderRadio vs FormBuilderRadioGroup

    From the README:

    FormBuilderRadio - Used to select one value from a list of Radio Widgets FormBuilderRadioGroup - Used to select one value from a list of Radio Widgets

    😕 What's the difference?

    question 
    opened by awhitford 18
  • I am getting an error on the Type Ahead when I return a List<Entity> to the suggestionsCallback

    I am getting an error on the Type Ahead when I return a List to the suggestionsCallback

    controls: [ FormBuilderInput.typeAhead( label: 'Team 1', attribute: 'team1', require: true, //value: team1name, itemBuilder: (context, team1) { return ListTile( title: Text(team1.name), ); }, suggestionsCallback: (query) async { BlocProvider.of(context).dataBloc.typeAheadQuery.add(query); return await BlocProvider.of(context) .dataBloc .typeAheadValues .last; }, ), ],

    The suggestions appear fine in the type ahead field suggestion box, but when I click on one of the items in the list I get the following error and the value does not get set to the selected value.

    flutter: ══╡ EXCEPTION CAUGHT BY GESTURE ╞═══════════════════════════════════════════════════════════════════ flutter: The following assertion was thrown while handling a gesture: flutter: type '_$Entity' is not a subtype of type 'String'

    opened by metaltigerfish 18
  • Remove field values from internal maps when unregistered

    Remove field values from internal maps when unregistered

    I had a problem within one of my projects recently where I had some dynamic fields and removing them would cause a type error when paired with an onChanged behaviour, like the one below, because their transformers would be removed from the form but not their input value. I've created an example with the bare minimum to showcase the bug below.

    Example code
    import 'package:flutter/material.dart';
    import 'package:flutter_form_builder/flutter_form_builder.dart';
    
    void main() => runApp(const MaterialApp(home: Example()));
    
    class Example extends StatefulWidget {
      const Example({Key? key}) : super(key: key);
    
      @override
      State<Example> createState() => _ExampleState();
    }
    
    class _ExampleState extends State<Example> {
      final formKey = GlobalKey<FormBuilderState>();
      bool showDynamicField = true;
    
      void onChanged() {
        final dynamicFieldValue = formKey.currentState!.instantValue['dynamic'];
    
        if (dynamicFieldValue != null) {
          final foo = Foo(dynamicFieldValue);
        }
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: FormBuilder(
            key: formKey,
            onChanged: onChanged,
            child: ListView(
              children: [
                FormBuilderChoiceChip<bool>(
                  name: 'name',
                  initialValue: true,
                  options: const [
                    FormBuilderChipOption<bool>(
                      value: true,
                      child: Text('Show dynamic field'),
                    ),
                  ],
                  onChanged: (value) => setState(() {
                    showDynamicField = value ?? false;
                  }),
                ),
                if (showDynamicField)
                  FormBuilderTextField(
                    name: 'dynamic',
                    valueTransformer: (str) => int.tryParse(str ?? 'null') ?? 0,
                  ),
              ],
            ),
          ),
        );
      }
    }
    
    class Foo {
      Foo(this.value);
      int value;
    }
    
    
    

    Connection with issue(s)

    There is no connected issue that I know of because I tried to find a solution myself.

    Testing and Review Notes

    For the bug to appear, you should follow these steps:

    1. Write an input
    2. Hide the dynamic field
    3. Show the dynamic field
    4. An error should be thrown

    Screenshots or Videos

    To Do

    • [ ] double check the original issue to confirm it is fully satisfied
    • [x] add testing notes and screenshots in PR description to help guide reviewers
    • [ ] request the "UX" team perform a design review (if/when applicable)

    Final Considerations

    In the end I didn't want to change the inherent way the package works but wanted to give options to future users and myself. That's why I approached this by adding another attribute to the FormBuilder. And it looks like the behaviour of deleting the field's value was considered at some point by the looks of the comments left on the source code.

    // Removes internal field value
    // _savedValue.remove(name);
    
    enhancement 
    opened by CaLouro 16
  • Error: No named parameter with the name 'anchorPoint'

    Error: No named parameter with the name 'anchorPoint'

    We recently updated this package as we released there were a new version.

    Now, trying to compiled the project and test it, we are getting this error:

    Running Gradle task 'assembleDebug'...
    ../../.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-7.2.0/lib/src/fields/form_builder_date_time_picker.dart:355:7: Error: No named parameter with the name 'anchorPoint'.
          anchorPoint: widget.anchorPoint,
          ^^^^^^^^^^^
    /opt/flutter/packages/flutter/lib/src/material/date_picker.dart:133:19: Context: Found this candidate, but the arguments don't match.
    Future<DateTime?> showDatePicker({
                      ^^^^^^^^^^^^^^
    ../../.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-7.2.0/lib/src/fields/form_builder_date_time_picker.dart:373:7: Error: No named parameter with the name 'anchorPoint'.
          anchorPoint: widget.anchorPoint,
          ^^^^^^^^^^^
    /opt/flutter/packages/flutter/lib/src/material/time_picker.dart:2413:20: Context: Found this candidate, but the arguments don't match.
    Future<TimeOfDay?> showTimePicker({
                       ^^^^^^^^^^^^^^
    
    
    FAILURE: Build failed with an exception.
    
    * Where:
    Script '/opt/flutter/packages/flutter_tools/gradle/flutter.gradle' line: 1102
    
    * What went wrong:
    Execution failed for task ':app:compileFlutterBuildDebug'.
    > Process 'command '/opt/flutter/bin/flutter'' finished with non-zero exit value 1
    
    * Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
    
    * Get more help at https://help.gradle.org
    
    BUILD FAILED in 50s
    Exception: Gradle task assembleDebug failed with exit code 1
    
    

    What's the problem?

    ❯ flutter doctor -v
    [✓] Flutter (Channel stable, 2.10.5, on Manjaro Linux 5.15.38-1-MANJARO, locale en_GB.UTF-8)
        • Flutter version 2.10.5 at /opt/flutter
        • Upstream repository https://github.com/flutter/flutter.git
        • Framework revision 5464c5bac7 (hace 5 semanas), 2022-04-18 09:55:37 -0700
        • Engine revision 57d3bac3dd
        • Dart version 2.16.2
        • DevTools version 2.9.2
    
    [✓] Android toolchain - develop for Android devices (Android SDK version 32.1.0-rc1)
        • Android SDK at /home/mehmeth/Android/Sdk
        • Platform android-32, build-tools 32.1.0-rc1
        • Java binary at: /opt/android-studio/jre/bin/java
        • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)
        • All Android licenses accepted.
    
    [✓] Chrome - develop for the web
        • CHROME_EXECUTABLE = /usr/bin/chromium
    
    [✓] Android Studio (version 2021.2)
        • Android Studio at /opt/android-studio
        • Flutter plugin version 67.1.2
        • Dart plugin version 212.5744
        • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)
    
    [✓] Connected device (2 available)
        • MI 9 (mobile) • da22004 • android-arm64  • Android 10 (API 29)
        • Chrome (web)  • chrome  • web-javascript • Chromium 101.0.4951.64 Manjaro Linux
    
    [✓] HTTP Host Availability
        • All required HTTP hosts are available
    
    • No issues found!
    
    
    bug package:core 
    opened by SalahAdDin 15
  • including Form builder package cause build to fail

    including Form builder package cause build to fail

    I've tried using flutter_form_builder: ^3.13.3 on flutter version 1.17.5 and build fails with many exceptions relating to flutter form builder package. I've tried removing the package and everything works fine without it. As I haven't even build the layout with the form builder widgets I'll just be including the error message below. Thanks

    flutter doctor output

    Doctor summary (to see all details, run flutter doctor -v): [√] Flutter (Channel stable, v1.17.5, on Microsoft Windows [Version 10.0.18362.959], locale en-IN)

    [√] Android toolchain - develop for Android devices (Android SDK version 29.0.3) [√] Android Studio (version 3.4) [√] VS Code (version 1.48.1) [√] Connected device (1 available)

    • No issues found!

    Flutter run --verbose output

    PS F:\Flutter\mfm_mobile> flutter run --verbose [ +22 ms] executing: [C:\flutter/] git -c log.showSignature=false log -n 1 --pretty=format:%H [ +61 ms] Exit code 0 from: git -c log.showSignature=false log -n 1 --pretty=format:%H [ ] 8af6b2f038c1172e61d418869363a28dffec3cb4 [ ] executing: [C:\flutter/] git tag --contains HEAD [ +284 ms] Exit code 0 from: git tag --contains HEAD [ +1 ms] 1.17.5 [ +10 ms] executing: [C:\flutter/] git rev-parse --abbrev-ref --symbolic @{u} [ +36 ms] Exit code 0 from: git rev-parse --abbrev-ref --symbolic @{u} [ +13 ms] origin/stable [ ] executing: [C:\flutter/] git ls-remote --get-url origin [ +32 ms] Exit code 0 from: git ls-remote --get-url origin [ ] https://github.com/flutter/flutter.git [ +308 ms] executing: [C:\flutter/] git rev-parse --abbrev-ref HEAD [ +36 ms] Exit code 0 from: git rev-parse --abbrev-ref HEAD [ ] stable [ +43 ms] Artifact Instance of 'AndroidMavenArtifacts' is not required, skipping update. [ +1 ms] Artifact Instance of 'AndroidGenSnapshotArtifacts' is not required, skipping update. [ ] Artifact Instance of 'AndroidInternalBuildArtifacts' is not required, skipping update. [ ] Artifact Instance of 'IOSEngineArtifacts' is not required, skipping update. [ ] Artifact Instance of 'FlutterWebSdk' is not required, skipping update. [ +3 ms] Artifact Instance of 'WindowsEngineArtifacts' is not required, skipping update. [ ] Artifact Instance of 'MacOSEngineArtifacts' is not required, skipping update. [ ] Artifact Instance of 'LinuxEngineArtifacts' is not required, skipping update. [ ] Artifact Instance of 'LinuxFuchsiaSDKArtifacts' is not required, skipping update. [ ] Artifact Instance of 'MacOSFuchsiaSDKArtifacts' is not required, skipping update. [ ] Artifact Instance of 'FlutterRunnerSDKArtifacts' is not required, skipping update. [ ] Artifact Instance of 'FlutterRunnerDebugSymbols' is not required, skipping update. [ +20 ms] executing: C:\Users\CH\AppData\Local\Android\Sdk\platform-tools\adb.exe devices -l [ +44 ms] List of devices attached 192.168.6.110:5555 device product:vbox86p model:Samsung_Galaxy_S10 device:vbox86p transport_id:1 [ +6 ms] C:\Users\CH\AppData\Local\Android\Sdk\platform-tools\adb.exe -s 192.168.6.110:5555 shell getprop [ +52 ms] Artifact Instance of 'AndroidMavenArtifacts' is not required, skipping update. [ +9 ms] Artifact Instance of 'AndroidInternalBuildArtifacts' is not required, skipping update. [ ] Artifact Instance of 'IOSEngineArtifacts' is not required, skipping update. [ ] Artifact Instance of 'FlutterWebSdk' is not required, skipping update. [ +2 ms] Artifact Instance of 'WindowsEngineArtifacts' is not required, skipping update. [ +1 ms] Artifact Instance of 'MacOSEngineArtifacts' is not required, skipping update. [ ] Artifact Instance of 'LinuxEngineArtifacts' is not required, skipping update. [ ] Artifact Instance of 'LinuxFuchsiaSDKArtifacts' is not required, skipping update. [ ] Artifact Instance of 'MacOSFuchsiaSDKArtifacts' is not required, skipping update. [ ] Artifact Instance of 'FlutterRunnerSDKArtifacts' is not required, skipping update. [ ] Artifact Instance of 'FlutterRunnerDebugSymbols' is not required, skipping update. [ +182 ms] Found plugin flutter_keyboard_visibility at C:\flutter\.pub-cache\hosted\pub.dartlang.org\flutter_keyboard_visibility-3.2.1\ [ +10 ms] Found plugin flutter_plugin_android_lifecycle at C:\flutter\.pub-cache\hosted\pub.dartlang.org\flutter_plugin_android_lifecycle-1.0.8\ [ +11 ms] Found plugin flutter_secure_storage at C:\flutter\.pub-cache\hosted\pub.dartlang.org\flutter_secure_storage-3.3.3\ [ +76 ms] Found plugin image_cropper at C:\flutter\.pub-cache\hosted\pub.dartlang.org\image_cropper-1.3.0\ [ +7 ms] Found plugin image_picker at C:\flutter\.pub-cache\hosted\pub.dartlang.org\image_picker-0.6.7+4\ [ +11 ms] Found plugin image_picker_for_web at C:\flutter\.pub-cache\hosted\pub.dartlang.org\image_picker_for_web-0.1.0+1\ [ +48 ms] Found plugin path_provider at C:\flutter\.pub-cache\hosted\pub.dartlang.org\path_provider-1.6.14\ [ +7 ms] Found plugin path_provider_linux at C:\flutter\.pub-cache\hosted\pub.dartlang.org\path_provider_linux-0.0.1+2\ [ +7 ms] Found plugin path_provider_macos at C:\flutter\.pub-cache\hosted\pub.dartlang.org\path_provider_macos-0.0.4+3\ [ +28 ms] Found plugin phone_number at C:\flutter\.pub-cache\hosted\pub.dartlang.org\phone_number-0.6.2+4\ [ +67 ms] Found plugin sqflite at C:\flutter\.pub-cache\hosted\pub.dartlang.org\sqflite-1.3.1\ [ +521 ms] Found plugin flutter_keyboard_visibility at C:\flutter\.pub-cache\hosted\pub.dartlang.org\flutter_keyboard_visibility-3.2.1\ [ +2 ms] Found plugin flutter_plugin_android_lifecycle at C:\flutter\.pub-cache\hosted\pub.dartlang.org\flutter_plugin_android_lifecycle-1.0.8\ [ +3 ms] Found plugin flutter_secure_storage at C:\flutter\.pub-cache\hosted\pub.dartlang.org\flutter_secure_storage-3.3.3\ [ +9 ms] Found plugin image_cropper at C:\flutter\.pub-cache\hosted\pub.dartlang.org\image_cropper-1.3.0\ [ +10 ms] Found plugin image_picker at C:\flutter\.pub-cache\hosted\pub.dartlang.org\image_picker-0.6.7+4\ [ +2 ms] Found plugin image_picker_for_web at C:\flutter\.pub-cache\hosted\pub.dartlang.org\image_picker_for_web-0.1.0+1\ [ +19 ms] Found plugin path_provider at C:\flutter\.pub-cache\hosted\pub.dartlang.org\path_provider-1.6.14\ [ +12 ms] Found plugin path_provider_linux at C:\flutter\.pub-cache\hosted\pub.dartlang.org\path_provider_linux-0.0.1+2\ [ +1 ms] Found plugin path_provider_macos at C:\flutter\.pub-cache\hosted\pub.dartlang.org\path_provider_macos-0.0.4+3\ [ +15 ms] Found plugin phone_number at C:\flutter\.pub-cache\hosted\pub.dartlang.org\phone_number-0.6.2+4\ [ +9 ms] Found plugin sqflite at C:\flutter\.pub-cache\hosted\pub.dartlang.org\sqflite-1.3.1\ [ +163 ms] Generating F:\Flutter\mfm_mobile\android\app\src\main\java\io\flutter\plugins\GeneratedPluginRegistrant.java [ +50 ms] ro.hardware = vbox86 [ +1 ms] ro.build.characteristics = nosdcard [ +43 ms] Launching lib\main.dart on Samsung Galaxy S10 in debug mode... [ +9 ms] C:\flutter\bin\cache\dart-sdk\bin\dart.exe C:\flutter\bin\cache\artifacts\engine\windows-x64\frontend_server.dart.snapshot --sdk-root C:\flutter\bin\cache\artifacts\engine\common\flutter_patched_sdk/ --incremental --target=flutter --debugger-module-names -Ddart.developer.causal_async_stacks=true --output-dill C:\Users\ADMINI~1\AppData\Local\Temp\flutter_tool.064c60dc-e464-11ea-ad3c-e0d55e4657dc\app.dill --packages F:\Flutter\mfm_mobile\.packages -Ddart.vm.profile=false -Ddart.vm.product=false --bytecode-options=source-positions,local-var-info,debugger-stops,instance-field-initializers,keep-unreachable-code,avoid-closure-call-instructions --enable-asserts --track-widget-creation --filesystem-scheme org-dartlang-root [ +40 ms] executing: C:\Users\CH\AppData\Local\Android\Sdk\platform-tools\adb.exe -s 192.168.6.110:5555 shell -x logcat -v time -t 1 [ +64 ms] Exit code 0 from: C:\Users\CH\AppData\Local\Android\Sdk\platform-tools\adb.exe -s 192.168.6.110:5555 shell -x logcat -v time -t 1[ ] --------- beginning of main 08-22 16:11:19.560 D/MDnsDS ( 282): Going to poll with pollCount 1 [ +15 ms] <- compile package:mfm_mobile/main.dart [ +10 ms] executing: C:\Users\CH\AppData\Local\Android\Sdk\platform-tools\adb.exe version [ +89 ms] Android Debug Bridge version 1.0.41 Version 30.0.1-6435776 Installed as C:\Users\CH\AppData\Local\Android\Sdk\platform-tools\adb.exe [ +5 ms] executing: C:\Users\CH\AppData\Local\Android\Sdk\platform-tools\adb.exe start-server [ +60 ms] Building APK [ +18 ms] Running Gradle task 'assembleDebug'... [ +2 ms] gradle.properties already setsandroid.enableR8` [ +40 ms] Using gradle from F:\Flutter\mfm_mobile\android\gradlew.bat. [ +4 ms] F:\Flutter\mfm_mobile\android\gradlew.bat mode: 33279 rwxrwxrwx. [ +7 ms] executing: C:\Program Files\Android\Android Studio\jre\bin\java -version [ +106 ms] Exit code 0 from: C:\Program Files\Android\Android Studio\jre\bin\java -version [ ] openjdk version "1.8.0_152-release" OpenJDK Runtime Environment (build 1.8.0_152-release-1343-b01) OpenJDK 64-Bit Server VM (build 25.152-b01, mixed mode) [ +3 ms] executing: [F:\Flutter\mfm_mobile\android/] F:\Flutter\mfm_mobile\android\gradlew.bat -Pverbose=true -Ptarget-platform=android-x86 -Ptarget=F:\Flutter\mfm_mobile\lib\main.dart -Ptrack-widget-creation=true -Pfilesystem-scheme=org-dartlang-root assembleDebug [+12704 ms] Compiler message: [ +4 ms] /C:/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.14.0-alpha.1/lib/src/fields/form_builder_checkbox.dart:28:9: Error:
    Type 'MouseCursor' not found. [ +74 ms] final MouseCursor mouseCursor; [ +1 ms] ^^^^^^^^^^^ [ +22 ms] /C:/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.14.0-alpha.1/lib/src/fields/form_builder_date_time_picker.dart:151:9: Error: Type 'TimePickerEntryMode' not found. [ +3 ms] final TimePickerEntryMode timePickerInitialEntryMode; [ +11 ms] ^^^^^^^^^^^^^^^^^^^ [ +21 ms] /C:/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.14.0-alpha.1/lib/src/fields/form_builder_slider.dart:36:9: Error: Type 'MouseCursor' not found. [ +24 ms] final MouseCursor mouseCursor; [ +1 ms] ^^^^^^^^^^^ [ +2 ms] /C:/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.14.0-alpha.1/lib/src/fields/form_builder_switch.dart:67:9: Error: Type 'MouseCursor' not found. [ +2 ms] final MouseCursor mouseCursor; [ +6 ms] ^^^^^^^^^^^ [ +1 ms] /C:/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_chips_input-1.9.1/lib/src/chips_input.dart:392:3: Error: Type 'AutofillScope' not found. [ +6 ms] AutofillScope get currentAutofillScope => null; [ +1 ms] ^^^^^^^^^^^^^ [+1728 ms] > Task :app:compileFlutterBuildDebug [ +22 ms] [ +57 ms] executing: [C:\flutter/] git -c log.showSignature=false log -n 1 --pretty=format:%H [ +11 ms] [ +140 ms] Exit code 0 from: git -c log.showSignature=false log -n 1 --pretty=format:%H [ +2 ms] [ +1 ms] 8af6b2f038c1172e61d418869363a28dffec3cb4 [ +2 ms] [ ] executing: [C:\flutter/] git tag --contains HEAD [ +1 ms] [+1146 ms] Exit code 0 from: git tag --contains HEAD [ +4 ms] [ ] 1.17.5 [ ] [ +26 ms] executing: [C:\flutter/] git rev-parse --abbrev-ref --symbolic @{u} [ +65 ms] [ +88 ms] Exit code 0 from: git rev-parse --abbrev-ref --symbolic @{u} [ ] [ ] origin/stable [ ] [ ] executing: [C:\flutter/] git ls-remote --get-url origin [ +1 ms] [ +48 ms] Exit code 0 from: git ls-remote --get-url origin [ +8 ms] [ ] https://github.com/flutter/flutter.git [ +286 ms] [ +290 ms] executing: [C:\flutter/] git rev-parse --abbrev-ref HEAD [ +101 ms] [ +32 ms] Exit code 0 from: git rev-parse --abbrev-ref HEAD [ ] [ ] stable [ ] [ +19 ms] Artifact Instance of 'AndroidMavenArtifacts' is not required, skipping update. [ +3 ms] [ ] Artifact Instance of 'AndroidGenSnapshotArtifacts' is not required, skipping update. [ +7 ms] [ ] Artifact Instance of 'AndroidInternalBuildArtifacts' is not required, skipping update. [ ] [ ] Artifact Instance of 'IOSEngineArtifacts' is not required, skipping update. [ ] [ ] Artifact Instance of 'FlutterWebSdk' is not required, skipping update. [ ] [ +3 ms] Artifact Instance of 'WindowsEngineArtifacts' is not required, skipping update. [ ] [ ] Artifact Instance of 'MacOSEngineArtifacts' is not required, skipping update. [ ] [ ] Artifact Instance of 'LinuxEngineArtifacts' is not required, skipping update. [ ] [ ] Artifact Instance of 'LinuxFuchsiaSDKArtifacts' is not required, skipping update. [ ] [ ] Artifact Instance of 'MacOSFuchsiaSDKArtifacts' is not required, skipping update. [ ] [ ] Artifact Instance of 'FlutterRunnerSDKArtifacts' is not required, skipping update. [ +2 ms] [ ] Artifact Instance of 'FlutterRunnerDebugSymbols' is not required, skipping update. [ +18 ms] [ +40 ms] Artifact Instance of 'MaterialFonts' is not required, skipping update. [ +10 ms] [ ] Artifact Instance of 'GradleWrapper' is not required, skipping update. [ +1 ms] [ ] Artifact Instance of 'AndroidMavenArtifacts' is not required, skipping update. [ ] [ ] Artifact Instance of 'AndroidGenSnapshotArtifacts' is not required, skipping update. [ +2 ms] [ ] Artifact Instance of 'AndroidInternalBuildArtifacts' is not required, skipping update. [ +11 ms] [ ] Artifact Instance of 'IOSEngineArtifacts' is not required, skipping update. [ +1 ms] [ ] Artifact Instance of 'FlutterWebSdk' is not required, skipping update. [ ] [ ] Artifact Instance of 'FlutterSdk' is not required, skipping update. [ +1 ms] [ ] Artifact Instance of 'WindowsEngineArtifacts' is not required, skipping update. [ +1 ms] [ ] Artifact Instance of 'MacOSEngineArtifacts' is not required, skipping update. [ +12 ms] [ ] Artifact Instance of 'LinuxEngineArtifacts' is not required, skipping update. [ ] [ ] Artifact Instance of 'LinuxFuchsiaSDKArtifacts' is not required, skipping update. [ +3 ms] [ ] Artifact Instance of 'MacOSFuchsiaSDKArtifacts' is not required, skipping update. [ +12 ms] [ ] Artifact Instance of 'FlutterRunnerSDKArtifacts' is not required, skipping update. [ ] [ ] Artifact Instance of 'FlutterRunnerDebugSymbols' is not required, skipping update. [ ] [ ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update. [ +1 ms] [ ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update. [ +2 ms] [ ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update. [ +12 ms] [ ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update. [ +1 ms] [ ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update. [ ] [ ] Artifact Instance of 'FontSubsetArtifacts' is not required, skipping update. [ +14 ms] [ +115 ms] Initializing file store [ +67 ms] [ +19 ms] kernel_snapshot: Starting due to {} [ +6 ms] [ +21 ms] C:\flutter\bin\cache\dart-sdk\bin\dart.exe C:\flutter\bin\cache\artifacts\engine\windows-x64\frontend_server.dart.snapshot --sdk-root C:\flutter\bin\cache\artifacts\engine\common\flutter_patched_sdk/ --target=flutter -Ddart.developer.causal_async_stacks=true -Ddart.vm.profile=false -Ddart.vm.product=false --bytecode-options=source-positions,local-var-info,debugger-stops,instance-field-initializers,keep-unreachable-code,avoid-closure-call-instructions --enable-asserts --track-widget-creation --no-link-platform --packages F:\Flutter\mfm_mobile.packages --output-dill F:\Flutter\mfm_mobile.dart_tool\flutter_build\18fbcded630b076b5622046976228ead\app.dill --depfile F:\Flutter\mfm_mobile.dart_tool\flutter_build\18fbcded630b076b5622046976228ead\kernel_snapshot.d package:mfm_mobile/main.dart [+2843 ms] /C:/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.14.0-alpha.1/lib/src/fields/form_builder_checkbox.dart:28:9: Error:
    'MouseCursor' isn't a type. [ +1 ms] final MouseCursor mouseCursor; [ +2 ms] ^^^^^^^^^^^ [ +11 ms] /C:/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.14.0-alpha.1/lib/src/fields/form_builder_checkbox.dart:101:7: Error:
    No named parameter with the name 'mouseCursor'. [ +2 ms] mouseCursor: widget.mouseCursor, [ +1 ms] ^^^^^^^^^^^ [ +13 ms] /C:/flutter/packages/flutter/lib/src/material/checkbox.dart:58:9: Context: Found this candidate, but the arguments don't match. [ +1 ms] const Checkbox({ [ +1 ms] ^^^^^^^^ [ +44 ms] /C:/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.14.0-alpha.1/lib/src/fields/form_builder_date_time_picker.dart:151:9: Error: 'TimePickerEntryMode' isn't a type. [ +1 ms] final TimePickerEntryMode timePickerInitialEntryMode; [ ] ^^^^^^^^^^^^^^^^^^^ [ +1 ms] /C:/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.14.0-alpha.1/lib/src/fields/form_builder_date_time_picker.dart:220:39: Error: Getter not found: 'TimePickerEntryMode'. [ +3 ms] this.timePickerInitialEntryMode = TimePickerEntryMode.dial, [ +10 ms] ^^^^^^^^^^^^^^^^^^^ [ +1 ms] /C:/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.14.0-alpha.1/lib/src/fields/form_builder_date_time_picker.dart:403:9: Error: No named parameter with the name 'currentDate'. [ +1 ms] currentDate: widget.currentDate, [ ] ^^^^^^^^^^^ [ +13 ms] /C:/flutter/packages/flutter/lib/src/material/pickers/date_picker_dialog.dart:91:18: Context: Found this candidate, but the arguments don't match. [ +1 ms] Future showDatePicker({ [ ] ^^^^^^^^^^^^^^ [ +1 ms] /C:/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.14.0-alpha.1/lib/src/fields/form_builder_date_time_picker.dart:436:9: Error: No named parameter with the name 'initialEntryMode'. [ +14 ms] initialEntryMode: widget.timePickerInitialEntryMode, [ +1 ms] ^^^^^^^^^^^^^^^^ [ +1 ms] /C:/flutter/packages/flutter/lib/src/material/time_picker.dart:1803:19: Context: Found this candidate, but the arguments don't match. [ +11 ms] Future showTimePicker({ [ +1 ms] ^^^^^^^^^^^^^^ [ +2 ms] /C:/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.14.0-alpha.1/lib/src/fields/form_builder_range_slider.dart:115:53:
    Error: The argument type 'String Function(double)' can't be assigned to the parameter type 'String Function(RangeValues)'.
    [ +12 ms] - 'RangeValues' is from 'package:flutter/src/material/slider_theme.dart' ('/C:/flutter/packages/flutter/lib/src/material/slider_theme.dart'). [ +1 ms] semanticFormatterCallback: widget.semanticFormatterCallback, [ ] ^ [ +1 ms] /C:/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.14.0-alpha.1/lib/src/fields/form_builder_slider.dart:36:9: Error: 'MouseCursor' isn't a type. [ +14 ms] final MouseCursor mouseCursor; [ +17 ms] ^^^^^^^^^^^ [ +15 ms] /C:/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.14.0-alpha.1/lib/src/fields/form_builder_slider.dart:138:19: Error: No named parameter with the name 'focusNode'. [ +49 ms] focusNode: widget.focusNode, [ +41 ms] ^^^^^^^^^ [ +8 ms] /C:/flutter/packages/flutter/lib/src/material/slider.dart:114:9: Context: Found this candidate, but the arguments don't match. [ +100 ms] const Slider({ [ +61 ms] ^^^^^^ [ +4 ms] /C:/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.14.0-alpha.1/lib/src/fields/form_builder_switch.dart:67:9: Error: 'MouseCursor' isn't a type. [ +1 ms] final MouseCursor mouseCursor; [ +5 ms] ^^^^^^^^^^^ [ +6 ms] /C:/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.14.0-alpha.1/lib/src/fields/form_builder_switch.dart:179:17: Error: No named parameter with the name 'mouseCursor'. [ +1 ms] mouseCursor: widget.mouseCursor, [ +1 ms] ^^^^^^^^^^^ [ ] /C:/flutter/packages/flutter/lib/src/material/switch.dart:65:9: Context: Found this candidate, but the arguments don't match.
    [ ] const Switch({ [ ] ^^^^^^ [ +9 ms] /C:/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.14.0-alpha.1/lib/src/fields/form_builder_text_field.dart:199:7: Error: No named parameter with the name 'autofillHints'. [ +1 ms] autofillHints: widget.autofillHints, [ +1 ms] ^^^^^^^^^^^^^ [ ] /C:/flutter/packages/flutter/lib/src/material/text_form_field.dart:131:3: Context: Found this candidate, but the arguments don't match. [ ] TextFormField({ [ ] ^^^^^^^^^^^^^ [+1033 ms] [+4206 ms] [ +14 ms] Compiler message: [ +1 ms] [ +1 ms] /C:/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.14.0-alpha.1/lib/src/fields/form_builder_checkbox.dart:28:9: Error:
    Type 'MouseCursor' not found. [ +1 ms] [ ] final MouseCursor mouseCursor; [ +1 ms] [ ] ^^^^^^^^^^^ [ +1 ms] [ +1 ms] /C:/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.14.0-alpha.1/lib/src/fields/form_builder_date_time_picker.dart:151:9: Error: Type 'TimePickerEntryMode' not found. [ +10 ms] [ ] final TimePickerEntryMode timePickerInitialEntryMode; [ +1 ms] [ ] ^^^^^^^^^^^^^^^^^^^ [ ] [ ] /C:/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.14.0-alpha.1/lib/src/fields/form_builder_slider.dart:36:9: Error: Type'MouseCursor' not found. [ +1 ms] [ ] final MouseCursor mouseCursor; [ ] [ ] ^^^^^^^^^^^ [ +2 ms] [ ] /C:/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.14.0-alpha.1/lib/src/fields/form_builder_switch.dart:67:9: Error: Type'MouseCursor' not found. [ +8 ms] [ ] final MouseCursor mouseCursor; [ +1 ms] [ ] ^^^^^^^^^^^ [ ] [ ] /C:/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_chips_input-1.9.1/lib/src/chips_input.dart:392:3: Error: Type
    'AutofillScope' not found. [ +1 ms] [ ] AutofillScope get currentAutofillScope => null; [ ] [ ] ^^^^^^^^^^^^^ [+4453 ms] [+4663 ms] /C:/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.14.0-alpha.1/lib/src/fields/form_builder_checkbox.dart:28:9: Error:
    'MouseCursor' isn't a type. [ +2 ms] [ ] final MouseCursor mouseCursor; [ +3 ms] [ ] ^^^^^^^^^^^ [ +7 ms] [ +2 ms] /C:/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.14.0-alpha.1/lib/src/fields/form_builder_checkbox.dart:101:7: Error:
    No named parameter with the name 'mouseCursor'. [ +1 ms] [ ] mouseCursor: widget.mouseCursor, [ +8 ms] [ ] ^^^^^^^^^^^ [ ] [ ] /C:/flutter/packages/flutter/lib/src/material/checkbox.dart:58:9: Context: Found this candidate, but the arguments
    don't match. [ +1 ms] [ ] const Checkbox({ [ ] [ ] ^^^^^^^^ [ ] [ +29 ms] /C:/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.14.0-alpha.1/lib/src/fields/form_builder_date_time_picker.dart:151:9: Error: 'TimePickerEntryMode' isn't a type. [ +1 ms] [ ] final TimePickerEntryMode timePickerInitialEntryMode; [ ] [ ] ^^^^^^^^^^^^^^^^^^^ [ ] [ +1 ms] /C:/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.14.0-alpha.1/lib/src/fields/form_builder_date_time_picker.dart:220:39:Error: Getter not found: 'TimePickerEntryMode'. [ +1 ms] [ ] this.timePickerInitialEntryMode = TimePickerEntryMode.dial, [ +10 ms] [ ] ^^^^^^^^^^^^^^^^^^^ [ ] [ +4 ms] /C:/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.14.0-alpha.1/lib/src/fields/form_builder_date_time_picker.dart:403:9: Error: No named parameter with the name 'currentDate'. [ +1 ms] [ ] currentDate: widget.currentDate, [ ] [ ] ^^^^^^^^^^^ [ ] [ ] /C:/flutter/packages/flutter/lib/src/material/pickers/date_picker_dialog.dart:91:18: Context: Found this candidate,
    but the arguments don't match. [ +1 ms] [ ] Future showDatePicker({ [ ] [ ] ^^^^^^^^^^^^^^ [ +4 ms] [ ] /C:/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.14.0-alpha.1/lib/src/fields/form_builder_date_time_picker.dart:436:9: Error: No named parameter with the name 'initialEntryMode'. [ +10 ms] [ ] initialEntryMode: widget.timePickerInitialEntryMode, [ +1 ms] [ ] ^^^^^^^^^^^^^^^^ [ +12 ms] [ ] /C:/flutter/packages/flutter/lib/src/material/time_picker.dart:1803:19: Context: Found this candidate, but the arguments don't match. [ +1 ms] [ ] Future showTimePicker({ [ +1 ms] [ ] ^^^^^^^^^^^^^^ [ ] [ +24 ms] /C:/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.14.0-alpha.1/lib/src/fields/form_builder_range_slider.dart:115:53:
    Error: The argument type 'String Function(double)' can't be assigned to the parameter type 'String Function(RangeValues)'. [ +3 ms] [ ] - 'RangeValues' is from 'package:flutter/src/material/slider_theme.dart' ('/C:/flutter/packages/flutter/lib/src/material/slider_theme.dart'). [ +12 ms] [ ] semanticFormatterCallback: widget.semanticFormatterCallback, [ +1 ms] [ ] ^ [ ] [ +9 ms] /C:/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.14.0-alpha.1/lib/src/fields/form_builder_slider.dart:36:9: Error:
    'MouseCursor' isn't a type. [ +13 ms] [ ] final MouseCursor mouseCursor; [ +15 ms] [ ] ^^^^^^^^^^^ [ +3 ms] [ +1 ms] /C:/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.14.0-alpha.1/lib/src/fields/form_builder_slider.dart:138:19: Error: Nonamed parameter with the name 'focusNode'. [ +11 ms] [ ] focusNode: widget.focusNode, [ ] [ ] ^^^^^^^^^ [ ] [ ] /C:/flutter/packages/flutter/lib/src/material/slider.dart:114:9: Context: Found this candidate, but the arguments
    don't match. [ +1 ms] [ ] const Slider({ [ ] [ ] ^^^^^^ [ ] [ +4 ms] /C:/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.14.0-alpha.1/lib/src/fields/form_builder_switch.dart:67:9: Error:
    'MouseCursor' isn't a type. [ +1 ms] [ ] final MouseCursor mouseCursor; [ ] [ ] ^^^^^^^^^^^ [ +12 ms] [ +2 ms] /C:/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.14.0-alpha.1/lib/src/fields/form_builder_switch.dart:179:17: Error: Nonamed parameter with the name 'mouseCursor'. [ +10 ms] [ ] mouseCursor: widget.mouseCursor, [ +6 ms] [ ] ^^^^^^^^^^^ [ +17 ms] [ ] /C:/flutter/packages/flutter/lib/src/material/switch.dart:65:9: Context: Found this candidate, but the arguments don'tmatch. [ +16 ms] [ ] const Switch({ [ ] [ ] ^^^^^^ [ +11 ms] [ +9 ms] /C:/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-3.14.0-alpha.1/lib/src/fields/form_builder_text_field.dart:199:7: Error:No named parameter with the name 'autofillHints'. [ +1 ms] [ ] autofillHints: widget.autofillHints, [ ] [ ] ^^^^^^^^^^^^^ [ +1 ms] [ ] /C:/flutter/packages/flutter/lib/src/material/text_form_field.dart:131:3: Context: Found this candidate, but the
    arguments don't match. [ ] [ ] TextFormField({ [ +1 ms] [ ] ^^^^^^^^^^^^^ [+4566 ms] [+4705 ms] Persisting file store [ +1 ms] [ +40 ms] Done persisting file store [ +1 ms] [ +1 ms] Target kernel_snapshot failed: Exception: Errors during snapshot creation: null [ +7 ms] build failed. [ +2 ms] #0 throwToolExit (package:flutter_tools/src/base/common.dart:14:3) [ ] #1 AssembleCommand.runCommand (package:flutter_tools/src/commands/assemble.dart:202:7) [ ] #2 _rootRunUnary (dart:async/zone.dart:1192:38) [ +1 ms] #3 _CustomZone.runUnary (dart:async/zone.dart:1085:19) [ +1 ms] #4 _FutureListener.handleValue (dart:async/future_impl.dart:141:18) [ ] #5 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:682:45) [ +1 ms] #6 Future._propagateToListeners (dart:async/future_impl.dart:711:32) [ +14 ms] #7 Future._completeWithValue (dart:async/future_impl.dart:526:5) [ +13 ms] #8 _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:36:15) [ +2 ms] #9 _completeOnAsyncReturn (dart:async-patch/async_patch.dart:298:13) [ +1 ms] #10 BuildSystem.build (package:flutter_tools/src/build_system/build_system.dart) [ ] #11 _rootRunUnary (dart:async/zone.dart:1192:38) [ +9 ms] #12 _CustomZone.runUnary (dart:async/zone.dart:1085:19) [ +8 ms] [ +8 ms] "flutter assemble" took 13,988ms. [ ] #13 _FutureListener.handleValue (dart:async/future_impl.dart:141:18) [ ] #14 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:682:45) [ ] #15 Future._propagateToListeners (dart:async/future_impl.dart:711:32) [ ] #16 Future._completeWithValue (dart:async/future_impl.dart:526:5) [ ] #17 _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:36:15) [ ] #18 _completeOnAsyncReturn (dart:async-patch/async_patch.dart:298:13) [ ] #19 _BuildInstance.invokeTarget (package:flutter_tools/src/build_system/build_system.dart) [ ] #20 _rootRunUnary (dart:async/zone.dart:1192:38) [ ] #21 _CustomZone.runUnary (dart:async/zone.dart:1085:19) [ ] #22 _FutureListener.handleValue (dart:async/future_impl.dart:141:18) [ ] #23 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:682:45) [ ] #24 Future._propagateToListeners (dart:async/future_impl.dart:711:32) [ ] #25 Future._completeWithValue (dart:async/future_impl.dart:526:5) [ ] #26 Future.wait. (dart:async/future.dart:402:22) [ ] #27 _rootRunUnary (dart:async/zone.dart:1192:38) [ ] #28 _CustomZone.runUnary (dart:async/zone.dart:1085:19) [ ] #29 _FutureListener.handleValue (dart:async/future_impl.dart:141:18) [ ] #30 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:682:45) [ ] #31 Future._propagateToListeners (dart:async/future_impl.dart:711:32) [ +1 ms] #32 Future._completeWithValue (dart:async/future_impl.dart:526:5) [ +107 ms] #33 _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:36:15) [ +20 ms] #34 _completeOnAsyncReturn (dart:async-patch/async_patch.dart:298:13) [ +1 ms] #35 _BuildInstance._invokeInternal (package:flutter_tools/src/build_system/build_system.dart) [ +1 ms] #36 _asyncErrorWrapperHelper.errorCallback (dart:async-patch/async_patch.dart:86:61) [ ] #37 _rootRunBinary (dart:async/zone.dart:1204:38) [ +1 ms] #38 _CustomZone.runBinary (dart:async/zone.dart:1093:19) [ +12 ms] #39 _FutureListener.handleError (dart:async/future_impl.dart:155:20) [ +1 ms] #40 Future._propagateToListeners.handleError (dart:async/future_impl.dart:694:47) [ +1 ms] #41 Future._propagateToListeners (dart:async/future_impl.dart:715:24) [ +2 ms] #42 Future._completeError (dart:async/future_impl.dart:534:5) [ +11 ms] #43 _AsyncAwaitCompleter.completeError (dart:async-patch/async_patch.dart:43:15) [ +1 ms] #44 KernelSnapshot.build (package:flutter_tools/src/build_system/targets/dart.dart) [ +1 ms] #45 _rootRunUnary (dart:async/zone.dart:1192:38) [ ] #46 _CustomZone.runUnary (dart:async/zone.dart:1085:19) [ ] #47 _FutureListener.handleValue (dart:async/future_impl.dart:141:18) [ +1 ms] #48 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:682:45) [ +10 ms] #49 Future._propagateToListeners (dart:async/future_impl.dart:711:32) [ +1 ms] #50 Future._completeWithValue (dart:async/future_impl.dart:526:5) [ ] #51 _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:36:15) [ ] #52 _completeOnAsyncReturn (dart:async-patch/async_patch.dart:298:13) [ ] #53 KernelCompiler.compile (package:flutter_tools/src/compile.dart) [ +1 ms] #54 _rootRunUnary (dart:async/zone.dart:1192:38) [ +10 ms] #55 _CustomZone.runUnary (dart:async/zone.dart:1085:19) [ +1 ms] #56 _FutureListener.handleValue (dart:async/future_impl.dart:141:18) [ ] #57 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:682:45) [ ] #58 Future._propagateToListeners (dart:async/future_impl.dart:711:32) [ +1 ms] #59 Future._completeWithValue (dart:async/future_impl.dart:526:5) [ ] #60 Future._asyncComplete. (dart:async/future_impl.dart:556:7) [ +11 ms] #61 _rootRun (dart:async/zone.dart:1184:13) [ +1 ms] #62 _CustomZone.run (dart:async/zone.dart:1077:19) [ +1 ms] #63 _CustomZone.runGuarded (dart:async/zone.dart:979:7) [ +2 ms] #64 _CustomZone.bindCallbackGuarded. (dart:async/zone.dart:1019:23) [ +15 ms] #65 _microtaskLoop (dart:async/schedule_microtask.dart:43:21) [ +3 ms] #66 _startMicrotaskLoop (dart:async/schedule_microtask.dart:52:5) [ +10 ms] #67 _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:118:13) [ +1 ms] #68 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:169:5) [ +1 ms] FAILURE: Build failed with an exception. [ +5 ms] * Where: [ +11 ms] Script 'C:\flutter\packages\flutter_tools\gradle\flutter.gradle' line: 882 [ +1 ms] * What went wrong: [ +13 ms] Execution failed for task ':app:compileFlutterBuildDebug'. [ +1 ms] > Process 'command 'C:\flutter\bin\flutter.bat'' finished with non-zero exit value 1 [ ] * Try: [ +30 ms] Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan toget full insights. [ +1 ms] * Get more help at https://help.gradle.org [ ] BUILD FAILED in 28s [ +1 ms] > Task :app:compileFlutterBuildDebug FAILED [ +10 ms] 1 actionable task: 1 executed [ +400 ms] Running Gradle task 'assembleDebug'... (completed in 30.0s) [ +5 ms] Exception: Gradle task assembleDebug failed with exit code 1 [ +12 ms] "flutter run" took 31,909ms.

    #0 throwToolExit (package:flutter_tools/src/base/common.dart:14:3) #1 RunCommand.runCommand (package:flutter_tools/src/commands/run.dart:569:7) #2 FlutterCommand.verifyThenRunCommand (package:flutter_tools/src/runner/flutter_command.dart:723:18) #3 _rootRunUnary (dart:async/zone.dart:1192:38) #4 _CustomZone.runUnary (dart:async/zone.dart:1085:19) #5 _FutureListener.handleValue (dart:async/future_impl.dart:141:18) #6 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:682:45) #7 Future._propagateToListeners (dart:async/future_impl.dart:711:32) #8 Future._completeWithValue (dart:async/future_impl.dart:526:5) #9 _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:36:15) #10 _completeOnAsyncReturn (dart:async-patch/async_patch.dart:298:13) #11 RunCommand.usageValues (package:flutter_tools/src/commands/run.dart) #12 _rootRunUnary (dart:async/zone.dart:1192:38) #13 _CustomZone.runUnary (dart:async/zone.dart:1085:19) #14 _FutureListener.handleValue (dart:async/future_impl.dart:141:18) #15 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:682:45) #16 Future._propagateToListeners (dart:async/future_impl.dart:711:32) #17 Future._completeWithValue (dart:async/future_impl.dart:526:5) #18 _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:36:15) #19 _completeOnAsyncReturn (dart:async-patch/async_patch.dart:298:13) #20 AndroidDevice.isLocalEmulator (package:flutter_tools/src/android/android_device.dart) #21 _rootRunUnary (dart:async/zone.dart:1192:38) #22 _CustomZone.runUnary (dart:async/zone.dart:1085:19) #23 _FutureListener.handleValue (dart:async/future_impl.dart:141:18) #24 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:682:45) #25 Future._propagateToListeners (dart:async/future_impl.dart:711:32) #26 Future._completeWithValue (dart:async/future_impl.dart:526:5) #27 Future._asyncComplete. (dart:async/future_impl.dart:556:7) #28 _rootRun (dart:async/zone.dart:1184:13) #29 _CustomZone.run (dart:async/zone.dart:1077:19) #30 _CustomZone.runGuarded (dart:async/zone.dart:979:7) #31 _CustomZone.bindCallbackGuarded. (dart:async/zone.dart:1019:23) #32 _microtaskLoop (dart:async/schedule_microtask.dart:43:21) #33 _startMicrotaskLoop (dart:async/schedule_microtask.dart:52:5) #34 _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:118:13) #35 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:169:5)`

    question 
    opened by xuala69 15
  • Stepper widget inside FormBuilder creates an unexpected output.

    Stepper widget inside FormBuilder creates an unexpected output.

    I am having an issue that when I navigate to the next step in the Stepper widget, the value from Step 1 FBTextField is being passed on Step 2 FBTextField. then when I navigate to the last step and go back to the very first step, the value on FBTextField is gone.

    Any suggestions to prevent this?

    FormBuilder(
      initialValue: {
        'inputText1' : 'valueTest1',
        'inputText2' : 'valueTest2'
      },
      key, _fbKey,
      child: Stepper(
        steps: _stepper(),
        ..
        ..
      )
    )
    
    List<Step> _stepper() {
      List<Step> _steps = [
        Step(
          title: Text('Step 1'),
          content: Column(
            children: [
              FormBuilderTextField(
                'attribute' : 'inputText1',
              )
            ]
          )
        ),
        Step(
          title: Text('Step 2'),
          content: Column(
            children: [
              FormBuilderTextField(
                'attribute' : 'inputText2',
              )
            ]
          )
        ),
      ];
    }
    
    question 
    opened by itzmj-23 15
  • my app dpendeds on flutter_form_builder ^4.0.2 and intl ^0.17.0-nullsafety.2, version solving failed.

    my app dpendeds on flutter_form_builder ^4.0.2 and intl ^0.17.0-nullsafety.2, version solving failed.

    Because flutter_form_builder 4.0.2 depends on intl ^0.16.1 and no versions of flutter_form_builder match >4.0.2 <5.0.0, flutter_form_builder ^4.0.2 requires intl ^0.16.1.

    Hi.. could please apply this fix. Thanks & regards

    invalid 
    opened by prakash-indorkar 14
  • Strange error in FormBuilderDropdown

    Strange error in FormBuilderDropdown

    I have 3 FormBuilderDropdown which's item are filling from the database. They are totally linked. Like:

    1. Country
    2. Governorate
    3. District and so on...

    My Scope is if Country selected it will refresh all FormBuilderDropdown. Not getting any exception until I select a data on 3rd FormBuilderDropdown that is the District. If I not selecting any data on that FormBuilderDropdown nothing is raising, but when I change any Governorate FormBuilderDropdown I got following exception but I still have items for the District FormBuilderDropdown which is 5 as print. This is my code:

    Widget districtDropDown( {ValueChanged changed, List<DropdownMenuItem> items, String attribute}) { print('district=${items.length}'); return items.length == 0 ? FormBuilderDropdown( attribute: attribute, hint: Text('Select District'), onChanged: changed, decoration: InputDecoration( labelText: 'District', labelStyle: TextStyle( fontFamily: 'Open Sans', ), ), validators: [ FormBuilderValidators.required( errorText: 'Please select District.'), ], initialValue: '', items: [], ) : FormBuilderDropdown( attribute: attribute, hint: Text('Select District'), onChanged: changed, decoration: InputDecoration( labelText: 'District', labelStyle: TextStyle( fontFamily: 'Open Sans', ), ), validators: [ FormBuilderValidators.required( errorText: 'Please select District.'), ], items: items, ); }

    I/flutter ( 6651): district=5 I/flutter ( 6651): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════ I/flutter ( 6651): The following assertion was thrown building I/flutter ( 6651): FormField-[LabeledGlobalKey<FormFieldState>#8e04e](dirty, dependencies: I/flutter ( 6651): [_FormScope], state: FormFieldState#2e15b): I/flutter ( 6651): 'package:flutter/src/material/dropdown.dart': Failed assertion: line 609 pos 15: 'items == null || I/flutter ( 6651): items.isEmpty || value == null || items.where((DropdownMenuItem item) => item.value == I/flutter ( 6651): value).length == 1': is not true. I/flutter ( 6651):

    opened by shariful2011 14
  • bug with validators or form-fields when adding/removing from Build tree

    bug with validators or form-fields when adding/removing from Build tree

    Hard to describe but easy to see with the included example source showing the problem.

    Essentially, when you switch between the fields as part of the form during a rebuild (via setState) the error validations get mixed up and stay sticky to the incorrect fields. I don't understand the underlying method of attaching fields to validators and error text etc, but it would seem there is a list with no specific ID to tie everything together. So when you remove/add child form widgets during a build, the Form's validation is broken and needs resetting or something !?

    Please try the example below and just toggle between one and two and note that the required error text for Two.1 text is actually showing the error text from One.1 (and vice versa).

    There is a) no reason for the required error txt to show, and even if it did b) it shouldn't show the prior fields error txt !?

    import 'package:flutter/material.dart';
    import 'package:flutter_form_builder/flutter_form_builder.dart';
    import 'package:form_builder_validators/form_builder_validators.dart';
    
    void main() {
      runApp(const MyApp());
    }
    
    class MyApp extends StatelessWidget {
      const MyApp({Key? key}) : super(key: key);
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Demo',
          theme: ThemeData(primarySwatch: Colors.blue),
          home: const MyHomePage(title: 'Flutter Demo Home Page'),
        );
      }
    }
    
    class MyHomePage extends StatefulWidget {
      const MyHomePage({Key? key, required this.title}) : super(key: key);
    
      final String title;
    
      @override
      State<MyHomePage> createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
      final _formKey = GlobalKey<FormBuilderState>();
    
      final choiceOptions = ['One', 'Two'];
      String choice = '';
    
      @override
      Widget build(BuildContext context) {
        List<Widget> formWidgets = [];
        switch (choice) {
          case 'One':
            formWidgets = _oneFormWidget();
            break;
          case 'Two':
            formWidgets = _twoFormWidget();
            break;
          default:
            formWidgets = [];
        }
        return Scaffold(
            appBar: AppBar(
              title: Text(widget.title),
            ),
            body: Center(
              child: FormBuilder(
                key: _formKey,
                autovalidateMode: AutovalidateMode.onUserInteraction,
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: <Widget>[
                    FormBuilderDropdown<String>(
                      name: 'gender',
                      decoration: const InputDecoration(
                        labelText: 'Form Widgets',
                      ),
                      // initialValue: 'Male',
                      allowClear: true,
                      hint: const Text('Select Choice'),
                      onChanged: (value) {
                        setState(() {
                          choice = value ?? '';
                        });
                      },
                      validator: FormBuilderValidators.required(context,
                          errorText: 'This is required'),
                      items: choiceOptions
                          .map((name) => DropdownMenuItem(
                                value: name,
                                child: Text(name),
                              ))
                          .toList(),
                    ),
                    ...formWidgets,
                  ],
                ),
              ),
            ));
      }
    
      List<Widget> _oneFormWidget() {
        return [
          FormBuilderTextField(
            name: 'one1',
            decoration: const InputDecoration(
              labelText: 'One.1 text',
            ),
            validator: FormBuilderValidators.required(context,
                errorText: 'This One.1 is required'),
            keyboardType: TextInputType.number,
          ),
        ];
      }
    
      List<Widget> _twoFormWidget() {
        return [
          FormBuilderTextField(
            name: 'two1',
            decoration: const InputDecoration(
              labelText: 'Two.1 text',
            ),
            validator: FormBuilderValidators.required(context,
                errorText: 'This Two.1 is required'),
            keyboardType: TextInputType.number,
          ),
          FormBuilderTextField(
            name: 'two2',
            decoration: const InputDecoration(
              labelText: 'Two.2 text',
            ),
            validator: FormBuilderValidators.required(context,
                errorText: 'This Two.2 is required'),
            keyboardType: TextInputType.number,
          ),
        ];
      }
    }
    
    
    opened by gslender 12
  • DateTimePicker with masked keyboard input only

    DateTimePicker with masked keyboard input only

    DateTimePicker is great on mobile, but for desktop Flutter apps it's actually easier to enter dates and times with keyboard using masked input. Also pickers are not so great for the distant dates (like birthdays). Usually a calendar icon is shown as a suffix widget to allow user select date with mouse, but the default is keyboard input.

    I use FormBuilder quite a lot for apps that are supposed to work both on desktop, web and mobile, so it would be handy to use the same widget across them.

    Is there any discussion or attempt to have this with DateTimePicker? I believe that's the best approach for many users and having this in a default implementation of the date picker field will be great.

    Guidelines on on date input UX: https://www.nngroup.com/articles/date-input/

    enhancement 
    opened by divan 0
  • build(deps): bump intl from 0.17.0 to 0.18.0

    build(deps): bump intl from 0.17.0 to 0.18.0

    Bumps intl from 0.17.0 to 0.18.0.

    Changelog

    Sourced from intl's changelog.

    0.18.0

    • Add support for minimumSignificantDigits / maximumSignificantDigits in NumberFormat.
    • Add support for plural in NumberFormat.compact() ('2 milliards').
    • Fix negative number formatting / parsing in NumberFormat.compact().
    • Add optional parameter to NumberFormat.compact() to explicitly add sign even for positive values.
    • Add decimalPatternDigits to NumberFormat which supports specifying the number of decimal digits in a decimal pattern.
    • Update to cldr 40.
    • Migrate to package:lints/recommended.yaml.
    • Remove some instances of dynamic types from the API.
    • Fix a bug caused by a typo in the plural rules calculation.
    • Unify IntlStream and StringIterator into StringStack.
    • Update to CLDR v41.
    • Add new locales: as, bm, en_NZ, fur, mg, nyn.
    • Remove unimplemented formatDuration and formatDurationFrom.
    • Make shortLocale and canonicalizedLocale implementations smarter.
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    originates from dependency dart 
    opened by dependabot[bot] 1
  • dynamically add and remove elements

    dynamically add and remove elements

    hello! I need to dynamically add and remove form elements wrapped in a MyWidget widget. I created a Myclass class that will contain data, and a list of widgets that is filled by the ADD button, and each specific widget can be deleted by the DEL button. Visually, everything is fine, but after deleting the widget, I still have the value in the _formkey (this can be seen by pressing the SAVE button). How to remove it? and the second question - is it possible to use an array of values so as not to duplicate the names in form (now a random number generator is used).

    [√] Flutter (Channel stable, 3.3.9, on Microsoft Windows [Version 10.0.19045.2311], locale ru-RU) [√] Android toolchain - develop for Android devices (Android SDK version 33.0.1) [√] Chrome - develop for the web [√] Visual Studio - develop for Windows (Visual Studio Community 2022 17.4.2)
    [√] Android Studio (version 2021.3) [√] Connected device (4 available) [√] HTTP Host Availability flutter_form_builder: ^7.7.0

    import 'dart:math';
    
    import 'package:flutter/material.dart';
    import 'package:flutter_form_builder/flutter_form_builder.dart';
    
    void main() {
      runApp(const MyApp());
    }
    
    class MyApp extends StatefulWidget {
      const MyApp({Key? key}) : super(key: key);
    
      @override
      State<MyApp> createState() => _MyAppState();
    }
    
    class _MyAppState extends State<MyApp> {
      final _key = GlobalKey<ScaffoldState>();
      final GlobalKey<FormBuilderState> _formKey = GlobalKey<FormBuilderState>();
    
      List<Widget> widgetdocs = List.empty(growable: true);
      List<MyTemp> docsdata = List.empty(growable: true);
    
      Widget MyWidget(MyTemp i, int num) {
        return Padding(
          padding: const EdgeInsets.only(bottom: 30.0),
          child: Column(
            children: [
              Text("DOC №" + (num + 1).toString()),
              FormBuilderTextField(
                //key: UniqueKey(),
                name: "docname" + i.numdoc!.toString(),
                validator: (value) {
                  if (value == null) {
                    return "Please enter";
                  }
                },
              ),
              ElevatedButton(
                  onPressed: () {
                    setState(() {
                      docsdata.removeAt(num);
                      widgetdocs.removeAt(num);
                      //_formKey.currentState!.fields.remove("docname"+i.numdoc!.toString());
                    });
                  },
                  child: Text("Del"))
            ],
          ),
        );
      }
    
      Widget Step1() {
        return Column(
          children: [
            ListView.builder(
              shrinkWrap: true,
              itemCount: widgetdocs.length,
              itemBuilder: (context, index) {
                return widgetdocs[index];
              },
            ),
            ElevatedButton(
                onPressed: () {
                  docsdata.add(MyTemp(numdoc: Random().nextInt(5000000)));
    
                  setState(() {});
                },
                child: Text("ADD"))
          ],
        );
      }
    
      Widget saveButton() {
        return ElevatedButton(
          style:
              ButtonStyle(backgroundColor: MaterialStateProperty.all(Colors.green)),
          onPressed: () async {
            if (_formKey.currentState?.saveAndValidate() == true) {
              _formKey.currentState!.value.forEach((key, value) {
                print(key);
              });
            }
          },
          child: Text("Save"),
        );
      }
    
      @override
      Widget build(BuildContext context) {
        widgetdocs = List.empty(growable: true);
        for (int i = 0; i < docsdata.length; i++) {
          widgetdocs.add(MyWidget(docsdata[i], i));
        }
    
        return MaterialApp(
          home: Scaffold(
            key: _key,
            body: Row(
              children: [
                Expanded(
                    child: Padding(
                  padding: const EdgeInsets.all(0.0),
                  child: SingleChildScrollView(
                    child: Column(
                      children: [
                        FormBuilder(key: _formKey, child: Step1()),
                        saveButton(),
                      ],
                    ),
                  ),
                )),
              ],
            ),
          ),
        );
      }
    }
    
    class MyTemp {
      String? fullname;
    
      int? numdoc;
    
      MyTemp({this.numdoc, this.fullname});
    }
    
    
    
    question awaiting author response 
    opened by tas-unn 2
  • FormBuilderSearchableDropdown's dropdownBuilder always run unnecessarily?

    FormBuilderSearchableDropdown's dropdownBuilder always run unnecessarily?

    Environment

    flutter_form_builder: ^7.7.0
    form_builder_extra_fields: ^8.3.0

    I have a FormBuilder and there are 2 FormField on it. One FormBuilderTextField and a FormBuilderSearchableDropdown. The "dropdownBuilder" method has been set for the FormBuilderSearchableDropdown.

    Problem: When I typing to the FormBuilderTextField, the FormBuilderSearchableDropdown's dropdownBuilder method runs on every char typing. Why? How can I prevent to do this?

    Code sample
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      const MyApp({super.key});
    
      @override
      Widget build(BuildContext context) {
        return const MaterialApp(
          title: 'dropdownSearch Demo',
          home: MyHomePage(),
        );
      }
    }
    
    class MyHomePage extends StatefulWidget {
      const MyHomePage({super.key});
    
      @override
      State<MyHomePage> createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
      final _formKey = GlobalKey<FormBuilderState>();
    
      int dropDownItemsCreateCounter = 0;
      int textChangedCounter = 0;
      UserModel? xSelectedItem = UserModel(id: 'reset', name: 'resetName');
    
      @override
      Widget build(BuildContext context) {
        debugPrint("Widget build(BuildContext context)");
        return Scaffold(
          appBar: AppBar(title: const Text('Extra Fields Example')),
          body: SingleChildScrollView(
            child: Padding(
              padding: const EdgeInsets.all(8.0),
              child: FormBuilder(
                key: _formKey,
                autovalidateMode: AutovalidateMode.onUserInteraction,
                child: Column(
                  // ignore: prefer_const_literals_to_create_immutables
                  children: [
                    FormBuilderTextField(
                      name: 'TextData',
                      decoration: const InputDecoration(labelText: 'Name'),
                      onChanged: (value) {
                        textChangedCounter++;
                        debugPrint('Text changed counter :$textChangedCounter');
                      },
                    ),
                    FormBuilderSearchableDropdown<UserModel>(
                      key: const Key('combo'),
                      asyncItems: (filter) async {
                        return getData(filter);
                      },
                      compareFn: (item, selectedItem) {
                        return item.isEqual(selectedItem);
                      },
                      selectedItem: xSelectedItem,
                      onChanged: (UserModel? data) {
                        xSelectedItem = data;
                      },
                      dropdownBuilder: (context, selectedItem) {
                        return _customPopupItemBuilderExample2(context, selectedItem, selectedItem == xSelectedItem);
                      },
                      popupProps: PopupProps.menu(
                        isFilterOnline: true,
                        //showSelectedItems: true,
                        showSearchBox: true,
                        itemBuilder: _customPopupItemBuilderExample2,
                        fit: FlexFit.loose,
                        title: const Text('Title widget?'),
                      ),
                      name: "User",
                      initialValue: UserModel(id: "1", name: "John", avatar: ""),
                    ),
                  ],
                ),
              ),
            ),
          ),
        );
      }
    
      Widget _customPopupItemBuilderExample2(
        BuildContext context,
        UserModel? item,
        bool isSelected,
      ) {
        // ****************************************************************************
        // *** why comes here the program when I type in the FormBuilderTextField ? ***
        // ****************************************************************************
    
        dropDownItemsCreateCounter++;
        debugPrint('Create Counter :$dropDownItemsCreateCounter');
        return Container(
          margin: const EdgeInsets.symmetric(horizontal: 8),
          decoration: !isSelected
              ? null
              : BoxDecoration(
                  border: Border.all(color: Theme.of(context).primaryColor),
                  borderRadius: BorderRadius.circular(5),
                  color: Colors.white,
                ),
          child: ListTile(
            selected: isSelected,
            title: Text(item?.name ?? ''),
            subtitle: Text(item?.createdAt?.toString() ?? ''),
            leading: CircleAvatar(
                // this does not work - throws 404 error
                // backgroundImage: NetworkImage(item.avatar ?? ''),
                ),
          ),
        );
      }
    
      Future<List<UserModel>> getData(filter) async {
        var response = await Dio().get(
          "https://5d85ccfb1e61af001471bf60.mockapi.io/user",
          queryParameters: {"filter": filter},
        );
    
        final data = response.data;
        if (data != null) {
          List<UserModel> jsonList = UserModel.fromJsonList(data);
          return jsonList;
        }
    
        return [];
      }
    }
    
    
    
    bug 
    opened by fehernyul 2
  • Is there a way to select text field on double tab?

    Is there a way to select text field on double tab?

    Environment

    7.7.0

    Describe your question

    I willing to know if its possible to select all text within a form field with a double tap, something like this.

    I am able to do the selection on the field, but could not attribute it to the field, my code:

    (...)
    GestureDetector(
                    onDoubleTap: (() {
                      final String email =
                          controller.formKey.currentState!.fields['email']!.value;
                    TextSelection(baseOffset: 0, extentOffset: email.length);
                    }),
    (..)
    
    question 
    opened by brunodmn 0
Releases(7.7.0)
  • 7.6.0(Aug 17, 2022)

    What's Changed

    • Deprecate reset icon from FormBuilderDateTimePicker by @deandreamatias in https://github.com/flutter-form-builder-ecosystem/flutter_form_builder/pull/1094
    • [FormBuilderDropdown] Remove parameters related to InputDecoration by @deandreamatias in https://github.com/flutter-form-builder-ecosystem/flutter_form_builder/pull/1095
    • Clear customError on reset by @deandreamatias in https://github.com/flutter-form-builder-ecosystem/flutter_form_builder/pull/1096
    • Add linux support by @deandreamatias in https://github.com/flutter-form-builder-ecosystem/flutter_form_builder/pull/1097
    • Improve FormBuilderRadioGroup separator by @deandreamatias in https://github.com/flutter-form-builder-ecosystem/flutter_form_builder/pull/1106
    • Release/7.6.0 by @deandreamatias in https://github.com/flutter-form-builder-ecosystem/flutter_form_builder/pull/1107

    Full Changelog: https://github.com/flutter-form-builder-ecosystem/flutter_form_builder/compare/7.5.0...7.6.0

    Source code(tar.gz)
    Source code(zip)
  • 7.5.0(Jul 27, 2022)

  • form_builder_phone_field-v1.0.0(Jun 14, 2022)

  • flutter_form_builder-v7.3.0(Jun 11, 2022)

    • Added new attribute timePickerTheme to FormBuilderCupertinoDateTimePicker
    • FormBuilderDateTimePicker.resetIcon changed from Icon to Widget
    • Added avatarBorder attribute to FormBuilderChoiceChip and FormBuilderChoiceChip

    BREAKING CHANGES:

    • Renamed attribute theme in FormBuilderCupertinoDateTimePicker to datePickerTheme
    • For FormBuilderChoiceChip and FormBuilderChoiceChip options, replace FormBuilderFieldOption to FormBuilderChipOption which has avatar option for chips
    Source code(tar.gz)
    Source code(zip)
  • flutter_form_builder-v7.2.0(May 19, 2022)

    • Added new dropdown attributes: borderRadius, enableFeedback, alignment. Fixes #1011
    • Added more date picker and time picker options
    • Made itemHeight attribute of FormBuilderDropdown nullable. Fixes #1015
    • Resolved 'Null check operator used on a null value' bug in RangeSlider. Fixes #990
    Source code(tar.gz)
    Source code(zip)
  • form_builder_extra_fields-v8.0.0(May 16, 2022)

  • form_builder_validators-v8.1.0(Apr 13, 2022)

  • form_builder_validators-v8.0.0(Apr 10, 2022)

  • form_builder_validators-v7.8.0(Mar 29, 2022)

  • form_builder_validators-v7.7.0(Mar 15, 2022)

  • form_builder_validators-v7.6.1(Feb 19, 2022)

  • form_builder_validators-v7.6.0(Feb 18, 2022)

  • form_builder_validators-v7.5.0(Feb 17, 2022)

  • form_builder-v7.1.1(Feb 17, 2022)

  • form_builder_validators-v7.4.0(Jan 31, 2022)

  • form_builder_extra_fields-v7.1.0(Jan 31, 2022)

    • Use flutter_datetime_picker_bdaya instead of the unmaintained flutter_datetime_picker
    • TypeAhead onReset uses valueTransformer
    • Export the class TextFieldProps - prevents importing from transitive dependency dropdown_search
    Source code(tar.gz)
    Source code(zip)
  • form_builder-v7.1.0(Jan 31, 2022)

    • Added silent validation to the FormBuilder widget
    • Implemented shouldChipRequestFocus feature - fixes request focus for non-test based fields
    • Improved field replacement logic
    • Documentation fixes
    Source code(tar.gz)
    Source code(zip)
  • form_builder_validators-v7.3.0(Jan 10, 2022)

  • form_builder_validators-v7.2.0(Nov 11, 2021)

  • 7.0.0(Oct 27, 2021)

  • 6.2.1(Oct 27, 2021)

  • 6.1.0(Sep 1, 2021)

    • When form validation fails, automatically scroll to first error
    • New way to programmatically induce custom errors by calling GlobalKey<FormBuilderState>.invalidateField() or GlobalKey<FormBuilderFieldState>.invalidate()
    • Added Arabic and Persian/Farsi locales
    • Made maxLines property nullable and added assertions
    • Remove field from internal value map on when a field is unregistered
    • Fix checkbox issue with null values
    Source code(tar.gz)
    Source code(zip)
  • 6.0.1(May 19, 2021)

  • 6.0.0(Apr 20, 2021)

    • Started working on null-safety BREAKING CHANGES:
    • Removed fields that depend on external dependencies incuding: FormBuilderChipsInput, FormBuilderColorPicker, FormBuilderRating, FormBuilderSearchableDropdown, FormBuilderSignaturePad, FormBuilderTouchSpin, FormBuilderTypeAhead
    • Changes to FormBuilderDateTimePicker
    Source code(tar.gz)
    Source code(zip)
  • 4.2.0(Dec 29, 2020)

  • 4.1.0(Dec 18, 2020)

    • Added support for Portuguese (pt)
    • Added support for Japanese (ja)
    • Added FormBuilderValidators.notEqual validator
    • Fix bug in RadioGroup where reset and didChange doesnt affect UI. Fixes #646, Fixes #647
    • Image picker fix: Added null-safe spread operator for field.value. Fixes #607
    • Fixed focus issue in ChipsInput
    • Fixed bug SearchableDropdown where setting value programmatically does not update UI. Fixes #627
    • Upgraded flutter_typeahead to 1.9.1.
    Source code(tar.gz)
    Source code(zip)
  • 4.0.2(Nov 28, 2020)

    • Fixed issue in Typeahead field where didChange not call and onChanged fired. Closes #595
    • Fixed issue where French not included in list of supported languages & translations not working. Closes #561
    Source code(tar.gz)
    Source code(zip)
  • 4.0.1(Nov 24, 2020)

Owner
Danvick Miller
Dart and Flutter . PHP . JS/TS
Danvick Miller
Flutter Credit Card Input form

This package provides visually beautiful UX through animation of credit card information input form. Preview Installing Add dependency to pubspec.yaml

Jeongtae Kim 426 Jan 5, 2023
A Flutter widget to show a text form field to display a date or clock dialog

A Flutter widget to show a text form field to display a date or clock dialog. This widget extend TextField and has a similar behavior as TextFormField.

m3uzz Soluções em TI 82 Jan 6, 2023
Flutter widget form select a date in horizontal timeline with customizable styles.

Flutter widget form select a date in horizontal timeline with customizable styles. Getting Started You can use this package when you need to add a dat

Jose Manuel Márquez 158 Dec 2, 2022
A multi select form field using alert dialog to select multiple items with checkboxes and showing as chips.

A multi select form field using alert dialog to select multiple items with checkboxes and showing as chips.

Carlos Eugenio Torres 73 Sep 7, 2022
SmartSelect allows you to easily convert your usual form select or dropdown into dynamic page

SmartSelect allows you to easily convert your usual form select or dropdown into dynamic page, popup dialog, or sliding bottom sheet with various choices input such as radio, checkbox, switch, chips, or even custom input. Supports single and multiple choice.

Irfan Vigma Taufik 332 Dec 20, 2022
Custom widgets and utils using Flutter framework widgets and Dart language

reuse_widgets_and_utils The custom widgets and utils using Flutter framework widgets and Dart programming language. Getting Started This project is a

null 1 Oct 29, 2021
A vertical tabs package for flutter framework.

Vertical Tabs A vertical tabs package for flutter framework. Getting Started A simple example of usage. to get more examples see Examples directory. T

null 62 Dec 30, 2022
A simple Flutter widget library that helps us to select days in a week.

A simple Flutter widget library that helps us to select days in a week.

Shan Shaji 4 Oct 9, 2022
A simple Flutter widget to add in the widget tree when you want to show nothing, with minimal impact on performance.

nil A simple widget to add in the widget tree when you want to show nothing, with minimal impact on performance. Why? Sometimes, according to a condit

Romain Rastel 127 Dec 22, 2022
Display simple blurry dialog popup for flutter

Blurry Dialog Features Display simple blurry dialog popup Offer built-in themes Possibility to create you custom dialog button click handler callbacks

Kouki Badr 7 Dec 18, 2022
A simple particle generator sample written in Flutter

Bubbles A basic particle generator sample written in Flutter. Demo License Copyright 2018 Anup Cowkur Permission is hereby granted, free of charge, t

Anup Cowkur 61 Nov 25, 2022
A simple zoomable image/content widget for Flutter.

?? Easy to use yet very customizable zoomable image widget for Flutter, Photo View provides a gesture sensitive zoomable widget. Photo View is largely used to show interacive images and other stuff such as SVG.

Blue Fire 1.7k Jan 1, 2023
RoundedLoadingButton is a Flutter package with a simple implementation of an animated loading button, complete with success and error animations.

rounded_loading_button RoundedLoadingButton is a Flutter package with a simple implementation of an animated loading button, complete with success and

Chris Edgington 223 Jan 4, 2023
A new Flutter package project for simple a awesome dialogs

awesome_dialog A new Flutter package project for simple and awesome dialogs Usage To use this package, add awesome_dialog as a dependency in your pubs

Marcos Rodriguez Toranzo 286 Jan 6, 2023
A Simple and easy to use flutter package for showing progress bar.

progress_dialog A Simple and easy to use flutter package for showing progress bar. #Usage Import the package import 'package:custom_progress_dialog/cu

Vikas Jilla 6 May 23, 2022
Simple flutter toggle button widge

This is simple flutter toggle button widget. Supports show text labels and icons, Possible set multiple value to toggle ui, not only

fukutan 1 Sep 27, 2022
A sliding up panel widget which can be used to show or hide content, beautiful and simple.

flutter_sliding_up_panel A sliding up panel widget which can be used to show or hide content, beautiful and simple. demo Getting Started dependencies:

null 25 Dec 12, 2022
ListTileSwitch is simple widget that combines ListTile with a switch.

ListTileSwitch ListTileSwitch is a simple widget that combines ListTile with a switch. Offering 3 types of switch widgets: Switch: Material Switch fro

Fırat Çetiner 20 Nov 23, 2022
Global loading widget, which can be used through simple configuration.

load Global loading widget, which can be used through simple configuration. Pure flutter library, not use native code. It is similar to OKToast in use

Caijinglong 35 Nov 4, 2022