संबंधित सोर्स रिपॉज़िटरी के मूल README का स्नैपशॉट। नवीनतम सामग्री के लिए रिपॉज़िटरी देखें।
Multi Trigger Autocomplete

A flutter widget to add trigger based autocomplete functionality to your app.
Show some ❤️ and star the repo to support the project
Installation
Add the following to your pubspec.yaml and replace [version] with the latest version:
dependencies:
multi_trigger_autocomplete: ^[version]
Usage
To use this package you must first wrap your top most widget
with Portal as this package
uses flutter_portal
to show the options view.
(Credits to: Remi Rousselet)
Portal, is the equivalent of [Overlay].
This widget will need to be inserted above the widget that needs to render
under your overlays.
If you want to display your overlays on the top of everything, a good place
to insert that Portal is above MaterialApp:
Portal(
child: MaterialApp(
...
)
);
(works for CupertinoApp too)
This way Portal will render above everything. But you could place it
somewhere else to change the clip behavior.
Import the package:
import 'package:multi_trigger_autocomplete/multi_trigger_autocomplete.dart';
Use the widget:
MultiTriggerAutocomplete(
optionsAlignment: OptionsAlignment.topStart,
autocompleteTriggers: [
AutocompleteTrigger(
trigger: '@',
optionsViewBuilder: (context, autocompleteQuery, controller) {
return MentionAutocompleteOptions(
query: autocompleteQuery.query,
onMentionUserTap: (user) {
final autocomplete = MultiTriggerAutocomplete.of(context);
return autocomplete.acceptAutocompleteOption(user.id);
},
);
},
),
AutocompleteTrigger(
trigger: '#',
optionsViewBuilder: (context, autocompleteQuery, controller) {
return HashtagAutocompleteOptions(
query: autocompleteQuery.query,
onHashtagTap: (hashtag) {
final autocomplete = MultiTriggerAutocomplete.of(context);
return autocomplete
.acceptAutocompleteOption(hashtag.name);
},
);
},
),
AutocompleteTrigger(
trigger: ':',
optionsViewBuilder: (context, autocompleteQuery, controller) {
return EmojiAutocompleteOptions(
query: autocompleteQuery.query,
onEmojiTap: (emoji) {
final autocomplete = MultiTriggerAutocomplete.of(context);
return autocomplete.acceptAutocompleteOption(
emoji.char,
keepTrigger: false,
);
},
);
},
),
],
fieldViewBuilder: (context, controller, focusNode) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: ChatMessageTextField(
focusNode: focusNode,
controller: controller,
),
);
},
),
Demo
| Mention Autocomplete |
Hashtag Autocomplete |
Emoji Autocomplete |
 |
 |
 |
Customization
MultiTriggerAutocomplete
MultiTriggerAutocomplete(
autocompleteTriggers: autocompleteTriggers,
optionsAlignment: OptionsAlignment.topStart,
optionsWidthFactor: 1.0,
debounceDuration: const Duration(milliseconds: 350),
initialValue: const TextEditingValue(text: 'Hello'),
textEditingController: TextEditingController(text: 'Hello'),
focusNode: FocusNode(),
fieldViewBuilder: (context, controller, focusNode) {
return TextField(
controller: controller,
focusNode: focusNode,
);
},
),
AutocompleteTrigger
AutocompleteTrigger(
trigger: '@',
triggerOnlyAtStart: false,
triggerOnlyAfterSpace: true,
minimumRequiredCharacters: 2,
optionsViewBuilder: (context, autocompleteQuery, controller) {
return MentionAutocompleteOptions(
query: autocompleteQuery.query,
onMentionUserTap: (user) {
final autocomplete = MultiTriggerAutocomplete.of(context);
return autocomplete.acceptAutocompleteOption(user.id);
},
);
},
)
License
MIT License