Component
Composer
A headless-core chat composer with auto-grow, IME-safe Enter-to-send, @mention / /slash / :emoji: trigger menus committing atomic tokens, attachments, drafts, edit-in-place, and busy/stop — the same structured output as the React composer.
Usage
dart
import 'package:refraction_ui/refraction_ui.dart';
class MyComposer extends StatelessWidget {
const MyComposer({super.key, required this.onSend});
final void Function(ComposerSubmission submission) onSend;
@override
Widget build(BuildContext context) {
return RefractionComposer(
placeholder: 'Message',
maxLines: 6,
triggers: [
ComposerTrigger(
id: 'mention',
symbol: '@',
resolve: (query) => searchTeam(query), // -> List<ComposerCandidate>
),
ComposerTrigger(
id: 'slash-command',
symbol: '/',
scope: ComposerTriggerScope.startOfMessage,
resolve: (query) => searchCommands(query),
buildDisplay: (c) => '/${c.display}',
),
],
onSubmit: onSend, // {plainText, tokens[{type,id,display,start,end}], attachments}
);
}
}