Repository: felixlucien/flutter-autocomplete-textfield Branch: master Commit: 58e7fb46c8c2 Files: 151 Total size: 1.4 MB Directory structure: gitextract__twugb5m/ ├── .gitignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── autocomplete_textfield.iml ├── doc/ │ ├── api/ │ │ ├── __404error.html │ │ ├── autocomplete_textfield/ │ │ │ ├── AutoCompleteOverlayItemBuilder.html │ │ │ ├── AutoCompleteTextField/ │ │ │ │ ├── AutoCompleteTextField.html │ │ │ │ ├── addSuggestion.html │ │ │ │ ├── autocorrect.html │ │ │ │ ├── autofocus.html │ │ │ │ ├── clear.html │ │ │ │ ├── clearOnSubmit.html │ │ │ │ ├── controller.html │ │ │ │ ├── createState.html │ │ │ │ ├── cursorColor.html │ │ │ │ ├── cursorRadius.html │ │ │ │ ├── cursorWidth.html │ │ │ │ ├── decoration.html │ │ │ │ ├── focusNode.html │ │ │ │ ├── inputFormatters.html │ │ │ │ ├── itemBuilder.html │ │ │ │ ├── itemFilter.html │ │ │ │ ├── itemSorter.html │ │ │ │ ├── itemSubmitted.html │ │ │ │ ├── key.html │ │ │ │ ├── keyboardType.html │ │ │ │ ├── minLength.html │ │ │ │ ├── onFocusChanged.html │ │ │ │ ├── removeSuggestion.html │ │ │ │ ├── showCursor.html │ │ │ │ ├── style.html │ │ │ │ ├── submitOnSuggestionTap.html │ │ │ │ ├── suggestions.html │ │ │ │ ├── suggestionsAmount.html │ │ │ │ ├── textCapitalization.html │ │ │ │ ├── textChanged.html │ │ │ │ ├── textField.html │ │ │ │ ├── textInputAction.html │ │ │ │ ├── textSubmitted.html │ │ │ │ ├── triggerSubmitted.html │ │ │ │ ├── unFocusOnItemSubmitted.html │ │ │ │ ├── updateDecoration.html │ │ │ │ └── updateSuggestions.html │ │ │ ├── AutoCompleteTextField-class.html │ │ │ ├── AutoCompleteTextFieldState/ │ │ │ │ ├── AutoCompleteTextFieldState.html │ │ │ │ ├── addSuggestion.html │ │ │ │ ├── autocorrect.html │ │ │ │ ├── autofocus.html │ │ │ │ ├── build.html │ │ │ │ ├── clear.html │ │ │ │ ├── clearOnSubmit.html │ │ │ │ ├── controller.html │ │ │ │ ├── currentText.html │ │ │ │ ├── cursorColor.html │ │ │ │ ├── cursorRadius.html │ │ │ │ ├── cursorWidth.html │ │ │ │ ├── decoration.html │ │ │ │ ├── dispose.html │ │ │ │ ├── filteredSuggestions.html │ │ │ │ ├── focusNode.html │ │ │ │ ├── getSuggestions.html │ │ │ │ ├── inputFormatters.html │ │ │ │ ├── itemBuilder.html │ │ │ │ ├── itemFilter.html │ │ │ │ ├── itemSorter.html │ │ │ │ ├── itemSubmitted.html │ │ │ │ ├── keyboardType.html │ │ │ │ ├── listSuggestionsEntry.html │ │ │ │ ├── minLength.html │ │ │ │ ├── onFocusChanged.html │ │ │ │ ├── removeSuggestion.html │ │ │ │ ├── showCursor.html │ │ │ │ ├── style.html │ │ │ │ ├── submitOnSuggestionTap.html │ │ │ │ ├── suggestions.html │ │ │ │ ├── suggestionsAmount.html │ │ │ │ ├── textCapitalization.html │ │ │ │ ├── textChanged.html │ │ │ │ ├── textField.html │ │ │ │ ├── textInputAction.html │ │ │ │ ├── textSubmitted.html │ │ │ │ ├── triggerSubmitted.html │ │ │ │ ├── unFocusOnItemSubmitted.html │ │ │ │ ├── updateDecoration.html │ │ │ │ ├── updateOverlay.html │ │ │ │ └── updateSuggestions.html │ │ │ ├── AutoCompleteTextFieldState-class.html │ │ │ ├── Filter.html │ │ │ ├── InputEventCallback.html │ │ │ ├── SimpleAutoCompleteTextField/ │ │ │ │ ├── SimpleAutoCompleteTextField.html │ │ │ │ ├── autofocus.html │ │ │ │ ├── controller.html │ │ │ │ ├── createState.html │ │ │ │ ├── cursorColor.html │ │ │ │ ├── cursorRadius.html │ │ │ │ ├── cursorWidth.html │ │ │ │ ├── focusNode.html │ │ │ │ ├── minLength.html │ │ │ │ ├── onFocusChanged.html │ │ │ │ ├── showCursor.html │ │ │ │ ├── textChanged.html │ │ │ │ └── textSubmitted.html │ │ │ ├── SimpleAutoCompleteTextField-class.html │ │ │ ├── StringCallback.html │ │ │ └── autocomplete_textfield-library.html │ │ ├── categories.json │ │ ├── index.html │ │ ├── index.json │ │ └── static-assets/ │ │ ├── github.css │ │ ├── highlight.pack.js │ │ ├── readme.md │ │ ├── script.js │ │ └── styles.css │ └── autocomplete_textfield.md ├── example/ │ ├── .gitignore │ ├── .metadata │ ├── README.md │ ├── android/ │ │ ├── app/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ ├── debug/ │ │ │ │ └── AndroidManifest.xml │ │ │ ├── main/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ ├── java/ │ │ │ │ │ └── com/ │ │ │ │ │ └── example/ │ │ │ │ │ └── example/ │ │ │ │ │ └── MainActivity.java │ │ │ │ └── res/ │ │ │ │ ├── drawable/ │ │ │ │ │ └── launch_background.xml │ │ │ │ └── values/ │ │ │ │ └── styles.xml │ │ │ └── profile/ │ │ │ └── AndroidManifest.xml │ │ ├── build.gradle │ │ ├── gradle/ │ │ │ └── wrapper/ │ │ │ └── gradle-wrapper.properties │ │ ├── gradle.properties │ │ └── settings.gradle │ ├── ios/ │ │ ├── Flutter/ │ │ │ ├── AppFrameworkInfo.plist │ │ │ ├── Debug.xcconfig │ │ │ ├── Release.xcconfig │ │ │ └── flutter_export_environment.sh │ │ ├── Runner/ │ │ │ ├── AppDelegate.h │ │ │ ├── AppDelegate.m │ │ │ ├── Assets.xcassets/ │ │ │ │ ├── AppIcon.appiconset/ │ │ │ │ │ └── Contents.json │ │ │ │ └── LaunchImage.imageset/ │ │ │ │ ├── Contents.json │ │ │ │ └── README.md │ │ │ ├── Base.lproj/ │ │ │ │ ├── LaunchScreen.storyboard │ │ │ │ └── Main.storyboard │ │ │ ├── Info.plist │ │ │ └── main.m │ │ ├── Runner.xcodeproj/ │ │ │ ├── project.pbxproj │ │ │ ├── project.xcworkspace/ │ │ │ │ └── contents.xcworkspacedata │ │ │ └── xcshareddata/ │ │ │ └── xcschemes/ │ │ │ └── Runner.xcscheme │ │ └── Runner.xcworkspace/ │ │ └── contents.xcworkspacedata │ ├── lib/ │ │ └── main.dart │ ├── pubspec.yaml │ └── test/ │ └── widget_test.dart ├── lib/ │ └── autocomplete_textfield.dart └── pubspec.yaml ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ .DS_Store .dart_tool/ .packages .pub/ build/ ios/.generated/ ios/Flutter/Generated.xcconfig ios/Runner/GeneratedPluginRegistrant.* example/.DS_Store example/.dart_tool/ example/.packages example/.pub/ example/build/ example/.flutter-plugins example/ios/.generated/ example/ios/Flutter/Generated.xcconfig example/ios/Runner/GeneratedPluginRegistrant.* .vscode .idea/** ================================================ FILE: CHANGELOG.md ================================================ # Changelog [1.0.0] Works great published version 1 [1.4.0] A few bug fixes and more functionality added. Added textInputAction. ### Breaking Changes [1.4.0] TextField is set by default to call onSubmitted on a suggestion tap and also to clear the TextField on submit. These can both be disabled with submitOnSuggestionTap and clearOnSubmit respectively. [1.4.1] Added textCapitalization option [1.5.0] Added the ability to update suggestions dynamically! Use updateSuggestions, addSuggestion and removeSuggestion. [1.5.1] Oops, spelling error. [1.6.0] Fixed the non-string datatype issue. [1.6.1] Exposed textField [1.6.2] Fixed example and new vid thing [1.6.4] Added input formatters. [1.6.7] Added TextEditingController to SimpleAutoCompleteTextfield. Added null check to focus node listener. [1.6.8] Implemented dispose for autocomplete_textfield, cleans up resources after using. Also added focusNode which can be passed in by user. [1.7.0] Added the ability to specify starting text through TextEditingController, and the new method triggerSubmit was added. ### Breaking Changes Now submitting text calls triggerSubmit and clearText clears internal current text. [1.7.1] All fields are final now in AutoCompleteTextField. [1.7.3] InputDecoration and styles etc can now be changed dynamically with the updateDecoration() method. [1.8.0] Added filter advanced with regex in SimpleAutoCompleteTextField [1.9.0] Merge community pull requests, mostly more styling options [2.0.0] Add null safety [2.0.1] Add docs ================================================ FILE: LICENSE ================================================ Copyright <2018> <@Felix McCuaig> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: README.md ================================================ # autocomplete_textfield An autocomplete textfield for flutter # pull requests Feel free to submit pull requests for desired changes / features / bug fixes... It makes the maintenance of this code much easier as I no longer use Flutter frequently. ## Pub Package Can Be Found At [Pub Package](https://pub.dartlang.org/packages/autocomplete_textfield#-example-tab-) ## Breaking Changes TextField is set by default to call onSubmitted on a suggestion tap and also to clear the TextField on submit. These can both be disabled with submitOnSuggestionTap and clearOnSubmit respectively. ## Usage AutoCompleteTextField supports any data type suggestions ```dart new AutoCompleteTextField() ``` The suggestions parameter must have data that matches `` A global key of type `GlobalKey>` is required so that the `clear()` method can be called to clear AutoCompleteTextField. # Strings and itemFilter Filtering is case sensitive so when using strings a common implementation of itemFilter is . ```dart itemFilter: (item, query) { return item.toLowerCase().startsWith(query.toLowerCase()); } ``` ================================================ FILE: autocomplete_textfield.iml ================================================ ================================================ FILE: doc/api/__404error.html ================================================ autocomplete_textfield - Dart API docs
autocomplete_textfield

404: Something's gone wrong :-(

You've tried to visit a page that doesn't exist. Luckily this site has other pages.

If you were looking for something specific, try searching:

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteOverlayItemBuilder.html ================================================ AutoCompleteOverlayItemBuilder typedef - autocomplete_textfield library - Dart API
AutoCompleteOverlayItemBuilder

AutoCompleteOverlayItemBuilder<T> typedef Null safety

AutoCompleteOverlayItemBuilder<T> = Widget Function(BuildContext context, T suggestion)

Implementation

typedef Widget AutoCompleteOverlayItemBuilder<T>(
    BuildContext context, T suggestion);
autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextField/AutoCompleteTextField.html ================================================ AutoCompleteTextField constructor - AutoCompleteTextField - autocomplete_textfield library - Dart API
AutoCompleteTextField

AutoCompleteTextField<T> constructor Null safety

AutoCompleteTextField<T>(
  1. {required InputEventCallback<T>? itemSubmitted,
  2. required GlobalKey<AutoCompleteTextFieldState<T>> key,
  3. required List<T> suggestions,
  4. required AutoCompleteOverlayItemBuilder<T>? itemBuilder,
  5. required Comparator<T>? itemSorter,
  6. required Filter<T>? itemFilter,
  7. List<TextInputFormatter>? inputFormatters,
  8. TextStyle? style,
  9. InputDecoration decoration = const InputDecoration(),
  10. StringCallback? textChanged,
  11. StringCallback? textSubmitted,
  12. ValueSetter<bool>? onFocusChanged,
  13. Radius? cursorRadius,
  14. double? cursorWidth,
  15. Color? cursorColor,
  16. bool? showCursor,
  17. TextInputType keyboardType = TextInputType.text,
  18. int suggestionsAmount = 5,
  19. bool submitOnSuggestionTap = true,
  20. bool clearOnSubmit = true,
  21. TextInputAction textInputAction = TextInputAction.done,
  22. TextCapitalization textCapitalization = TextCapitalization.sentences,
  23. bool autocorrect = false,
  24. int minLength = 1,
  25. TextEditingController? controller,
  26. FocusNode? focusNode,
  27. bool autofocus = false,
  28. bool unFocusOnItemSubmitted = true}
)

Implementation

AutoCompleteTextField(
    {required
        this.itemSubmitted, //Callback on item selected, this is the item selected of type <T>
    required
        this.key, //GlobalKey used to enable addSuggestion etc
    required
        this.suggestions, //Suggestions that will be displayed
    required
        this.itemBuilder, //Callback to build each item, return a Widget
    required
        this.itemSorter, //Callback to sort items in the form (a of type <T>, b of type <T>)
    required
        this.itemFilter, //Callback to filter item: return true or false depending on input text
    this.inputFormatters,
    this.style,
    this.decoration: const InputDecoration(),
    this.textChanged, //Callback on input text changed, this is a string
    this.textSubmitted, //Callback on input text submitted, this is also a string
    this.onFocusChanged,
    this.cursorRadius,
    this.cursorWidth,
    this.cursorColor,
    this.showCursor,
    this.keyboardType: TextInputType.text,
    this.suggestionsAmount:
        5, //The amount of suggestions to show, larger values may result in them going off screen
    this.submitOnSuggestionTap:
        true, //Call textSubmitted on suggestion tap, itemSubmitted will be called no matter what
    this.clearOnSubmit: true, //Clear autoCompleteTextfield on submit
    this.textInputAction: TextInputAction.done,
    this.textCapitalization: TextCapitalization.sentences,
    this.autocorrect:
        false, //set the autoroccection on the internal text input field
    this.minLength = 1,
    this.controller,
    this.focusNode,
    this.autofocus = false,
    this.unFocusOnItemSubmitted = true})
    : super(key: key);
autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextField/addSuggestion.html ================================================ addSuggestion method - AutoCompleteTextField class - autocomplete_textfield library - Dart API
addSuggestion

addSuggestion method Null safety

void addSuggestion(
  1. T suggestion
)

Implementation

void addSuggestion(T suggestion) =>
    key.currentState!.addSuggestion(suggestion);
autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextField/autocorrect.html ================================================ autocorrect property - AutoCompleteTextField class - autocomplete_textfield library - Dart API
autocorrect

autocorrect property Null safety

bool autocorrect
final

Implementation

final bool autocorrect;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextField/autofocus.html ================================================ autofocus property - AutoCompleteTextField class - autocomplete_textfield library - Dart API
autofocus

autofocus property Null safety

bool autofocus
final

Implementation

final bool autofocus;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextField/clear.html ================================================ clear method - AutoCompleteTextField class - autocomplete_textfield library - Dart API
clear

clear method Null safety

void clear()

Implementation

void clear() => key.currentState!.clear();
autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextField/clearOnSubmit.html ================================================ clearOnSubmit property - AutoCompleteTextField class - autocomplete_textfield library - Dart API
clearOnSubmit

clearOnSubmit property Null safety

bool clearOnSubmit
final

Implementation

final bool submitOnSuggestionTap, clearOnSubmit, unFocusOnItemSubmitted;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextField/controller.html ================================================ controller property - AutoCompleteTextField class - autocomplete_textfield library - Dart API
controller

controller property Null safety

TextEditingController? controller
final

Implementation

final TextEditingController? controller;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextField/createState.html ================================================ createState method - AutoCompleteTextField class - autocomplete_textfield library - Dart API
createState

createState method Null safety

State<StatefulWidget> createState()
override

Creates the mutable state for this widget at a given location in the tree.

Subclasses should override this method to return a newly created instance of their associated State subclass:

@override
State<MyWidget> createState() => _MyWidgetState();

The framework can call this method multiple times over the lifetime of a StatefulWidget. For example, if the widget is inserted into the tree in multiple locations, the framework will create a separate State object for each location. Similarly, if the widget is removed from the tree and later inserted into the tree again, the framework will call createState again to create a fresh State object, simplifying the lifecycle of State objects.

Implementation

@override
State<StatefulWidget> createState() => new AutoCompleteTextFieldState<T>(
    suggestions,
    textChanged,
    textSubmitted,
    onFocusChanged,
    itemSubmitted,
    itemBuilder,
    itemSorter,
    itemFilter,
    suggestionsAmount,
    submitOnSuggestionTap,
    clearOnSubmit,
    minLength,
    inputFormatters,
    textCapitalization,
    decoration,
    style,
    keyboardType,
    textInputAction,
    controller,
    cursorColor,
    cursorRadius,
    cursorWidth,
    showCursor,
    focusNode,
    autofocus,
    unFocusOnItemSubmitted,
    autocorrect);
autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextField/cursorColor.html ================================================ cursorColor property - AutoCompleteTextField class - autocomplete_textfield library - Dart API
cursorColor

cursorColor property Null safety

Color? cursorColor
final

Implementation

final Color? cursorColor;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextField/cursorRadius.html ================================================ cursorRadius property - AutoCompleteTextField class - autocomplete_textfield library - Dart API
cursorRadius

cursorRadius property Null safety

Radius? cursorRadius
final

Implementation

final Radius? cursorRadius;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextField/cursorWidth.html ================================================ cursorWidth property - AutoCompleteTextField class - autocomplete_textfield library - Dart API
cursorWidth

cursorWidth property Null safety

double? cursorWidth
final

Implementation

final double? cursorWidth;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextField/decoration.html ================================================ decoration property - AutoCompleteTextField class - autocomplete_textfield library - Dart API
decoration

decoration property Null safety

InputDecoration decoration
final

Implementation

final InputDecoration decoration;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextField/focusNode.html ================================================ focusNode property - AutoCompleteTextField class - autocomplete_textfield library - Dart API
focusNode

focusNode property Null safety

FocusNode? focusNode
final

Implementation

final FocusNode? focusNode;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextField/inputFormatters.html ================================================ inputFormatters property - AutoCompleteTextField class - autocomplete_textfield library - Dart API
inputFormatters

inputFormatters property Null safety

List<TextInputFormatter>? inputFormatters
final

Implementation

final List<TextInputFormatter>? inputFormatters;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextField/itemBuilder.html ================================================ itemBuilder property - AutoCompleteTextField class - autocomplete_textfield library - Dart API
itemBuilder

itemBuilder property Null safety

AutoCompleteOverlayItemBuilder<T>? itemBuilder
final

Implementation

final AutoCompleteOverlayItemBuilder<T>? itemBuilder;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextField/itemFilter.html ================================================ itemFilter property - AutoCompleteTextField class - autocomplete_textfield library - Dart API
itemFilter

itemFilter property Null safety

Filter<T>? itemFilter
final

Implementation

final Filter<T>? itemFilter;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextField/itemSorter.html ================================================ itemSorter property - AutoCompleteTextField class - autocomplete_textfield library - Dart API
itemSorter

itemSorter property Null safety

Comparator<T>? itemSorter
final

Implementation

final Comparator<T>? itemSorter;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextField/itemSubmitted.html ================================================ itemSubmitted property - AutoCompleteTextField class - autocomplete_textfield library - Dart API
itemSubmitted

itemSubmitted property Null safety

InputEventCallback<T>? itemSubmitted
final

Implementation

final InputEventCallback<T>? itemSubmitted;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextField/key.html ================================================ key property - AutoCompleteTextField class - autocomplete_textfield library - Dart API
key

key property Null safety

GlobalKey<AutoCompleteTextFieldState<T>> key
final

Controls how one widget replaces another widget in the tree.

If the runtimeType and key properties of the two widgets are operator==, respectively, then the new widget replaces the old widget by updating the underlying element (i.e., by calling Element.update with the new widget). Otherwise, the old element is removed from the tree, the new widget is inflated into an element, and the new element is inserted into the tree.

In addition, using a GlobalKey as the widget's key allows the element to be moved around the tree (changing parent) without losing state. When a new widget is found (its key and type do not match a previous widget in the same location), but there was a widget with that same global key elsewhere in the tree in the previous frame, then that widget's element is moved to the new location.

Generally, a widget that is the only child of another widget does not need an explicit key.

See also:

Implementation

final GlobalKey<AutoCompleteTextFieldState<T>> key;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextField/keyboardType.html ================================================ keyboardType property - AutoCompleteTextField class - autocomplete_textfield library - Dart API
keyboardType

keyboardType property Null safety

TextInputType keyboardType
final

Implementation

final TextInputType keyboardType;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextField/minLength.html ================================================ minLength property - AutoCompleteTextField class - autocomplete_textfield library - Dart API
minLength

minLength property Null safety

int minLength
final

Implementation

final int minLength;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextField/onFocusChanged.html ================================================ onFocusChanged property - AutoCompleteTextField class - autocomplete_textfield library - Dart API
onFocusChanged

onFocusChanged property Null safety

ValueSetter<bool>? onFocusChanged
final

Implementation

final ValueSetter<bool>? onFocusChanged;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextField/removeSuggestion.html ================================================ removeSuggestion method - AutoCompleteTextField class - autocomplete_textfield library - Dart API
removeSuggestion

removeSuggestion method Null safety

void removeSuggestion(
  1. T suggestion
)

Implementation

void removeSuggestion(T suggestion) =>
    key.currentState!.removeSuggestion(suggestion);
autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextField/showCursor.html ================================================ showCursor property - AutoCompleteTextField class - autocomplete_textfield library - Dart API
showCursor

showCursor property Null safety

bool? showCursor
final

Implementation

final bool? showCursor;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextField/style.html ================================================ style property - AutoCompleteTextField class - autocomplete_textfield library - Dart API
style

style property Null safety

TextStyle? style
final

Implementation

final TextStyle? style;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextField/submitOnSuggestionTap.html ================================================ submitOnSuggestionTap property - AutoCompleteTextField class - autocomplete_textfield library - Dart API
submitOnSuggestionTap

submitOnSuggestionTap property Null safety

bool submitOnSuggestionTap
final

Implementation

final bool submitOnSuggestionTap, clearOnSubmit, unFocusOnItemSubmitted;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextField/suggestions.html ================================================ suggestions property - AutoCompleteTextField class - autocomplete_textfield library - Dart API
suggestions

suggestions property Null safety

List<T> suggestions
final

Implementation

final List<T> suggestions;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextField/suggestionsAmount.html ================================================ suggestionsAmount property - AutoCompleteTextField class - autocomplete_textfield library - Dart API
suggestionsAmount

suggestionsAmount property Null safety

int suggestionsAmount
final

Implementation

final int suggestionsAmount;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextField/textCapitalization.html ================================================ textCapitalization property - AutoCompleteTextField class - autocomplete_textfield library - Dart API
textCapitalization

textCapitalization property Null safety

TextCapitalization textCapitalization
final

Implementation

final TextCapitalization textCapitalization;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextField/textChanged.html ================================================ textChanged property - AutoCompleteTextField class - autocomplete_textfield library - Dart API
textChanged

textChanged property Null safety

StringCallback? textChanged
final

Implementation

final StringCallback? textChanged, textSubmitted;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextField/textField.html ================================================ textField property - AutoCompleteTextField class - autocomplete_textfield library - Dart API
textField

textField property Null safety

TextField? textField

Implementation

TextField? get textField => key.currentState!.textField;
autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextField/textInputAction.html ================================================ textInputAction property - AutoCompleteTextField class - autocomplete_textfield library - Dart API
textInputAction

textInputAction property Null safety

TextInputAction textInputAction
final

Implementation

final TextInputAction textInputAction;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextField/textSubmitted.html ================================================ textSubmitted property - AutoCompleteTextField class - autocomplete_textfield library - Dart API
textSubmitted

textSubmitted property Null safety

StringCallback? textSubmitted
final

Implementation

final StringCallback? textChanged, textSubmitted;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextField/triggerSubmitted.html ================================================ triggerSubmitted method - AutoCompleteTextField class - autocomplete_textfield library - Dart API
triggerSubmitted

triggerSubmitted method Null safety

void triggerSubmitted()

Implementation

void triggerSubmitted() => key.currentState!.triggerSubmitted();
autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextField/unFocusOnItemSubmitted.html ================================================ unFocusOnItemSubmitted property - AutoCompleteTextField class - autocomplete_textfield library - Dart API
unFocusOnItemSubmitted

unFocusOnItemSubmitted property Null safety

bool unFocusOnItemSubmitted
final

Implementation

final bool submitOnSuggestionTap, clearOnSubmit, unFocusOnItemSubmitted;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextField/updateDecoration.html ================================================ updateDecoration method - AutoCompleteTextField class - autocomplete_textfield library - Dart API
updateDecoration

updateDecoration method Null safety

void updateDecoration(
  1. {InputDecoration? decoration,
  2. List<TextInputFormatter>? inputFormatters,
  3. TextCapitalization? textCapitalization,
  4. TextStyle? style,
  5. TextInputType? keyboardType,
  6. TextInputAction? textInputAction}
)

Implementation

void updateDecoration(
        {InputDecoration? decoration,
        List<TextInputFormatter>? inputFormatters,
        TextCapitalization? textCapitalization,
        TextStyle? style,
        TextInputType? keyboardType,
        TextInputAction? textInputAction}) =>
    key.currentState!.updateDecoration(decoration, inputFormatters,
        textCapitalization, style, keyboardType, textInputAction);
autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextField/updateSuggestions.html ================================================ updateSuggestions method - AutoCompleteTextField class - autocomplete_textfield library - Dart API
updateSuggestions

updateSuggestions method Null safety

void updateSuggestions(
  1. List<T> suggestions
)

Implementation

void updateSuggestions(List<T> suggestions) =>
    key.currentState!.updateSuggestions(suggestions);
autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextField-class.html ================================================ AutoCompleteTextField class - autocomplete_textfield library - Dart API
AutoCompleteTextField

AutoCompleteTextField<T> class Null safety

Inheritance
Implementers

Constructors

AutoCompleteTextField({required InputEventCallback<T>? itemSubmitted, required GlobalKey<AutoCompleteTextFieldState<T>> key, required List<T> suggestions, required AutoCompleteOverlayItemBuilder<T>? itemBuilder, required Comparator<T>? itemSorter, required Filter<T>? itemFilter, List<TextInputFormatter>? inputFormatters, TextStyle? style, InputDecoration decoration = const InputDecoration(), StringCallback? textChanged, StringCallback? textSubmitted, ValueSetter<bool>? onFocusChanged, Radius? cursorRadius, double? cursorWidth, Color? cursorColor, bool? showCursor, TextInputType keyboardType = TextInputType.text, int suggestionsAmount = 5, bool submitOnSuggestionTap = true, bool clearOnSubmit = true, TextInputAction textInputAction = TextInputAction.done, TextCapitalization textCapitalization = TextCapitalization.sentences, bool autocorrect = false, int minLength = 1, TextEditingController? controller, FocusNode? focusNode, bool autofocus = false, bool unFocusOnItemSubmitted = true})

Properties

autocorrect bool
final
autofocus bool
final
clearOnSubmit bool
final
controller TextEditingController?
final
cursorColor Color?
final
cursorRadius Radius?
final
cursorWidth double?
final
decoration InputDecoration
final
focusNode FocusNode?
final
hashCode int
The hash code for this object.
@nonVirtual, read-only, inherited
inputFormatters List<TextInputFormatter>?
final
itemBuilder AutoCompleteOverlayItemBuilder<T>?
final
itemFilter Filter<T>?
final
itemSorter Comparator<T>?
final
itemSubmitted InputEventCallback<T>?
final
key GlobalKey<AutoCompleteTextFieldState<T>>
Controls how one widget replaces another widget in the tree.
final
keyboardType TextInputType
final
minLength int
final
onFocusChanged ValueSetter<bool>?
final
runtimeType Type
A representation of the runtime type of the object.
read-only, inherited
showCursor bool?
final
style TextStyle?
final
submitOnSuggestionTap bool
final
suggestions List<T>
final
suggestionsAmount int
final
textCapitalization TextCapitalization
final
textChanged StringCallback?
final
textField TextField?
read-only
textInputAction TextInputAction
final
textSubmitted StringCallback?
final
unFocusOnItemSubmitted bool
final

Methods

addSuggestion(T suggestion) → void
clear() → void
createElement() StatefulElement
Creates a StatefulElement to manage this widget's location in the tree.
inherited
createState() State<StatefulWidget>
Creates the mutable state for this widget at a given location in the tree.
override
debugDescribeChildren() List<DiagnosticsNode>
Returns a list of DiagnosticsNode objects describing this node's children.
@protected, inherited
debugFillProperties(DiagnosticPropertiesBuilder properties) → void
Add additional properties associated with the node.
inherited
noSuchMethod(Invocation invocation) → dynamic
Invoked when a non-existent method or property is accessed.
inherited
removeSuggestion(T suggestion) → void
toDiagnosticsNode({String? name, DiagnosticsTreeStyle? style}) DiagnosticsNode
Returns a debug representation of the object that is used by debugging tools and by DiagnosticsNode.toStringDeep.
inherited
toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) String
A string representation of this object.
inherited
toStringDeep({String prefixLineOne = '', String? prefixOtherLines, DiagnosticLevel minLevel = DiagnosticLevel.debug}) String
Returns a string representation of this node and its descendants.
inherited
toStringShallow({String joiner = ', ', DiagnosticLevel minLevel = DiagnosticLevel.debug}) String
Returns a one-line detailed description of the object.
inherited
toStringShort() String
A short, textual description of this widget.
inherited
triggerSubmitted() → void
updateDecoration({InputDecoration? decoration, List<TextInputFormatter>? inputFormatters, TextCapitalization? textCapitalization, TextStyle? style, TextInputType? keyboardType, TextInputAction? textInputAction}) → void
updateSuggestions(List<T> suggestions) → void

Operators

operator ==(Object other) bool
The equality operator.
@nonVirtual, inherited
autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/AutoCompleteTextFieldState.html ================================================ AutoCompleteTextFieldState constructor - AutoCompleteTextFieldState - autocomplete_textfield library - Dart API
AutoCompleteTextFieldState

AutoCompleteTextFieldState<T> constructor Null safety

AutoCompleteTextFieldState<T>(
  1. List<T> suggestions,
  2. StringCallback? textChanged,
  3. StringCallback? textSubmitted,
  4. ValueSetter<bool>? onFocusChanged,
  5. InputEventCallback<T>? itemSubmitted,
  6. AutoCompleteOverlayItemBuilder<T>? itemBuilder,
  7. Comparator<T>? itemSorter,
  8. Filter<T>? itemFilter,
  9. int suggestionsAmount,
  10. bool submitOnSuggestionTap,
  11. bool clearOnSubmit,
  12. int minLength,
  13. List<TextInputFormatter>? inputFormatters,
  14. TextCapitalization textCapitalization,
  15. InputDecoration decoration,
  16. TextStyle? style,
  17. TextInputType keyboardType,
  18. TextInputAction textInputAction,
  19. TextEditingController? controller,
  20. Color? cursorColor,
  21. Radius? cursorRadius,
  22. double? cursorWidth,
  23. bool? showCursor,
  24. FocusNode? focusNode,
  25. bool autofocus,
  26. bool unFocusOnItemSubmitted,
  27. bool autocorrect
)

Implementation

AutoCompleteTextFieldState(
    this.suggestions,
    this.textChanged,
    this.textSubmitted,
    this.onFocusChanged,
    this.itemSubmitted,
    this.itemBuilder,
    this.itemSorter,
    this.itemFilter,
    this.suggestionsAmount,
    this.submitOnSuggestionTap,
    this.clearOnSubmit,
    this.minLength,
    this.inputFormatters,
    this.textCapitalization,
    this.decoration,
    this.style,
    this.keyboardType,
    this.textInputAction,
    this.controller,
    this.cursorColor,
    this.cursorRadius,
    this.cursorWidth,
    this.showCursor,
    this.focusNode,
    this.autofocus,
    this.unFocusOnItemSubmitted,
    this.autocorrect) {
  textField = new TextField(
    inputFormatters: inputFormatters,
    textCapitalization: textCapitalization,
    decoration: decoration,
    style: style,
    cursorColor: cursorColor ?? Colors.black,
    showCursor: showCursor ?? true,
    cursorWidth: cursorWidth ?? 1,
    cursorRadius: cursorRadius ?? const Radius.circular(2.0),
    keyboardType: keyboardType,
    focusNode: focusNode ?? new FocusNode(),
    autofocus: autofocus,
    controller: controller ?? new TextEditingController(),
    textInputAction: textInputAction,
    autocorrect: autocorrect,
    onChanged: (newText) {
      currentText = newText;
      updateOverlay(newText);

      if (textChanged != null) {
        textChanged!(newText);
      }
    },
    onTap: () {
      updateOverlay(currentText);
    },
    onSubmitted: (submittedText) =>
        triggerSubmitted(submittedText: submittedText),
  );

  if (this.controller != null) {
    currentText = this.controller!.text;
  }

  textField!.focusNode!.addListener(() {
    if (onFocusChanged != null) {
      onFocusChanged!(textField!.focusNode!.hasFocus);
    }

    if (!textField!.focusNode!.hasFocus) {
      filteredSuggestions = [];
      updateOverlay();
    } else if (currentText != "") {
      updateOverlay(currentText);
    }
  });
}
autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/addSuggestion.html ================================================ addSuggestion method - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
addSuggestion

addSuggestion method Null safety

void addSuggestion(
  1. T suggestion
)

Implementation

void addSuggestion(T suggestion) {
  suggestions.add(suggestion);
  updateOverlay(currentText);
}
autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/autocorrect.html ================================================ autocorrect property - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
autocorrect

autocorrect property Null safety

bool autocorrect
read / write

Implementation

bool autocorrect;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/autofocus.html ================================================ autofocus property - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
autofocus

autofocus property Null safety

bool autofocus
read / write

Implementation

bool autofocus;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/build.html ================================================ build method - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
build

build method Null safety

Widget build(
  1. BuildContext context
)
override

Describes the part of the user interface represented by this widget.

The framework calls this method in a number of different situations. For example:

This method can potentially be called in every frame and should not have any side effects beyond building a widget.

The framework replaces the subtree below this widget with the widget returned by this method, either by updating the existing subtree or by removing the subtree and inflating a new subtree, depending on whether the widget returned by this method can update the root of the existing subtree, as determined by calling Widget.canUpdate.

Typically implementations return a newly created constellation of widgets that are configured with information from this widget's constructor, the given BuildContext, and the internal state of this State object.

The given BuildContext contains information about the location in the tree at which this widget is being built. For example, the context provides the set of inherited widgets for this location in the tree. The BuildContext argument is always the same as the context property of this State object and will remain the same for the lifetime of this object. The BuildContext argument is provided redundantly here so that this method matches the signature for a WidgetBuilder.

Design discussion

Why is the build method on State, and not StatefulWidget?

Putting a Widget build(BuildContext context) method on State rather than putting a Widget build(BuildContext context, State state) method on StatefulWidget gives developers more flexibility when subclassing StatefulWidget.

For example, AnimatedWidget is a subclass of StatefulWidget that introduces an abstract Widget build(BuildContext context) method for its subclasses to implement. If StatefulWidget already had a build method that took a State argument, AnimatedWidget would be forced to provide its State object to subclasses even though its State object is an internal implementation detail of AnimatedWidget.

Conceptually, StatelessWidget could also be implemented as a subclass of StatefulWidget in a similar manner. If the build method were on StatefulWidget rather than State, that would not be possible anymore.

Putting the build function on State rather than StatefulWidget also helps avoid a category of bugs related to closures implicitly capturing this. If you defined a closure in a build function on a StatefulWidget, that closure would implicitly capture this, which is the current widget instance, and would have the (immutable) fields of that instance in scope:

class MyButton extends StatefulWidget {
  ...
  final Color color;

  @override
  Widget build(BuildContext context, MyButtonState state) {
    ... () { print("color: $color"); } ...
  }
}

For example, suppose the parent builds MyButton with color being blue, the $color in the print function refers to blue, as expected. Now, suppose the parent rebuilds MyButton with green. The closure created by the first build still implicitly refers to the original widget and the $color still prints blue even through the widget has been updated to green.

In contrast, with the build function on the State object, closures created during build implicitly capture the State instance instead of the widget instance:

class MyButtonState extends State<MyButton> {
  ...
  @override
  Widget build(BuildContext context) {
    ... () { print("color: ${widget.color}"); } ...
  }
}

Now when the parent rebuilds MyButton with green, the closure created by the first build still refers to State object, which is preserved across rebuilds, but the framework has updated that State object's widget property to refer to the new MyButton instance and ${widget.color} prints green, as expected.

See also:

  • StatefulWidget, which contains the discussion on performance considerations.

Implementation

@override
Widget build(BuildContext context) {
  return CompositedTransformTarget(link: _layerLink, child: textField);
}
autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/clear.html ================================================ clear method - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
clear

clear method Null safety

void clear()

Implementation

void clear() {
  textField!.controller!.clear();
  currentText = "";
  updateOverlay();
}
autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/clearOnSubmit.html ================================================ clearOnSubmit property - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
clearOnSubmit

clearOnSubmit property Null safety

bool clearOnSubmit
read / write

Implementation

bool submitOnSuggestionTap, clearOnSubmit, unFocusOnItemSubmitted;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/controller.html ================================================ controller property - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
controller

controller property Null safety

TextEditingController? controller
read / write

Implementation

TextEditingController? controller;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/currentText.html ================================================ currentText property - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
currentText

currentText property Null safety

String currentText
read / write

Implementation

String currentText = "";

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/cursorColor.html ================================================ cursorColor property - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
cursorColor

cursorColor property Null safety

Color? cursorColor
read / write

Implementation

Color? cursorColor;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/cursorRadius.html ================================================ cursorRadius property - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
cursorRadius

cursorRadius property Null safety

Radius? cursorRadius
read / write

Implementation

Radius? cursorRadius;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/cursorWidth.html ================================================ cursorWidth property - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
cursorWidth

cursorWidth property Null safety

double? cursorWidth
read / write

Implementation

double? cursorWidth;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/decoration.html ================================================ decoration property - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
decoration

decoration property Null safety

InputDecoration decoration
read / write

Implementation

InputDecoration decoration;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/dispose.html ================================================ dispose method - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
dispose

dispose method Null safety

void dispose()
override

Called when this object is removed from the tree permanently.

The framework calls this method when this State object will never build again. After the framework calls dispose, the State object is considered unmounted and the mounted property is false. It is an error to call setState at this point. This stage of the lifecycle is terminal: there is no way to remount a State object that has been disposed.

Subclasses should override this method to release any resources retained by this object (e.g., stop any active animations).

If a State's build method depends on an object that can itself change state, for example a ChangeNotifier or Stream, or some other object to which one can subscribe to receive notifications, then be sure to subscribe and unsubscribe properly in initState, didUpdateWidget, and dispose:

  • In initState, subscribe to the object.
  • In didUpdateWidget unsubscribe from the old object and subscribe to the new one if the updated widget configuration requires replacing the object.
  • In dispose, unsubscribe from the object.

Implementations of this method should end with a call to the inherited method, as in super.dispose().

See also:

Implementation

@override
void dispose() {
  // if we created our own focus node and controller, dispose of them
  // otherwise, let the caller dispose of their own instances
  if (focusNode == null) {
    textField!.focusNode!.dispose();
  }
  if (controller == null) {
    textField!.controller!.dispose();
  }
  super.dispose();
}
autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/filteredSuggestions.html ================================================ filteredSuggestions property - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
filteredSuggestions

filteredSuggestions property Null safety

List<T>? filteredSuggestions
read / write

Implementation

List<T>? filteredSuggestions;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/focusNode.html ================================================ focusNode property - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
focusNode

focusNode property Null safety

FocusNode? focusNode
read / write

Implementation

FocusNode? focusNode;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/getSuggestions.html ================================================ getSuggestions method - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
getSuggestions

getSuggestions method Null safety

List<T> getSuggestions(
  1. List<T> suggestions,
  2. Comparator<T>? sorter,
  3. Filter<T>? filter,
  4. int maxAmount,
  5. String? query
)

Implementation

List<T> getSuggestions(List<T> suggestions, Comparator<T>? sorter,
    Filter<T>? filter, int maxAmount, String? query) {
  if (null == query || query.length < minLength) {
    return [];
  }

  suggestions = suggestions.where((item) => filter!(item, query)).toList();
  suggestions.sort(sorter);
  if (suggestions.length > maxAmount) {
    suggestions = suggestions.sublist(0, maxAmount);
  }
  return suggestions;
}
autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/inputFormatters.html ================================================ inputFormatters property - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
inputFormatters

inputFormatters property Null safety

List<TextInputFormatter>? inputFormatters
read / write

Implementation

List<TextInputFormatter>? inputFormatters;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/itemBuilder.html ================================================ itemBuilder property - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
itemBuilder

itemBuilder property Null safety

AutoCompleteOverlayItemBuilder<T>? itemBuilder
read / write

Implementation

AutoCompleteOverlayItemBuilder<T>? itemBuilder;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/itemFilter.html ================================================ itemFilter property - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
itemFilter

itemFilter property Null safety

Filter<T>? itemFilter
read / write

Implementation

Filter<T>? itemFilter;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/itemSorter.html ================================================ itemSorter property - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
itemSorter

itemSorter property Null safety

Comparator<T>? itemSorter
read / write

Implementation

Comparator<T>? itemSorter;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/itemSubmitted.html ================================================ itemSubmitted property - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
itemSubmitted

itemSubmitted property Null safety

InputEventCallback<T>? itemSubmitted
read / write

Implementation

InputEventCallback<T>? itemSubmitted;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/keyboardType.html ================================================ keyboardType property - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
keyboardType

keyboardType property Null safety

TextInputType keyboardType
read / write

Implementation

TextInputType keyboardType;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/listSuggestionsEntry.html ================================================ listSuggestionsEntry property - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
listSuggestionsEntry

listSuggestionsEntry property Null safety

OverlayEntry? listSuggestionsEntry
read / write

Implementation

OverlayEntry? listSuggestionsEntry;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/minLength.html ================================================ minLength property - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
minLength

minLength property Null safety

int minLength
read / write

Implementation

int minLength;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/onFocusChanged.html ================================================ onFocusChanged property - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
onFocusChanged

onFocusChanged property Null safety

ValueSetter<bool>? onFocusChanged
read / write

Implementation

ValueSetter<bool>? onFocusChanged;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/removeSuggestion.html ================================================ removeSuggestion method - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
removeSuggestion

removeSuggestion method Null safety

void removeSuggestion(
  1. T suggestion
)

Implementation

void removeSuggestion(T suggestion) {
  suggestions.contains(suggestion)
      ? suggestions.remove(suggestion)
      : throw "List does not contain suggestion and therefore cannot be removed";
  updateOverlay(currentText);
}
autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/showCursor.html ================================================ showCursor property - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
showCursor

showCursor property Null safety

bool? showCursor
read / write

Implementation

bool? showCursor;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/style.html ================================================ style property - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
style

style property Null safety

TextStyle? style
read / write

Implementation

TextStyle? style;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/submitOnSuggestionTap.html ================================================ submitOnSuggestionTap property - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
submitOnSuggestionTap

submitOnSuggestionTap property Null safety

bool submitOnSuggestionTap
read / write

Implementation

bool submitOnSuggestionTap, clearOnSubmit, unFocusOnItemSubmitted;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/suggestions.html ================================================ suggestions property - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
suggestions

suggestions property Null safety

List<T> suggestions
read / write

Implementation

List<T> suggestions;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/suggestionsAmount.html ================================================ suggestionsAmount property - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
suggestionsAmount

suggestionsAmount property Null safety

int suggestionsAmount
read / write

Implementation

int suggestionsAmount;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/textCapitalization.html ================================================ textCapitalization property - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
textCapitalization

textCapitalization property Null safety

TextCapitalization textCapitalization
read / write

Implementation

TextCapitalization textCapitalization;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/textChanged.html ================================================ textChanged property - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
textChanged

textChanged property Null safety

StringCallback? textChanged
read / write

Implementation

StringCallback? textChanged, textSubmitted;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/textField.html ================================================ textField property - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
textField

textField property Null safety

TextField? textField
read / write

Implementation

TextField? textField;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/textInputAction.html ================================================ textInputAction property - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
textInputAction

textInputAction property Null safety

TextInputAction textInputAction
read / write

Implementation

TextInputAction textInputAction;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/textSubmitted.html ================================================ textSubmitted property - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
textSubmitted

textSubmitted property Null safety

StringCallback? textSubmitted
read / write

Implementation

StringCallback? textChanged, textSubmitted;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/triggerSubmitted.html ================================================ triggerSubmitted method - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
triggerSubmitted

triggerSubmitted method Null safety

void triggerSubmitted(
  1. {dynamic submittedText}
)

Implementation

void triggerSubmitted({submittedText}) {
  submittedText == null
      ? textSubmitted!(currentText)
      : textSubmitted!(submittedText);

  if (clearOnSubmit) {
    clear();
  }
}
autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/unFocusOnItemSubmitted.html ================================================ unFocusOnItemSubmitted property - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
unFocusOnItemSubmitted

unFocusOnItemSubmitted property Null safety

bool unFocusOnItemSubmitted
read / write

Implementation

bool submitOnSuggestionTap, clearOnSubmit, unFocusOnItemSubmitted;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/updateDecoration.html ================================================ updateDecoration method - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
updateDecoration

updateDecoration method Null safety

void updateDecoration(
  1. InputDecoration? decoration,
  2. List<TextInputFormatter>? inputFormatters,
  3. TextCapitalization? textCapitalization,
  4. TextStyle? style,
  5. TextInputType? keyboardType,
  6. TextInputAction? textInputAction
)

Implementation

void updateDecoration(
    InputDecoration? decoration,
    List<TextInputFormatter>? inputFormatters,
    TextCapitalization? textCapitalization,
    TextStyle? style,
    TextInputType? keyboardType,
    TextInputAction? textInputAction) {
  if (decoration != null) {
    this.decoration = decoration;
  }

  if (inputFormatters != null) {
    this.inputFormatters = inputFormatters;
  }

  if (textCapitalization != null) {
    this.textCapitalization = textCapitalization;
  }

  if (style != null) {
    this.style = style;
  }

  if (keyboardType != null) {
    this.keyboardType = keyboardType;
  }

  if (textInputAction != null) {
    this.textInputAction = textInputAction;
  }

  setState(() {
    textField = new TextField(
      inputFormatters: this.inputFormatters,
      textCapitalization: this.textCapitalization,
      decoration: this.decoration,
      style: this.style,
      keyboardType: this.keyboardType,
      focusNode: focusNode ?? new FocusNode(),
      autofocus: autofocus,
      controller: controller ?? new TextEditingController(),
      textInputAction: this.textInputAction,
      onChanged: (newText) {
        currentText = newText;
        updateOverlay(newText);

        if (textChanged != null) {
          textChanged!(newText);
        }
      },
      onTap: () {
        updateOverlay(currentText);
      },
      onSubmitted: (submittedText) =>
          triggerSubmitted(submittedText: submittedText),
    );
  });
}
autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/updateOverlay.html ================================================ updateOverlay method - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
updateOverlay

updateOverlay method Null safety

void updateOverlay(
  1. [String? query]
)

Implementation

void updateOverlay([String? query]) {
  if (listSuggestionsEntry == null && filteredSuggestions != null) {
    final Size textFieldSize = (context.findRenderObject() as RenderBox).size;
    final width = textFieldSize.width;
    final height = textFieldSize.height;
    listSuggestionsEntry = OverlayEntry(builder: (context) {
      return Positioned(
          width: width,
          child: CompositedTransformFollower(
              link: _layerLink,
              showWhenUnlinked: false,
              offset: Offset(0.0, height),
              child: SizedBox(
                  width: width,
                  child: Card(
                      child: new Column(
                    children: filteredSuggestions!.map((suggestion) {
                      return Row(children: [
                        Expanded(
                            child: InkWell(
                                child: itemBuilder!(context, suggestion),
                                onTap: () {
                                  if (!this.mounted) return;
                                  setState(() {
                                    if (submitOnSuggestionTap) {
                                      String newText = suggestion.toString();
                                      textField!.controller!.text = newText;
                                      if (unFocusOnItemSubmitted) {
                                        textField!.focusNode!.unfocus();
                                      }
                                      itemSubmitted!(suggestion);
                                      if (clearOnSubmit) {
                                        clear();
                                      }
                                    } else {
                                      String newText = suggestion.toString();
                                      textField!.controller!.text = newText;
                                      textChanged!(newText);
                                    }
                                  });
                                }))
                      ]);
                    }).toList(),
                  )))));
    });
    Overlay.of(context)!.insert(listSuggestionsEntry!);
  }

  filteredSuggestions = getSuggestions(
      suggestions, itemSorter, itemFilter, suggestionsAmount, query);

  listSuggestionsEntry?.markNeedsBuild();
}
autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState/updateSuggestions.html ================================================ updateSuggestions method - AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
updateSuggestions

updateSuggestions method Null safety

void updateSuggestions(
  1. List<T> suggestions
)

Implementation

void updateSuggestions(List<T> suggestions) {
  this.suggestions = suggestions;
  updateOverlay(currentText);
}
autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/AutoCompleteTextFieldState-class.html ================================================ AutoCompleteTextFieldState class - autocomplete_textfield library - Dart API
AutoCompleteTextFieldState

AutoCompleteTextFieldState<T> class Null safety

Inheritance

Constructors

AutoCompleteTextFieldState(List<T> suggestions, StringCallback? textChanged, StringCallback? textSubmitted, ValueSetter<bool>? onFocusChanged, InputEventCallback<T>? itemSubmitted, AutoCompleteOverlayItemBuilder<T>? itemBuilder, Comparator<T>? itemSorter, Filter<T>? itemFilter, int suggestionsAmount, bool submitOnSuggestionTap, bool clearOnSubmit, int minLength, List<TextInputFormatter>? inputFormatters, TextCapitalization textCapitalization, InputDecoration decoration, TextStyle? style, TextInputType keyboardType, TextInputAction textInputAction, TextEditingController? controller, Color? cursorColor, Radius? cursorRadius, double? cursorWidth, bool? showCursor, FocusNode? focusNode, bool autofocus, bool unFocusOnItemSubmitted, bool autocorrect)

Properties

autocorrect bool
read / write
autofocus bool
read / write
clearOnSubmit bool
read / write
context BuildContext
The location in the tree where this widget builds.
read-only, inherited
controller TextEditingController?
read / write
currentText String
read / write
cursorColor Color?
read / write
cursorRadius Radius?
read / write
cursorWidth double?
read / write
decoration InputDecoration
read / write
filteredSuggestions List<T>?
read / write
focusNode FocusNode?
read / write
hashCode int
The hash code for this object.
read-only, inherited
inputFormatters List<TextInputFormatter>?
read / write
itemBuilder AutoCompleteOverlayItemBuilder<T>?
read / write
itemFilter Filter<T>?
read / write
itemSorter Comparator<T>?
read / write
itemSubmitted InputEventCallback<T>?
read / write
keyboardType TextInputType
read / write
listSuggestionsEntry OverlayEntry?
read / write
minLength int
read / write
mounted bool
Whether this State object is currently in a tree.
read-only, inherited
onFocusChanged ValueSetter<bool>?
read / write
runtimeType Type
A representation of the runtime type of the object.
read-only, inherited
showCursor bool?
read / write
style TextStyle?
read / write
submitOnSuggestionTap bool
read / write
suggestions List<T>
read / write
suggestionsAmount int
read / write
textCapitalization TextCapitalization
read / write
textChanged StringCallback?
read / write
textField TextField?
read / write
textInputAction TextInputAction
read / write
textSubmitted StringCallback?
read / write
unFocusOnItemSubmitted bool
read / write
widget AutoCompleteTextField
The current configuration.
read-only, inherited

Methods

activate() → void
Called when this object is reinserted into the tree after having been removed via deactivate.
@mustCallSuper, @protected, inherited
addSuggestion(T suggestion) → void
build(BuildContext context) Widget
Describes the part of the user interface represented by this widget.
override
clear() → void
deactivate() → void
Called when this object is removed from the tree.
@mustCallSuper, @protected, inherited
debugFillProperties(DiagnosticPropertiesBuilder properties) → void
Add additional properties associated with the node.
inherited
didChangeDependencies() → void
Called when a dependency of this State object changes.
@mustCallSuper, @protected, inherited
didUpdateWidget(covariant AutoCompleteTextField oldWidget) → void
Called whenever the widget configuration changes.
@mustCallSuper, @protected, inherited
dispose() → void
Called when this object is removed from the tree permanently.
override
getSuggestions(List<T> suggestions, Comparator<T>? sorter, Filter<T>? filter, int maxAmount, String? query) List<T>
initState() → void
Called when this object is inserted into the tree.
@mustCallSuper, @protected, inherited
noSuchMethod(Invocation invocation) → dynamic
Invoked when a non-existent method or property is accessed.
inherited
reassemble() → void
Called whenever the application is reassembled during debugging, for example during hot reload.
@mustCallSuper, @protected, inherited
removeSuggestion(T suggestion) → void
setState(VoidCallback fn) → void
Notify the framework that the internal state of this object has changed.
@protected, inherited
toDiagnosticsNode({String? name, DiagnosticsTreeStyle? style}) DiagnosticsNode
Returns a debug representation of the object that is used by debugging tools and by DiagnosticsNode.toStringDeep.
inherited
toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) String
A string representation of this object.
inherited
toStringShort() String
A brief description of this object, usually just the runtimeType and the hashCode.
inherited
triggerSubmitted({dynamic submittedText}) → void
updateDecoration(InputDecoration? decoration, List<TextInputFormatter>? inputFormatters, TextCapitalization? textCapitalization, TextStyle? style, TextInputType? keyboardType, TextInputAction? textInputAction) → void
updateOverlay([String? query]) → void
updateSuggestions(List<T> suggestions) → void

Operators

operator ==(Object other) bool
The equality operator.
inherited
autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/Filter.html ================================================ Filter typedef - autocomplete_textfield library - Dart API
Filter

Filter<T> typedef Null safety

Filter<T> = bool Function(T suggestion, String query)

Implementation

typedef bool Filter<T>(T suggestion, String query);
autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/InputEventCallback.html ================================================ InputEventCallback typedef - autocomplete_textfield library - Dart API
InputEventCallback

InputEventCallback<T> typedef Null safety

InputEventCallback<T> = dynamic Function(T data)

Implementation

typedef InputEventCallback<T>(T data);
autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/SimpleAutoCompleteTextField/SimpleAutoCompleteTextField.html ================================================ SimpleAutoCompleteTextField constructor - SimpleAutoCompleteTextField - autocomplete_textfield library - Dart API
SimpleAutoCompleteTextField

SimpleAutoCompleteTextField constructor Null safety

SimpleAutoCompleteTextField(
  1. {TextStyle? style,
  2. InputDecoration decoration = const InputDecoration(),
  3. ValueSetter<bool>? onFocusChanged,
  4. StringCallback? textChanged,
  5. StringCallback? textSubmitted,
  6. int minLength = 1,
  7. TextEditingController? controller,
  8. FocusNode? focusNode,
  9. bool autofocus = false,
  10. Color? cursorColor,
  11. double? cursorWidth,
  12. Radius? cursorRadius,
  13. bool? showCursor,
  14. TextInputType keyboardType = TextInputType.text,
  15. required GlobalKey<AutoCompleteTextFieldState<String>> key,
  16. required List<String> suggestions,
  17. int suggestionsAmount = 5,
  18. bool submitOnSuggestionTap = true,
  19. bool clearOnSubmit = true,
  20. TextInputAction textInputAction = TextInputAction.done,
  21. TextCapitalization textCapitalization = TextCapitalization.sentences}
)

Implementation

SimpleAutoCompleteTextField(
    {TextStyle? style,
    InputDecoration decoration: const InputDecoration(),
    this.onFocusChanged,
    this.textChanged,
    this.textSubmitted,
    this.minLength = 1,
    this.controller,
    this.focusNode,
    this.autofocus = false,
    this.cursorColor,
    this.cursorWidth,
    this.cursorRadius,
    this.showCursor,
    TextInputType keyboardType: TextInputType.text,
    required GlobalKey<AutoCompleteTextFieldState<String>> key,
    required List<String> suggestions,
    int suggestionsAmount: 5,
    bool submitOnSuggestionTap: true,
    bool clearOnSubmit: true,
    TextInputAction textInputAction: TextInputAction.done,
    TextCapitalization textCapitalization: TextCapitalization.sentences})
    : super(
          style: style,
          decoration: decoration,
          textChanged: textChanged,
          textSubmitted: textSubmitted,
          itemSubmitted: textSubmitted,
          keyboardType: keyboardType,
          key: key,
          suggestions: suggestions,
          itemBuilder: null,
          itemSorter: null,
          itemFilter: null,
          cursorColor: cursorColor,
          cursorWidth: cursorWidth,
          cursorRadius: cursorRadius,
          showCursor: showCursor,
          suggestionsAmount: suggestionsAmount,
          submitOnSuggestionTap: submitOnSuggestionTap,
          clearOnSubmit: clearOnSubmit,
          textInputAction: textInputAction,
          textCapitalization: textCapitalization);
autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/SimpleAutoCompleteTextField/autofocus.html ================================================ autofocus property - SimpleAutoCompleteTextField class - autocomplete_textfield library - Dart API
autofocus

autofocus property Null safety

bool autofocus
final

Implementation

final bool autofocus;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/SimpleAutoCompleteTextField/controller.html ================================================ controller property - SimpleAutoCompleteTextField class - autocomplete_textfield library - Dart API
controller

controller property Null safety

TextEditingController? controller
final

Implementation

final TextEditingController? controller;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/SimpleAutoCompleteTextField/createState.html ================================================ createState method - SimpleAutoCompleteTextField class - autocomplete_textfield library - Dart API
createState

createState method Null safety

State<StatefulWidget> createState()
override

Creates the mutable state for this widget at a given location in the tree.

Subclasses should override this method to return a newly created instance of their associated State subclass:

@override
State<MyWidget> createState() => _MyWidgetState();

The framework can call this method multiple times over the lifetime of a StatefulWidget. For example, if the widget is inserted into the tree in multiple locations, the framework will create a separate State object for each location. Similarly, if the widget is removed from the tree and later inserted into the tree again, the framework will call createState again to create a fresh State object, simplifying the lifecycle of State objects.

Implementation

@override
State<StatefulWidget> createState() => new AutoCompleteTextFieldState<String>(
        suggestions,
        textChanged,
        textSubmitted,
        onFocusChanged,
        itemSubmitted, (context, item) {
      return new Padding(padding: EdgeInsets.all(8.0), child: new Text(item));
    }, (a, b) {
      return a.compareTo(b);
    }, (item, query) {
      final regex = RegExp(query, caseSensitive: false);
      return regex.hasMatch(item.toLowerCase());
    },
        suggestionsAmount,
        submitOnSuggestionTap,
        clearOnSubmit,
        minLength,
        [],
        textCapitalization,
        decoration,
        style,
        keyboardType,
        textInputAction,
        controller,
        cursorColor,
        cursorRadius,
        cursorWidth,
        showCursor,
        focusNode,
        autofocus,
        unFocusOnItemSubmitted,
        autocorrect);
autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/SimpleAutoCompleteTextField/cursorColor.html ================================================ cursorColor property - SimpleAutoCompleteTextField class - autocomplete_textfield library - Dart API
cursorColor

cursorColor property Null safety

Color? cursorColor
final

Implementation

final Color? cursorColor;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/SimpleAutoCompleteTextField/cursorRadius.html ================================================ cursorRadius property - SimpleAutoCompleteTextField class - autocomplete_textfield library - Dart API
cursorRadius

cursorRadius property Null safety

Radius? cursorRadius
final

Implementation

final Radius? cursorRadius;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/SimpleAutoCompleteTextField/cursorWidth.html ================================================ cursorWidth property - SimpleAutoCompleteTextField class - autocomplete_textfield library - Dart API
cursorWidth

cursorWidth property Null safety

double? cursorWidth
final

Implementation

final double? cursorWidth;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/SimpleAutoCompleteTextField/focusNode.html ================================================ focusNode property - SimpleAutoCompleteTextField class - autocomplete_textfield library - Dart API
focusNode

focusNode property Null safety

FocusNode? focusNode
final

Implementation

final FocusNode? focusNode;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/SimpleAutoCompleteTextField/minLength.html ================================================ minLength property - SimpleAutoCompleteTextField class - autocomplete_textfield library - Dart API
minLength

minLength property Null safety

int minLength
final

Implementation

final int minLength;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/SimpleAutoCompleteTextField/onFocusChanged.html ================================================ onFocusChanged property - SimpleAutoCompleteTextField class - autocomplete_textfield library - Dart API
onFocusChanged

onFocusChanged property Null safety

ValueSetter<bool>? onFocusChanged
final

Implementation

final ValueSetter<bool>? onFocusChanged;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/SimpleAutoCompleteTextField/showCursor.html ================================================ showCursor property - SimpleAutoCompleteTextField class - autocomplete_textfield library - Dart API
showCursor

showCursor property Null safety

bool? showCursor
final

Implementation

final bool? showCursor;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/SimpleAutoCompleteTextField/textChanged.html ================================================ textChanged property - SimpleAutoCompleteTextField class - autocomplete_textfield library - Dart API
textChanged

textChanged property Null safety

StringCallback? textChanged
final

Implementation

final StringCallback? textChanged, textSubmitted;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/SimpleAutoCompleteTextField/textSubmitted.html ================================================ textSubmitted property - SimpleAutoCompleteTextField class - autocomplete_textfield library - Dart API
textSubmitted

textSubmitted property Null safety

StringCallback? textSubmitted
final

Implementation

final StringCallback? textChanged, textSubmitted;

autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/SimpleAutoCompleteTextField-class.html ================================================ SimpleAutoCompleteTextField class - autocomplete_textfield library - Dart API
SimpleAutoCompleteTextField

SimpleAutoCompleteTextField class Null safety

Inheritance

Constructors

SimpleAutoCompleteTextField({TextStyle? style, InputDecoration decoration = const InputDecoration(), ValueSetter<bool>? onFocusChanged, StringCallback? textChanged, StringCallback? textSubmitted, int minLength = 1, TextEditingController? controller, FocusNode? focusNode, bool autofocus = false, Color? cursorColor, double? cursorWidth, Radius? cursorRadius, bool? showCursor, TextInputType keyboardType = TextInputType.text, required GlobalKey<AutoCompleteTextFieldState<String>> key, required List<String> suggestions, int suggestionsAmount = 5, bool submitOnSuggestionTap = true, bool clearOnSubmit = true, TextInputAction textInputAction = TextInputAction.done, TextCapitalization textCapitalization = TextCapitalization.sentences})

Properties

autocorrect bool
final, inherited
autofocus bool
final
clearOnSubmit bool
final, inherited
controller TextEditingController?
final
cursorColor Color?
final
cursorRadius Radius?
final
cursorWidth double?
final
decoration InputDecoration
final, inherited
focusNode FocusNode?
final
hashCode int
The hash code for this object.
@nonVirtual, read-only, inherited
inputFormatters List<TextInputFormatter>?
final, inherited
itemBuilder AutoCompleteOverlayItemBuilder<String>?
final, inherited
itemFilter Filter<String>?
final, inherited
itemSorter Comparator<String>?
final, inherited
itemSubmitted InputEventCallback<String>?
final, inherited
key GlobalKey<AutoCompleteTextFieldState<String>>
Controls how one widget replaces another widget in the tree.
final, inherited
keyboardType TextInputType
final, inherited
minLength int
final
onFocusChanged ValueSetter<bool>?
final
runtimeType Type
A representation of the runtime type of the object.
read-only, inherited
showCursor bool?
final
style TextStyle?
final, inherited
submitOnSuggestionTap bool
final, inherited
suggestions List<String>
final, inherited
suggestionsAmount int
final, inherited
textCapitalization TextCapitalization
final, inherited
textChanged StringCallback?
final
textField TextField?
read-only, inherited
textInputAction TextInputAction
final, inherited
textSubmitted StringCallback?
final
unFocusOnItemSubmitted bool
final, inherited

Methods

addSuggestion(String suggestion) → void
inherited
clear() → void
inherited
createElement() StatefulElement
Creates a StatefulElement to manage this widget's location in the tree.
inherited
createState() State<StatefulWidget>
Creates the mutable state for this widget at a given location in the tree.
override
debugDescribeChildren() List<DiagnosticsNode>
Returns a list of DiagnosticsNode objects describing this node's children.
@protected, inherited
debugFillProperties(DiagnosticPropertiesBuilder properties) → void
Add additional properties associated with the node.
inherited
noSuchMethod(Invocation invocation) → dynamic
Invoked when a non-existent method or property is accessed.
inherited
removeSuggestion(String suggestion) → void
inherited
toDiagnosticsNode({String? name, DiagnosticsTreeStyle? style}) DiagnosticsNode
Returns a debug representation of the object that is used by debugging tools and by DiagnosticsNode.toStringDeep.
inherited
toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) String
A string representation of this object.
inherited
toStringDeep({String prefixLineOne = '', String? prefixOtherLines, DiagnosticLevel minLevel = DiagnosticLevel.debug}) String
Returns a string representation of this node and its descendants.
inherited
toStringShallow({String joiner = ', ', DiagnosticLevel minLevel = DiagnosticLevel.debug}) String
Returns a one-line detailed description of the object.
inherited
toStringShort() String
A short, textual description of this widget.
inherited
triggerSubmitted() → void
inherited
updateDecoration({InputDecoration? decoration, List<TextInputFormatter>? inputFormatters, TextCapitalization? textCapitalization, TextStyle? style, TextInputType? keyboardType, TextInputAction? textInputAction}) → void
inherited
updateSuggestions(List<String> suggestions) → void
inherited

Operators

operator ==(Object other) bool
The equality operator.
@nonVirtual, inherited
autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/StringCallback.html ================================================ StringCallback typedef - autocomplete_textfield library - Dart API
StringCallback

StringCallback typedef Null safety

StringCallback = dynamic Function(String data)

Implementation

typedef StringCallback(String data);
autocomplete_textfield 2.0.0
================================================ FILE: doc/api/autocomplete_textfield/autocomplete_textfield-library.html ================================================ autocomplete_textfield library - Dart API
autocomplete_textfield

autocomplete_textfield library Null safety

Classes

AutoCompleteTextField<T>
AutoCompleteTextFieldState<T>
SimpleAutoCompleteTextField

Typedefs

AutoCompleteOverlayItemBuilder<T> = Widget Function(BuildContext context, T suggestion)
Filter<T> = bool Function(T suggestion, String query)
InputEventCallback<T> = dynamic Function(T data)
StringCallback = dynamic Function(String data)
autocomplete_textfield 2.0.0
================================================ FILE: doc/api/categories.json ================================================ [] ================================================ FILE: doc/api/index.html ================================================ autocomplete_textfield - Dart API docs
autocomplete_textfield

autocomplete_textfield

An autocomplete textfield for flutter

pull requests

Feel free to submit pull requests for desired changes / features / bug fixes... It makes the maintenance of this code much easier as I no longer use Flutter frequently.

Pub Package Can Be Found At

Pub Package

Breaking Changes

TextField is set by default to call onSubmitted on a suggestion tap and also to clear the TextField on submit.

These can both be disabled with submitOnSuggestionTap and clearOnSubmit respectively.

Usage

AutoCompleteTextField supports any data type suggestions

 new AutoCompleteTextField<YOURDATATYPE>()

The suggestions parameter must have data that matches <YOURDATATYPE>

A global key of type GlobalKey<AutoCompleteTextFieldState<T>> is required so that the clear() method can be called to clear AutoCompleteTextField.

Strings and itemFilter

Filtering is case sensitive so when using strings a common implementation of itemFilter is .

itemFilter: (item, query) {
  return item.toLowerCase().startsWith(query.toLowerCase());
}

Libraries

autocomplete_textfield
autocomplete_textfield 2.0.0
================================================ FILE: doc/api/index.json ================================================ [{"name":"autocomplete_textfield","qualifiedName":"autocomplete_textfield","href":"autocomplete_textfield/autocomplete_textfield-library.html","type":"library","overriddenDepth":0,"packageName":"autocomplete_textfield"},{"name":"AutoCompleteOverlayItemBuilder","qualifiedName":"autocomplete_textfield.AutoCompleteOverlayItemBuilder","href":"autocomplete_textfield/AutoCompleteOverlayItemBuilder.html","type":"typedef","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"autocomplete_textfield","type":"library"}},{"name":"AutoCompleteTextField","qualifiedName":"autocomplete_textfield.AutoCompleteTextField","href":"autocomplete_textfield/AutoCompleteTextField-class.html","type":"class","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"autocomplete_textfield","type":"library"}},{"name":"AutoCompleteTextField","qualifiedName":"autocomplete_textfield.AutoCompleteTextField.AutoCompleteTextField","href":"autocomplete_textfield/AutoCompleteTextField/AutoCompleteTextField.html","type":"constructor","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextField","type":"class"}},{"name":"addSuggestion","qualifiedName":"autocomplete_textfield.AutoCompleteTextField.addSuggestion","href":"autocomplete_textfield/AutoCompleteTextField/addSuggestion.html","type":"method","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextField","type":"class"}},{"name":"autocorrect","qualifiedName":"autocomplete_textfield.AutoCompleteTextField.autocorrect","href":"autocomplete_textfield/AutoCompleteTextField/autocorrect.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextField","type":"class"}},{"name":"autofocus","qualifiedName":"autocomplete_textfield.AutoCompleteTextField.autofocus","href":"autocomplete_textfield/AutoCompleteTextField/autofocus.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextField","type":"class"}},{"name":"clear","qualifiedName":"autocomplete_textfield.AutoCompleteTextField.clear","href":"autocomplete_textfield/AutoCompleteTextField/clear.html","type":"method","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextField","type":"class"}},{"name":"clearOnSubmit","qualifiedName":"autocomplete_textfield.AutoCompleteTextField.clearOnSubmit","href":"autocomplete_textfield/AutoCompleteTextField/clearOnSubmit.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextField","type":"class"}},{"name":"controller","qualifiedName":"autocomplete_textfield.AutoCompleteTextField.controller","href":"autocomplete_textfield/AutoCompleteTextField/controller.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextField","type":"class"}},{"name":"createState","qualifiedName":"autocomplete_textfield.AutoCompleteTextField.createState","href":"autocomplete_textfield/AutoCompleteTextField/createState.html","type":"method","overriddenDepth":1,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextField","type":"class"}},{"name":"cursorColor","qualifiedName":"autocomplete_textfield.AutoCompleteTextField.cursorColor","href":"autocomplete_textfield/AutoCompleteTextField/cursorColor.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextField","type":"class"}},{"name":"cursorRadius","qualifiedName":"autocomplete_textfield.AutoCompleteTextField.cursorRadius","href":"autocomplete_textfield/AutoCompleteTextField/cursorRadius.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextField","type":"class"}},{"name":"cursorWidth","qualifiedName":"autocomplete_textfield.AutoCompleteTextField.cursorWidth","href":"autocomplete_textfield/AutoCompleteTextField/cursorWidth.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextField","type":"class"}},{"name":"decoration","qualifiedName":"autocomplete_textfield.AutoCompleteTextField.decoration","href":"autocomplete_textfield/AutoCompleteTextField/decoration.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextField","type":"class"}},{"name":"focusNode","qualifiedName":"autocomplete_textfield.AutoCompleteTextField.focusNode","href":"autocomplete_textfield/AutoCompleteTextField/focusNode.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextField","type":"class"}},{"name":"inputFormatters","qualifiedName":"autocomplete_textfield.AutoCompleteTextField.inputFormatters","href":"autocomplete_textfield/AutoCompleteTextField/inputFormatters.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextField","type":"class"}},{"name":"itemBuilder","qualifiedName":"autocomplete_textfield.AutoCompleteTextField.itemBuilder","href":"autocomplete_textfield/AutoCompleteTextField/itemBuilder.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextField","type":"class"}},{"name":"itemFilter","qualifiedName":"autocomplete_textfield.AutoCompleteTextField.itemFilter","href":"autocomplete_textfield/AutoCompleteTextField/itemFilter.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextField","type":"class"}},{"name":"itemSorter","qualifiedName":"autocomplete_textfield.AutoCompleteTextField.itemSorter","href":"autocomplete_textfield/AutoCompleteTextField/itemSorter.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextField","type":"class"}},{"name":"itemSubmitted","qualifiedName":"autocomplete_textfield.AutoCompleteTextField.itemSubmitted","href":"autocomplete_textfield/AutoCompleteTextField/itemSubmitted.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextField","type":"class"}},{"name":"key","qualifiedName":"autocomplete_textfield.AutoCompleteTextField.key","href":"autocomplete_textfield/AutoCompleteTextField/key.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextField","type":"class"}},{"name":"keyboardType","qualifiedName":"autocomplete_textfield.AutoCompleteTextField.keyboardType","href":"autocomplete_textfield/AutoCompleteTextField/keyboardType.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextField","type":"class"}},{"name":"minLength","qualifiedName":"autocomplete_textfield.AutoCompleteTextField.minLength","href":"autocomplete_textfield/AutoCompleteTextField/minLength.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextField","type":"class"}},{"name":"onFocusChanged","qualifiedName":"autocomplete_textfield.AutoCompleteTextField.onFocusChanged","href":"autocomplete_textfield/AutoCompleteTextField/onFocusChanged.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextField","type":"class"}},{"name":"removeSuggestion","qualifiedName":"autocomplete_textfield.AutoCompleteTextField.removeSuggestion","href":"autocomplete_textfield/AutoCompleteTextField/removeSuggestion.html","type":"method","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextField","type":"class"}},{"name":"showCursor","qualifiedName":"autocomplete_textfield.AutoCompleteTextField.showCursor","href":"autocomplete_textfield/AutoCompleteTextField/showCursor.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextField","type":"class"}},{"name":"style","qualifiedName":"autocomplete_textfield.AutoCompleteTextField.style","href":"autocomplete_textfield/AutoCompleteTextField/style.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextField","type":"class"}},{"name":"submitOnSuggestionTap","qualifiedName":"autocomplete_textfield.AutoCompleteTextField.submitOnSuggestionTap","href":"autocomplete_textfield/AutoCompleteTextField/submitOnSuggestionTap.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextField","type":"class"}},{"name":"suggestions","qualifiedName":"autocomplete_textfield.AutoCompleteTextField.suggestions","href":"autocomplete_textfield/AutoCompleteTextField/suggestions.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextField","type":"class"}},{"name":"suggestionsAmount","qualifiedName":"autocomplete_textfield.AutoCompleteTextField.suggestionsAmount","href":"autocomplete_textfield/AutoCompleteTextField/suggestionsAmount.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextField","type":"class"}},{"name":"textCapitalization","qualifiedName":"autocomplete_textfield.AutoCompleteTextField.textCapitalization","href":"autocomplete_textfield/AutoCompleteTextField/textCapitalization.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextField","type":"class"}},{"name":"textChanged","qualifiedName":"autocomplete_textfield.AutoCompleteTextField.textChanged","href":"autocomplete_textfield/AutoCompleteTextField/textChanged.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextField","type":"class"}},{"name":"textField","qualifiedName":"autocomplete_textfield.AutoCompleteTextField.textField","href":"autocomplete_textfield/AutoCompleteTextField/textField.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextField","type":"class"}},{"name":"textInputAction","qualifiedName":"autocomplete_textfield.AutoCompleteTextField.textInputAction","href":"autocomplete_textfield/AutoCompleteTextField/textInputAction.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextField","type":"class"}},{"name":"textSubmitted","qualifiedName":"autocomplete_textfield.AutoCompleteTextField.textSubmitted","href":"autocomplete_textfield/AutoCompleteTextField/textSubmitted.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextField","type":"class"}},{"name":"triggerSubmitted","qualifiedName":"autocomplete_textfield.AutoCompleteTextField.triggerSubmitted","href":"autocomplete_textfield/AutoCompleteTextField/triggerSubmitted.html","type":"method","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextField","type":"class"}},{"name":"unFocusOnItemSubmitted","qualifiedName":"autocomplete_textfield.AutoCompleteTextField.unFocusOnItemSubmitted","href":"autocomplete_textfield/AutoCompleteTextField/unFocusOnItemSubmitted.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextField","type":"class"}},{"name":"updateDecoration","qualifiedName":"autocomplete_textfield.AutoCompleteTextField.updateDecoration","href":"autocomplete_textfield/AutoCompleteTextField/updateDecoration.html","type":"method","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextField","type":"class"}},{"name":"updateSuggestions","qualifiedName":"autocomplete_textfield.AutoCompleteTextField.updateSuggestions","href":"autocomplete_textfield/AutoCompleteTextField/updateSuggestions.html","type":"method","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextField","type":"class"}},{"name":"AutoCompleteTextFieldState","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState","href":"autocomplete_textfield/AutoCompleteTextFieldState-class.html","type":"class","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"autocomplete_textfield","type":"library"}},{"name":"AutoCompleteTextFieldState","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.AutoCompleteTextFieldState","href":"autocomplete_textfield/AutoCompleteTextFieldState/AutoCompleteTextFieldState.html","type":"constructor","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"addSuggestion","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.addSuggestion","href":"autocomplete_textfield/AutoCompleteTextFieldState/addSuggestion.html","type":"method","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"autocorrect","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.autocorrect","href":"autocomplete_textfield/AutoCompleteTextFieldState/autocorrect.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"autofocus","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.autofocus","href":"autocomplete_textfield/AutoCompleteTextFieldState/autofocus.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"build","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.build","href":"autocomplete_textfield/AutoCompleteTextFieldState/build.html","type":"method","overriddenDepth":1,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"clear","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.clear","href":"autocomplete_textfield/AutoCompleteTextFieldState/clear.html","type":"method","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"clearOnSubmit","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.clearOnSubmit","href":"autocomplete_textfield/AutoCompleteTextFieldState/clearOnSubmit.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"controller","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.controller","href":"autocomplete_textfield/AutoCompleteTextFieldState/controller.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"currentText","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.currentText","href":"autocomplete_textfield/AutoCompleteTextFieldState/currentText.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"cursorColor","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.cursorColor","href":"autocomplete_textfield/AutoCompleteTextFieldState/cursorColor.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"cursorRadius","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.cursorRadius","href":"autocomplete_textfield/AutoCompleteTextFieldState/cursorRadius.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"cursorWidth","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.cursorWidth","href":"autocomplete_textfield/AutoCompleteTextFieldState/cursorWidth.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"decoration","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.decoration","href":"autocomplete_textfield/AutoCompleteTextFieldState/decoration.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"dispose","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.dispose","href":"autocomplete_textfield/AutoCompleteTextFieldState/dispose.html","type":"method","overriddenDepth":1,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"filteredSuggestions","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.filteredSuggestions","href":"autocomplete_textfield/AutoCompleteTextFieldState/filteredSuggestions.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"focusNode","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.focusNode","href":"autocomplete_textfield/AutoCompleteTextFieldState/focusNode.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"getSuggestions","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.getSuggestions","href":"autocomplete_textfield/AutoCompleteTextFieldState/getSuggestions.html","type":"method","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"inputFormatters","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.inputFormatters","href":"autocomplete_textfield/AutoCompleteTextFieldState/inputFormatters.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"itemBuilder","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.itemBuilder","href":"autocomplete_textfield/AutoCompleteTextFieldState/itemBuilder.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"itemFilter","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.itemFilter","href":"autocomplete_textfield/AutoCompleteTextFieldState/itemFilter.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"itemSorter","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.itemSorter","href":"autocomplete_textfield/AutoCompleteTextFieldState/itemSorter.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"itemSubmitted","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.itemSubmitted","href":"autocomplete_textfield/AutoCompleteTextFieldState/itemSubmitted.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"keyboardType","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.keyboardType","href":"autocomplete_textfield/AutoCompleteTextFieldState/keyboardType.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"listSuggestionsEntry","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.listSuggestionsEntry","href":"autocomplete_textfield/AutoCompleteTextFieldState/listSuggestionsEntry.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"minLength","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.minLength","href":"autocomplete_textfield/AutoCompleteTextFieldState/minLength.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"onFocusChanged","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.onFocusChanged","href":"autocomplete_textfield/AutoCompleteTextFieldState/onFocusChanged.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"removeSuggestion","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.removeSuggestion","href":"autocomplete_textfield/AutoCompleteTextFieldState/removeSuggestion.html","type":"method","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"showCursor","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.showCursor","href":"autocomplete_textfield/AutoCompleteTextFieldState/showCursor.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"style","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.style","href":"autocomplete_textfield/AutoCompleteTextFieldState/style.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"submitOnSuggestionTap","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.submitOnSuggestionTap","href":"autocomplete_textfield/AutoCompleteTextFieldState/submitOnSuggestionTap.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"suggestions","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.suggestions","href":"autocomplete_textfield/AutoCompleteTextFieldState/suggestions.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"suggestionsAmount","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.suggestionsAmount","href":"autocomplete_textfield/AutoCompleteTextFieldState/suggestionsAmount.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"textCapitalization","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.textCapitalization","href":"autocomplete_textfield/AutoCompleteTextFieldState/textCapitalization.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"textChanged","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.textChanged","href":"autocomplete_textfield/AutoCompleteTextFieldState/textChanged.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"textField","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.textField","href":"autocomplete_textfield/AutoCompleteTextFieldState/textField.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"textInputAction","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.textInputAction","href":"autocomplete_textfield/AutoCompleteTextFieldState/textInputAction.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"textSubmitted","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.textSubmitted","href":"autocomplete_textfield/AutoCompleteTextFieldState/textSubmitted.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"triggerSubmitted","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.triggerSubmitted","href":"autocomplete_textfield/AutoCompleteTextFieldState/triggerSubmitted.html","type":"method","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"unFocusOnItemSubmitted","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.unFocusOnItemSubmitted","href":"autocomplete_textfield/AutoCompleteTextFieldState/unFocusOnItemSubmitted.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"updateDecoration","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.updateDecoration","href":"autocomplete_textfield/AutoCompleteTextFieldState/updateDecoration.html","type":"method","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"updateOverlay","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.updateOverlay","href":"autocomplete_textfield/AutoCompleteTextFieldState/updateOverlay.html","type":"method","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"updateSuggestions","qualifiedName":"autocomplete_textfield.AutoCompleteTextFieldState.updateSuggestions","href":"autocomplete_textfield/AutoCompleteTextFieldState/updateSuggestions.html","type":"method","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"AutoCompleteTextFieldState","type":"class"}},{"name":"Filter","qualifiedName":"autocomplete_textfield.Filter","href":"autocomplete_textfield/Filter.html","type":"typedef","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"autocomplete_textfield","type":"library"}},{"name":"InputEventCallback","qualifiedName":"autocomplete_textfield.InputEventCallback","href":"autocomplete_textfield/InputEventCallback.html","type":"typedef","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"autocomplete_textfield","type":"library"}},{"name":"SimpleAutoCompleteTextField","qualifiedName":"autocomplete_textfield.SimpleAutoCompleteTextField","href":"autocomplete_textfield/SimpleAutoCompleteTextField-class.html","type":"class","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"autocomplete_textfield","type":"library"}},{"name":"SimpleAutoCompleteTextField","qualifiedName":"autocomplete_textfield.SimpleAutoCompleteTextField.SimpleAutoCompleteTextField","href":"autocomplete_textfield/SimpleAutoCompleteTextField/SimpleAutoCompleteTextField.html","type":"constructor","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"SimpleAutoCompleteTextField","type":"class"}},{"name":"autofocus","qualifiedName":"autocomplete_textfield.SimpleAutoCompleteTextField.autofocus","href":"autocomplete_textfield/SimpleAutoCompleteTextField/autofocus.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"SimpleAutoCompleteTextField","type":"class"}},{"name":"controller","qualifiedName":"autocomplete_textfield.SimpleAutoCompleteTextField.controller","href":"autocomplete_textfield/SimpleAutoCompleteTextField/controller.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"SimpleAutoCompleteTextField","type":"class"}},{"name":"createState","qualifiedName":"autocomplete_textfield.SimpleAutoCompleteTextField.createState","href":"autocomplete_textfield/SimpleAutoCompleteTextField/createState.html","type":"method","overriddenDepth":2,"packageName":"autocomplete_textfield","enclosedBy":{"name":"SimpleAutoCompleteTextField","type":"class"}},{"name":"cursorColor","qualifiedName":"autocomplete_textfield.SimpleAutoCompleteTextField.cursorColor","href":"autocomplete_textfield/SimpleAutoCompleteTextField/cursorColor.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"SimpleAutoCompleteTextField","type":"class"}},{"name":"cursorRadius","qualifiedName":"autocomplete_textfield.SimpleAutoCompleteTextField.cursorRadius","href":"autocomplete_textfield/SimpleAutoCompleteTextField/cursorRadius.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"SimpleAutoCompleteTextField","type":"class"}},{"name":"cursorWidth","qualifiedName":"autocomplete_textfield.SimpleAutoCompleteTextField.cursorWidth","href":"autocomplete_textfield/SimpleAutoCompleteTextField/cursorWidth.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"SimpleAutoCompleteTextField","type":"class"}},{"name":"focusNode","qualifiedName":"autocomplete_textfield.SimpleAutoCompleteTextField.focusNode","href":"autocomplete_textfield/SimpleAutoCompleteTextField/focusNode.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"SimpleAutoCompleteTextField","type":"class"}},{"name":"minLength","qualifiedName":"autocomplete_textfield.SimpleAutoCompleteTextField.minLength","href":"autocomplete_textfield/SimpleAutoCompleteTextField/minLength.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"SimpleAutoCompleteTextField","type":"class"}},{"name":"onFocusChanged","qualifiedName":"autocomplete_textfield.SimpleAutoCompleteTextField.onFocusChanged","href":"autocomplete_textfield/SimpleAutoCompleteTextField/onFocusChanged.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"SimpleAutoCompleteTextField","type":"class"}},{"name":"showCursor","qualifiedName":"autocomplete_textfield.SimpleAutoCompleteTextField.showCursor","href":"autocomplete_textfield/SimpleAutoCompleteTextField/showCursor.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"SimpleAutoCompleteTextField","type":"class"}},{"name":"textChanged","qualifiedName":"autocomplete_textfield.SimpleAutoCompleteTextField.textChanged","href":"autocomplete_textfield/SimpleAutoCompleteTextField/textChanged.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"SimpleAutoCompleteTextField","type":"class"}},{"name":"textSubmitted","qualifiedName":"autocomplete_textfield.SimpleAutoCompleteTextField.textSubmitted","href":"autocomplete_textfield/SimpleAutoCompleteTextField/textSubmitted.html","type":"property","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"SimpleAutoCompleteTextField","type":"class"}},{"name":"StringCallback","qualifiedName":"autocomplete_textfield.StringCallback","href":"autocomplete_textfield/StringCallback.html","type":"typedef","overriddenDepth":0,"packageName":"autocomplete_textfield","enclosedBy":{"name":"autocomplete_textfield","type":"library"}}] ================================================ FILE: doc/api/static-assets/github.css ================================================ /* github.com style (c) Vasily Polovnyov */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hljs-comment, .hljs-quote { color: #998; font-style: italic; } .hljs-keyword, .hljs-selector-tag, .hljs-subst { color: #333; font-weight: bold; } .hljs-number, .hljs-literal, .hljs-variable, .hljs-template-variable, .hljs-tag .hljs-attr { color: #008080; } .hljs-string, .hljs-doctag { color: #d14; } .hljs-title, .hljs-section, .hljs-selector-id { color: #900; font-weight: bold; } .hljs-subst { font-weight: normal; } .hljs-type, .hljs-class .hljs-title { color: #458; font-weight: bold; } .hljs-tag, .hljs-name, .hljs-attribute { color: #000080; font-weight: normal; } .hljs-regexp, .hljs-link { color: #009926; } .hljs-symbol, .hljs-bullet { color: #990073; } .hljs-built_in, .hljs-builtin-name { color: #0086b3; } .hljs-meta { color: #999; font-weight: bold; } .hljs-deletion { background: #fdd; } .hljs-addition { background: #dfd; } .hljs-emphasis { font-style: italic; } .hljs-strong { font-weight: bold; } ================================================ FILE: doc/api/static-assets/highlight.pack.js ================================================ /*! Highlight.js v11.0.1 (git: 1cf31f015d) (c) 2006-2021 Ivan Sagalaev and other contributors License: BSD-3-Clause */ var hljs=function(){"use strict";var e={exports:{}};function t(e){ return e instanceof Map?e.clear=e.delete=e.set=()=>{ throw Error("map is read-only")}:e instanceof Set&&(e.add=e.clear=e.delete=()=>{ throw Error("set is read-only") }),Object.freeze(e),Object.getOwnPropertyNames(e).forEach((n=>{var i=e[n] ;"object"!=typeof i||Object.isFrozen(i)||t(i)})),e} e.exports=t,e.exports.default=t;var n=e.exports;class i{constructor(e){ void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1} ignoreMatch(){this.isMatchIgnored=!0}}function r(e){ return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'") }function s(e,...t){const n=Object.create(null);for(const t in e)n[t]=e[t] ;return t.forEach((e=>{for(const t in e)n[t]=e[t]})),n}const o=e=>!!e.kind ;class a{constructor(e,t){ this.buffer="",this.classPrefix=t.classPrefix,e.walk(this)}addText(e){ this.buffer+=r(e)}openNode(e){if(!o(e))return;let t=e.kind ;t=e.sublanguage?"language-"+t:((e,{prefix:t})=>{if(e.includes(".")){ const n=e.split(".") ;return[`${t}${n.shift()}`,...n.map(((e,t)=>`${e}${"_".repeat(t+1)}`))].join(" ") }return`${t}${e}`})(t,{prefix:this.classPrefix}),this.span(t)}closeNode(e){ o(e)&&(this.buffer+="")}value(){return this.buffer}span(e){ this.buffer+=``}}class l{constructor(){this.rootNode={ children:[]},this.stack=[this.rootNode]}get top(){ return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){ this.top.children.push(e)}openNode(e){const t={kind:e,children:[]} ;this.add(t),this.stack.push(t)}closeNode(){ if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){ for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)} walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,t){ return"string"==typeof t?e.addText(t):t.children&&(e.openNode(t), t.children.forEach((t=>this._walk(e,t))),e.closeNode(t)),e}static _collapse(e){ "string"!=typeof e&&e.children&&(e.children.every((e=>"string"==typeof e))?e.children=[e.children.join("")]:e.children.forEach((e=>{ l._collapse(e)})))}}class c extends l{constructor(e){super(),this.options=e} addKeyword(e,t){""!==e&&(this.openNode(t),this.addText(e),this.closeNode())} addText(e){""!==e&&this.add(e)}addSublanguage(e,t){const n=e.root ;n.kind=t,n.sublanguage=!0,this.add(n)}toHTML(){ return new a(this,this.options).value()}finalize(){return!0}}function g(e){ return e?"string"==typeof e?e:e.source:null}function d(...e){ return e.map((e=>g(e))).join("")}function u(...e){return"("+((e=>{ const t=e[e.length-1] ;return"object"==typeof t&&t.constructor===Object?(e.splice(e.length-1,1),t):{} })(e).capture?"":"?:")+e.map((e=>g(e))).join("|")+")"}function h(e){ return RegExp(e.toString()+"|").exec("").length-1} const f=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./ ;function p(e,{joinWith:t}){let n=0;return e.map((e=>{n+=1;const t=n ;let i=g(e),r="";for(;i.length>0;){const e=f.exec(i);if(!e){r+=i;break} r+=i.substring(0,e.index), i=i.substring(e.index+e[0].length),"\\"===e[0][0]&&e[1]?r+="\\"+(Number(e[1])+t):(r+=e[0], "("===e[0]&&n++)}return r})).map((e=>`(${e})`)).join(t)} const b="[a-zA-Z]\\w*",m="[a-zA-Z_]\\w*",E="\\b\\d+(\\.\\d+)?",x="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",y="\\b(0b[01]+)",w={ begin:"\\\\[\\s\\S]",relevance:0},_={scope:"string",begin:"'",end:"'", illegal:"\\n",contains:[w]},v={scope:"string",begin:'"',end:'"',illegal:"\\n", contains:[w]},O=(e,t,n={})=>{const i=s({scope:"comment",begin:e,end:t, contains:[]},n);i.contains.push({scope:"doctag", begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)", end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0}) ;const r=u("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/) ;return i.contains.push({begin:d(/[ ]+/,"(",r,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),i },k=O("//","$"),N=O("/\\*","\\*/"),S=O("#","$");var M=Object.freeze({ __proto__:null,MATCH_NOTHING_RE:/\b\B/,IDENT_RE:b,UNDERSCORE_IDENT_RE:m, NUMBER_RE:E,C_NUMBER_RE:x,BINARY_NUMBER_RE:y, RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~", SHEBANG:(e={})=>{const t=/^#![ ]*\// ;return e.binary&&(e.begin=d(t,/.*\b/,e.binary,/\b.*/)),s({scope:"meta",begin:t, end:/$/,relevance:0,"on:begin":(e,t)=>{0!==e.index&&t.ignoreMatch()}},e)}, BACKSLASH_ESCAPE:w,APOS_STRING_MODE:_,QUOTE_STRING_MODE:v,PHRASAL_WORDS_MODE:{ begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/ },COMMENT:O,C_LINE_COMMENT_MODE:k,C_BLOCK_COMMENT_MODE:N,HASH_COMMENT_MODE:S, NUMBER_MODE:{scope:"number",begin:E,relevance:0},C_NUMBER_MODE:{scope:"number", begin:x,relevance:0},BINARY_NUMBER_MODE:{scope:"number",begin:y,relevance:0}, REGEXP_MODE:{begin:/(?=\/[^/\n]*\/)/,contains:[{scope:"regexp",begin:/\//, end:/\/[gimuy]*/,illegal:/\n/,contains:[w,{begin:/\[/,end:/\]/,relevance:0, contains:[w]}]}]},TITLE_MODE:{scope:"title",begin:b,relevance:0}, UNDERSCORE_TITLE_MODE:{scope:"title",begin:m,relevance:0},METHOD_GUARD:{ begin:"\\.\\s*[a-zA-Z_]\\w*",relevance:0},END_SAME_AS_BEGIN:e=>Object.assign(e,{ "on:begin":(e,t)=>{t.data._beginMatch=e[1]},"on:end":(e,t)=>{ t.data._beginMatch!==e[1]&&t.ignoreMatch()}})});function R(e,t){ "."===e.input[e.index-1]&&t.ignoreMatch()}function j(e,t){ void 0!==e.className&&(e.scope=e.className,delete e.className)}function A(e,t){ t&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)", e.__beforeBegin=R,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords, void 0===e.relevance&&(e.relevance=0))}function I(e,t){ Array.isArray(e.illegal)&&(e.illegal=u(...e.illegal))}function B(e,t){ if(e.match){ if(e.begin||e.end)throw Error("begin & end are not supported with match") ;e.begin=e.match,delete e.match}}function T(e,t){ void 0===e.relevance&&(e.relevance=1)}const L=(e,t)=>{if(!e.beforeMatch)return ;if(e.starts)throw Error("beforeMatch cannot be used with starts") ;const n=Object.assign({},e);Object.keys(e).forEach((t=>{delete e[t] })),e.keywords=n.keywords, e.begin=d(n.beforeMatch,d("(?=",n.begin,")")),e.starts={relevance:0, contains:[Object.assign(n,{endsParent:!0})]},e.relevance=0,delete n.beforeMatch },D=["of","and","for","in","not","or","if","then","parent","list","value"] ;function P(e,t,n="keyword"){const i=Object.create(null) ;return"string"==typeof e?r(n,e.split(" ")):Array.isArray(e)?r(n,e):Object.keys(e).forEach((n=>{ Object.assign(i,P(e[n],t,n))})),i;function r(e,n){ t&&(n=n.map((e=>e.toLowerCase()))),n.forEach((t=>{const n=t.split("|") ;i[n[0]]=[e,C(n[0],n[1])]}))}}function C(e,t){ return t?Number(t):(e=>D.includes(e.toLowerCase()))(e)?0:1}const H={},$=e=>{ console.error(e)},U=(e,...t)=>{console.log("WARN: "+e,...t)},z=(e,t)=>{ H[`${e}/${t}`]||(console.log(`Deprecated as of ${e}. ${t}`),H[`${e}/${t}`]=!0) },K=Error();function W(e,t,{key:n}){let i=0;const r=e[n],s={},o={} ;for(let e=1;e<=t.length;e++)o[e+i]=r[e],s[e+i]=!0,i+=h(t[e-1]) ;e[n]=o,e[n]._emit=s,e[n]._multi=!0}function X(e){(e=>{ e.scope&&"object"==typeof e.scope&&null!==e.scope&&(e.beginScope=e.scope, delete e.scope)})(e),"string"==typeof e.beginScope&&(e.beginScope={ _wrap:e.beginScope}),"string"==typeof e.endScope&&(e.endScope={_wrap:e.endScope }),(e=>{if(Array.isArray(e.begin)){ if(e.skip||e.excludeBegin||e.returnBegin)throw $("skip, excludeBegin, returnBegin not compatible with beginScope: {}"), K ;if("object"!=typeof e.beginScope||null===e.beginScope)throw $("beginScope must be object"), K;W(e,e.begin,{key:"beginScope"}),e.begin=p(e.begin,{joinWith:""})}})(e),(e=>{ if(Array.isArray(e.end)){ if(e.skip||e.excludeEnd||e.returnEnd)throw $("skip, excludeEnd, returnEnd not compatible with endScope: {}"), K ;if("object"!=typeof e.endScope||null===e.endScope)throw $("endScope must be object"), K;W(e,e.end,{key:"endScope"}),e.end=p(e.end,{joinWith:""})}})(e)}function G(e){ function t(t,n){return RegExp(g(t),"m"+(e.case_insensitive?"i":"")+(n?"g":""))} class n{constructor(){ this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0} addRule(e,t){ t.position=this.position++,this.matchIndexes[this.matchAt]=t,this.regexes.push([t,e]), this.matchAt+=h(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null) ;const e=this.regexes.map((e=>e[1]));this.matcherRe=t(p(e,{joinWith:"|" }),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex ;const t=this.matcherRe.exec(e);if(!t)return null ;const n=t.findIndex(((e,t)=>t>0&&void 0!==e)),i=this.matchIndexes[n] ;return t.splice(0,n),Object.assign(t,i)}}class i{constructor(){ this.rules=[],this.multiRegexes=[], this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){ if(this.multiRegexes[e])return this.multiRegexes[e];const t=new n ;return this.rules.slice(e).forEach((([e,n])=>t.addRule(e,n))), t.compile(),this.multiRegexes[e]=t,t}resumingScanAtSamePosition(){ return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,t){ this.rules.push([e,t]),"begin"===t.type&&this.count++}exec(e){ const t=this.getMatcher(this.regexIndex);t.lastIndex=this.lastIndex ;let n=t.exec(e) ;if(this.resumingScanAtSamePosition())if(n&&n.index===this.lastIndex);else{ const t=this.getMatcher(0);t.lastIndex=this.lastIndex+1,n=t.exec(e)} return n&&(this.regexIndex+=n.position+1, this.regexIndex===this.count&&this.considerAll()),n}} if(e.compilerExtensions||(e.compilerExtensions=[]), e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.") ;return e.classNameAliases=s(e.classNameAliases||{}),function n(r,o){const a=r ;if(r.isCompiled)return a ;[j,B,X,L].forEach((e=>e(r,o))),e.compilerExtensions.forEach((e=>e(r,o))), r.__beforeBegin=null,[A,I,T].forEach((e=>e(r,o))),r.isCompiled=!0;let l=null ;return"object"==typeof r.keywords&&r.keywords.$pattern&&(r.keywords=Object.assign({},r.keywords), l=r.keywords.$pattern, delete r.keywords.$pattern),l=l||/\w+/,r.keywords&&(r.keywords=P(r.keywords,e.case_insensitive)), a.keywordPatternRe=t(l,!0), o&&(r.begin||(r.begin=/\B|\b/),a.beginRe=t(r.begin),r.end||r.endsWithParent||(r.end=/\B|\b/), r.end&&(a.endRe=t(r.end)), a.terminatorEnd=g(r.end)||"",r.endsWithParent&&o.terminatorEnd&&(a.terminatorEnd+=(r.end?"|":"")+o.terminatorEnd)), r.illegal&&(a.illegalRe=t(r.illegal)), r.contains||(r.contains=[]),r.contains=[].concat(...r.contains.map((e=>(e=>(e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((t=>s(e,{ variants:null},t)))),e.cachedVariants?e.cachedVariants:Z(e)?s(e,{ starts:e.starts?s(e.starts):null }):Object.isFrozen(e)?s(e):e))("self"===e?r:e)))),r.contains.forEach((e=>{n(e,a) })),r.starts&&n(r.starts,o),a.matcher=(e=>{const t=new i ;return e.contains.forEach((e=>t.addRule(e.begin,{rule:e,type:"begin" }))),e.terminatorEnd&&t.addRule(e.terminatorEnd,{type:"end" }),e.illegal&&t.addRule(e.illegal,{type:"illegal"}),t})(a),a}(e)}function Z(e){ return!!e&&(e.endsWithParent||Z(e.starts))}const F=r,V=s,q=Symbol("nomatch") ;var J=(e=>{const t=Object.create(null),r=Object.create(null),s=[];let o=!0 ;const a="Could not find the language '{}', did you forget to load/include a language module?",l={ disableAutodetect:!0,name:"Plain text",contains:[]};let g={ ignoreUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i, languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-", cssSelector:"pre code",languages:null,__emitter:c};function d(e){ return g.noHighlightRe.test(e)}function u(e,t,n,i){let r="",s="" ;"object"==typeof t?(r=e, n=t.ignoreIllegals,s=t.language,i=void 0):(z("10.7.0","highlight(lang, code, ...args) has been deprecated."), z("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"), s=e,r=t),void 0===n&&(n=!0);const o={code:r,language:s};w("before:highlight",o) ;const a=o.result?o.result:h(o.language,o.code,n,i) ;return a.code=o.code,w("after:highlight",a),a}function h(e,n,r,s){ const l=Object.create(null);function c(){if(!k.keywords)return void S.addText(M) ;let e=0;k.keywordPatternRe.lastIndex=0;let t=k.keywordPatternRe.exec(M),n="" ;for(;t;){n+=M.substring(e,t.index) ;const r=_.case_insensitive?t[0].toLowerCase():t[0],s=(i=r,k.keywords[i]);if(s){ const[e,i]=s ;if(S.addText(n),n="",l[r]=(l[r]||0)+1,l[r]<=7&&(R+=i),e.startsWith("_"))n+=t[0];else{ const n=_.classNameAliases[e]||e;S.addKeyword(t[0],n)}}else n+=t[0] ;e=k.keywordPatternRe.lastIndex,t=k.keywordPatternRe.exec(M)}var i ;n+=M.substr(e),S.addText(n)}function d(){null!=k.subLanguage?(()=>{ if(""===M)return;let e=null;if("string"==typeof k.subLanguage){ if(!t[k.subLanguage])return void S.addText(M) ;e=h(k.subLanguage,M,!0,N[k.subLanguage]),N[k.subLanguage]=e._top }else e=f(M,k.subLanguage.length?k.subLanguage:null) ;k.relevance>0&&(R+=e.relevance),S.addSublanguage(e._emitter,e.language) })():c(),M=""}function u(e,t){let n=1;for(;void 0!==t[n];){if(!e._emit[n]){n++ ;continue}const i=_.classNameAliases[e[n]]||e[n],r=t[n] ;i?S.addKeyword(r,i):(M=r,c(),M=""),n++}}function p(e,t){ return e.scope&&"string"==typeof e.scope&&S.openNode(_.classNameAliases[e.scope]||e.scope), e.beginScope&&(e.beginScope._wrap?(S.addKeyword(M,_.classNameAliases[e.beginScope._wrap]||e.beginScope._wrap), M=""):e.beginScope._multi&&(u(e.beginScope,t),M="")),k=Object.create(e,{parent:{ value:k}}),k}function b(e,t,n){let r=((e,t)=>{const n=e&&e.exec(t) ;return n&&0===n.index})(e.endRe,n);if(r){if(e["on:end"]){const n=new i(e) ;e["on:end"](t,n),n.isMatchIgnored&&(r=!1)}if(r){ for(;e.endsParent&&e.parent;)e=e.parent;return e}} if(e.endsWithParent)return b(e.parent,t,n)}function m(e){ return 0===k.matcher.regexIndex?(M+=e[0],1):(I=!0,0)}function x(e){ const t=e[0],i=n.substr(e.index),r=b(k,e,i);if(!r)return q;const s=k ;k.endScope&&k.endScope._wrap?(d(), S.addKeyword(t,k.endScope._wrap)):k.endScope&&k.endScope._multi?(d(), u(k.endScope,e)):s.skip?M+=t:(s.returnEnd||s.excludeEnd||(M+=t), d(),s.excludeEnd&&(M=t));do{ k.scope&&!k.isMultiClass&&S.closeNode(),k.skip||k.subLanguage||(R+=k.relevance), k=k.parent}while(k!==r.parent) ;return r.starts&&p(r.starts,e),s.returnEnd?0:t.length}let y={};function w(t,s){ const a=s&&s[0];if(M+=t,null==a)return d(),0 ;if("begin"===y.type&&"end"===s.type&&y.index===s.index&&""===a){ if(M+=n.slice(s.index,s.index+1),!o){const t=Error(`0 width match regex (${e})`) ;throw t.languageName=e,t.badRule=y.rule,t}return 1} if(y=s,"begin"===s.type)return(e=>{ const t=e[0],n=e.rule,r=new i(n),s=[n.__beforeBegin,n["on:begin"]] ;for(const n of s)if(n&&(n(e,r),r.isMatchIgnored))return m(t) ;return n.skip?M+=t:(n.excludeBegin&&(M+=t), d(),n.returnBegin||n.excludeBegin||(M=t)),p(n,e),n.returnBegin?0:t.length})(s) ;if("illegal"===s.type&&!r){ const e=Error('Illegal lexeme "'+a+'" for mode "'+(k.scope||"")+'"') ;throw e.mode=k,e}if("end"===s.type){const e=x(s);if(e!==q)return e} if("illegal"===s.type&&""===a)return 1 ;if(A>1e5&&A>3*s.index)throw Error("potential infinite loop, way more iterations than matches") ;return M+=a,a.length}const _=E(e) ;if(!_)throw $(a.replace("{}",e)),Error('Unknown language: "'+e+'"') ;const v=G(_);let O="",k=s||v;const N={},S=new g.__emitter(g);(()=>{const e=[] ;for(let t=k;t!==_;t=t.parent)t.scope&&e.unshift(t.scope) ;e.forEach((e=>S.openNode(e)))})();let M="",R=0,j=0,A=0,I=!1;try{ for(k.matcher.considerAll();;){ A++,I?I=!1:k.matcher.considerAll(),k.matcher.lastIndex=j ;const e=k.matcher.exec(n);if(!e)break;const t=w(n.substring(j,e.index),e) ;j=e.index+t}return w(n.substr(j)),S.closeAllNodes(),S.finalize(),O=S.toHTML(),{ language:e,value:O,relevance:R,illegal:!1,_emitter:S,_top:k}}catch(t){ if(t.message&&t.message.includes("Illegal"))return{language:e,value:F(n), illegal:!0,relevance:0,_illegalBy:{message:t.message,index:j, context:n.slice(j-100,j+100),mode:t.mode,resultSoFar:O},_emitter:S};if(o)return{ language:e,value:F(n),illegal:!1,relevance:0,errorRaised:t,_emitter:S,_top:k} ;throw t}}function f(e,n){n=n||g.languages||Object.keys(t);const i=(e=>{ const t={value:F(e),illegal:!1,relevance:0,_top:l,_emitter:new g.__emitter(g)} ;return t._emitter.addText(e),t})(e),r=n.filter(E).filter(y).map((t=>h(t,e,!1))) ;r.unshift(i);const s=r.sort(((e,t)=>{ if(e.relevance!==t.relevance)return t.relevance-e.relevance ;if(e.language&&t.language){if(E(e.language).supersetOf===t.language)return 1 ;if(E(t.language).supersetOf===e.language)return-1}return 0})),[o,a]=s,c=o ;return c.secondBest=a,c}function p(e){let t=null;const n=(e=>{ let t=e.className+" ";t+=e.parentNode?e.parentNode.className:"" ;const n=g.languageDetectRe.exec(t);if(n){const t=E(n[1]) ;return t||(U(a.replace("{}",n[1])), U("Falling back to no-highlight mode for this block.",e)),t?n[1]:"no-highlight"} return t.split(/\s+/).find((e=>d(e)||E(e)))})(e);if(d(n))return ;w("before:highlightElement",{el:e,language:n }),!g.ignoreUnescapedHTML&&e.children.length>0&&(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."), console.warn("https://github.com/highlightjs/highlight.js/issues/2886"), console.warn(e)),t=e;const i=t.textContent,s=n?u(i,{language:n,ignoreIllegals:!0 }):f(i);e.innerHTML=s.value,((e,t,n)=>{const i=t&&r[t]||n ;e.classList.add("hljs"),e.classList.add("language-"+i) })(e,n,s.language),e.result={language:s.language,re:s.relevance, relevance:s.relevance},s.secondBest&&(e.secondBest={ language:s.secondBest.language,relevance:s.secondBest.relevance }),w("after:highlightElement",{el:e,result:s,text:i})}let b=!1;function m(){ "loading"!==document.readyState?document.querySelectorAll(g.cssSelector).forEach(p):b=!0 }function E(e){return e=(e||"").toLowerCase(),t[e]||t[r[e]]} function x(e,{languageName:t}){"string"==typeof e&&(e=[e]),e.forEach((e=>{ r[e.toLowerCase()]=t}))}function y(e){const t=E(e) ;return t&&!t.disableAutodetect}function w(e,t){const n=e;s.forEach((e=>{ e[n]&&e[n](t)}))} "undefined"!=typeof window&&window.addEventListener&&window.addEventListener("DOMContentLoaded",(()=>{ b&&m()}),!1),Object.assign(e,{highlight:u,highlightAuto:f,highlightAll:m, highlightElement:p, highlightBlock:e=>(z("10.7.0","highlightBlock will be removed entirely in v12.0"), z("10.7.0","Please use highlightElement now."),p(e)),configure:e=>{g=V(g,e)}, initHighlighting:()=>{ m(),z("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")}, initHighlightingOnLoad:()=>{ m(),z("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.") },registerLanguage:(n,i)=>{let r=null;try{r=i(e)}catch(e){ if($("Language definition for '{}' could not be registered.".replace("{}",n)), !o)throw e;$(e),r=l} r.name||(r.name=n),t[n]=r,r.rawDefinition=i.bind(null,e),r.aliases&&x(r.aliases,{ languageName:n})},unregisterLanguage:e=>{delete t[e] ;for(const t of Object.keys(r))r[t]===e&&delete r[t]}, listLanguages:()=>Object.keys(t),getLanguage:E,registerAliases:x, autoDetection:y,inherit:V,addPlugin:e=>{(e=>{ e["before:highlightBlock"]&&!e["before:highlightElement"]&&(e["before:highlightElement"]=t=>{ e["before:highlightBlock"](Object.assign({block:t.el},t)) }),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=t=>{ e["after:highlightBlock"](Object.assign({block:t.el},t))})})(e),s.push(e)} }),e.debugMode=()=>{o=!1},e.safeMode=()=>{o=!0},e.versionString="11.0.1" ;for(const e in M)"object"==typeof M[e]&&n(M[e]);return Object.assign(e,M),e })({}),Y=Object.freeze({__proto__:null});const Q=J ;for(const e of Object.keys(Y)){const t=e.replace("grmr_","") ;Q.registerLanguage(t,Y[e])}return Q}() ;"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs);hljs.registerLanguage("xml",(()=>{"use strict";function e(e){ return e?"string"==typeof e?e:e.source:null}function n(e){return a("(?=",e,")")} function a(...n){return n.map((n=>e(n))).join("")}function s(...n){ return"("+((e=>{const n=e[e.length-1] ;return"object"==typeof n&&n.constructor===Object?(e.splice(e.length-1,1),n):{} })(n).capture?"":"?:")+n.map((n=>e(n))).join("|")+")"}return e=>{ const t=a(/[A-Z_]/,a("(?:",/[A-Z0-9_.-]*:/,")?"),/[A-Z0-9_.-]*/),i={ className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},c={begin:/\s/, contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}] },r=e.inherit(c,{begin:/\(/,end:/\)/}),l=e.inherit(e.APOS_STRING_MODE,{ className:"string"}),g=e.inherit(e.QUOTE_STRING_MODE,{className:"string"}),m={ endsWithParent:!0,illegal:/`]+/}]}]}]};return{ name:"HTML, XML", aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"], case_insensitive:!0,contains:[{className:"meta",begin://, relevance:10,contains:[c,g,l,r,{begin:/\[/,end:/\]/,contains:[{className:"meta", begin://,contains:[c,r,g,l]}]}]},e.COMMENT(//,{ relevance:10}),{begin://,relevance:10},i,{ className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{className:"tag", begin:/)/,end:/>/,keywords:{name:"style"},contains:[m],starts:{ end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag", begin:/)/,end:/>/,keywords:{name:"script"},contains:[m],starts:{ end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{ className:"tag",begin:/<>|<\/>/},{className:"tag", begin:a(//,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name", begin:t,relevance:0,starts:m}]},{className:"tag",begin:a(/<\//,n(a(t,/>/))), contains:[{className:"name",begin:t,relevance:0},{begin:/>/,relevance:0, endsParent:!0}]}]}}})());hljs.registerLanguage("markdown",(()=>{"use strict";function n(...n){ return n.map((n=>{return(e=n)?"string"==typeof e?e:e.source:null;var e })).join("")}return e=>{const a={begin:/<\/?[A-Za-z_]/,end:">", subLanguage:"xml",relevance:0},i={variants:[{begin:/\[.+?\]\[.*?\]/,relevance:0 },{begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/, relevance:2},{begin:n(/\[.+?\]\(/,/[A-Za-z][A-Za-z0-9+.-]*/,/:\/\/.*?\)/), relevance:2},{begin:/\[.+?\]\([./?&#].*?\)/,relevance:1},{ begin:/\[.+?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{ className:"string",relevance:0,begin:"\\[",end:"\\]",excludeBegin:!0, returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)", excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[", end:"\\]",excludeBegin:!0,excludeEnd:!0}]},s={className:"strong",contains:[], variants:[{begin:/_{2}/,end:/_{2}/},{begin:/\*{2}/,end:/\*{2}/}]},c={ className:"emphasis",contains:[],variants:[{begin:/\*(?!\*)/,end:/\*/},{ begin:/_(?!_)/,end:/_/,relevance:0}]};s.contains.push(c),c.contains.push(s) ;let t=[a,i] ;return s.contains=s.contains.concat(t),c.contains=c.contains.concat(t), t=t.concat(s,c),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{ className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:t},{ begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n", contains:t}]}]},a,{className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)", end:"\\s+",excludeEnd:!0},s,c,{className:"quote",begin:"^>\\s+",contains:t, end:"$"},{className:"code",variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{ begin:"(~{3,})[^~](.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{ begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))", contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},{ begin:"^[-\\*]{3,}",end:"$"},i,{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{ className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{ className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]}]}}})());hljs.registerLanguage("css",(()=>{"use strict" ;const e=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],t=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],i=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],o=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],r=["align-content","align-items","align-self","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","auto","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","clear","clip","clip-path","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-variant","font-variant-ligatures","font-variation-settings","font-weight","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inherit","initial","justify-content","left","letter-spacing","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","mask","max-height","max-width","min-height","min-width","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","perspective","perspective-origin","pointer-events","position","quotes","resize","right","src","tab-size","table-layout","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-indent","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","white-space","widows","width","word-break","word-spacing","word-wrap","z-index"].reverse() ;return n=>{const a=(e=>({IMPORTANT:{scope:"meta",begin:"!important"},HEXCOLOR:{ scope:"number",begin:"#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})"}, ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$", contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{ scope:"number", begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?", relevance:0}}))(n),l=[n.APOS_STRING_MODE,n.QUOTE_STRING_MODE];return{name:"CSS", case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:"from to"}, classNameAliases:{keyframePosition:"selector-tag"}, contains:[n.C_BLOCK_COMMENT_MODE,{begin:/-(webkit|moz|ms|o)-(?=[a-z])/ },a.CSS_NUMBER_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0 },{className:"selector-class",begin:"\\.[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0 },a.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{ begin:":("+i.join("|")+")"},{begin:"::("+o.join("|")+")"}]},{ className:"attribute",begin:"\\b("+r.join("|")+")\\b"},{begin:":",end:"[;}]", contains:[a.HEXCOLOR,a.IMPORTANT,a.CSS_NUMBER_MODE,...l,{ begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri" },contains:[{className:"string",begin:/[^)]/,endsWithParent:!0,excludeEnd:!0}] },{className:"built_in",begin:/[\w-]+(?=\()/}]},{ begin:(s=/@/,((...e)=>e.map((e=>(e=>e?"string"==typeof e?e:e.source:null)(e))).join(""))("(?=",s,")")), end:"[{;]",relevance:0,illegal:/:/,contains:[{className:"keyword", begin:/@-?\w[\w]*(-\w+)*/},{begin:/\s/,endsWithParent:!0,excludeEnd:!0, relevance:0,keywords:{$pattern:/[a-z-]+/,keyword:"and or not only", attribute:t.join(" ")},contains:[{begin:/[a-z-]+(?=:)/,className:"attribute" },...l,a.CSS_NUMBER_MODE]}]},{className:"selector-tag", begin:"\\b("+e.join("|")+")\\b"}]};var s}})());hljs.registerLanguage("plaintext",(()=>{"use strict";return t=>({ name:"Plain text",aliases:["text","txt"],disableAutodetect:!0})})());hljs.registerLanguage("bash",(()=>{"use strict";function e(...e){ return e.map((e=>{return(s=e)?"string"==typeof s?s:s.source:null;var s })).join("")}return s=>{const n={},t={begin:/\$\{/,end:/\}/,contains:["self",{ begin:/:-/,contains:[n]}]};Object.assign(n,{className:"variable",variants:[{ begin:e(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},t]});const a={ className:"subst",begin:/\$\(/,end:/\)/,contains:[s.BACKSLASH_ESCAPE]},i={ begin:/<<-?\s*(?=\w+)/,starts:{contains:[s.END_SAME_AS_BEGIN({begin:/(\w+)/, end:/(\w+)/,className:"string"})]}},c={className:"string",begin:/"/,end:/"/, contains:[s.BACKSLASH_ESCAPE,n,a]};a.contains.push(c);const o={begin:/\$\(\(/, end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},s.NUMBER_MODE,n] },r=s.SHEBANG({binary:"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)",relevance:10 }),l={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0, contains:[s.inherit(s.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{ name:"Bash",aliases:["sh"],keywords:{$pattern:/\b[a-z._-]+\b/, keyword:["if","then","else","elif","fi","for","while","in","do","done","case","esac","function"], literal:["true","false"], built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp" },contains:[r,s.SHEBANG(),l,o,s.HASH_COMMENT_MODE,i,c,{className:"",begin:/\\"/ },{className:"string",begin:/'/,end:/'/},n]}}})());hljs.registerLanguage("kotlin",(()=>{"use strict" ;var e="\\.([0-9](_*[0-9])*)",n="[0-9a-fA-F](_*[0-9a-fA-F])*",a={ className:"number",variants:[{ begin:`(\\b([0-9](_*[0-9])*)((${e})|\\.)?|(${e}))[eE][+-]?([0-9](_*[0-9])*)[fFdD]?\\b` },{begin:`\\b([0-9](_*[0-9])*)((${e})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{ begin:`(${e})[fFdD]?\\b`},{begin:"\\b([0-9](_*[0-9])*)[fFdD]\\b"},{ begin:`\\b0[xX]((${n})\\.?|(${n})?\\.(${n}))[pP][+-]?([0-9](_*[0-9])*)[fFdD]?\\b` },{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${n})[lL]?\\b`},{ begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}], relevance:0};return e=>{const n={ keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual", built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing", literal:"true false null"},i={className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"@" },s={className:"subst",begin:/\$\{/,end:/\}/,contains:[e.C_NUMBER_MODE]},t={ className:"variable",begin:"\\$"+e.UNDERSCORE_IDENT_RE},r={className:"string", variants:[{begin:'"""',end:'"""(?=[^"])',contains:[t,s]},{begin:"'",end:"'", illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/, contains:[e.BACKSLASH_ESCAPE,t,s]}]};s.contains.push(r);const l={ className:"meta", begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UNDERSCORE_IDENT_RE+")?" },c={className:"meta",begin:"@"+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/, end:/\)/,contains:[e.inherit(r,{className:"string"})]}] },o=a,b=e.COMMENT("/\\*","\\*/",{contains:[e.C_BLOCK_COMMENT_MODE]}),E={ variants:[{className:"type",begin:e.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/, contains:[]}]},d=E;return d.variants[1].contains=[E],E.variants[1].contains=[d], {name:"Kotlin",aliases:["kt","kts"],keywords:n, contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag", begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,b,{className:"keyword", begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol", begin:/@\w+/}]}},i,l,c,{className:"function",beginKeywords:"fun",end:"[(]|$", returnBegin:!0,excludeEnd:!0,keywords:n,relevance:5,contains:[{ begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0, contains:[e.UNDERSCORE_TITLE_MODE]},{className:"type",begin://, keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/, endsParent:!0,keywords:n,relevance:0,contains:[{begin:/:/,end:/[=,\/]/, endsWithParent:!0,contains:[E,e.C_LINE_COMMENT_MODE,b],relevance:0 },e.C_LINE_COMMENT_MODE,b,l,c,r,e.C_NUMBER_MODE]},b]},{className:"class", beginKeywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0, illegal:"extends implements",contains:[{ beginKeywords:"public protected internal private constructor" },e.UNDERSCORE_TITLE_MODE,{className:"type",begin://,excludeBegin:!0, excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,]|$/, excludeBegin:!0,returnEnd:!0},l,c]},r,{className:"meta",begin:"^#!/usr/bin/env", end:"$",illegal:"\n"},o]}}})());hljs.registerLanguage("diff",(()=>{"use strict";function e(...e){ return"("+((e=>{const n=e[e.length-1] ;return"object"==typeof n&&n.constructor===Object?(e.splice(e.length-1,1),n):{} })(e).capture?"":"?:")+e.map((e=>{return(n=e)?"string"==typeof n?n:n.source:null ;var n})).join("|")+")"}return n=>({name:"Diff",aliases:["patch"],contains:[{ className:"meta",relevance:10, match:e(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/) },{className:"comment",variants:[{ begin:e(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\*{3} /,/^\+{3}/,/^diff --git/), end:/$/},{match:/^\*{15}$/}]},{className:"addition",begin:/^\+/,end:/$/},{ className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/, end:/$/}]})})());hljs.registerLanguage("shell",(()=>{"use strict";return s=>({ name:"Shell Session",aliases:["console","shellsession"],contains:[{ className:"meta",begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/,starts:{ end:/[^\\](?=\s*$)/,subLanguage:"bash"}}]})})());hljs.registerLanguage("json",(()=>{"use strict";return e=>({name:"JSON", contains:[{className:"attr",begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,relevance:1.01 },{match:/[{}[\],:]/,className:"punctuation",relevance:0},e.QUOTE_STRING_MODE,{ beginKeywords:"true false null" },e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],illegal:"\\S"}) })());hljs.registerLanguage("java",(()=>{"use strict" ;var e="\\.([0-9](_*[0-9])*)",a="[0-9a-fA-F](_*[0-9a-fA-F])*",n={ className:"number",variants:[{ begin:`(\\b([0-9](_*[0-9])*)((${e})|\\.)?|(${e}))[eE][+-]?([0-9](_*[0-9])*)[fFdD]?\\b` },{begin:`\\b([0-9](_*[0-9])*)((${e})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{ begin:`(${e})[fFdD]?\\b`},{begin:"\\b([0-9](_*[0-9])*)[fFdD]\\b"},{ begin:`\\b0[xX]((${a})\\.?|(${a})?\\.(${a}))[pP][+-]?([0-9](_*[0-9])*)[fFdD]?\\b` },{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${a})[lL]?\\b`},{ begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}], relevance:0};function s(e,a,n){return-1===n?"":e.replace(a,(t=>s(e,a,n-1)))} return e=>{ const a="[\xc0-\u02b8a-zA-Z_$][\xc0-\u02b8a-zA-Z_$0-9]*",t=a+s("(?:<"+a+"~~~(?:\\s*,\\s*"+a+"~~~)*>)?",/~~~/g,2),i={ keyword:["synchronized","abstract","private","var","static","if","const ","for","while","strictfp","finally","protected","import","native","final","void","enum","else","break","transient","catch","instanceof","volatile","case","assert","package","default","public","try","switch","continue","throws","protected","public","private","module","requires","exports","do"], literal:["false","true","null"], type:["char","boolean","long","float","int","byte","short","double"], built_in:["super","this"]},r={className:"meta",begin:"@"+a,contains:[{ begin:/\(/,end:/\)/,contains:["self"]}]},l={className:"params",begin:/\(/, end:/\)/,keywords:i,relevance:0,contains:[e.C_BLOCK_COMMENT_MODE],endsParent:!0} ;return{name:"Java",aliases:["jsp"],keywords:i,illegal:/<\/|#/, contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/, relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),{ begin:/import java\.[a-z]+\./,keywords:"import",relevance:2 },e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{ match:[/\b(?:class|interface|enum|extends|implements|new)/,/\s+/,a],className:{ 1:"keyword",3:"title.class"}},{begin:[a,/\s+/,a,/\s+/,/=/],className:{1:"type", 3:"variable",5:"operator"}},{begin:[/record/,/\s+/,a],className:{1:"keyword", 3:"title.class"},contains:[l,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{ beginKeywords:"new throw return else",relevance:0},{ begin:["(?:"+t+"\\s+)",e.UNDERSCORE_IDENT_RE,/\s*(?=\()/],className:{ 2:"title.function"},keywords:i,contains:[{className:"params",begin:/\(/, end:/\)/,keywords:i,relevance:0, contains:[r,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,n,e.C_BLOCK_COMMENT_MODE] },e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},n,r]}}})());hljs.registerLanguage("objectivec",(()=>{"use strict";return e=>{ const n=/[a-zA-Z@][a-zA-Z0-9_]*/,_={$pattern:n, keyword:["@interface","@class","@protocol","@implementation"]};return{ name:"Objective-C",aliases:["mm","objc","obj-c","obj-c++","objective-c++"], keywords:{$pattern:n, keyword:["int","float","while","char","export","sizeof","typedef","const","struct","for","union","unsigned","long","volatile","static","bool","mutable","if","do","return","goto","void","enum","else","break","extern","asm","case","short","default","double","register","explicit","signed","typename","this","switch","continue","wchar_t","inline","readonly","assign","readwrite","self","@synchronized","id","typeof","nonatomic","super","unichar","IBOutlet","IBAction","strong","weak","copy","in","out","inout","bycopy","byref","oneway","__strong","__weak","__block","__autoreleasing","@private","@protected","@public","@try","@property","@end","@throw","@catch","@finally","@autoreleasepool","@synthesize","@dynamic","@selector","@optional","@required","@encode","@package","@import","@defs","@compatibility_alias","__bridge","__bridge_transfer","__bridge_retained","__bridge_retain","__covariant","__contravariant","__kindof","_Nonnull","_Nullable","_Null_unspecified","__FUNCTION__","__PRETTY_FUNCTION__","__attribute__","getter","setter","retain","unsafe_unretained","nonnull","nullable","null_unspecified","null_resettable","class","instancetype","NS_DESIGNATED_INITIALIZER","NS_UNAVAILABLE","NS_REQUIRES_SUPER","NS_RETURNS_INNER_POINTER","NS_INLINE","NS_AVAILABLE","NS_DEPRECATED","NS_ENUM","NS_OPTIONS","NS_SWIFT_UNAVAILABLE","NS_ASSUME_NONNULL_BEGIN","NS_ASSUME_NONNULL_END","NS_REFINED_FOR_SWIFT","NS_SWIFT_NAME","NS_SWIFT_NOTHROW","NS_DURING","NS_HANDLER","NS_ENDHANDLER","NS_VALUERETURN","NS_VOIDRETURN"], literal:["false","true","FALSE","TRUE","nil","YES","NO","NULL"], built_in:["BOOL","dispatch_once_t","dispatch_queue_t","dispatch_sync","dispatch_async","dispatch_once"] },illegal:"/,end:/$/,illegal:"\\n" },e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"class", begin:"("+_.keyword.join("|")+")\\b",end:/(\{|$)/,excludeEnd:!0,keywords:_, contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"\\."+e.UNDERSCORE_IDENT_RE, relevance:0}]}}})());hljs.registerLanguage("dart",(()=>{"use strict";return e=>{const n={ className:"subst",variants:[{begin:"\\$[A-Za-z0-9_]+"}]},a={className:"subst", variants:[{begin:/\$\{/,end:/\}/}],keywords:"true false null this is new super" },t={className:"string",variants:[{begin:"r'''",end:"'''"},{begin:'r"""', end:'"""'},{begin:"r'",end:"'",illegal:"\\n"},{begin:'r"',end:'"',illegal:"\\n" },{begin:"'''",end:"'''",contains:[e.BACKSLASH_ESCAPE,n,a]},{begin:'"""', end:'"""',contains:[e.BACKSLASH_ESCAPE,n,a]},{begin:"'",end:"'",illegal:"\\n", contains:[e.BACKSLASH_ESCAPE,n,a]},{begin:'"',end:'"',illegal:"\\n", contains:[e.BACKSLASH_ESCAPE,n,a]}]};a.contains=[e.C_NUMBER_MODE,t] ;const i=["Comparable","DateTime","Duration","Function","Iterable","Iterator","List","Map","Match","Object","Pattern","RegExp","Set","Stopwatch","String","StringBuffer","StringSink","Symbol","Type","Uri","bool","double","int","num","Element","ElementList"],r=i.map((e=>e+"?")) ;return{name:"Dart",keywords:{ keyword:["abstract","as","assert","async","await","break","case","catch","class","const","continue","covariant","default","deferred","do","dynamic","else","enum","export","extends","extension","external","factory","false","final","finally","for","Function","get","hide","if","implements","import","in","inferface","is","late","library","mixin","new","null","on","operator","part","required","rethrow","return","set","show","static","super","switch","sync","this","throw","true","try","typedef","var","void","while","with","yield"], built_in:i.concat(r).concat(["Never","Null","dynamic","print","document","querySelector","querySelectorAll","window"]), $pattern:/[A-Za-z][A-Za-z0-9_]*\??/}, contains:[t,e.COMMENT(/\/\*\*(?!\/)/,/\*\//,{subLanguage:"markdown",relevance:0 }),e.COMMENT(/\/{3,} ?/,/$/,{contains:[{subLanguage:"markdown",begin:".", end:"$",relevance:0}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{ className:"class",beginKeywords:"class interface",end:/\{/,excludeEnd:!0, contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE] },e.C_NUMBER_MODE,{className:"meta",begin:"@[A-Za-z]+"},{begin:"=>"}]}}})());hljs.registerLanguage("ruby",(()=>{"use strict";function e(e){ return n("(?=",e,")")}function n(...e){return e.map((e=>{ return(n=e)?"string"==typeof n?n:n.source:null;var n})).join("")}return a=>{ const i="([a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?)",s={ keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor __FILE__", built_in:"proc lambda",literal:"true false nil"},r={className:"doctag", begin:"@[A-Za-z]+"},b={begin:"#<",end:">"},c=[a.COMMENT("#","$",{contains:[r] }),a.COMMENT("^=begin","^=end",{contains:[r],relevance:10 }),a.COMMENT("^__END__","\\n$")],t={className:"subst",begin:/#\{/,end:/\}/, keywords:s},g={className:"string",contains:[a.BACKSLASH_ESCAPE,t],variants:[{ begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:/%[qQwWx]?\(/, end:/\)/},{begin:/%[qQwWx]?\[/,end:/\]/},{begin:/%[qQwWx]?\{/,end:/\}/},{ begin:/%[qQwWx]?/},{begin:/%[qQwWx]?\//,end:/\//},{begin:/%[qQwWx]?%/, end:/%/},{begin:/%[qQwWx]?-/,end:/-/},{begin:/%[qQwWx]?\|/,end:/\|/},{ begin:/\B\?(\\\d{1,3})/},{begin:/\B\?(\\x[A-Fa-f0-9]{1,2})/},{ begin:/\B\?(\\u\{?[A-Fa-f0-9]{1,6}\}?)/},{ begin:/\B\?(\\M-\\C-|\\M-\\c|\\c\\M-|\\M-|\\C-\\M-)[\x20-\x7e]/},{ begin:/\B\?\\(c|C-)[\x20-\x7e]/},{begin:/\B\?\\?\S/},{ begin:n(/<<[-~]?'?/,e(/(\w+)(?=\W)[^\n]*\n(?:[^\n]*\n)*?\s*\1\b/)), contains:[a.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/, contains:[a.BACKSLASH_ESCAPE,t]})]}]},d="[0-9](_?[0-9])*",l={className:"number", relevance:0,variants:[{ begin:`\\b([1-9](_?[0-9])*|0)(\\.(${d}))?([eE][+-]?(${d})|r)?i?\\b`},{ begin:"\\b0[dD][0-9](_?[0-9])*r?i?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*r?i?\\b" },{begin:"\\b0[oO][0-7](_?[0-7])*r?i?\\b"},{ begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\b"},{ begin:"\\b0(_?[0-7])+r?i?\\b"}]},o={className:"params",begin:"\\(",end:"\\)", endsParent:!0,keywords:s},_=[g,{className:"class",beginKeywords:"class module", end:"$|;",illegal:/=/,contains:[a.inherit(a.TITLE_MODE,{ begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|!)?"}),{begin:"<\\s*",contains:[{ begin:"("+a.IDENT_RE+"::)?"+a.IDENT_RE,relevance:0}]}].concat(c)},{ className:"function",begin:n(/def\s+/,e(i+"\\s*(\\(|;|$)")),relevance:0, keywords:"def",end:"$|;",contains:[a.inherit(a.TITLE_MODE,{begin:i }),o].concat(c)},{begin:a.IDENT_RE+"::"},{className:"symbol", begin:a.UNDERSCORE_IDENT_RE+"(!|\\?)?:",relevance:0},{className:"symbol", begin:":(?!\\s)",contains:[g,{begin:i}],relevance:0},l,{className:"variable", begin:"(\\$\\W)|((\\$|@@?)(\\w+))(?=[^@$?])(?![A-Za-z])(?![@$?'])"},{ className:"params",begin:/\|/,end:/\|/,relevance:0,keywords:s},{ begin:"("+a.RE_STARTERS_RE+"|unless)\\s*",keywords:"unless",contains:[{ className:"regexp",contains:[a.BACKSLASH_ESCAPE,t],illegal:/\n/,variants:[{ begin:"/",end:"/[a-z]*"},{begin:/%r\{/,end:/\}[a-z]*/},{begin:"%r\\(", end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}] }].concat(b,c),relevance:0}].concat(b,c);t.contains=_,o.contains=_;const E=[{ begin:/^\s*=>/,starts:{end:"$",contains:_}},{className:"meta", begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+>|(\\w+-)?\\d+\\.\\d+\\.\\d+(p\\d+)?[^\\d][^>]+>)(?=[ ])", starts:{end:"$",contains:_}}];return c.unshift(b),{name:"Ruby", aliases:["rb","gemspec","podspec","thor","irb"],keywords:s,illegal:/\/\*/, contains:[a.SHEBANG({binary:"ruby"})].concat(E).concat(c).concat(_)}}})());hljs.registerLanguage("yaml",(()=>{"use strict";return e=>{ const n="true false yes no null",a="[\\w#;/?:@&=+$,.~*'()[\\]]+",s={ className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/ },{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:"template-variable", variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]}]},i=e.inherit(s,{ variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),l={ end:",",endsWithParent:!0,excludeEnd:!0,keywords:n,relevance:0},t={begin:/\{/, end:/\}/,contains:[l],illegal:"\\n",relevance:0},g={begin:"\\[",end:"\\]", contains:[l],illegal:"\\n",relevance:0},b=[{className:"attr",variants:[{ begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{ begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---\\s*$", relevance:10},{className:"string", begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{ begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0, relevance:0},{className:"type",begin:"!\\w+!"+a},{className:"type", begin:"!<"+a+">"},{className:"type",begin:"!"+a},{className:"type",begin:"!!"+a },{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta", begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)", relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:n,keywords:{literal:n}},{ className:"number", begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b" },{className:"number",begin:e.C_NUMBER_RE+"\\b",relevance:0},t,g,s],c=[...b] ;return c.pop(),c.push(i),l.contains=c,{name:"YAML",case_insensitive:!0, aliases:["yml"],contains:b}}})());hljs.registerLanguage("javascript",(()=>{"use strict" ;const e="[A-Za-z$_][0-9A-Za-z$_]*",n=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],a=["true","false","null","undefined","NaN","Infinity"],t=["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer","BigInt64Array","BigUint64Array","BigInt"],s=["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],r=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],i=["arguments","this","super","console","window","document","localStorage","module","global"],c=[].concat(r,t,s) ;function o(e){return l("(?=",e,")")}function l(...e){return e.map((e=>{ return(n=e)?"string"==typeof n?n:n.source:null;var n})).join("")}return b=>{ const g=e,d={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/, isTrulyOpeningTag:(e,n)=>{const a=e[0].length+e.index,t=e.input[a] ;"<"!==t?">"===t&&(((e,{after:n})=>{const a="",B={ match:[/const|var|let/,/\s+/,g,/\s*/,/=\s*/,o(C)],className:{1:"keyword", 3:"title.function"},contains:[w]};return{name:"Javascript", aliases:["js","jsx","mjs","cjs"],keywords:u,exports:{PARAMS_CONTAINS:S}, illegal:/#(?![$_A-z])/,contains:[b.SHEBANG({label:"shebang",binary:"node", relevance:5}),{label:"use_strict",className:"meta",relevance:10, begin:/^\s*['"]use (strict|asm)['"]/ },b.APOS_STRING_MODE,b.QUOTE_STRING_MODE,N,f,A,v,y,O,{className:"attr", begin:g+o(":"),relevance:0},B,{ begin:"("+b.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*", keywords:"return throw case",relevance:0,contains:[v,b.REGEXP_MODE,{ className:"function",begin:C,returnBegin:!0,end:"\\s*=>",contains:[{ className:"params",variants:[{begin:b.UNDERSCORE_IDENT_RE,relevance:0},{ className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0, excludeEnd:!0,keywords:u,contains:S}]}]},{begin:/,/,relevance:0},{match:/\s+/, relevance:0},{variants:[{begin:"<>",end:""},{begin:d.begin, "on:begin":d.isTrulyOpeningTag,end:d.end}],subLanguage:"xml",contains:[{ begin:d.begin,end:d.end,skip:!0,contains:["self"]}]}]},I,{ beginKeywords:"while if switch catch for"},{ begin:"\\b(?!function)"+b.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{", returnBegin:!0,label:"func.def",contains:[w,b.inherit(b.TITLE_MODE,{begin:g, className:"title.function"})]},{match:/\.\.\./,relevance:0},M,{match:"\\$"+g, relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"}, contains:[w]},T,{relevance:0,match:/\b[A-Z][A-Z_]+\b/, className:"variable.constant"},R,k,{match:/\$[(.]/}]}}})());hljs.registerLanguage("c",(()=>{"use strict";function e(e){ return((...e)=>e.map((e=>(e=>e?"string"==typeof e?e:e.source:null)(e))).join(""))("(?:",e,")?") }return n=>{const t=n.COMMENT("//","$",{contains:[{begin:/\\\n/}] }),s="[a-zA-Z_]\\w*::",r="(decltype\\(auto\\)|"+e(s)+"[a-zA-Z_]\\w*"+e("<[^<>]+>")+")",a={ className:"type",variants:[{begin:"\\b[a-z\\d_]*_t\\b"},{ match:/\batomic_[a-z]{3,6}\b/}]},i={className:"string",variants:[{ begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[n.BACKSLASH_ESCAPE]},{ begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)", end:"'",illegal:"."},n.END_SAME_AS_BEGIN({ begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},l={ className:"number",variants:[{begin:"\\b(0b[01']+)"},{ begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)" },{ begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)" }],relevance:0},c={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{ keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include" },contains:[{begin:/\\\n/,relevance:0},n.inherit(i,{className:"string"}),{ className:"string",begin:/<.*?>/},t,n.C_BLOCK_COMMENT_MODE]},o={ className:"title",begin:e(s)+n.IDENT_RE,relevance:0 },d=e(s)+n.IDENT_RE+"\\s*\\(",u={ keyword:["asm","auto","break","case","const","continue","default","do","else","enum","extern","for","fortran","goto","if","inline","register","restrict","return","sizeof","static","struct","switch","typedef","union","volatile","while","_Alignas","_Alignof","_Atomic","_Generic","_Noreturn","_Static_assert","_Thread_local","alignas","alignof","noreturn","static_assert","thread_local","_Pragma"], type:["float","double","signed","unsigned","int","short","long","char","void","_Bool","_Complex","_Imaginary","_Decimal32","_Decimal64","_Decimal128","complex","bool","imaginary"], literal:"true false NULL", built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr" },g=[c,a,t,n.C_BLOCK_COMMENT_MODE,l,i],m={variants:[{begin:/=/,end:/;/},{ begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}], keywords:u,contains:g.concat([{begin:/\(/,end:/\)/,keywords:u, contains:g.concat(["self"]),relevance:0}]),relevance:0},_={ begin:"("+r+"[\\*&\\s]+)+"+d,returnBegin:!0,end:/[{;=]/,excludeEnd:!0, keywords:u,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:"decltype\\(auto\\)", keywords:u,relevance:0},{begin:d,returnBegin:!0,contains:[n.inherit(o,{ className:"title.function"})],relevance:0},{relevance:0,match:/,/},{ className:"params",begin:/\(/,end:/\)/,keywords:u,relevance:0, contains:[t,n.C_BLOCK_COMMENT_MODE,i,l,a,{begin:/\(/,end:/\)/,keywords:u, relevance:0,contains:["self",t,n.C_BLOCK_COMMENT_MODE,i,l,a]}] },a,t,n.C_BLOCK_COMMENT_MODE,c]};return{name:"C",aliases:["h"],keywords:u, disableAutodetect:!0,illegal:"=]/,contains:[{ beginKeywords:"final class struct"},n.TITLE_MODE]}]),exports:{preprocessor:c, strings:i,keywords:u}}}})());hljs.registerLanguage("swift",(()=>{"use strict";function e(e){ return e?"string"==typeof e?e:e.source:null}function a(e){return t("(?=",e,")")} function t(...a){return a.map((a=>e(a))).join("")}function n(...a){ return"("+((e=>{const a=e[e.length-1] ;return"object"==typeof a&&a.constructor===Object?(e.splice(e.length-1,1),a):{} })(a).capture?"":"?:")+a.map((a=>e(a))).join("|")+")"} const i=e=>t(/\b/,e,/\w$/.test(e)?/\b/:/\B/),s=["Protocol","Type"].map(i),u=["init","self"].map(i),c=["Any","Self"],r=["actor","associatedtype","async","await",/as\?/,/as!/,"as","break","case","catch","class","continue","convenience","default","defer","deinit","didSet","do","dynamic","else","enum","extension","fallthrough",/fileprivate\(set\)/,"fileprivate","final","for","func","get","guard","if","import","indirect","infix",/init\?/,/init!/,"inout",/internal\(set\)/,"internal","in","is","lazy","let","mutating","nonmutating",/open\(set\)/,"open","operator","optional","override","postfix","precedencegroup","prefix",/private\(set\)/,"private","protocol",/public\(set\)/,"public","repeat","required","rethrows","return","set","some","static","struct","subscript","super","switch","throws","throw",/try\?/,/try!/,"try","typealias",/unowned\(safe\)/,/unowned\(unsafe\)/,"unowned","var","weak","where","while","willSet"],o=["false","nil","true"],l=["assignment","associativity","higherThan","left","lowerThan","none","right"],m=["#colorLiteral","#column","#dsohandle","#else","#elseif","#endif","#error","#file","#fileID","#fileLiteral","#filePath","#function","#if","#imageLiteral","#keyPath","#line","#selector","#sourceLocation","#warn_unqualified_access","#warning"],p=["abs","all","any","assert","assertionFailure","debugPrint","dump","fatalError","getVaList","isKnownUniquelyReferenced","max","min","numericCast","pointwiseMax","pointwiseMin","precondition","preconditionFailure","print","readLine","repeatElement","sequence","stride","swap","swift_unboxFromSwiftValueWithType","transcode","type","unsafeBitCast","unsafeDowncast","withExtendedLifetime","withUnsafeMutablePointer","withUnsafePointer","withVaList","withoutActuallyEscaping","zip"],F=n(/[/=\-+!*%<>&|^~?]/,/[\u00A1-\u00A7]/,/[\u00A9\u00AB]/,/[\u00AC\u00AE]/,/[\u00B0\u00B1]/,/[\u00B6\u00BB\u00BF\u00D7\u00F7]/,/[\u2016-\u2017]/,/[\u2020-\u2027]/,/[\u2030-\u203E]/,/[\u2041-\u2053]/,/[\u2055-\u205E]/,/[\u2190-\u23FF]/,/[\u2500-\u2775]/,/[\u2794-\u2BFF]/,/[\u2E00-\u2E7F]/,/[\u3001-\u3003]/,/[\u3008-\u3020]/,/[\u3030]/),d=n(F,/[\u0300-\u036F]/,/[\u1DC0-\u1DFF]/,/[\u20D0-\u20FF]/,/[\uFE00-\uFE0F]/,/[\uFE20-\uFE2F]/),b=t(F,d,"*"),h=n(/[a-zA-Z_]/,/[\u00A8\u00AA\u00AD\u00AF\u00B2-\u00B5\u00B7-\u00BA]/,/[\u00BC-\u00BE\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]/,/[\u0100-\u02FF\u0370-\u167F\u1681-\u180D\u180F-\u1DBF]/,/[\u1E00-\u1FFF]/,/[\u200B-\u200D\u202A-\u202E\u203F-\u2040\u2054\u2060-\u206F]/,/[\u2070-\u20CF\u2100-\u218F\u2460-\u24FF\u2776-\u2793]/,/[\u2C00-\u2DFF\u2E80-\u2FFF]/,/[\u3004-\u3007\u3021-\u302F\u3031-\u303F\u3040-\uD7FF]/,/[\uF900-\uFD3D\uFD40-\uFDCF\uFDF0-\uFE1F\uFE30-\uFE44]/,/[\uFE47-\uFEFE\uFF00-\uFFFD]/),f=n(h,/\d/,/[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]/),w=t(h,f,"*"),y=t(/[A-Z]/,f,"*"),g=["autoclosure",t(/convention\(/,n("swift","block","c"),/\)/),"discardableResult","dynamicCallable","dynamicMemberLookup","escaping","frozen","GKInspectable","IBAction","IBDesignable","IBInspectable","IBOutlet","IBSegueAction","inlinable","main","nonobjc","NSApplicationMain","NSCopying","NSManaged",t(/objc\(/,w,/\)/),"objc","objcMembers","propertyWrapper","requires_stored_property_inits","resultBuilder","testable","UIApplicationMain","unknown","usableFromInline"],E=["iOS","iOSApplicationExtension","macOS","macOSApplicationExtension","macCatalyst","macCatalystApplicationExtension","watchOS","watchOSApplicationExtension","tvOS","tvOSApplicationExtension","swift"] ;return e=>{const F={match:/\s+/,relevance:0},h=e.COMMENT("/\\*","\\*/",{ contains:["self"]}),v=[e.C_LINE_COMMENT_MODE,h],A={match:[/\./,n(...s,...u)], className:{2:"keyword"}},N={match:t(/\./,n(...r)),relevance:0 },C=r.filter((e=>"string"==typeof e)).concat(["_|0"]),D={variants:[{ className:"keyword", match:n(...r.filter((e=>"string"!=typeof e)).concat(c).map(i),...u)}]},k={ $pattern:n(/\b\w+/,/#\w+/),keyword:C.concat(m),literal:o},B=[A,N,D],_=[{ match:t(/\./,n(...p)),relevance:0},{className:"built_in", match:t(/\b/,n(...p),/(?=\()/)}],S={match:/->/,relevance:0},M=[S,{ className:"operator",relevance:0,variants:[{match:b},{match:`\\.(\\.|${d})+`}] }],x="([0-9a-fA-F]_*)+",I={className:"number",relevance:0,variants:[{ match:"\\b(([0-9]_*)+)(\\.(([0-9]_*)+))?([eE][+-]?(([0-9]_*)+))?\\b"},{ match:`\\b0x(${x})(\\.(${x}))?([pP][+-]?(([0-9]_*)+))?\\b`},{ match:/\b0o([0-7]_*)+\b/},{match:/\b0b([01]_*)+\b/}]},L=(e="")=>({ className:"subst",variants:[{match:t(/\\/,e,/[0\\tnr"']/)},{ match:t(/\\/,e,/u\{[0-9a-fA-F]{1,8}\}/)}]}),O=(e="")=>({className:"subst", match:t(/\\/,e,/[\t ]*(?:[\r\n]|\r\n)/)}),T=(e="")=>({className:"subst", label:"interpol",begin:t(/\\/,e,/\(/),end:/\)/}),$=(e="")=>({begin:t(e,/"""/), end:t(/"""/,e),contains:[L(e),O(e),T(e)]}),j=(e="")=>({begin:t(e,/"/), end:t(/"/,e),contains:[L(e),T(e)]}),P={className:"string", variants:[$(),$("#"),$("##"),$("###"),j(),j("#"),j("##"),j("###")]},K={ match:t(/`/,w,/`/)},z=[K,{className:"variable",match:/\$\d+/},{ className:"variable",match:`\\$${f}+`}],q=[{match:/(@|#)available/, className:"keyword",starts:{contains:[{begin:/\(/,end:/\)/,keywords:E, contains:[...M,I,P]}]}},{className:"keyword",match:t(/@/,n(...g))},{ className:"meta",match:t(/@/,w)}],U={match:a(/\b[A-Z]/),relevance:0,contains:[{ className:"type", match:t(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/,f,"+") },{className:"type",match:y,relevance:0},{match:/[?!]+/,relevance:0},{ match:/\.\.\./,relevance:0},{match:t(/\s+&\s+/,a(y)),relevance:0}]},Z={ begin://,keywords:k,contains:[...v,...B,...q,S,U]};U.contains.push(Z) ;const V={begin:/\(/,end:/\)/,relevance:0,keywords:k,contains:["self",{ match:t(w,/\s*:/),keywords:"_|0",relevance:0 },...v,...B,..._,...M,I,P,...z,...q,U]},W={begin://,contains:[...v,U] },G={begin:/\(/,end:/\)/,keywords:k,contains:[{ begin:n(a(t(w,/\s*:/)),a(t(w,/\s+/,w,/\s*:/))),end:/:/,relevance:0,contains:[{ className:"keyword",match:/\b_\b/},{className:"params",match:w}] },...v,...B,...M,I,P,...q,U,V],endsParent:!0,illegal:/["']/},R={ match:[/func/,/\s+/,n(K.match,w,b)],className:{1:"keyword",3:"title.function"}, contains:[W,G,F],illegal:[/\[/,/%/]},X={ match:[/\b(?:subscript|init[?!]?)/,/\s*(?=[<(])/],className:{1:"keyword"}, contains:[W,G,F],illegal:/\[|%/},H={match:[/operator/,/\s+/,b],className:{ 1:"keyword",3:"title"}},J={begin:[/precedencegroup/,/\s+/,y],className:{ 1:"keyword",3:"title"},contains:[U],keywords:[...l,...o],end:/}/} ;for(const e of P.variants){const a=e.contains.find((e=>"interpol"===e.label)) ;a.keywords=k;const t=[...B,..._,...M,I,P,...z];a.contains=[...t,{begin:/\(/, end:/\)/,contains:["self",...t]}]}return{name:"Swift",keywords:k, contains:[...v,R,X,{beginKeywords:"struct protocol class extension enum actor", end:"\\{",excludeEnd:!0,keywords:k,contains:[e.inherit(e.TITLE_MODE,{ className:"title.class",begin:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/}),...B] },H,J,{beginKeywords:"import",end:/$/,contains:[...v],relevance:0 },...B,..._,...M,I,P,...z,...q,U,V]}}})()); ================================================ FILE: doc/api/static-assets/readme.md ================================================ # highlight.js Generated from https://highlightjs.org/download/ on 2021-07-13 **Included languages:** * bash * c * css * dart * diff * html, xml * java * javascript * json * kotlin * markdown * objective-c * plaintext * shell * swift * yaml ================================================ FILE: doc/api/static-assets/script.js ================================================ /* * * Update script.js versions in all lib/templates when modifying this file! * */ function initSideNav() { const leftNavToggle = document.getElementById('sidenav-left-toggle'); const leftDrawer = document.querySelector('.sidebar-offcanvas-left'); const overlay = document.getElementById('overlay-under-drawer'); function toggleBoth() { if (leftDrawer) { leftDrawer.classList.toggle('active'); } if (overlay) { overlay.classList.toggle('active'); } } if (overlay) { overlay.addEventListener('click', toggleBoth); } if (leftNavToggle) { leftNavToggle.addEventListener('click', toggleBoth); } } function saveLeftScroll() { const leftSidebar = document.getElementById('dartdoc-sidebar-left'); sessionStorage.setItem('dartdoc-sidebar-left-scrollt' + window.location.pathname, leftSidebar.scrollTop.toString()); sessionStorage.setItem('dartdoc-sidebar-left-scrolll' + window.location.pathname, leftSidebar.scrollLeft.toString()); } function saveMainContentScroll() { const mainContent = document.getElementById('dartdoc-main-content'); sessionStorage.setItem('dartdoc-main-content-scrollt' + window.location.pathname, mainContent.scrollTop.toString()); sessionStorage.setItem('dartdoc-main-content-scrolll' + window.location.pathname, mainContent.scrollLeft.toString()); } function saveRightScroll() { const rightSidebar = document.getElementById('dartdoc-sidebar-right'); sessionStorage.setItem('dartdoc-sidebar-right-scrollt' + window.location.pathname, rightSidebar.scrollTop.toString()); sessionStorage.setItem('dartdoc-sidebar-right-scrolll' + window.location.pathname, rightSidebar.scrollLeft.toString()); } function restoreScrolls() { const leftSidebar = document.getElementById('dartdoc-sidebar-left'); const mainContent = document.getElementById('dartdoc-main-content'); const rightSidebar = document.getElementById('dartdoc-sidebar-right'); try { const leftSidebarX = sessionStorage.getItem('dartdoc-sidebar-left-scrolll' + window.location.pathname); const leftSidebarY = sessionStorage.getItem('dartdoc-sidebar-left-scrollt' + window.location.pathname); const mainContentX = sessionStorage.getItem('dartdoc-main-content-scrolll' + window.location.pathname); const mainContentY = sessionStorage.getItem('dartdoc-main-content-scrollt' + window.location.pathname); const rightSidebarX = sessionStorage.getItem('dartdoc-sidebar-right-scrolll' + window.location.pathname); const rightSidebarY = sessionStorage.getItem('dartdoc-sidebar-right-scrollt' + window.location.pathname); leftSidebar.scrollTo(parseFloat(leftSidebarX), parseFloat(leftSidebarY)); mainContent.scrollTo(parseFloat(mainContentX), parseFloat(mainContentY)); rightSidebar.scrollTo(parseFloat(rightSidebarX), parseFloat(rightSidebarY)); } finally { // Set visibility to visible after scroll to prevent the brief appearance of the // panel in the wrong position. leftSidebar.style.visibility = 'visible'; mainContent.style.visibility = 'visible'; rightSidebar.style.visibility = 'visible'; } } function initScrollSave() { const leftSidebar = document.getElementById('dartdoc-sidebar-left'); const mainContent = document.getElementById('dartdoc-main-content'); const rightSidebar = document.getElementById('dartdoc-sidebar-right'); leftSidebar.addEventListener("scroll", saveLeftScroll, true); mainContent.addEventListener("scroll", saveMainContentScroll, true); rightSidebar.addEventListener("scroll", saveRightScroll, true); } const weights = { 'library' : 2, 'class' : 2, 'mixin' : 3, 'extension' : 3, 'typedef' : 3, 'method' : 4, 'accessor' : 4, 'operator' : 4, 'constant' : 4, 'property' : 4, 'constructor' : 4 }; function findMatches(index, query) { if (query === '') { return []; } const allMatches = []; index.forEach(element => { function score(value) { value -= element.overriddenDepth * 10; const weightFactor = weights[element.type] || 4; allMatches.push({element: element, score: (value / weightFactor) >> 0}); } const name = element.name; const qualifiedName = element.qualifiedName; const lowerName = name.toLowerCase(); const lowerQualifiedName = qualifiedName.toLowerCase(); const lowerQuery = query.toLowerCase(); if (name === query || qualifiedName === query || name === `dart:${query}`) { score(2000); } else if (lowerName === `dart:${lowerQuery}`) { score(1800); } else if (lowerName === lowerQuery || lowerQualifiedName === lowerQuery) { score(1700); } else if (query.length > 1) { if (name.startsWith(query) || qualifiedName.startsWith(query)) { score(750); } else if (lowerName.startsWith(lowerQuery) || lowerQualifiedName.startsWith(lowerQuery)) { score(650); } else if (name.includes(query) || qualifiedName.includes(query)) { score(500); } else if (lowerName.includes(lowerQuery) || lowerQualifiedName.includes(query)) { score(400); } } }); allMatches.sort((a, b) => { const x = b.score - a.score; if (x === 0) { return a.element.name.length - b.element.name.length; } return x; }); const justElements = []; for (let i = 0; i < allMatches.length; i++) { justElements.push(allMatches[i].element); } return justElements; } let baseHref = ''; const minLength = 1; const suggestionLimit = 10; function initializeSearch(input, index) { input.disabled = false; input.setAttribute('placeholder', 'Search API Docs'); // Handle grabbing focus when the users types / outside of the input document.addEventListener('keypress', (event) => { if (event.code === 'Slash' && !(document.activeElement instanceof HTMLInputElement)) { event.preventDefault(); input.focus(); } }); // Prepare elements const parentForm = input.parentNode; const wrapper = document.createElement('div'); wrapper.classList.add('tt-wrapper'); parentForm.replaceChild(wrapper, input); const inputHint = document.createElement('input'); inputHint.setAttribute('type', 'text'); inputHint.setAttribute('autocomplete', 'off'); inputHint.setAttribute('readonly', 'true'); inputHint.setAttribute('spellcheck', 'false'); inputHint.setAttribute('tabindex', '-1'); inputHint.classList.add('typeahead', 'tt-hint'); wrapper.appendChild(inputHint); input.setAttribute('autocomplete', 'off'); input.setAttribute('spellcheck', 'false'); input.classList.add('tt-input'); wrapper.appendChild(input); const listBox = document.createElement('div'); listBox.setAttribute('role', 'listbox'); listBox.setAttribute('aria-expanded', 'false'); listBox.style.display = 'none'; listBox.classList.add('tt-menu'); const presentation = document.createElement('div'); presentation.classList.add('tt-elements'); listBox.appendChild(presentation); wrapper.appendChild(listBox); // Set up various search functionality function highlight(text, query) { query = query.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); return text.replace(new RegExp(query, 'gi'), (matched) => { return `${matched}`; }); } function createSuggestion(query, match) { const suggestion = document.createElement('div'); suggestion.setAttribute('data-href', match.href); suggestion.classList.add('tt-suggestion'); const suggestionTitle = document.createElement('span'); suggestionTitle.classList.add('tt-suggestion-title'); suggestionTitle.innerHTML = highlight(`${match.name} ${match.type.toLowerCase()}`, query); suggestion.appendChild(suggestionTitle); if (match.enclosedBy) { const fromLib = document.createElement('div'); fromLib.classList.add('search-from-lib'); fromLib.innerHTML = `from ${highlight(match.enclosedBy.name, query)}`; suggestion.appendChild(fromLib); } suggestion.addEventListener('mousedown', event => { event.preventDefault(); }); suggestion.addEventListener('click', event => { if (match.href) { window.location = baseHref + match.href; event.preventDefault(); } }); return suggestion; } let storedValue = null; let actualValue = ''; let hint = null; let suggestionElements = []; let suggestionsInfo = []; let selectedElement = null; function setHint(value) { hint = value; inputHint.value = value || ''; } function updateSuggestions(query, suggestions) { suggestionsInfo = []; suggestionElements = []; presentation.textContent = ''; if (suggestions.length < minLength) { setHint(null) hideSuggestions(); return; } for (let i = 0; i < suggestions.length; i++) { const element = createSuggestion(query, suggestions[i]); suggestionElements.push(element); presentation.appendChild(element); } suggestionsInfo = suggestions; setHint(query + suggestions[0].name.slice(query.length)); selectedElement = null; showSuggestions(); } function handle(newValue, forceUpdate) { if (actualValue === newValue && !forceUpdate) { return; } if (newValue === null || newValue.length === 0) { updateSuggestions('', []); return; } const suggestions = findMatches(index, newValue).slice(0, suggestionLimit); actualValue = newValue; updateSuggestions(newValue, suggestions); } function showSuggestions() { if (presentation.hasChildNodes()) { listBox.style.display = 'block'; listBox.setAttribute('aria-expanded', 'true'); } } function hideSuggestions() { listBox.style.display = 'none'; listBox.setAttribute('aria-expanded', 'false'); } // Hook up events input.addEventListener('focus', () => { handle(input.value, true); }); input.addEventListener('blur', () => { selectedElement = null; if (storedValue !== null) { input.value = storedValue; storedValue = null; } hideSuggestions(); setHint(null); }); input.addEventListener('input', event => { handle(event.target.value); }); input.addEventListener('keydown', event => { if (suggestionElements.length === 0) { return; } if (event.code === 'Enter') { const selectingElement = selectedElement || 0; const href = suggestionElements[selectingElement].dataset.href; if (href) { window.location = baseHref + href; } return; } if (event.code === 'Tab') { if (selectedElement === null) { // The user wants to fill the field with the hint if (hint !== null) { input.value = hint; handle(hint); event.preventDefault(); } } else { // The user wants to fill the input field with their currently selected suggestion handle(suggestionsInfo[selectedElement].name); storedValue = null; selectedElement = null; event.preventDefault(); } return; } const lastIndex = suggestionElements.length - 1; const previousSelectedElement = selectedElement; if (event.code === 'ArrowUp') { if (selectedElement === null) { selectedElement = lastIndex; } else if (selectedElement === 0) { selectedElement = null; } else { selectedElement--; } } else if (event.code === 'ArrowDown') { if (selectedElement === null) { selectedElement = 0; } else if (selectedElement === lastIndex) { selectedElement = null; } else { selectedElement++; } } else { if (storedValue !== null) { storedValue = null; handle(input.value); } return; } if (previousSelectedElement !== null) { suggestionElements[previousSelectedElement].classList.remove('tt-cursor'); } if (selectedElement !== null) { const selected = suggestionElements[selectedElement]; selected.classList.add('tt-cursor'); // Guarantee the selected element is visible if (selectedElement === 0) { listBox.scrollTop = 0; } else if (selectedElement === lastIndex) { listBox.scrollTop = listBox.scrollHeight; } else { const offsetTop = selected.offsetTop; const parentOffsetHeight = listBox.offsetHeight; if (offsetTop < parentOffsetHeight || parentOffsetHeight < (offsetTop + selected.offsetHeight)) { selected.scrollIntoView({behavior: 'auto', block: 'nearest'}); } } if (storedValue === null) { // Store the actual input value to display their currently selected item storedValue = input.value; } input.value = suggestionsInfo[selectedElement].name; setHint(''); } else if (storedValue !== null && previousSelectedElement !== null) { // They are moving back to the input field, so return the stored value input.value = storedValue; setHint(storedValue + suggestionsInfo[0].name.slice(storedValue.length)); storedValue = null; } event.preventDefault(); }); } document.addEventListener('DOMContentLoaded', () => { // Place this first so that unexpected exceptions in other JavaScript do not block page visibility. restoreScrolls(); hljs.highlightAll(); initSideNav(); initScrollSave(); const searchBox = document.getElementById('search-box'); const searchBody = document.getElementById('search-body'); const searchSidebar = document.getElementById('search-sidebar'); if (document.body.getAttribute('data-using-base-href') === 'false') { // If dartdoc did not add a base-href tag, we will need to add the relative // path ourselves. baseHref = document.body.getAttribute('data-base-href'); } function disableSearch() { console.log('Could not activate search functionality.'); if (searchBox) { searchBox.placeholder = 'Failed to initialize search'; } if (searchBody) { searchBody.placeholder = 'Failed to initialize search'; } if (searchSidebar) { searchSidebar.placeholder = 'Failed to initialize search'; } } if ('fetch' in window) { fetch(baseHref + 'index.json', {method: 'GET'}) .then(response => response.json()) .then(index => { // Handle if the user specified a `search` parameter in the URL if ('URLSearchParams' in window) { const search = new URLSearchParams(window.location.search).get('search'); if (search) { const matches = findMatches(search); if (matches.length !== 0) { window.location = baseHref + matches[0].href; return; } } } // Initialize all three search fields if (searchBox) { initializeSearch(searchBox, index); } if (searchBody) { initializeSearch(searchBody, index); } if (searchSidebar) { initializeSearch(searchSidebar, index); } }) .catch(() => { disableSearch(); }); } else { disableSearch(); } }); ================================================ FILE: doc/api/static-assets/styles.css ================================================ /* * * Update styles.css versions in all lib/templates when modifying this file! * */ /* Palette generated by Material Palette - materialpalette.com/blue/cyan */ .dark-primary-color { background: #1976D2; } .default-primary-color { background: #2196F3; } .light-primary-color { background: #BBDEFB; } .text-primary-color { color: #FFFFFF; } .accent-color { background: #00BCD4; } .primary-text-color { color: #212121; } .secondary-text-color { color: #727272; } .divider-color { border-color: #B6B6B6; } /* for layout */ html, body { margin: 0; padding: 0; height: 100%; width: 100%; overflow: hidden; box-sizing: border-box; } *, *:before, *:after { box-sizing: inherit; } body { display: flex; flex-direction: column; -webkit-overflow-scrolling: touch; } header { flex: 0 0 50px; display: flex; flex-direction: row; align-items: center; padding-left: 30px; } header ol { list-style: none; margin: 0; padding: 0; } header ol li { display: inline; } header form { display: flex; flex: 1; justify-content: flex-end; padding-right: 30px; } header#header-search-sidebar { height: 50px; margin-bottom: 25px; } footer { flex: 0 0 16px; text-align: center; padding: 16px 20px; } main { flex: 1; display: flex; flex-direction: row; padding: 20px; min-height: 0; } .sidebar-offcanvas-left { flex: 0 1 230px; order: 1; overflow-y: scroll; padding: 20px 0 15px 30px; margin: 5px 20px 0 0; visibility: hidden; /* shown by Javascript after scroll position restore */ } ::-webkit-scrollbar-button{ display: none; height: 13px; border-radius: 0px; background-color: #AAA; } ::-webkit-scrollbar-button:hover{ background-color: #AAA; } ::-webkit-scrollbar-thumb{ background-color: #CCC; } ::-webkit-scrollbar-thumb:hover{ background-color: #CCC; } ::-webkit-scrollbar{ width: 4px; } .main-content::-webkit-scrollbar{ width: 8px; } .main-content { flex: 1; order: 2; overflow-y: scroll; padding: 10px 20px 0 20px; visibility: hidden; /* shown by Javascript after scroll position restore */ } .sidebar-offcanvas-right { flex: 0 1 12em; order: 3; overflow-y: scroll; padding: 20px 15px 15px 15px; margin-top: 5px; margin-right: 20px; visibility: hidden; /* shown by Javascript after scroll position restore */ } /* end for layout */ body { -webkit-text-size-adjust: 100%; overflow-x: hidden; font-family: Roboto, sans-serif; font-size: 16px; line-height: 1.42857143; color: #111111; background-color: #fff; } /* some of this is to reset bootstrap */ nav.navbar { background-color: inherit; min-height: 50px; border: 0; } @media (max-width: 768px) { .hidden-xs { display: none !important; } } @media (min-width: 769px) { .hidden-l { display: none !important; } } nav.navbar .row { padding-top: 8px; } nav .container { white-space: nowrap; } header { background-color: #eeeeee; box-shadow: 0 3px 5px rgba(0,0,0,0.1); } header.header-fixed nav.navbar-fixed-top { box-shadow: 0 3px 5px rgba(0,0,0,0.1); } header.container-fluid { padding: 0; } header .masthead { padding-top: 64px; } header .contents { padding: 0; } @media screen and (max-width:768px) { header .contents { padding-left: 15px; padding-right: 15px; } } a { text-decoration: none; } .body { margin-top: 90px; } section { margin-bottom: 36px; } dl { margin: 0; } h1, h2, h3, h4, h5, h6 { font-family: Roboto, sans-serif; font-weight: 400; margin-top: 1.5em; color: #111111; } h1.title { overflow: hidden; text-overflow: ellipsis; } h1 { font-size: 37px; margin-top: 0; margin-bottom: 0.67em; } h2 { font-size: 28px; } h5 { font-size: 16px; } .subtitle { font-size: 17px; min-height: 1.4em; } .title-description .subtitle { white-space: nowrap; overflow-x: hidden; text-overflow: ellipsis; } p { margin-bottom: 1em; margin-top: 0; } a { color: #0175C2; } a:hover { color: #13B9FD; } pre.prettyprint { font-family: 'Roboto Mono', Menlo, monospace; color: black; border-radius: 0; font-size: 15px; word-wrap: normal; line-height: 1.4; border: 0; margin: 16px 0 16px 0; padding: 8px; } pre code { white-space: pre; word-wrap: initial; font-size: 100% } .fixed { white-space: pre; } pre { border: 1px solid #ddd; background-color: #eee; font-size: 14px; } code { font-family: 'Roboto Mono', Menlo, monospace; /* overriding bootstrap */ color: inherit; padding: 0.2em 0.4em; font-size: 85%; background-color: rgba(27,31,35,0.05); border-radius: 3px; } @media(max-width: 768px) { nav .container { width: 100% } h1 { font-size: 24px; } pre { margin: 16px 0; } } @media (min-width: 768px) { ul.subnav li { font-size: 17px; } } header h1 { font-weight: 400; margin-bottom: 16px; } header a, header p, header li { color: #111111; } header a:hover { color: #0175C2; } header h1 .kind { color: #555; } dt { font-weight: normal; } dd { color: #212121; margin-bottom: 1em; margin-left: 0; } dd.callable, dd.constant, dd.property { margin-bottom: 24px; } dd p { overflow-x: hidden; text-overflow: ellipsis; margin-bottom: 0; } /* Enum values do not have their own pages; their full docs are presented on the * enum class's page. */ dt.constant + dd p { margin-bottom: 1em; } /* indents wrapped lines */ section.summary dt { margin-left: 24px; text-indent: -24px; } .dl-horizontal dd { margin-left: initial; } dl.dl-horizontal dt { font-style: normal; text-align: left; color: #727272; margin-right: 20px; width: initial; } dt .name { font-weight: 500; } dl dt.callable .name { float: none; width: auto; } .parameter { white-space: nowrap; } .type-parameter { white-space: nowrap; } .multi-line-signature .type-parameter .parameter { margin-left: 0px; display: unset; } .parameter-list { display: table-cell; margin-left: 10px; list-style-type: none; } .signature { color: #727272; } .signature a { /* 50% mix of default-primary-color and primary-text-color. */ color: #4674a2; } .optional { font-style: italic; } .undocumented { font-style: italic; } .is-const { font-style: italic; } .deprecated { text-decoration: line-through; } .category.linked { font-weight: bold; opacity: 1; } /* Colors for category based on categoryOrder in dartdoc_options.config. */ .category.cp-0 { background-color: #54b7c4 } .category.cp-1 { background-color: #54c47f } .category.cp-2 { background-color: #c4c254 } .category.cp-3 { background-color: #c49f54 } .category.cp-4 { background-color: #c45465 } .category.cp-5 { background-color: #c454c4 } .category a { color: white; } .category { padding: 2px 4px; font-size: 12px; border-radius: 4px; background-color: #999; text-transform: uppercase; color: white; opacity: .5; } h1 .category { vertical-align: middle; } .feature { display: inline-block; background: white; border: 1px solid #0175c2; border-radius: 20px; color: #0175c2; font-size: 12px; padding: 1px 6px; margin: 0 8px 0 0; } a.feature:hover { border-color: #13B9FD; } h1 .feature { vertical-align: middle; } .source-link { padding: 18px 4px; vertical-align: middle; } .source-link .material-icons { font-size: 18px; } @media (max-width: 768px) { .source-link { padding: 7px 2px; font-size: 10px; } } #external-links { float: right; } .btn-group { position: relative; display: inline-flex; vertical-align: middle; } p.firstline { font-weight: bold; } footer { color: #fff; background-color: #111111; width: 100%; } footer p { margin: 0; } footer .no-break { white-space: nowrap; } footer .container, footer .container-fluid { padding-left: 0; padding-right: 0; } footer a, footer a:hover { color: #fff; } .markdown.desc { max-width: 700px; } .markdown h1 { font-size: 24px; margin-bottom: 8px; } .markdown h2 { font-size: 20px; margin-top: 24px; margin-bottom: 8px; } .markdown h3 { font-size: 18px; margin-bottom: 8px; } .markdown h4 { font-size: 16px; margin-bottom: 0; } .markdown li p { margin: 0; } .gt-separated { list-style: none; padding: 0; margin: 0; } .gt-separated li { display: inline-block; } .gt-separated li:before { background-image: url("data:image/svg+xml;utf8,"); background-position: center; content: "\00a0"; margin: 0 6px 0 4px; padding: 0 3px 0 0; } .gt-separated.dark li:before { background-image: url("data:image/svg+xml;utf8,"); } .gt-separated li:first-child:before { background-image: none; content: ""; margin: 0; padding: 0; } /* The slug line under a declaration for things like "const", "read-only", etc. */ .features { font-style: italic; color: #727272; } .multi-line-signature { font-size: 17px; color: #727272; } .multi-line-signature .parameter { margin-left: 24px; display: block; } .breadcrumbs { padding: 0; margin: 8px 0 8px 0; white-space: nowrap; line-height: 1; } @media screen and (min-width: 768px) { nav ol.breadcrumbs { float: left; } } @media screen and (max-width: 768px) { .breadcrumbs { margin: 0 0 24px 0; overflow-x: hidden; } } .self-crumb { color: #555; } .self-name { color: #555; display: none; } .annotation-list { list-style: none; padding: 0; display: inline; } .comma-separated { list-style: none; padding: 0; display: inline; } .comma-separated li { display: inline; } .comma-separated li:after { content: ", "; } .comma-separated li:last-child:after { content: ""; } .end-with-period li:last-child:after { content: "."; } .container > section:first-child { border: 0; } .constructor-modifier { font-style: italic; } section.multi-line-signature div.parameters { margin-left: 24px; } /* subnav styles */ ul.subnav { overflow: auto; white-space: nowrap; padding-left: 0; min-height: 25px; } ul.subnav::-webkit-scrollbar { display: none; } ul.subnav li { display: inline-block; text-transform: uppercase; } ul.subnav li a { color: #111; } ul.subnav li { margin-right: 24px; } ul.subnav li:last-of-type { margin-right: 0; } @media(max-width: 768px) { ul.subnav li { margin-right: 16px; } } /* sidebar styles */ .sidebar ol { list-style: none; line-height: 22px; margin-top: 0; margin-bottom: 0; padding: 0 0 15px 0; } .sidebar h5 a, .sidebar h5 a:hover { color: #727272; } .sidebar h5, .sidebar ol li { text-overflow: ellipsis; overflow: hidden; padding: 3px 0 3px 3px; } .sidebar h5 { color: #727272; font-size: 18px; margin: 0 0 22px 0; padding-top: 0; } .sidebar ol li.section-title { font-size: 18px; font-weight: normal; text-transform: uppercase; padding-top: 25px; } .sidebar ol li.section-subtitle a { color: inherit; } .sidebar ol li.section-subtitle { font-weight: 400; text-transform: uppercase; } .sidebar ol li.section-subitem { margin-left: 12px; } .sidebar ol li:first-child { padding-top: 3px; margin-top: 0; } button { padding: 0; } #sidenav-left-toggle { display: none; vertical-align: text-bottom; padding: 0; } /* left-nav disappears, and can transition in from the left */ @media screen and (max-width:768px) { #sidenav-left-toggle { display: inline; background: no-repeat url("data:image/svg+xml;utf8,"); background-position: center; width: 24px; height: 24px; border: none; margin-right: 24px; } #overlay-under-drawer.active { opacity: 0.4; height: 100%; z-index: 1999; position: fixed; top: 0; left: 0; right: 0; bottom: 0; background-color: black; display: block; } .sidebar-offcanvas-left { left: -100%; position: fixed; -webkit-transition:all .25s ease-out; -o-transition:all .25s ease-out; transition:all .25s ease-out; z-index: 2000; top: 0; width: 280px; /* works all the way down to an iphone 4 */ height: 90%; background-color: white; overflow-y: scroll; /* TODO: how to hide scroll bars? */ padding: 10px; margin: 10px 10px; box-shadow: 5px 5px 5px 5px #444444; visibility: hidden; /* shown by Javascript after scroll position restore */ } ol#sidebar-nav { font-size: 18px; white-space: pre-line; } .sidebar-offcanvas-left.active { left: 0; /* this animates our drawer into the page */ } .self-name { display: inline-block; } } .sidebar-offcanvas-left h5 { margin-bottom: 10px; } .sidebar-offcanvas-left h5:last-of-type { border: 0; margin-bottom: 25px; } /* the right nav disappears out of view when the window shrinks */ @media screen and (max-width: 992px) { .sidebar-offcanvas-right { display: none; } } #overlay-under-drawer { display: none; } /* find-as-you-type search box */ /* override bootstrap defaults */ .form-control { border-radius: 0; border: 0; } @media screen and (max-width: 768px) { form.search { display: none; } } .typeahead, .tt-query, .tt-hint { width: 200px; height: 20px; padding: 2px 7px 1px 7px; line-height: 20px; outline: none; } .typeahead { background-color: #fff; border-radius: 2px; } .tt-wrapper { position: relative; display: inline-block; } .tt-input { position: relative; vertical-align: top; background-color: transparent; } .tt-query { -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); } .tt-hint { position: absolute; top: 0; left: 0; box-shadow: none; background: none 0 0 / auto repeat scroll padding-box border-box rgb(255, 255, 255); border-color: transparent; color: #999; border-width: 0; } .navbar-right .tt-menu { right:0; left: inherit !important; width: 422px; max-height: 250px; overflow-y: scroll; } .tt-menu { position: absolute; top: 100%; left: 0; z-index: 100; font-size: 14px; margin: 0; padding: 8px 0; background-color: #fff; border: 1px solid #ccc; border: 1px solid rgba(0, 0, 0, 0.2); -webkit-box-shadow: 0 5px 10px rgba(0,0,0,.2); -moz-box-shadow: 0 5px 10px rgba(0,0,0,.2); box-shadow: 0 5px 10px rgba(0,0,0,.2); } .tt-suggestion { padding: 3px 20px; color: #212121; } .tt-suggestion:hover { cursor: pointer; color: #fff; background-color: #0097cf; } .tt-suggestion:hover .search-from-lib { color: #ddd; } .tt-suggestion.tt-cursor { color: #fff; background-color: #0097cf; } .tt-suggestion.tt-cursor .search-from-lib { color: #ddd; } .tt-suggestion p { margin: 0; } .search-from-lib { font-style: italic; color: gray; } .search-body { border: 1px solid #7f7f7f; max-width: 400px; box-shadow: 3px 3px 5px rgba(0,0,0,0.1); } section#setter { border-top: 1px solid #ddd; padding-top: 36px; } li.inherited a { opacity: 0.65; font-style: italic; } #instance-methods dt.inherited .name, #instance-properties dt.inherited .name, #operators dt.inherited .name { font-weight: 300; font-style: italic; } #instance-methods dt.inherited .signature, #instance-properties dt.inherited .signature, #operators dt.inherited .signature { font-weight: 300; } @media print { .subnav, .sidebar { display:none; } a[href]:after { content:"" !important; } } ================================================ FILE: doc/autocomplete_textfield.md ================================================ # AutoCompleteTextField Docs ## Usage AutoCompleteTextField is typed to allow any data type to be used. However most common use case is with string types. # Fields ## @required ### key A global key of type GlobalKey> where T is the data type of the suggestions is required so the text field may be cleared dynamically. ### suggestions A List is provided. Each item in suggestions represents a possible suggestion such as a list of foods. ### itemBuilder This is called for each suggestion: ` (context, suggestion) { } ` A widget must be returned, the most common use case for itemBuilder is ` (context, suggestion) { return new Padding( padding: desired padding, child: new Text(suggestion) ); } ` ### itemSorter Sorts items: ` (a, b) { } ` For string implementation (sorting A-Z) ` (a, b) { return a.compareTo(b); } ` Can be used. ### itemFilter Filters items based on the search query (return true or false) ` (item, query) { } ` A common use case with strings is ` (item, query) { item.toLowerCase().startsWith(query.toLowerCase()); } ` Note that .toLowerCase() is used as if the user searched 'Ap' And the possible suggestions were 'Apple', 'appletree' without the use of .ToLowerCase() only Apple would be a suggestion. ## non-required fields ### suggestionsAmount By default only 5 suggestions will be returned, this can be customised with this field ### style, decoration, textInputAction and keyboardType Are TextField parameters refer to [here](https://docs.flutter.io/flutter/material/TextField-class.html) ================================================ FILE: example/.gitignore ================================================ # Miscellaneous *.class *.log *.pyc *.swp .DS_Store .atom/ .buildlog/ .history .svn/ # IntelliJ related *.iml *.ipr *.iws .idea/ # The .vscode folder contains launch configuration and tasks you configure in # VS Code which you may wish to be included in version control, so this line # is commented out by default. #.vscode/ # Flutter/Dart/Pub related **/doc/api/ .dart_tool/ .flutter-plugins .packages .pub-cache/ .pub/ /build/ # Android related **/android/**/gradle-wrapper.jar **/android/.gradle **/android/captures/ **/android/gradlew **/android/gradlew.bat **/android/local.properties **/android/**/GeneratedPluginRegistrant.java # iOS/XCode related **/ios/**/*.mode1v3 **/ios/**/*.mode2v3 **/ios/**/*.moved-aside **/ios/**/*.pbxuser **/ios/**/*.perspectivev3 **/ios/**/*sync/ **/ios/**/.sconsign.dblite **/ios/**/.tags* **/ios/**/.vagrant/ **/ios/**/DerivedData/ **/ios/**/Icon? **/ios/**/Pods/ **/ios/**/.symlinks/ **/ios/**/profile **/ios/**/xcuserdata **/ios/.generated/ **/ios/Flutter/App.framework **/ios/Flutter/Flutter.framework **/ios/Flutter/Generated.xcconfig **/ios/Flutter/app.flx **/ios/Flutter/app.zip **/ios/Flutter/flutter_assets/ **/ios/ServiceDefinitions.json **/ios/Runner/GeneratedPluginRegistrant.* # Exceptions to above rules. !**/ios/**/default.mode1v3 !**/ios/**/default.mode2v3 !**/ios/**/default.pbxuser !**/ios/**/default.perspectivev3 !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages ================================================ FILE: example/.metadata ================================================ # This file tracks properties of this Flutter project. # Used by Flutter tool to assess capabilities and perform upgrades etc. # # This file should be version controlled and should not be manually edited. version: revision: 20e59316b8b8474554b38493b8ca888794b0234a channel: stable project_type: app ================================================ FILE: example/README.md ================================================ # example A new Flutter project. ## Getting Started This project is a starting point for a Flutter application. A few resources to get you started if this is your first Flutter project: - [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab) - [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook) For help getting started with Flutter, view our [online documentation](https://flutter.dev/docs), which offers tutorials, samples, guidance on mobile development, and a full API reference. ================================================ FILE: example/android/app/build.gradle ================================================ def localProperties = new Properties() def localPropertiesFile = rootProject.file('local.properties') if (localPropertiesFile.exists()) { localPropertiesFile.withReader('UTF-8') { reader -> localProperties.load(reader) } } def flutterRoot = localProperties.getProperty('flutter.sdk') if (flutterRoot == null) { throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") } def flutterVersionCode = localProperties.getProperty('flutter.versionCode') if (flutterVersionCode == null) { flutterVersionCode = '1' } def flutterVersionName = localProperties.getProperty('flutter.versionName') if (flutterVersionName == null) { flutterVersionName = '1.0' } apply plugin: 'com.android.application' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { compileSdkVersion 28 lintOptions { disable 'InvalidPackage' } defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "com.example.example" minSdkVersion 16 targetSdkVersion 28 versionCode flutterVersionCode.toInteger() versionName flutterVersionName testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. signingConfig signingConfigs.debug } } } flutter { source '../..' } dependencies { testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' } ================================================ FILE: example/android/app/src/debug/AndroidManifest.xml ================================================ ================================================ FILE: example/android/app/src/main/AndroidManifest.xml ================================================ ================================================ FILE: example/android/app/src/main/java/com/example/example/MainActivity.java ================================================ package com.example.example; import android.os.Bundle; import io.flutter.app.FlutterActivity; import io.flutter.plugins.GeneratedPluginRegistrant; public class MainActivity extends FlutterActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); GeneratedPluginRegistrant.registerWith(this); } } ================================================ FILE: example/android/app/src/main/res/drawable/launch_background.xml ================================================ ================================================ FILE: example/android/app/src/main/res/values/styles.xml ================================================ ================================================ FILE: example/android/app/src/profile/AndroidManifest.xml ================================================ ================================================ FILE: example/android/build.gradle ================================================ buildscript { repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.2.1' } } allprojects { repositories { google() jcenter() } } rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" } subprojects { project.evaluationDependsOn(':app') } task clean(type: Delete) { delete rootProject.buildDir } ================================================ FILE: example/android/gradle/wrapper/gradle-wrapper.properties ================================================ #Fri Jun 23 08:50:38 CEST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip ================================================ FILE: example/android/gradle.properties ================================================ org.gradle.jvmargs=-Xmx1536M ================================================ FILE: example/android/settings.gradle ================================================ include ':app' def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() def plugins = new Properties() def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') if (pluginsFile.exists()) { pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } } plugins.each { name, path -> def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() include ":$name" project(":$name").projectDir = pluginDirectory } ================================================ FILE: example/ios/Flutter/AppFrameworkInfo.plist ================================================ CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleExecutable App CFBundleIdentifier io.flutter.flutter.app CFBundleInfoDictionaryVersion 6.0 CFBundleName App CFBundlePackageType FMWK CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion 1.0 MinimumOSVersion 9.0 ================================================ FILE: example/ios/Flutter/Debug.xcconfig ================================================ #include "Generated.xcconfig" ================================================ FILE: example/ios/Flutter/Release.xcconfig ================================================ #include "Generated.xcconfig" ================================================ FILE: example/ios/Flutter/flutter_export_environment.sh ================================================ #!/bin/sh # This is a generated file; do not edit or check into version control. export "FLUTTER_ROOT=/Users/felixmccuaig/flutter" export "FLUTTER_APPLICATION_PATH=/Users/felixmccuaig/flutter-autocomplete-textfield/example" export "COCOAPODS_PARALLEL_CODE_SIGN=true" export "FLUTTER_TARGET=/Users/felixmccuaig/flutter-autocomplete-textfield/example/lib/main.dart" export "FLUTTER_BUILD_DIR=build" export "FLUTTER_BUILD_NAME=1.0.0" export "FLUTTER_BUILD_NUMBER=3" export "DART_DEFINES=RkxVVFRFUl9XRUJfQVVUT19ERVRFQ1Q9dHJ1ZQ==" export "DART_OBFUSCATION=false" export "TRACK_WIDGET_CREATION=true" export "TREE_SHAKE_ICONS=false" export "PACKAGE_CONFIG=/Users/felixmccuaig/flutter-autocomplete-textfield/example/.dart_tool/package_config.json" ================================================ FILE: example/ios/Runner/AppDelegate.h ================================================ #import #import @interface AppDelegate : FlutterAppDelegate @end ================================================ FILE: example/ios/Runner/AppDelegate.m ================================================ #include "AppDelegate.h" #include "GeneratedPluginRegistrant.h" @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [GeneratedPluginRegistrant registerWithRegistry:self]; // Override point for customization after application launch. return [super application:application didFinishLaunchingWithOptions:launchOptions]; } @end ================================================ FILE: example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json ================================================ { "images" : [ { "size" : "20x20", "idiom" : "iphone", "filename" : "Icon-App-20x20@2x.png", "scale" : "2x" }, { "size" : "20x20", "idiom" : "iphone", "filename" : "Icon-App-20x20@3x.png", "scale" : "3x" }, { "size" : "29x29", "idiom" : "iphone", "filename" : "Icon-App-29x29@1x.png", "scale" : "1x" }, { "size" : "29x29", "idiom" : "iphone", "filename" : "Icon-App-29x29@2x.png", "scale" : "2x" }, { "size" : "29x29", "idiom" : "iphone", "filename" : "Icon-App-29x29@3x.png", "scale" : "3x" }, { "size" : "40x40", "idiom" : "iphone", "filename" : "Icon-App-40x40@2x.png", "scale" : "2x" }, { "size" : "40x40", "idiom" : "iphone", "filename" : "Icon-App-40x40@3x.png", "scale" : "3x" }, { "size" : "60x60", "idiom" : "iphone", "filename" : "Icon-App-60x60@2x.png", "scale" : "2x" }, { "size" : "60x60", "idiom" : "iphone", "filename" : "Icon-App-60x60@3x.png", "scale" : "3x" }, { "size" : "20x20", "idiom" : "ipad", "filename" : "Icon-App-20x20@1x.png", "scale" : "1x" }, { "size" : "20x20", "idiom" : "ipad", "filename" : "Icon-App-20x20@2x.png", "scale" : "2x" }, { "size" : "29x29", "idiom" : "ipad", "filename" : "Icon-App-29x29@1x.png", "scale" : "1x" }, { "size" : "29x29", "idiom" : "ipad", "filename" : "Icon-App-29x29@2x.png", "scale" : "2x" }, { "size" : "40x40", "idiom" : "ipad", "filename" : "Icon-App-40x40@1x.png", "scale" : "1x" }, { "size" : "40x40", "idiom" : "ipad", "filename" : "Icon-App-40x40@2x.png", "scale" : "2x" }, { "size" : "76x76", "idiom" : "ipad", "filename" : "Icon-App-76x76@1x.png", "scale" : "1x" }, { "size" : "76x76", "idiom" : "ipad", "filename" : "Icon-App-76x76@2x.png", "scale" : "2x" }, { "size" : "83.5x83.5", "idiom" : "ipad", "filename" : "Icon-App-83.5x83.5@2x.png", "scale" : "2x" }, { "size" : "1024x1024", "idiom" : "ios-marketing", "filename" : "Icon-App-1024x1024@1x.png", "scale" : "1x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "filename" : "LaunchImage.png", "scale" : "1x" }, { "idiom" : "universal", "filename" : "LaunchImage@2x.png", "scale" : "2x" }, { "idiom" : "universal", "filename" : "LaunchImage@3x.png", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md ================================================ # Launch Screen Assets You can customize the launch screen with your own desired assets by replacing the image files in this directory. You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. ================================================ FILE: example/ios/Runner/Base.lproj/LaunchScreen.storyboard ================================================ ================================================ FILE: example/ios/Runner/Base.lproj/Main.storyboard ================================================ ================================================ FILE: example/ios/Runner/Info.plist ================================================ CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName example CFBundlePackageType APPL CFBundleShortVersionString $(FLUTTER_BUILD_NAME) CFBundleSignature ???? CFBundleVersion $(FLUTTER_BUILD_NUMBER) LSRequiresIPhoneOS UILaunchStoryboardName LaunchScreen UIMainStoryboardFile Main UISupportedInterfaceOrientations UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UISupportedInterfaceOrientations~ipad UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIViewControllerBasedStatusBarAppearance ================================================ FILE: example/ios/Runner/main.m ================================================ #import #import #import "AppDelegate.h" int main(int argc, char* argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } } ================================================ FILE: example/ios/Runner.xcodeproj/project.pbxproj ================================================ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 50; objects = { /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB21CF90195004384FC /* Debug.xcconfig */; }; 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; }; 97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ 9705A1C41CF9048500538489 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 10; files = ( ); name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146F21CF9000F007C117D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, 9740EEB21CF90195004384FC /* Debug.xcconfig */, 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 9740EEB31CF90195004384FC /* Generated.xcconfig */, ); name = Flutter; sourceTree = ""; }; 97C146E51CF9000F007C117D = { isa = PBXGroup; children = ( 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, CF3B75C9A7D2FA2A4C99F110 /* Frameworks */, ); sourceTree = ""; }; 97C146EF1CF9000F007C117D /* Products */ = { isa = PBXGroup; children = ( 97C146EE1CF9000F007C117D /* Runner.app */, ); name = Products; sourceTree = ""; }; 97C146F01CF9000F007C117D /* Runner */ = { isa = PBXGroup; children = ( 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */, 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */, 97C146FA1CF9000F007C117D /* Main.storyboard */, 97C146FD1CF9000F007C117D /* Assets.xcassets */, 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 97C147021CF9000F007C117D /* Info.plist */, 97C146F11CF9000F007C117D /* Supporting Files */, 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, ); path = Runner; sourceTree = ""; }; 97C146F11CF9000F007C117D /* Supporting Files */ = { isa = PBXGroup; children = ( 97C146F21CF9000F007C117D /* main.m */, ); name = "Supporting Files"; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ 97C146ED1CF9000F007C117D /* Runner */ = { isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, ); buildRules = ( ); dependencies = ( ); name = Runner; productName = Runner; productReference = 97C146EE1CF9000F007C117D /* Runner.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { LastUpgradeCheck = 1300; ORGANIZATIONNAME = "The Chromium Authors"; TargetAttributes = { 97C146ED1CF9000F007C117D = { CreatedOnToolsVersion = 7.3.1; }; }; }; buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); mainGroup = 97C146E51CF9000F007C117D; productRefGroup = 97C146EF1CF9000F007C117D /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 97C146ED1CF9000F007C117D /* Runner */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 97C146EC1CF9000F007C117D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */, 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Script"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 97C146EA1CF9000F007C117D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */, 97C146F31CF9000F007C117D /* main.m in Sources */, 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ 97C146FA1CF9000F007C117D /* Main.storyboard */ = { isa = PBXVariantGroup; children = ( 97C146FB1CF9000F007C117D /* Base */, ); name = Main.storyboard; sourceTree = ""; }; 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { isa = PBXVariantGroup; children = ( 97C147001CF9000F007C117D /* Base */, ); name = LaunchScreen.storyboard; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ 249021D3217E4FDB00AE95B9 /* Profile */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; name = Profile; }; 249021D4217E4FDB00AE95B9 /* Profile */ = { isa = XCBuildConfiguration; baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = S8QB4VV633; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Flutter", ); INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Flutter", ); PRODUCT_BUNDLE_IDENTIFIER = com.example.example; PRODUCT_NAME = "$(TARGET_NAME)"; VERSIONING_SYSTEM = "apple-generic"; }; name = Profile; }; 97C147031CF9000F007C117D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; 97C147041CF9000F007C117D /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; name = Release; }; 97C147061CF9000F007C117D /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Flutter", ); INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Flutter", ); PRODUCT_BUNDLE_IDENTIFIER = com.example.example; PRODUCT_NAME = "$(TARGET_NAME)"; VERSIONING_SYSTEM = "apple-generic"; }; name = Debug; }; 97C147071CF9000F007C117D /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Flutter", ); INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Flutter", ); PRODUCT_BUNDLE_IDENTIFIER = com.example.example; PRODUCT_NAME = "$(TARGET_NAME)"; VERSIONING_SYSTEM = "apple-generic"; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { isa = XCConfigurationList; buildConfigurations = ( 97C147031CF9000F007C117D /* Debug */, 97C147041CF9000F007C117D /* Release */, 249021D3217E4FDB00AE95B9 /* Profile */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { isa = XCConfigurationList; buildConfigurations = ( 97C147061CF9000F007C117D /* Debug */, 97C147071CF9000F007C117D /* Release */, 249021D4217E4FDB00AE95B9 /* Profile */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 97C146E61CF9000F007C117D /* Project object */; } ================================================ FILE: example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme ================================================ ================================================ FILE: example/ios/Runner.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: example/lib/main.dart ================================================ import 'package:autocomplete_textfield/autocomplete_textfield.dart'; import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Auto Complete TextField Demo', theme: ThemeData( primarySwatch: Colors.blue, ), home: MyHomePage(), ); } } class MyHomePage extends StatefulWidget { @override State createState() => _MyHomePageState(); } class _MyHomePageState extends State { List pages = [FirstPage(), SecondPage()]; int selectedIndex = 0; @override Widget build(BuildContext context) { return Scaffold( bottomNavigationBar: BottomNavigationBar( items: [ BottomNavigationBarItem( icon: Center(child: Text("1")), label: "Simple Use", ), BottomNavigationBarItem( icon: Center(child: Text("2")), label: "Complex Use" ), ], onTap: (index) => setState(() { selectedIndex = index; }), currentIndex: selectedIndex, ), body: pages[selectedIndex], ); } } class FirstPage extends StatefulWidget { @override _FirstPageState createState() => _FirstPageState(); } class _FirstPageState extends State { List added = []; String currentText = ""; GlobalKey> key = GlobalKey(); _FirstPageState() { textField = SimpleAutoCompleteTextField( key: key, decoration: InputDecoration(errorText: "Beans"), controller: TextEditingController(text: "Starting Text"), suggestions: suggestions, textChanged: (text) => currentText = text, clearOnSubmit: true, textSubmitted: (text) => setState(() { if (text != "") { added.add(text); } }), ); } List suggestions = [ "Apple", "Armidillo", "Actual", "Actuary", "America", "Argentina", "Australia", "Antarctica", "Blueberry", "Cheese", "Danish", "Eclair", "Fudge", "Granola", "Hazelnut", "Ice Cream", "Jely", "Kiwi Fruit", "Lamb", "Macadamia", "Nachos", "Oatmeal", "Palm Oil", "Quail", "Rabbit", "Salad", "T-Bone Steak", "Urid Dal", "Vanilla", "Waffles", "Yam", "Zest" ]; SimpleAutoCompleteTextField? textField; bool showWhichErrorText = false; @override Widget build(BuildContext context) { Column body = Column(children: [ ListTile( title: textField, trailing: IconButton( icon: Icon(Icons.add), onPressed: () { textField!.triggerSubmitted(); showWhichErrorText = !showWhichErrorText; textField!.updateDecoration( decoration: InputDecoration( errorText: showWhichErrorText ? "Beans" : "Tomatoes")); })), ]); body.children.addAll(added.map((item) { return ListTile(title: Text(item)); })); return Scaffold( appBar: AppBar(title: Text('AutoComplete TextField Demo Simple'), actions: [ IconButton( icon: Icon(Icons.edit), onPressed: () => showDialog( builder: (_) { String text = ""; return AlertDialog( title: Text("Change Suggestions"), content: TextField(onChanged: (text) => text = text), actions: [ TextButton( onPressed: () { if (text != "") { suggestions.add(text); textField!.updateSuggestions(suggestions); } Navigator.pop(context); }, child: Text("Add")), ]); }, context: context)) ]), body: body, ); } } class ArbitrarySuggestionType { //For the mock data type we will use review (perhaps this could represent a restaurant); num stars; String name, imgURL; ArbitrarySuggestionType(this.stars, this.name, this.imgURL); } class SecondPage extends StatefulWidget { @override State createState() => _SecondPageState(); } class _SecondPageState extends State { List suggestions = [ ArbitrarySuggestionType(4.7, "Minamishima", "https://media-cdn.tripadvisor.com/media/photo-p/0f/25/de/0c/photo1jpg.jpg"), ArbitrarySuggestionType(1.5, "The Meat & Wine Co Hawthorn East", "https://media-cdn.tripadvisor.com/media/photo-s/12/ba/7d/4c/confit-cod-chorizo-red.jpg"), ArbitrarySuggestionType(3.4, "Florentino", "https://media-cdn.tripadvisor.com/media/photo-s/12/fc/bb/11/from-the-street.jpg"), ArbitrarySuggestionType(4.3, "Syracuse Restaurant & Winebar Melbourne CBD", "https://media-cdn.tripadvisor.com/media/photo-p/07/ad/76/b0/the-gyoza-had-a-nice.jpg"), ArbitrarySuggestionType(1.1, "Geppetto Trattoria", "https://media-cdn.tripadvisor.com/media/photo-s/0c/85/3d/cb/photo1jpg.jpg"), ArbitrarySuggestionType(3.4, "Cumulus Inc.", "https://media-cdn.tripadvisor.com/media/photo-s/0e/21/a0/be/photo0jpg.jpg"), ArbitrarySuggestionType(2.2, "Chin Chin", "https://media-cdn.tripadvisor.com/media/photo-s/0e/83/ec/07/triple-beef-triple-bacon.jpg"), ArbitrarySuggestionType(5.0, "Anchovy", "https://media-cdn.tripadvisor.com/media/photo-s/07/e7/f6/8e/daneli-s-kosher-deli.jpg"), ArbitrarySuggestionType(4.7, "Sezar Restaurant", "https://media-cdn.tripadvisor.com/media/photo-s/04/b8/23/d1/nevsky-russian-restaurant.jpg"), ArbitrarySuggestionType(2.6, "Tipo 00", "https://media-cdn.tripadvisor.com/media/photo-s/11/17/67/8c/front-seats.jpg"), ArbitrarySuggestionType(3.4, "Coda", "https://media-cdn.tripadvisor.com/media/photo-s/0d/b1/6a/84/photo0jpg.jpg"), ArbitrarySuggestionType(1.1, "Pastuso", "https://media-cdn.tripadvisor.com/media/photo-w/0a/d9/cf/52/photo4jpg.jpg"), ArbitrarySuggestionType(0.2, "San Telmo", "https://media-cdn.tripadvisor.com/media/photo-s/0e/51/35/35/tempura-sashimi-combo.jpg"), ArbitrarySuggestionType(3.6, "Supernormal", "https://media-cdn.tripadvisor.com/media/photo-s/0e/bc/63/69/mr-miyagi.jpg"), ArbitrarySuggestionType(4.4, "EZARD", "https://media-cdn.tripadvisor.com/media/photo-p/09/f2/83/15/photo0jpg.jpg"), ArbitrarySuggestionType(2.1, "Maha", "https://media-cdn.tripadvisor.com/media/photo-s/10/f8/9e/af/20171013-205729-largejpg.jpg"), ArbitrarySuggestionType(4.2, "MoVida", "https://media-cdn.tripadvisor.com/media/photo-s/0e/1f/55/79/and-here-we-go.jpg") ]; GlobalKey> key = GlobalKey>(); AutoCompleteTextField? textField; ArbitrarySuggestionType? selected; _SecondPageState() { textField = AutoCompleteTextField( decoration: InputDecoration( hintText: "Search Resturant:", suffixIcon: Icon(Icons.search)), itemSubmitted: (item) => setState(() => selected = item), key: key, suggestions: suggestions, itemBuilder: (context, suggestion) => Padding( child: ListTile( title: Text(suggestion.name), trailing: Text("Stars: ${suggestion.stars}")), padding: EdgeInsets.all(8.0)), itemSorter: (a, b) => a.stars == b.stars ? 0 : a.stars > b.stars ? -1 : 1, itemFilter: (suggestion, input) => suggestion.name.toLowerCase().startsWith(input.toLowerCase()), ); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('AutoComplete TextField Demo Complex'), ), body: Column(children: [ Padding( child: Container(child: textField), padding: EdgeInsets.all(16.0)), Padding( padding: EdgeInsets.fromLTRB(0.0, 64.0, 0.0, 0.0), child: Card( child: selected != null ? Column(children: [ ListTile( title: Text(selected!.name), trailing: Text("Rating: ${selected!.stars}/5")), Container( child: Image(image: NetworkImage(selected!.imgURL)), width: 400.0, height: 300.0) ]) : Icon(Icons.cancel))), ]), ); } } ================================================ FILE: example/pubspec.yaml ================================================ name: example description: A new Flutter project. # The following defines the version and build number for your application. # A version number is three numbers separated by dots, like 1.2.43 # followed by an optional build number separated by a +. # Both the version and the builder number may be overridden in flutter # build by specifying --build-name and --build-number, respectively. # In Android, build-name is used as versionName while build-number used as versionCode. # Read more about Android versioning at https://developer.android.com/studio/publish/versioning # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # Read more about versioning at semver.org. version: 1.0.0+3 environment: sdk: '>=2.12.0 <3.0.0' dependencies: flutter: sdk: flutter autocomplete_textfield: path: ../ cupertino_icons: ^1.0.5 dev_dependencies: flutter_test: sdk: flutter flutter: uses-material-design: true ================================================ FILE: example/test/widget_test.dart ================================================ // This is a basic Flutter widget test. // // To perform an interaction with a widget in your test, use the WidgetTester // utility that Flutter provides. For example, you can send tap and scroll // gestures. You can also use WidgetTester to find child widgets in the widget // tree, read text, and verify that the values of widget properties are correct. import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:example/main.dart'; void main() { testWidgets('Counter increments smoke test', (WidgetTester tester) async { // Build our app and trigger a frame. await tester.pumpWidget(MyApp()); // Verify that our counter starts at 0. expect(find.text('0'), findsOneWidget); expect(find.text('1'), findsNothing); // Tap the '+' icon and trigger a frame. await tester.tap(find.byIcon(Icons.add)); await tester.pump(); // Verify that our counter has incremented. expect(find.text('0'), findsNothing); expect(find.text('1'), findsOneWidget); }); } ================================================ FILE: lib/autocomplete_textfield.dart ================================================ library autocomplete_textfield; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; typedef Widget AutoCompleteOverlayItemBuilder( BuildContext context, T suggestion); typedef bool Filter(T suggestion, String query); typedef InputEventCallback(T data); typedef StringCallback(String data); class AutoCompleteTextField extends StatefulWidget { final List suggestions; final Filter? itemFilter; final Comparator? itemSorter; final StringCallback? textChanged, textSubmitted; final ValueSetter? onFocusChanged; final InputEventCallback? itemSubmitted; final AutoCompleteOverlayItemBuilder? itemBuilder; final int suggestionsAmount; final GlobalKey> key; final bool submitOnSuggestionTap, clearOnSubmit, unFocusOnItemSubmitted; final List? inputFormatters; final int minLength; final InputDecoration decoration; final TextStyle? style; final TextInputType keyboardType; final TextInputAction textInputAction; final TextCapitalization textCapitalization; final TextEditingController? controller; final FocusNode? focusNode; final Color? cursorColor; final double? cursorWidth; final Radius? cursorRadius; final bool? showCursor; final bool autofocus; final bool autocorrect; AutoCompleteTextField( {required this.itemSubmitted, //Callback on item selected, this is the item selected of type required this.key, //GlobalKey used to enable addSuggestion etc required this.suggestions, //Suggestions that will be displayed required this.itemBuilder, //Callback to build each item, return a Widget required this.itemSorter, //Callback to sort items in the form (a of type , b of type ) required this.itemFilter, //Callback to filter item: return true or false depending on input text this.inputFormatters, this.style, this.decoration: const InputDecoration(), this.textChanged, //Callback on input text changed, this is a string this.textSubmitted, //Callback on input text submitted, this is also a string this.onFocusChanged, this.cursorRadius, this.cursorWidth, this.cursorColor, this.showCursor, this.keyboardType: TextInputType.text, this.suggestionsAmount: 5, //The amount of suggestions to show, larger values may result in them going off screen this.submitOnSuggestionTap: true, //Call textSubmitted on suggestion tap, itemSubmitted will be called no matter what this.clearOnSubmit: true, //Clear autoCompleteTextfield on submit this.textInputAction: TextInputAction.done, this.textCapitalization: TextCapitalization.sentences, this.autocorrect: false, //set the autoroccection on the internal text input field this.minLength = 1, this.controller, this.focusNode, this.autofocus = false, this.unFocusOnItemSubmitted = true}) : super(key: key); void clear() => key.currentState!.clear(); void addSuggestion(T suggestion) => key.currentState!.addSuggestion(suggestion); void removeSuggestion(T suggestion) => key.currentState!.removeSuggestion(suggestion); void updateSuggestions(List suggestions) => key.currentState!.updateSuggestions(suggestions); void triggerSubmitted() => key.currentState!.triggerSubmitted(); void updateDecoration( {InputDecoration? decoration, List? inputFormatters, TextCapitalization? textCapitalization, TextStyle? style, TextInputType? keyboardType, TextInputAction? textInputAction}) => key.currentState!.updateDecoration(decoration, inputFormatters, textCapitalization, style, keyboardType, textInputAction); TextField? get textField => key.currentState!.textField; @override State createState() => new AutoCompleteTextFieldState( suggestions, textChanged, textSubmitted, onFocusChanged, itemSubmitted, itemBuilder, itemSorter, itemFilter, suggestionsAmount, submitOnSuggestionTap, clearOnSubmit, minLength, inputFormatters, textCapitalization, decoration, style, keyboardType, textInputAction, controller, cursorColor, cursorRadius, cursorWidth, showCursor, focusNode, autofocus, unFocusOnItemSubmitted, autocorrect); } class AutoCompleteTextFieldState extends State { final LayerLink _layerLink = LayerLink(); TextField? textField; List suggestions; StringCallback? textChanged, textSubmitted; ValueSetter? onFocusChanged; InputEventCallback? itemSubmitted; AutoCompleteOverlayItemBuilder? itemBuilder; Comparator? itemSorter; OverlayEntry? listSuggestionsEntry; List? filteredSuggestions; Filter? itemFilter; int suggestionsAmount; int minLength; bool submitOnSuggestionTap, clearOnSubmit, unFocusOnItemSubmitted; TextEditingController? controller; FocusNode? focusNode; bool autofocus; String currentText = ""; Color? cursorColor; double? cursorWidth; Radius? cursorRadius; bool? showCursor; InputDecoration decoration; List? inputFormatters; TextCapitalization textCapitalization; TextStyle? style; TextInputType keyboardType; TextInputAction textInputAction; bool autocorrect; AutoCompleteTextFieldState( this.suggestions, this.textChanged, this.textSubmitted, this.onFocusChanged, this.itemSubmitted, this.itemBuilder, this.itemSorter, this.itemFilter, this.suggestionsAmount, this.submitOnSuggestionTap, this.clearOnSubmit, this.minLength, this.inputFormatters, this.textCapitalization, this.decoration, this.style, this.keyboardType, this.textInputAction, this.controller, this.cursorColor, this.cursorRadius, this.cursorWidth, this.showCursor, this.focusNode, this.autofocus, this.unFocusOnItemSubmitted, this.autocorrect) { textField = new TextField( inputFormatters: inputFormatters, textCapitalization: textCapitalization, decoration: decoration, style: style, cursorColor: cursorColor ?? Colors.black, showCursor: showCursor ?? true, cursorWidth: cursorWidth ?? 1, cursorRadius: cursorRadius ?? const Radius.circular(2.0), keyboardType: keyboardType, focusNode: focusNode ?? new FocusNode(), autofocus: autofocus, controller: controller ?? new TextEditingController(), textInputAction: textInputAction, autocorrect: autocorrect, onChanged: (newText) { currentText = newText; updateOverlay(newText); if (textChanged != null) { textChanged!(newText); } }, onTap: () { updateOverlay(currentText); }, onSubmitted: (submittedText) => triggerSubmitted(submittedText: submittedText), ); if (this.controller != null) { currentText = this.controller!.text; } textField!.focusNode!.addListener(() { if (onFocusChanged != null) { onFocusChanged!(textField!.focusNode!.hasFocus); } if (!textField!.focusNode!.hasFocus) { filteredSuggestions = []; updateOverlay(); } else if (currentText != "") { updateOverlay(currentText); } }); } void updateDecoration( InputDecoration? decoration, List? inputFormatters, TextCapitalization? textCapitalization, TextStyle? style, TextInputType? keyboardType, TextInputAction? textInputAction) { if (decoration != null) { this.decoration = decoration; } if (inputFormatters != null) { this.inputFormatters = inputFormatters; } if (textCapitalization != null) { this.textCapitalization = textCapitalization; } if (style != null) { this.style = style; } if (keyboardType != null) { this.keyboardType = keyboardType; } if (textInputAction != null) { this.textInputAction = textInputAction; } setState(() { textField = new TextField( inputFormatters: this.inputFormatters, textCapitalization: this.textCapitalization, decoration: this.decoration, style: this.style, keyboardType: this.keyboardType, focusNode: focusNode ?? new FocusNode(), autofocus: autofocus, controller: controller ?? new TextEditingController(), textInputAction: this.textInputAction, onChanged: (newText) { currentText = newText; updateOverlay(newText); if (textChanged != null) { textChanged!(newText); } }, onTap: () { updateOverlay(currentText); }, onSubmitted: (submittedText) => triggerSubmitted(submittedText: submittedText), ); }); } void triggerSubmitted({submittedText}) { submittedText == null ? textSubmitted!(currentText) : textSubmitted!(submittedText); if (clearOnSubmit) { clear(); } } void clear() { textField!.controller!.clear(); currentText = ""; updateOverlay(); } void addSuggestion(T suggestion) { suggestions.add(suggestion); updateOverlay(currentText); } void removeSuggestion(T suggestion) { suggestions.contains(suggestion) ? suggestions.remove(suggestion) : throw "List does not contain suggestion and therefore cannot be removed"; updateOverlay(currentText); } void updateSuggestions(List suggestions) { this.suggestions = suggestions; updateOverlay(currentText); } void updateOverlay([String? query]) { if (listSuggestionsEntry == null && filteredSuggestions != null) { final Size textFieldSize = (context.findRenderObject() as RenderBox).size; final width = textFieldSize.width; final height = textFieldSize.height; listSuggestionsEntry = OverlayEntry(builder: (context) { return Positioned( width: width, child: CompositedTransformFollower( link: _layerLink, showWhenUnlinked: false, offset: Offset(0.0, height), child: SizedBox( width: width, child: Card( child: new Column( children: filteredSuggestions!.map((suggestion) { return Row(children: [ Expanded( child: InkWell( child: itemBuilder!(context, suggestion), onTap: () { if (!this.mounted) return; setState(() { if (submitOnSuggestionTap) { String newText = suggestion.toString(); textField!.controller!.text = newText; if (unFocusOnItemSubmitted) { textField!.focusNode!.unfocus(); } itemSubmitted!(suggestion); if (clearOnSubmit) { clear(); } } else { String newText = suggestion.toString(); textField!.controller!.text = newText; textChanged!(newText); } }); })) ]); }).toList(), ))))); }); Overlay.of(context)!.insert(listSuggestionsEntry!); } filteredSuggestions = getSuggestions( suggestions, itemSorter, itemFilter, suggestionsAmount, query); listSuggestionsEntry?.markNeedsBuild(); } List getSuggestions(List suggestions, Comparator? sorter, Filter? filter, int maxAmount, String? query) { if (null == query || query.length < minLength) { return []; } suggestions = suggestions.where((item) => filter!(item, query)).toList(); suggestions.sort(sorter); if (suggestions.length > maxAmount) { suggestions = suggestions.sublist(0, maxAmount); } return suggestions; } @override void dispose() { // if we created our own focus node and controller, dispose of them // otherwise, let the caller dispose of their own instances if (focusNode == null) { textField!.focusNode!.dispose(); } if (controller == null) { textField!.controller!.dispose(); } super.dispose(); } @override Widget build(BuildContext context) { return CompositedTransformTarget(link: _layerLink, child: textField); } } class SimpleAutoCompleteTextField extends AutoCompleteTextField { final StringCallback? textChanged, textSubmitted; final int minLength; final ValueSetter? onFocusChanged; final TextEditingController? controller; final FocusNode? focusNode; final Color? cursorColor; final double? cursorWidth; final Radius? cursorRadius; final bool? showCursor; final bool autofocus; SimpleAutoCompleteTextField( {TextStyle? style, InputDecoration decoration: const InputDecoration(), this.onFocusChanged, this.textChanged, this.textSubmitted, this.minLength = 1, this.controller, this.focusNode, this.autofocus = false, this.cursorColor, this.cursorWidth, this.cursorRadius, this.showCursor, TextInputType keyboardType: TextInputType.text, required GlobalKey> key, required List suggestions, int suggestionsAmount: 5, bool submitOnSuggestionTap: true, bool clearOnSubmit: true, TextInputAction textInputAction: TextInputAction.done, TextCapitalization textCapitalization: TextCapitalization.sentences}) : super( style: style, decoration: decoration, textChanged: textChanged, textSubmitted: textSubmitted, itemSubmitted: textSubmitted, keyboardType: keyboardType, key: key, suggestions: suggestions, itemBuilder: null, itemSorter: null, itemFilter: null, cursorColor: cursorColor, cursorWidth: cursorWidth, cursorRadius: cursorRadius, showCursor: showCursor, suggestionsAmount: suggestionsAmount, submitOnSuggestionTap: submitOnSuggestionTap, clearOnSubmit: clearOnSubmit, textInputAction: textInputAction, textCapitalization: textCapitalization); @override State createState() => new AutoCompleteTextFieldState( suggestions, textChanged, textSubmitted, onFocusChanged, itemSubmitted, (context, item) { return new Padding(padding: EdgeInsets.all(8.0), child: new Text(item)); }, (a, b) { return a.compareTo(b); }, (item, query) { final regex = RegExp(query, caseSensitive: false); return regex.hasMatch(item.toLowerCase()); }, suggestionsAmount, submitOnSuggestionTap, clearOnSubmit, minLength, [], textCapitalization, decoration, style, keyboardType, textInputAction, controller, cursorColor, cursorRadius, cursorWidth, showCursor, focusNode, autofocus, unFocusOnItemSubmitted, autocorrect); } ================================================ FILE: pubspec.yaml ================================================ name: autocomplete_textfield description: A simple and versatile autocomplete text field for flutter, supporting multiple datatypes. version: 2.0.1 homepage: https://github.com/felixlucien/flutter-autocomplete-textfield environment: sdk: ">=2.12.0 <3.0.0" dependencies: flutter: sdk: flutter dev_dependencies: flutter_test: sdk: flutter